机器学习入门(二)——逻辑回归 (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
相关推荐
Hgfdsaqwr2 小时前
使用Flask快速搭建轻量级Web应用
jvm·数据库·python
GHZhao_GIS_RS2 小时前
python中的sort和sorted用法汇总
python·排序·列表
永恒的溪流2 小时前
环境出问题,再修改
pytorch·python·深度学习
ruxshui2 小时前
Python多线程环境下连接对象的线程安全管理规范
开发语言·数据库·python·sql
一人の梅雨2 小时前
VVIC图片搜索接口进阶实战:服装批发场景下的精准识图与批量调度方案
开发语言·机器学习·php
大模型玩家七七2 小时前
向量数据库实战:从“看起来能用”到“真的能用”,中间隔着一堆坑
数据库·人工智能·python·深度学习·ai·oracle
2301_763472462 小时前
使用PyQt5创建现代化的桌面应用程序
jvm·数据库·python
爱学习的阿磊2 小时前
Web开发与API
jvm·数据库·python
qq_192779872 小时前
Python多线程与多进程:如何选择?(GIL全局解释器锁详解)
jvm·数据库·python