机器学习入门(二)——逻辑回归 (Logistic Regression)

机器学习入门(二)------逻辑回归 (Logistic Regression)

第一部分:核心难点

这部分是逻辑回归的灵魂,也是面试和考试的重灾区,请务必彻底理解。

1. 核心转换:Sigmoid 函数

线性回归的输出是 z = w T x + b z = w^T x + b z=wTx+b,它的范围是 ( − ∞ , + ∞ ) (-\infty, +\infty) (−∞,+∞)。但分类问题(二分类)需要的输出是概率,范围必须在 [ 0 , 1 ] [0, 1] [0,1] 之间。怎么把直线"压"弯呢?

我们需要一个激活函数 ------Sigmoid函数

  • 公式 : g ( z ) = 1 1 + e − z g(z) = \frac{1}{1 + e^{-z}} g(z)=1+e−z1
  • 输入 : z z z (也就是线性回归的结果 w T x + b w^T x + b wTx+b)
  • 输出 :一个 0 到 1 之间的概率值。
    • 当 z z z 很大时, g ( z ) ≈ 1 g(z) \approx 1 g(z)≈1
    • 当 z z z 很小时, g ( z ) ≈ 0 g(z) \approx 0 g(z)≈0
    • 当 z = 0 z = 0 z=0 时, g ( z ) = 0.5 g(z) = 0.5 g(z)=0.5(这是默认的分类阈值)

划重点 :逻辑回归本质上就是 线性回归 + Sigmoid激活函数

2. 损失函数:对数似然损失 (Log Loss)

这是与线性回归最大的不同点!

为什么不能用均方误差 (MSE)?

在线性回归中我们用 MSE( ( y p r e d − y t r u e ) 2 (y_{pred} - y_{true})^2 (ypred−ytrue)2)。如果在逻辑回归中套用 Sigmoid 后再用 MSE,得到的损失函数图像是非凸的 (Non-convex),也就是像连绵起伏的山峦,有很多局部最低点,梯度下降很容易卡在半山腰,找不到全局最优解。

解决方案:对数似然损失

