逻辑回归与分类:从回归到决策
名字叫"回归"其实是分类。在神经网络出来之前,逻辑回归是工业界分类的事实标准——今天仍然是 baseline。
L2-02 我们学了线性回归——预测连续数值(房价、销售额)。
但很多 ML 任务要预测类别:垃圾邮件 vs 正常、患病 vs 健康、点击 vs 不点击。
逻辑回归就是为这类任务设计的——尽管名字叫”回归”,它本质是分类算法。
从线性回归说起
线性回归的输出 是任意数——可能是 100、-50、999。
但分类问题的输出应该是概率:0-1 之间的数。
怎么把”任意数”变成”0-1 概率”?
答:套一个 sigmoid 函数:
这个 S 形曲线的性质:
- 时输出 0.5
- 时输出 → 1
- 时输出 → 0
所以逻辑回归就是:
线性回归 + Sigmoid = 逻辑回归。
决策阈值
模型输出概率,但你最终需要”是/否”答案。
通常:
- → 预测 1(正例)
- → 预测 0(负例)
0.5 不是必须——可以调。例如垃圾邮件分类:
- 阈值低(0.3)→ 更激进,把可疑邮件都标垃圾(高召回但易误杀)
- 阈值高(0.7)→ 更保守,只标确信的(低召回但少误杀)
实际工程要根据业务取舍调。
损失函数:交叉熵
L1-04 详解过——逻辑回归的损失就是二分类交叉熵:
- 当真实标签 ,损失 = ( 越接近 1,损失越小)
- 当真实标签 ,损失 = ( 越接近 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)
训 个二分类器:
- 分类器 1:是 vs 不是猫
- 分类器 2:是 vs 不是狗
- 分类器 3:是 vs 不是兔
- …
预测时取概率最高的那个。
方法 2:Softmax(多项逻辑回归)
把 sigmoid 推广到 K 个类别:
让所有类别的概率加起来 = 1。这就是神经网络多分类头的标准做法——sklearn 里 multi_class='multinomial'。
Softmax + 交叉熵就是 LLM 训练时每个位置在做的事——在词表(5 万-10 万个 token)上输出概率分布,和真实下一个 token 算交叉熵。
评估指标(L2-07 详讲)
二分类常用:
| 指标 | 公式 | 用途 |
|---|---|---|
| Accuracy(准确率) | 对的 / 总数 | 类别均衡时用 |
| Precision(精确率) | 真正例 / 预测正例 | 关心”误报” |
| Recall(召回率) | 真正例 / 真实正例 | 关心”漏报” |
| F1 | Precision 和 Recall 的调和平均 | 综合 |
| AUC | ROC 曲线下面积 | 阈值无关,常见 |
警告:类别不均衡(如 99% 正常 + 1% 异常)时,准确率会骗你——把所有预测成正常,准确率 99%,但毫无用处。这时应看 Precision/Recall。
真实业务中的逻辑回归
很多人觉得”逻辑回归太简单了,肯定没人用”——错。它是工业界用的最多的分类器:
- 银行反欺诈:交易特征 → 是否欺诈
- 广告 CTR 预估:用户+广告特征 → 是否点击
- 保险核保:申请人特征 → 是否承保
- 医院风险评分:病人指标 → 高风险/低风险
- 客户流失预测:行为特征 → 是否流失
理由:
- 可解释:每个特征的权重直接告诉你”它对结果的影响”——监管行业(医疗、金融)需要这个
- 训练快:百万级数据几秒钟
- 稳定:不像神经网络那么神秘
- 好部署:模型就是几十个数
真实数据:Google 早年的搜索广告 CTR 预估系统就是大规模逻辑回归——亿级特征、十亿样本规模。直到 2014 年才被深度学习取代。
优缺点
✅ 优点:
- 极快、极稳、可解释
- 概率输出,可调阈值
- 工业级成熟,运维简单
- 对线性可分问题效果好
❌ 缺点:
- 只能学线性决策边界(除非配合特征工程)
- 对不平衡数据敏感
- 多分类相对不优雅
一个有趣的视角
一个不带激活函数的”单层神经网络”,做分类时本质就是逻辑回归。
这个洞察意味着——你已经会逻辑回归 = 你已经懂神经网络的最基本形式。
L3 我们把”层数”加上去、把”激活函数”丰富起来,就是深度学习。逻辑回归是深度学习世界的零点。
不要用神经网络做你能用逻辑回归做的事。
- 数据少(<1 万):神经网络容易过拟合,逻辑回归更稳
- 特征已经手工抽好:逻辑回归性能不输神经网络
- 需要可解释性:监管行业别用神经网络
- 计算资源紧:边缘设备别上神经网络
用对了工具,比模型多强重要。
下一篇:《决策树:最直观可解释的 ML 算法》
读到这里说明你认真在学 🎯
订阅每周精选 —— 下一篇新文章 / 新可视化第一时间送到邮箱。
讨论区
· 用 GitHub 账号登录评论src/components/Comments.astro 顶部填入
仓库 ID 和分类 ID(见组件注释里的配置步骤)。