当前位置: 首页 > news >正文

为何说逻辑回归是分类任务的“最佳基石”?

提到“回归”,你可能先想到房价预测。但有一个名字里带“回归”、实际却用来做分类的算法,在机器学习界地位极高——逻辑回归(Logistic Regression)

医学诊断、金融风控、垃圾邮件识别……到处都有它的身影。
原因很简单:简单、高效、能输出概率、可解释性强

本文带你从零开始,彻底搞懂逻辑回归,并用两个真实案例(心脏病预测 + 手写数字识别)亲手跑通代码。


1. 名字是个误会:从“回归”到“分类”

逻辑回归本质上还是从线性回归“变”过来的。

线性回归的局限

  • 输出范围:整个实数轴(-∞ 到 +∞)

  • 分类任务需要的是概率(0 到 1)

解决方案:Sigmoid 函数(也叫 Logistic 函数)

公式很简单:

f(x)=11+e−xf(x)=1+e−x1​

特性:

  • 输出恒在 (0, 1) 之间

  • 输入为 0 时,输出恰好 0.5

  • 形状像 S 形曲线

把线性回归的结果扔进 Sigmoid,就得到了一个概率值。

逻辑回归的完整公式

P(y=1∣x)=11+e−(β0+β1x1+⋯+βnxn)P(y=1∣x)=1+e−(β0​+β1​x1​+⋯+βn​xn​)1​

决策规则:

  • 概率 > 0.5 → 预测为类别 1

  • 概率 ≤ 0.5 → 预测为类别 0

注意:0.5 这个阈值可以按业务需求调整。
比如疾病筛查宁可误报,可降低阈值;质量检测则可能调高阈值。


2. 如何训练模型?最大似然估计

模型的核心是找到一组参数 $\beta$,让训练数据出现的概率最大。

单个样本的概率表达

P(y∣x;β)=y^y⋅(1−y^)1−yP(y∣x;β)=y^​y⋅(1−y^​)1−y

  • 若 $y=1$,值为 $\hat{y}$

  • 若 $y=0$,值为 $1-\hat{y}$

所有样本的似然函数

L(β)=∏i=1ny^iyi(1−y^i)1−yiL(β)=∏i=1n​y^​iyi​​(1−y^​i​)1−yi​

取对数(连乘变连加):

log⁡L(β)=∑i=1n[yilog⁡y^i+(1−yi)log⁡(1−y^i)]logL(β)=∑i=1n​[yi​logy^​i​+(1−yi​)log(1−y^​i​)]

损失函数(二元交叉熵)

Loss=−1nlog⁡L(β)Loss=−n1​logL(β)

最大化似然 ⇔ 最小化交叉熵损失。

重要性质:
逻辑回归的损失函数是凸函数→ 有唯一的全局最优解,不会陷入局部最小值。

但注意:
没有闭式解(不像线性回归一步算出),必须用梯度下降牛顿法迭代求解。


3. 梯度下降与正则化

损失函数的梯度(最终简化形式)

∇Loss=−1nXT(p−y)∇Loss=−n1​XT(p−y)

其中 $p$ 是预测概率,$y$ 是真实标签。

梯度大小 = 预测与真实之间的误差。
误差越大,参数更新越快。

常用优化求解器(solver)

solver特点
lbfgs拟牛顿法,默认选项,支持 L2 正则化
liblinear适合小数据集,支持 L1 / L2
saga适合大数据,支持 L1、L2、ElasticNet

注意:penaltysolver必须兼容,否则报错。

正则化:防止过拟合

在损失函数中加入参数惩罚项,让模型参数尽量小。

类型效果适用场景
L1 正则化部分系数变为 0 → 自动特征选择特征很多,想筛选重要特征
L2 正则化系数整体缩小,但不为 0大多数情况的默认选择
ElasticNet结合 L1 和 L2需要同时控制稀疏性和整体收缩

关键参数是 C:C 越小,正则化越强。
例如C=0.01C=1.0正则化力度大得多。


4. 实战一:心脏病预测(二分类)

数据集来自 Kaggle,包含 14 个临床特征,标签为“是否患有心脏病”。

4.1 加载数据 & 划分训练集

数据集下载:https://pan.baidu.com/s/10F-DZPstvBw7Cmg5AvaUUA?pwd=9pjp

import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler, OneHotEncoder from sklearn.compose import ColumnTransformer from sklearn.linear_model import LogisticRegression heart_disease = pd.read_csv("data/heart_disease.csv") heart_disease = heart_disease.dropna() X = heart_disease.drop("是否患有心脏病", axis=1) y = heart_disease["是否患有心脏病"] x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=100)

4.2 特征工程(数值型、类别型、二元型分开处理)

numerical_features = ["年龄", "静息血压", "胆固醇", "最大心率", "运动后的 ST 下降", "主血管数量"] categorical_features = ["胸痛类型", "静息心电图结果", "峰值 ST 段的斜率", "地中海贫血"] binary_features = ["性别", "空腹血糖", "运动性心绞痛"] preprocessor = ColumnTransformer([ ("num", StandardScaler(), numerical_features), ("cat", OneHotEncoder(drop="first"), categorical_features), ("binary", "passthrough", binary_features), ]) x_train = preprocessor.fit_transform(x_train) x_test = preprocessor.transform(x_test)

对类别特征使用drop="first"是为了避免多重共线性,让矩阵满秩,参数可唯一确定。

4.3 训练与评估

model = LogisticRegression() model.fit(x_train, y_train) acc = model.score(x_test, y_test) print(f"测试集准确率: {acc:.4f}")

训练后可通过model.coef_查看每个特征的重要性。


5. 多分类任务:从二分类到多分类

逻辑回归天生做二分类,但可以扩展到多分类。主要有两种方法。

