前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【机器学习】突破分类瓶颈:用逻辑回归与Softmax回归解锁多分类世界

【机器学习】突破分类瓶颈:用逻辑回归与Softmax回归解锁多分类世界

原创
作者头像
小馒头学Python
发布2024-11-17 14:30:23
发布2024-11-17 14:30:23
17000
代码可运行
举报
文章被收录于专栏:小馒头学Python小馒头学Python
运行总次数:0
代码可运行

🍋今日推荐

在文章开始之前,推荐一篇值得阅读的好文章!感兴趣的也可以去看一下,并关注作者!

今日推荐:AI 实战篇:Spring-AI再更新!细细讲下Advisors

文章链接:https://cloud.tencent.com/developer/article/2466108

通过这篇文章,可以帮助你深入的了解Advisors。本文的重点是深入解析Advisors的概念,这里它与我们当前工作中所使用的一些技术有很多相似之处,能够帮助大家更容易地理解相关内容。因此,我相信通过这部分的讲解,大家将能更好地掌握Spring AI的核心功能。感兴趣的同学可以关注一下。

🍋1. 引言

在机器学习中,分类问题是最常见的一类问题。无论是二分类还是多分类,解决这些问题的算法有很多,其中逻辑回归、Softmax回归和集成学习方法在实际应用中被广泛使用。但在实际数据中,类别不平衡问题可能会影响模型的效果,如何有效地解决这一问题也是一个亟待解决的难题。

🍋2. 逻辑回归

概述:逻辑回归(Logistic Regression)是一种用于二分类问题的经典线性分类器,目标是通过训练数据集的特征来预测某一类别的概率。

模型原理: 逻辑回归的核心是使用sigmoid函数将线性组合的输出映射到0,1区间,用于二分类问题:

其中,𝑤是权重,𝑏是偏置,𝑋是输入特征。

🍋代码实现

代码语言:python
代码运行次数:0
复制
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

# 生成数据集
X, y = make_classification(n_samples=1000, n_features=20, n_informative=10, random_state=42)

# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练模型
model = LogisticRegression()
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 评估
print(classification_report(y_test, y_pred))

优缺点:

  • 优点:模型简单,计算开销小,容易解释。
  • 缺点:对于非线性问题效果差,容易受到异常值影响。

🍋3. Softmax回归

概述:Softmax回归(Softmax Regression)是逻辑回归的扩展,处理多分类问题。它将输入的线性组合映射到多个类别的概率值。

模型原理: Softmax函数是对逻辑回归的扩展,公式为:

是偏置。

🍋代码实现

代码语言:python
代码运行次数:0
复制
from sklearn.linear_model import LogisticRegression

# 使用Softmax回归处理多分类问题
model = LogisticRegression(multi_class='multinomial', solver='lbfgs')
model.fit(X_train, y_train)

y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

优缺点:

  • 优点:可以处理多分类问题,适用于线性可分问题。
  • 缺点:当类别数量很多时,计算复杂度较高。

🍋4. 集成学习

概述:集成学习是一种通过结合多个弱学习器来提高模型性能的方法。常见的集成学习方法有Bagging、Boosting和Stacking。

代码语言:python
代码运行次数:0
复制
from sklearn.ensemble import RandomForestClassifier

# 随机森林分类器
rf = RandomForestClassifier(n_estimators=100)
rf.fit(X_train, y_train)

y_pred = rf.predict(X_test)
print(classification_report(y_test, y_pred))

🍋5. 类别不平衡问题

概述:在现实世界中,很多分类任务会面临类别不平衡的问题,即某一类别的样本数量远远少于其他类别。这会导致模型倾向于预测样本较多的类别,降低模型的整体性能。

解决方法:

  • 重采样:通过增加少数类样本或减少多数类样本来平衡数据集。
  • 加权损失函数:对模型在少数类样本上的误差给予更大的惩罚。
  • 集成方法:例如SMOTE与Boosting结合来提高少数类的预测能力。

🍋代码示例(重采样)

代码语言:python
代码运行次数:0
复制
from imblearn.over_sampling import SMOTE

# 过采样
smote = SMOTE()
X_res, y_res = smote.fit_resample(X_train, y_train)