我们采用对数损失函数,公式如下:
C o s t ( h θ ( x ) , y ) = { − log ⁡ ( h θ ( x ) ) if y = 1 − log ⁡ ( 1 − h θ ( x ) ) if y = 0 Cost(h_\theta(x), y) = \begin{cases} -\log(h_\theta(x)) & \text{if } y = 1 \\ -\log(1 - h_\theta(x)) & \text{if } y = 0 \end{cases} Cost(hθ(x),y)={−log(hθ(x))−log(1−hθ(x))if y=1if y=0

合并后的完整公式(一定要眼熟):
J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J(\theta) = - \frac{1}{m} \sum_{i=1}^{m} [y^{(i)}\log(h_\theta(x^{(i)})) + (1-y^{(i)})\log(1-h_\theta(x^{(i)}))] J(θ)=−m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]

  • 直观理解
    • 如果真实值是 1,预测概率越接近 1,损失越接近 0;如果预测成 0.1,惩罚巨大(损失趋向无穷)。
    • 如果真实值是 0,预测概率越接近 0,损失越接近 0。

3. 模型评估:混淆矩阵与精确率/召回率

这是实际工程中最关键的部分。因为在分类问题中(尤其是正负样本不平衡时),"准确率 (Accuracy)"往往会骗人。

A. 混淆矩阵 (Confusion Matrix)

预测为正 (Positive) 预测为负 (Negative)
真实为正 (True) TP (真正例) FN (假负例/漏报)
真实为负 (False) FP (假正例/误报) TN (真负例)

B. 核心指标 (背诵并理解场景)

  1. 精确率 (Precision) :查准率。预测为正的样本中,有多少是真的正?
    • 公式: T P / ( T P + F P ) TP / (TP + FP) TP/(TP+FP)
    • 场景:垃圾邮件拦截。你把正常邮件误判为垃圾邮件(FP)后果很严重,所以需要高精确率。
  2. 召回率 (Recall) :查全率。所有真的正样本中,你找出了多少?
    • 公式: T P / ( T P + F N ) TP / (TP + FN) TP/(TP+FN)
    • 场景癌症检测 。宁可误诊(FP),也不能漏诊(FN),漏掉一个病人就是人命关天。所以此时召回率最重要
  3. F1-Score :精确率和召回率的调和平均数。
    • 当需要两者兼顾时使用。

C. ROC曲线与AUC指标

  • ROC曲线:不管分类阈值怎么变,画出 TPR (召回率) 和 FPR (假正率) 的关系图。
  • AUC (Area Under Curve) :ROC曲线下的面积。
    • AUC = 0.5:瞎猜(随机)。
    • AUC = 1.0:完美分类器。
    • 优势:AUC 指标不怕样本不平衡(比如正样本只有1%,负样本99%时,AUC依然能客观评价模型好坏)。

第二部分:基础内容

这部分内容与线性回归逻辑相似,快速掌握即可。

1. 应用场景

  • 广告点击预测:用户会不会点击这个广告?(是/否)
  • 金融风控:这笔贷款会不会违约?(是/否)
  • 医疗诊断:是否患病?

2. 优化算法

依然使用梯度下降 (Gradient Descent)

尽管损失函数变了(从MSE变成了Log Loss),但求导后的梯度更新公式在形式上与线性回归惊人地相似(只是 h ( x ) h(x) h(x) 的定义不同了)。

3. API 调用 (Scikit-Learn)

python 复制代码
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, roc_auc_score

# 1. 实例化 (solver参数虽然多,默认即可,主要关注C正则化力度)
# C越小,正则化越强(防过拟合);C越大,正则化越弱
estimator = LogisticRegression(C=1.0) 

# 2. 训练
estimator.fit(x_train, y_train)

# 3. 预测
y_predict = estimator.predict(x_test)

# 4. 评估 (一定要看精确率和召回率,不要只看score)
print(classification_report(y_test, y_predict))
print("AUC指标:", roc_auc_score(y_test, y_predict))

第三部分:线性回归 vs 逻辑回归 (对比记忆)

特性 线性回归 (Linear Regression) 逻辑回归 (Logistic Regression)
解决问题 回归(预测连续数字) 分类(预测类别/概率)
核心公式 y = w T x + b y = w^T x + b y=wTx+b y = sigmoid ( w T x + b ) y = \text{sigmoid}(w^T x + b) y=sigmoid(wTx+b)
输出范围 ( − ∞ , + ∞ ) (-\infty, +\infty) (−∞,+∞) [ 0 , 1 ] [0, 1] [0,1]
损失函数 均方误差 (MSE) 对数似然损失 (Log Loss)
评估指标 MSE, RMSE 精确率, 召回率, AUC
相关推荐
skywalk81632 分钟前
LTX-2 是一个基于 Transformer 的视频生成模型,能够根据文本描述生成高质量视频
python·深度学习·transformer
不懒不懒8 分钟前
【Python办公自动化进阶指南:系统交互与网页操作实战】
开发语言·python·交互
会周易的程序员9 分钟前
cNetgate插件架构设计详解 动态库 脚本二开lua, python, javascript
javascript·c++·python·物联网·lua·iot
小雨中_33 分钟前
3.7 GSPO:Group Sequence Policy Optimization(组序列策略优化)
人工智能·python·深度学习·机器学习·自然语言处理
我是中国人哦(⊙o⊙)2 小时前
我的寒假作业
人工智能·算法·机器学习
zchxzl2 小时前
亲测2026京津冀专业广告展会
大数据·人工智能·python
~央千澈~2 小时前
抖音弹幕游戏开发之第19集:课程总结与答疑·优雅草云桧·卓伊凡
python·pygame
小雨中_3 小时前
3.5 ReMax:用 Greedy 作为基线的 REINFORCE + RLOO
人工智能·python·深度学习·机器学习·自然语言处理
overmind4 小时前
oeasy Python 116 用列表乱序shuffle来洗牌抓拍玩升级拖拉机
服务器·windows·python
A懿轩A4 小时前
【Java 基础编程】Java 枚举与注解从零到一:Enum 用法 + 常用注解 + 自定义注解实战
java·开发语言·python