机器学习&第三章

三、Logistic 回归(逻辑回归 / 逻辑斯蒂回归)

注意 :Logistic 回归名字带 "回归",但它是分类模型 ,专门解决二分类问题(也可扩展到多分类),核心是输出样本属于正类的概率

3.1 预测函数

Logistic 回归的预测函数是复合函数 :由线性函数Sigmoid 函数 组成,目的是把线性输出压缩到 [0,1] 区间,对应概率值。

3.1.1 复合函数形式(公式 3-1)

第一步:线性函数

先计算特征的线性组合,和线性回归的形式完全一致:Z=WTX=w0​x0​+w1​x1​+...+wd​xd​(x0​=1)

  • W:权重向量(模型要学习的参数);
  • X:特征向量;
  • Z:线性输出,取值范围是 (−∞,+∞)。
第二步:Sigmoid 函数(核心)

把线性输出 Z 映射到 [0,1],得到正类概率:y^​=σ(Z)=1+e−Z1​Sigmoid 函数图像(对应图 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​[yi​logy^​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 梯度下降法

核心步骤
  1. 初始化权重:给 W 赋初始值(比如全 0);
  2. 计算梯度 :对代价函数 J(W) 求关于 W 的偏导数,推导后梯度公式非常简洁:∇J(W)=m1XT(Y^−Y)
    • Y^:所有样本的预测概率向量;
    • Y:所有样本的真实标签向量;
  3. 更新参数 :沿梯度反方向调整 W,公式和线性回归一致:W=W−α⋅∇J(W)
    • α:学习率(超参数,控制步长);
  4. 迭代收敛:重复步骤 2-3,直到代价函数 J(W) 不再下降(梯度趋近于 0)。

3.3.2 预测模型 + 目标函数 + 优化求解的统一逻辑

用 "医生诊断肿瘤" 的例子串联三者:

  1. 预测模型:医生根据 "肿瘤大小、年龄"(X),用公式 y^=σ(WTX) 判断肿瘤是恶性的概率(y^);
  2. 目标函数:对比 "预测概率" 和 "病理结果(y=0/1)" 的差距(交叉熵损失),目标是让这个差距最小;
  3. 优化求解:医生根据诊断错误的程度(梯度),调整判断标准(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:计算预测值(概率)
  1. 线性输出:Z=WTX=−5×1+0.8×2+0.3×3=−5+1.6+0.9=−2.5
  2. 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. 模型 1:判断 "A" vs "非 A";
  2. 模型 2:判断 "B" vs "非 B";
  3. 模型 3:判断 "C" vs "非 C";
  4. 预测样本时,若模型 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=1k​yij​logy^​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 数据不平衡导致的问题

  1. 正确率失真:模型只预测负类(健康人),正确率就能达到 99%,但完全没有实用价值;
  2. 模型偏向多数类:梯度下降时,多数类的损失主导参数更新,模型忽略少数类(病人);
  3. 精度 / 召回率失衡:比如癌症诊断中,模型召回率极低(漏掉大部分病人)。

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=w0​x0​+w1​x1​+...+wd​xd​(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​[yi​logy^​i​+(1−yi​)log(1−y^​i​)] m:样本总数目标:最小化J(W)
梯度公式 ∇J(W)=m1​XT(Y^−Y) Y^:预测概率向量Y:真实标签向量
参数更新 W=W−α⋅∇J(W) α:学习率(超参数)

二、多分类扩展

方法 核心公式 / 思路 适用场景
一对多(OVR) 1. k类任务→k个二分类模型2. 每个模型判断 "是类i vs 非类i"3. 预测取概率最大的类 类别数少、样本分布较均衡
Softmax 回归 1. 类i线性得分:Zi​=WiT​X2. 类i概率:P(Y=i∣X)=∑j=1k​eZj​eZi​​3. 损失:多分类交叉熵 类别数多、需要直接输出概率分布

三、混淆矩阵与性能指标(二分类)

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 值代替正确率
相关推荐
木卫四科技2 小时前
DocETL 入门:让非结构化数据处理变得简单智能
人工智能·木卫四
Data_agent2 小时前
Cocbuy 模式淘宝 / 1688 代购系统(欧美市场)搭建指南
开发语言·python
玖日大大2 小时前
OceanBase SeekDB:AI 原生数据库的技术革命与实践指南
数据库·人工智能·oceanbase
小润nature2 小时前
Spec-Driven Development (SDD) 框架与开源 AI 智能体-意图的进化
人工智能·开源
m0_726365832 小时前
哈希分分预测系统 打造自适应趋势分析「Python+DeepSeek+PyQt5」
python·qt·哈希算法
后端小肥肠2 小时前
复刻10W+爆款视频!我用Coze搭了个“人物故事”自动流水线,太香了!
人工智能·aigc·coze
vyuvyucd2 小时前
Qwen-1.8B-Chat昇腾Atlas800TA2部署实战
python
轻竹办公PPT2 小时前
2026 年工作计划 PPT 内容拆解,对比不同 AI 生成思路
人工智能·python·powerpoint
浔川python社2 小时前
【版本更新提示】浔川 AI 翻译 v6.0 合规优化版已上线
人工智能