机器学习中的逻辑回归与 Softmax 回归多分类应用
本文介绍了机器学习中逻辑回归与 Softmax 回归的原理及实现。涵盖二分类与多分类场景,讨论了类别不平衡问题的重采样解决方案,并通过 Iris 数据集案例演示了模型训练、标准化处理及评估流程。实验表明在简单线性可分数据上逻辑回归表现优异。

本文介绍了机器学习中逻辑回归与 Softmax 回归的原理及实现。涵盖二分类与多分类场景,讨论了类别不平衡问题的重采样解决方案,并通过 Iris 数据集案例演示了模型训练、标准化处理及评估流程。实验表明在简单线性可分数据上逻辑回归表现优异。

在机器学习中,分类问题是最常见的一类问题。无论是二分类还是多分类,解决这些问题的算法有很多,其中逻辑回归、Softmax 回归和集成学习方法在实际应用中被广泛使用。但在实际数据中,类别不平衡问题可能会影响模型的效果,如何有效地解决这一问题也是一个亟待解决的难题。
概述:逻辑回归(Logistic Regression)是一种用于二分类问题的经典线性分类器,目标是通过训练数据集的特征来预测某一类别的概率。
模型原理:逻辑回归的核心是使用 sigmoid 函数将线性组合的输出映射到 [0,1] 区间,用于二分类问题。
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))
优缺点:
概述:Softmax 回归(Softmax Regression)是逻辑回归的扩展,处理多分类问题。它将输入的线性组合映射到多个类别的概率值。
模型原理:Softmax 函数是对逻辑回归的扩展。
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))
优缺点:
概述:集成学习是一种通过结合多个弱学习器来提高模型性能的方法。常见的集成学习方法有 Bagging、Boosting 和 Stacking。
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))
概述:在现实世界中,很多分类任务会面临类别不平衡的问题,即某一类别的样本数量远远少于其他类别。这会导致模型倾向于预测样本较多的类别,降低模型的整体性能。
解决方法:
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))
我们将通过以下步骤进行分析:
Iris 数据集包含 150 个样本,分别来自 3 个不同种类的鸢尾花(Setosa、Versicolor、Virginica)。每个样本有 4 个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度。目标是根据这些特征来预测鸢尾花的种类。
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()
代码分析
根据分类报告和混淆矩阵的结果,我们可以得出以下结论:
本文对逻辑回归、Softmax 回归、集成学习方法进行了详细分析,并讨论了类别不平衡问题及其解决方法。通过实验验证,选择合适的分类算法和解决方案能够显著提高模型在实际任务中的性能。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online