HelloAI
L2 第 3 篇 🐣 难度 🕒 10 分钟

逻辑回归与分类:从回归到决策

名字叫"回归"其实是分类。在神经网络出来之前,逻辑回归是工业界分类的事实标准——今天仍然是 baseline。

阿莱
2026/6/26

L2-02 我们学了线性回归——预测连续数值(房价、销售额)。

但很多 ML 任务要预测类别:垃圾邮件 vs 正常、患病 vs 健康、点击 vs 不点击。

逻辑回归就是为这类任务设计的——尽管名字叫”回归”,它本质是分类算法

从线性回归说起

线性回归的输出 y=wx+by = wx + b 是任意数——可能是 100、-50、999。

但分类问题的输出应该是概率:0-1 之间的数。

怎么把”任意数”变成”0-1 概率”?

答:套一个 sigmoid 函数

σ(z)=11+ez\sigma(z) = \frac{1}{1 + e^{-z}}

这个 S 形曲线的性质:

  • z=0z = 0 时输出 0.5
  • z+z \to +\infty 时输出 → 1
  • zz \to -\infty 时输出 → 0

所以逻辑回归就是

P(y=1x)=σ(wx+b)=11+e(wx+b)P(y=1 | x) = \sigma(wx + b) = \frac{1}{1 + e^{-(wx + b)}}

线性回归 + Sigmoid = 逻辑回归。

决策阈值

模型输出概率,但你最终需要”是/否”答案。

通常:

  • P>0.5P > 0.5 → 预测 1(正例)
  • P0.5P \le 0.5 → 预测 0(负例)

0.5 不是必须——可以调。例如垃圾邮件分类:

  • 阈值低(0.3)→ 更激进,把可疑邮件都标垃圾(高召回但易误杀)
  • 阈值高(0.7)→ 更保守,只标确信的(低召回但少误杀)

实际工程要根据业务取舍调。

损失函数:交叉熵

L1-04 详解过——逻辑回归的损失就是二分类交叉熵

L=1Ni[yilogy^i+(1yi)log(1y^i)]L = -\frac{1}{N} \sum_i \left[ y_i \log \hat{y}_i + (1 - y_i) \log(1 - \hat{y}_i) \right]
  • 当真实标签 y=1y = 1,损失 = logy^-\log \hat{y}y^\hat{y} 越接近 1,损失越小)
  • 当真实标签 y=0y = 0,损失 = log(1y^)-\log(1 - \hat{y})y^\hat{y} 越接近 0,损失越小)

最小化这个损失,就训出了逻辑回归。

一个例子

任务:根据病人指标判断是否糖尿病。

import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split

# sklearn 自带数据集
X, y_continuous = load_diabetes(return_X_y=True)
# 把连续指标转成分类问题:高于中位数 = 糖尿病
y = (y_continuous > np.median(y_continuous)).astype(int)

# 切分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)
y_prob = model.predict_proba(X_test)   # 看具体概率

# 准确率
print(f"准确率: {model.score(X_test, y_test):.3f}")
print(f"前 5 个样本的预测概率:")
print(y_prob[:5])

注意 predict_proba——返回每个样本属于各类的概率,这是逻辑回归比”硬分类器”(如 SVM)多的优势

多分类怎么办

到目前为止讲的是二分类。多分类(猫/狗/兔/熊…)怎么扩展?

两种主流做法:

方法 1:One-vs-Rest (OvR)

KK 个二分类器:

  • 分类器 1:是 vs 不是猫
  • 分类器 2:是 vs 不是狗
  • 分类器 3:是 vs 不是兔

预测时取概率最高的那个。

方法 2:Softmax(多项逻辑回归)

把 sigmoid 推广到 K 个类别:

P(y=kx)=ewkxjewjxP(y = k | x) = \frac{e^{w_k \cdot x}}{\sum_j e^{w_j \cdot x}}

让所有类别的概率加起来 = 1。这就是神经网络多分类头的标准做法——sklearn 里 multi_class='multinomial'

Softmax + 交叉熵就是 LLM 训练时每个位置在做的事——在词表(5 万-10 万个 token)上输出概率分布,和真实下一个 token 算交叉熵。

评估指标(L2-07 详讲)

二分类常用:

指标公式用途
Accuracy(准确率)对的 / 总数类别均衡时用
Precision(精确率)真正例 / 预测正例关心”误报”
Recall(召回率)真正例 / 真实正例关心”漏报”
F1Precision 和 Recall 的调和平均综合
AUCROC 曲线下面积阈值无关,常见

警告:类别不均衡(如 99% 正常 + 1% 异常)时,准确率会骗你——把所有预测成正常,准确率 99%,但毫无用处。这时应看 Precision/Recall。

真实业务中的逻辑回归

很多人觉得”逻辑回归太简单了,肯定没人用”——错。它是工业界用的最多的分类器

  • 银行反欺诈:交易特征 → 是否欺诈
  • 广告 CTR 预估:用户+广告特征 → 是否点击
  • 保险核保:申请人特征 → 是否承保
  • 医院风险评分:病人指标 → 高风险/低风险
  • 客户流失预测:行为特征 → 是否流失

理由:

  1. 可解释:每个特征的权重直接告诉你”它对结果的影响”——监管行业(医疗、金融)需要这个
  2. 训练快:百万级数据几秒钟
  3. 稳定:不像神经网络那么神秘
  4. 好部署:模型就是几十个数

真实数据:Google 早年的搜索广告 CTR 预估系统就是大规模逻辑回归——亿级特征、十亿样本规模。直到 2014 年才被深度学习取代。

优缺点

优点

  • 极快、极稳、可解释
  • 概率输出,可调阈值
  • 工业级成熟,运维简单
  • 对线性可分问题效果好

缺点

  • 只能学线性决策边界(除非配合特征工程)
  • 对不平衡数据敏感
  • 多分类相对不优雅

一个有趣的视角

一个不带激活函数的”单层神经网络”,做分类时本质就是逻辑回归。

这个洞察意味着——你已经会逻辑回归 = 你已经懂神经网络的最基本形式。

L3 我们把”层数”加上去、把”激活函数”丰富起来,就是深度学习。逻辑回归是深度学习世界的零点

💡 经典 ML 的工业实战智慧

不要用神经网络做你能用逻辑回归做的事

  • 数据少(<1 万):神经网络容易过拟合,逻辑回归更稳
  • 特征已经手工抽好:逻辑回归性能不输神经网络
  • 需要可解释性:监管行业别用神经网络
  • 计算资源紧:边缘设备别上神经网络

用对了工具,比模型多强重要

下一篇:《决策树:最直观可解释的 ML 算法》

📬

读到这里说明你认真在学 🎯

订阅每周精选 —— 下一篇新文章 / 新可视化第一时间送到邮箱。

💬

讨论区

· 用 GitHub 账号登录评论
⚠️ Giscus 评论未配置 —— 在 src/components/Comments.astro 顶部填入 仓库 ID 和分类 ID(见组件注释里的配置步骤)。