# 训练模型
model = LogisticRegression()
model.fit(X_res, y_res)

y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

🍋6. 逻辑回归案例(Iris数据集)

我们将通过以下步骤进行分析:

  • 加载数据:选择Iris数据集。
  • 数据预处理:包括数据分割与标准化。
  • 训练模型:使用逻辑回归训练模型。
  • 评估模型:通过混淆矩阵、准确率等评估模型效果。

Iris数据集包含150个样本,分别来自3个不同种类的鸢尾花(Setosa、Versicolor、Virginica)。每个样本有4个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度。目标是根据这些特征来预测鸢尾花的种类。

代码语言:python
代码运行次数:0
复制
# 导入需要的库
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt

# 1. 加载Iris数据集
iris = load_iris()
X = iris.data  # 特征
y = iris.target  # 标签

# 2. 数据分割:80%训练数据,20%测试数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 3. 数据标准化:逻辑回归对特征的尺度比较敏感
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 4. 训练逻辑回归模型
logreg = LogisticRegression(max_iter=200)
logreg.fit(X_train, y_train)

# 5. 在测试集上进行预测
y_pred = logreg.predict(X_test)

# 6. 模型评估
print("分类报告:")
print(classification_report(y_test, y_pred))

# 7. 混淆矩阵
cm = confusion_matrix(y_test, y_pred)
print("混淆矩阵:")
print(cm)

# 可视化混淆矩阵
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", xticklabels=iris.target_names, yticklabels=iris.target_names)
plt.xlabel('Predicted')
plt.ylabel('True')
plt.title('Confusion Matrix')
plt.show()

代码分析

  1. 加载Iris数据集:
  • 使用sklearn.datasets.load_iris()加载Iris数据集,数据集已经包含了4个特征和相应的类别标签。
  • 数据分割:
  • 使用train_test_split将数据分割为训练集和测试集,80%的数据用于训练,20%的数据用于测试。
  • 数据标准化:
  • 逻辑回归对输入特征的尺度非常敏感,因此我们对数据进行标准化(均值为0,方差为1),使用StandardScaler完成这一操作。
  • 训练逻辑回归模型:
  • 使用LogisticRegression()创建一个逻辑回归模型,并在训练集上进行训练。max_iter=200指定最大迭代次数,以确保算法收敛。
  • 预测与评估:
  • 使用训练好的模型对测试集进行预测,并通过classification_report显示分类的准确性、精确度、召回率和F1-score等评估指标。 使用confusion_matrix计算混淆矩阵,进一步分析模型的分类效果。
  • 混淆矩阵可视化:
  • 使用Seaborn的heatmap函数将混淆矩阵可视化,更直观地展示分类效果。

🍋评估结果

分类报告如下:

混淆矩阵如下:

根据分类报告和混淆矩阵的结果,我们可以得出以下结论:

  • 完美的分类结果:模型的精确度、召回率和F1分数都为1.00,说明模型在每个类别上都没有错误预测,完美地分辨了三个不同种类的鸢尾花。
  • 没有误分类:混淆矩阵显示每个类别的所有样本都被正确分类,没有出现任何误分类的情况。
  • 数据集的简单性:由于Iris数据集是一个相对简单且清晰的分类问题,尤其是在特征与类别之间的边界非常明确时,逻辑回归能够非常好地进行分类。

🍋结论

本文对逻辑回归、Softmax回归、集成学习方法进行了详细分析,并讨论了类别不平衡问题及其解决方法。通过实验验证,选择合适的分类算法和解决方案能够显著提高模型在实际任务中的性能。

希望这篇博客能够为你提供全面的分类问题解决方案,同时帮助理解如何在复杂场景下处理类别不平衡问题,感兴趣的同学别忘了三连哦

挑战与创造都是很痛苦的,但是很充实。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🍋今日推荐
  • 🍋1. 引言
  • 🍋2. 逻辑回归
    • 🍋代码实现
  • 🍋3. Softmax回归
    • 🍋代码实现
  • 🍋4. 集成学习
  • 🍋5. 类别不平衡问题
    • 🍋代码示例(重采样)
  • 🍋6. 逻辑回归案例(Iris数据集)
    • 🍋评估结果
  • 🍋结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档