三、Logistic 回归(逻辑回归 / 逻辑斯蒂回归)
注意 :Logistic 回归名字带 "回归",但它是分类模型 ,专门解决二分类问题(也可扩展到多分类),核心是输出样本属于正类的概率。
3.1 预测函数
Logistic 回归的预测函数是复合函数 :由线性函数 和Sigmoid 函数 组成,目的是把线性输出压缩到 [0,1] 区间,对应概率值。
3.1.1 复合函数形式(公式 3-1)
第一步:线性函数
先计算特征的线性组合,和线性回归的形式完全一致:Z=WTX=w0x0+w1x1+...+wdxd(x0=1)
- W:权重向量(模型要学习的参数);
- X:特征向量;
- Z:线性输出,取值范围是 (−∞,+∞)。
第二步:Sigmoid 函数(核心)
把线性输出 Z 映射到 [0,1],得到正类概率:y^=σ(Z)=1+e−Z1Sigmoid 函数图像(对应图 3-2)特点:
- 当 Z=0 时,y^=0.5(概率分界点);
- 当 Z→+∞ 时,y^→1(极大概率是正类);
- 当 Z→−∞ 时,y^→0(极大概率是负类)。
预测函数整合公式
y^=σ(WTX)=1+e−WTX1
3.1.2 概率输出(公式 3-3)
Logistic 回归输出的是概率,而非直接的类别标签:
- 正类(比如 "患病""垃圾邮件")概率:P(Y=1∣X)=y^=1+e−WTX1
- 负类(比如 "健康""正常邮件")概率:P(Y=0∣X)=1−y^=1+e−WTXe−WTX
分类规则:设定阈值(通常取 0.5)
- 若 y^≥0.5,预测为正类(Y=1);
- 若 y^<0.5,预测为负类(Y=0)。
例子 :用 "肿瘤大小x1、年龄x2" 判断是否恶性肿瘤线性函数:Z=0.8x1+0.3x2−5Sigmoid 输出:y^=1+e−(0.8x1+0.3x2−5)1若某样本计算得 y^=0.75,则判断为恶性肿瘤(正类)。
3.2 目标函数
Logistic 回归是分类模型,不能用均方误差(MSE) ,核心目标函数是交叉熵损失函数。
3.2.1 交叉熵损失函数(公式 3-9)
交叉熵损失衡量 "模型预测的概率分布" 和 "真实标签分布" 的差距,目标是让差距最小。
单个样本的交叉熵损失
真实标签 y 是 0 或 1(二分类),损失公式:L(y,y^)=−[ylogy^+(1−y)log(1−y^)]
- 若真实标签 y=1:损失简化为 −logy^ → y^ 越接近 1,损失越小;
- 若真实标签 y=0:损失简化为 −log(1−y^) → y^ 越接近 0,损失越小。
全体样本的代价函数
J(W)=−m1∑i=1m[yilogy^i+(1−yi)log(1−y^i)]
- m:样本总数;
- 目标:最小化 J(W),让模型预测的概率尽可能接近真实标签。
3.2.2 交叉熵损失 vs 均方误差(MSE)
为什么分类任务不用 MSE?核心是梯度下降时的收敛问题,对比差异如下:
| 特点 | 交叉熵损失 | 均方误差(MSE) |
|---|---|---|
| 损失曲线形状 | 凸函数,梯度平滑 | 非凸函数,在 y^ 接近 0 或 1 时,梯度趋近于 0 |
| 梯度下降效率 | 无论 y^ 大小,都能提供有效梯度,收敛快 | y^ 接近 0/1 时,梯度消失,模型参数几乎不更新,收敛极慢 |
| 适用场景 | 分类任务(输出概率) | 回归任务(输出连续值) |
关键原因 :Sigmoid 函数 + MSE 会导致梯度消失。当 y^ 接近 0 或 1 时,Sigmoid 函数的导数趋近于 0,乘以 MSE 的梯度后,整体梯度几乎为 0,参数无法更新;而交叉熵损失的梯度和 Sigmoid 导数抵消,不会出现梯度消失。
3.3 优化求解
Logistic 回归的代价函数 J(W) 没有解析解(无法像线性回归那样直接算出 W∗),只能用梯度下降法迭代求解。
3.3.1 梯度下降法
核心步骤
- 初始化权重:给 W 赋初始值(比如全 0);
- 计算梯度 :对代价函数 J(W) 求关于 W 的偏导数,推导后梯度公式非常简洁:∇J(W)=m1XT(Y^−Y)
- Y^:所有样本的预测概率向量;
- Y:所有样本的真实标签向量;
- 更新参数 :沿梯度反方向调整 W,公式和线性回归一致:W=W−α⋅∇J(W)
- α:学习率(超参数,控制步长);
- 迭代收敛:重复步骤 2-3,直到代价函数 J(W) 不再下降(梯度趋近于 0)。
3.3.2 预测模型 + 目标函数 + 优化求解的统一逻辑
用 "医生诊断肿瘤" 的例子串联三者:
- 预测模型:医生根据 "肿瘤大小、年龄"(X),用公式 y^=σ(WTX) 判断肿瘤是恶性的概率(y^);
- 目标函数:对比 "预测概率" 和 "病理结果(y=0/1)" 的差距(交叉熵损失),目标是让这个差距最小;
- 优化求解:医生根据诊断错误的程度(梯度),调整判断标准(W),比如 "肿瘤大小的权重从 0.8 调到 0.9",逐步提升诊断准确率。
三者的核心:通过梯度下降调整权重 W,最小化交叉熵损失,让预测概率更接近真实标签。
3.3.3 实操计算流程(给定 X,W)
以单个样本为例,已知:
- 特征 X=[1,2,3](x0=1,x1=2,x2=3);
- 权重 W=[−5,0.8,0.3];
- 真实标签 y=1;
- 学习率 α=0.1。
步骤 1:计算预测值(概率)
- 线性输出:Z=WTX=−5×1+0.8×2+0.3×3=−5+1.6+0.9=−2.5
- Sigmoid 输出:y^=1+e−(−2.5)1=1+e2.51≈1+12.181≈0.076
步骤 2:计算交叉熵损失
L=−[ylogy^+(1−y)log(1−y^)]=−[1×log0.076+0]≈−(−2.57)=2.57损失值大,说明预测结果(0.076)和真实标签(1)差距大。
步骤 3:计算梯度
单样本梯度简化公式:∇J(W)=(y^−y)X∇J(W)=(0.076−1)×[1,2,3]=−0.924×[1,2,3]=[−0.924,−1.848,−2.772]
步骤 4:更新参数
W=W−α⋅∇J(W)W=[−5,0.8,0.3]−0.1×[−0.924,−1.848,−2.772]=[−4.9076,0.9848,0.5772]
迭代后效果:新的 W 会让 Z 变大,y^ 更接近 1,损失会降低。
3.4 多分类任务
Logistic 回归默认是二分类,扩展到多分类(比如手写数字识别:0-9 共 10 类)有两种方法:
方法 1:一对多(OVR,One-Vs-Rest)
核心思路
- 把 k 分类任务,转化为 k 个二分类任务;
- 对每个类别 i,训练一个二分类模型:判断样本 "是类别 i" 还是 "不是类别 i";
- 预测时,输入样本到 k 个模型,取输出概率最大的那个类别作为最终结果。
例子(3 分类:A/B/C)
- 模型 1:判断 "A" vs "非 A";
- 模型 2:判断 "B" vs "非 B";
- 模型 3:判断 "C" vs "非 C";
- 预测样本时,若模型 1 输出概率 0.8,模型 2 输出 0.3,模型 3 输出 0.1 → 预测为类别 A。
优缺点
- 优点:简单易实现,可复用二分类模型;
- 缺点:样本不平衡(比如 "非 A" 类包含 B/C,样本数远多于 "A" 类)。
方法 2:Softmax 回归(多分类专属)
核心思路
- 直接输出样本属于每个类别的概率,所有概率之和为 1;
- 步骤 1:计算每个类别的线性得分 Zi=WiTX(Wi 是类别 i 的权重);
- 步骤 2:用 Softmax 函数把得分转化为概率:P(Y=i∣X)=∑j=1keZjeZi
- 预测时,取概率最大的类别。
损失函数
用交叉熵损失,公式:J(W)=−m1∑i=1m∑j=1kyijlogy^ij
- yij:若样本 i 属于类别 j,则 yij=1,否则为 0;
- y^ij:样本 i 属于类别 j 的预测概率。
3.5 性能指标
分类模型的性能指标,基于混淆矩阵展开,先明确混淆矩阵的核心概念。
3.5.1 混淆矩阵(二分类)
混淆矩阵是 2×2 的表格,统计模型预测结果和真实标签的匹配情况:
| 真实 \ 预测 | 正类(预测) | 负类(预测) |
|---|---|---|
| 正类(真实) | TP(真正例):真实正类,预测正类 | FN(假负例):真实正类,预测负类 |
| 负类(真实) | FP(假正例):真实负类,预测正类 | TN(真负例):真实负类,预测负类 |
例子(疾病诊断):
- TP:病人患病,模型预测患病;
- FN:病人患病,模型预测健康(漏诊);
- FP:病人健康,模型预测患病(误诊);
- TN:病人健康,模型预测健康。
3.5.2 核心指标(基于混淆矩阵)
| 指标 | 公式 | 人话解释 | 适用场景 |
|---|---|---|---|
| 正确率(Accuracy) | TP+TN+FP+FNTP+TN | 预测正确的样本占总样本的比例 | 样本均衡的场景 |
| 错误率 | TP+TN+FP+FNFP+FN | 预测错误的样本占总样本的比例 | - |
| 精度(Precision,查准率) | TP+FPTP | 模型预测的正类中,真实正类的比例 | 重视 "误诊" 的场景(比如垃圾邮件识别:避免把正常邮件标为垃圾) |
| 召回率(Recall,查全率) | TP+FNTP | 真实正类中,被模型预测为正类的比例 | 重视 "漏诊" 的场景(比如癌症诊断:避免漏掉真正的病人) |
| F1 分数(F1-score) | 2×Precision+RecallPrecision×Recall | 精度和召回率的调和平均,综合两者性能 | 样本不平衡、需要兼顾精度和召回率的场景 |
3.5.3 PR 曲线与 AP 值
PR 曲线(精确率 - 召回率曲线)
- 横轴:召回率(Recall);
- 纵轴:精度(Precision);
- 绘制方法:调整分类阈值(从 0 到 1),计算每个阈值对应的 Precision 和 Recall,连成曲线。
- 评价标准:曲线越靠近右上角,模型性能越好。
AP 值(Average Precision,平均精度)
- 定义 :PR 曲线下的面积,取值范围
[0,1]; - 意义:综合衡量模型在不同阈值下的平均性能,AP 值越高,模型越好。
3.6 数据不平衡问题
数据不平衡指不同类别的样本数量差距极大(比如癌症诊断:99% 的样本是健康人,1% 是病人)。
3.6.1 数据不平衡导致的问题
- 正确率失真:模型只预测负类(健康人),正确率就能达到 99%,但完全没有实用价值;
- 模型偏向多数类:梯度下降时,多数类的损失主导参数更新,模型忽略少数类(病人);
- 精度 / 召回率失衡:比如癌症诊断中,模型召回率极低(漏掉大部分病人)。
3.6.2 性能评价的注意事项
- 不能用正确率作为唯一指标;
- 优先看 F1 分数、PR 曲线、AP 值;
- 可以计算每个类别的召回率 / 精度,而非整体指标。
3.6.3 解决数据不平衡的手段
方法 1:数据层面(调整样本分布)
- 过采样:对少数类样本进行随机复制,增加少数类样本数量(比如 SMOTE 算法:合成新的少数类样本,避免过拟合);
- 欠采样:对多数类样本随机删除,减少多数类样本数量;
- 混合采样:过采样少数类 + 欠采样多数类。
方法 2:算法层面(调整损失权重)
- 加权损失函数 :给少数类样本的损失加更大的权重,让模型更关注少数类。比如交叉熵损失变为:L=−[w1ylogy^+w0(1−y)log(1−y^)]
- w1:少数类权重(大于 1),w0:多数类权重(小于 1)。
方法 3:评估层面(用合适的指标)
- 如前文所述,用 F1 分数、PR 曲线、AP 值代替正确率。
Logistic 回归核心公式与混淆矩阵速记表
一、核心公式(二分类)
| 模块 | 公式 | 符号说明 |
|---|---|---|
| 线性函数 | Z=WTX=w0x0+w1x1+...+wdxd(x0=1) | W:权重向量X:特征向量Z∈(−∞,+∞) |
| Sigmoid 函数 | σ(Z)=1+e−Z1 | 把线性输出映射到[0,1],对应正类概率 |
| 预测函数 | y^=P(Y=1∣X)=σ(WTX) 1−y^=P(Y=0∣X) | y^:正类概率阈值 0.5:y^≥0.5 预测正类 |
| 单个样本交叉熵损失 | L(y,y^)=−[ylogy^+(1−y)log(1−y^)] | y∈{0,1}:真实标签 |
| 全体样本代价函数 | J(W)=−m1∑i=1m[yilogy^i+(1−yi)log(1−y^i)] | m:样本总数目标:最小化J(W) |
| 梯度公式 | ∇J(W)=m1XT(Y^−Y) | Y^:预测概率向量Y:真实标签向量 |
| 参数更新 | W=W−α⋅∇J(W) | α:学习率(超参数) |
二、多分类扩展
| 方法 | 核心公式 / 思路 | 适用场景 |
|---|---|---|
| 一对多(OVR) | 1. k类任务→k个二分类模型2. 每个模型判断 "是类i vs 非类i"3. 预测取概率最大的类 | 类别数少、样本分布较均衡 |
| Softmax 回归 | 1. 类i线性得分:Zi=WiTX2. 类i概率:P(Y=i∣X)=∑j=1keZjeZi3. 损失:多分类交叉熵 | 类别数多、需要直接输出概率分布 |
三、混淆矩阵与性能指标(二分类)
1. 混淆矩阵(2×2)
| 真实 \ 预测 | 预测正类 | 预测负类 |
|---|---|---|
| 真实正类 | TP(真正例) | FN(假负例) |
| 真实负类 | FP(假正例) | TN(真负例) |
2. 核心指标公式
| 指标 | 公式 | 核心含义 |
|---|---|---|
| 正确率(Accuracy) | TP+TN+FP+FNTP+TN | 整体预测正确的比例 |
| 错误率 | TP+TN+FP+FNFP+FN | 整体预测错误的比例 |
| 精度(Precision) | TP+FPTP | 预测正类中,真实正类的比例 |
| 召回率(Recall) | TP+FNTP | 真实正类中,被预测为正类的比例 |
| F1 分数 | 2×Precision+RecallPrecision×Recall | 精度和召回率的调和平均 |
| AP 值 | PR 曲线下的面积 | 不同阈值下的平均精度 |
四、数据不平衡问题速记
| 问题 | 解决手段 |
|---|---|
| 1. 正确率失真2. 模型偏向多数类3. 召回率 / 精度失衡 | 数据层面 :1. 过采样(SMOTE 合成样本)2. 欠采样(删除多数类样本)算法层面 :加权损失函数(提高少数类权重)评估层面:用 F1/PR 曲线 / AP 值代替正确率 |