5.1 一对多(One-vs-Rest, OvR)

  • 对每个类别训练一个二分类器(本类 vs 其余)

  • 预测时取概率最高的类别

  • 类别数量多时训练慢

5.2 Softmax 回归(多项逻辑回归)

  • 只训练一个模型

  • 使用 Softmax 函数输出所有类别的概率

  • 概率之和为 1,分类一致性更好

Softmax 公式:

P(y=c∣x)=eβcTx∑j=1CeβjTxP(y=c∣x)=∑j=1C​eβjT​xeβcT​x​

scikit-learn 切换方式:

# 一对多 model = LogisticRegression(multi_class="ovr") # Softmax model = LogisticRegression(multi_class="multinomial")

对于多分类,LogisticRegression 默认自动使用multinomial(如果求解器支持)。


6. 实战二:手写数字识别(多分类)

MNIST 手写数字(0-9),每张图 28×28 像素,共 784 个特征。

6.1 加载并查看一张图片

数据集下载:https://pan.baidu.com/s/1xg4UnBRx2h0ysmhmAttn8g?pwd=6tzw

import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler from sklearn.linear_model import LogisticRegression digit = pd.read_csv("data/train.csv") plt.imshow(digit.iloc[10, 1:].values.reshape(28, 28), cmap="gray") plt.show()

6.2 归一化 + 训练

X = digit.drop("label", axis=1) y = digit["label"] x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=100) scaler = MinMaxScaler() x_train = scaler.fit_transform(x_train) x_test = scaler.transform(x_test) model = LogisticRegression(max_iter=500) # 增加迭代次数,确保收敛 model.fit(x_train, y_train) print(f"测试集准确率: {model.score(x_test, y_test):.4f}")

6.3 预测单张图片

plt.imshow(digit.iloc[123, 1:].values.reshape(28, 28), cmap="gray") plt.show() print(model.predict(digit.iloc[123, 1:].values.reshape(1, -1)))

特征维度高达 784,默认max_iter=100可能不够,需要调大。


7. 总结

逻辑回归为什么能成为分类任务的“基石”?

优点解释
输出概率可解释性强,适合需要置信度的场景
线性决策边界简单、不易过拟合
损失函数是凸函数有全局最优解,训练稳定
正则化支持良好L1 / L2 / ElasticNet,有效防止过拟合
多分类扩展OvR 或 Softmax,灵活应对不同规模的问题
训练速度快,特征重要性可解释系数直接反映特征影响方向与大小

但也要知道它的局限:

  • 只能学习线性决策边界,无法直接处理非线性问题(可结合特征多项式或核技巧)

  • 对特征尺度敏感,必须做标准化 / 归一化

  • 类别严重不平衡时需调整class_weight参数

即便如此,逻辑回归依然是数据科学入门的第一选择,也是许多工业级系统的基线模型。

希望这两个完整案例能帮你真正掌握逻辑回归。

http://www.jsqmd.com/news/591878/

相关文章:

  • YimMenu:重新定义GTA5体验的全能工具包
  • FLUX.1-dev FP8量化模型:如何在6GB显存设备上体验专业AI绘画的终极指南
  • 从安装到投产:企业级AI编程工具落地全流程避坑指南(以文心快码私有化部署为例)
  • 2026重庆英语培训机构排名,北外壹佳英语上榜了吗 - mypinpai
  • 如何快速掌握MapleStory游戏资源编辑:Harepacker-resurrected完整实战指南
  • Ostrakon-VL-8B行业落地:药房阴凉区温湿度标识+药品有效期双识别案例
  • OpCore-Simplify:黑苹果配置自动化的架构设计与技术实现
  • 2026年重庆好用的少儿英语机构有哪些,剑桥体系品牌推荐 - 工业品牌热点
  • 3分钟掌握终极iOS应用下载:ipatool命令行工具完全指南
  • MAA助手全平台实战部署从入门到精通
  • WeMod增强工具技术架构实现方案:基于ASAR解包与运行时注入的客户端增强方案
  • 基于数据预处理与PSO-SVM的风功率预测聚类研究
  • 3分钟解锁网易云音乐NCM格式:ncmdumpGUI图形界面工具深度解析
  • 智能网页数据获取:Crawl4AI v1.0.0全攻略
  • 从感知机到GPT:一个1957年的“神经元”如何引爆2026年的AI革命?
  • HarmonyOS蓝牙SPP实战:5分钟搞定设备间文件传输(附完整代码)
  • 聊聊2026年江苏好用的工装定制企业,推荐售后完善的常州千诺 - myqiye
  • 打卡信奥刷题(3065)用C++实现信奥题 P6874 [COCI 2013/2014 #6] KOCKICE
  • 2025届最火的十大降重复率平台推荐
  • 如何突破Synology Photos人脸识别的硬件限制:一种创新的运行时劫持技术方案
  • 48 ︳Python微服务架构:分布式追踪系统与链路监控实战
  • 2026年广州自粘袋品牌盘点,推荐性价比高的定制与批发厂家 - 工业推荐榜
  • Ultimaker Cura:3D打印工作流的核心引擎
  • 免费畅玩Switch游戏:Ryujinx模拟器终极指南
  • D3KeyHelper:重新定义暗黑3操作体验的智能辅助工具
  • 终极Limbus Company自动化助手:告别重复操作,轻松解放双手
  • 解锁自定义番剧采集:提升观看体验的Kazumi实用指南
  • 破解UDE与miniwiggler连接难题:EEPROM配置修改实战
  • Qwen2.5-VL-7B-Instruct RTX 4090性能调优:Flash Attention 2启用失败自动降级机制详解
  • HunyuanVideo-Foley广告创意:30秒内生成品牌TVC所需全部环境音与转场音效