当前位置: 首页 > news >正文

【机器学习笔记Ⅰ】12 逻辑回归

逻辑回归是机器学习中经典的分类算法,主要用于解决二分类问题(如预测是否患病、是否点击广告)。虽然名字含“回归”,但它实际是一种分类模型,通过概率输出(0到1之间)判断类别。


1. 核心思想

  • 输入:特征向量 X(如年龄、收入)。
  • 输出:属于正类( y=1 )的概率 P(y=1 | X)。
  • 关键工具Sigmoid函数,将线性回归的输出映射到 [0,1] 区间。

2. 数学模型

(1) Sigmoid函数

在这里插入图片描述

  • 特性

    • 阈值通常设为0.5(概率≥0.5判为正类)。

Sigmoid函数

(2) 逻辑回归方程

在这里插入图片描述


3. 训练与损失函数

(1) 最大似然估计(MLE)

逻辑回归通过最大化对数似然函数学习参数:
在这里插入图片描述

(2) 交叉熵损失(Cross-Entropy Loss)

上式即二元交叉熵损失,衡量预测概率与真实分布的差距:

  • 梯度下降优化:通过求导更新参数(类似线性回归,但梯度不同)。

4. 代码实现(Python)

from sklearn.linear_model import LogisticRegression
import numpy as np# 示例数据
X = np.array([[1], [2], [3], [4]])  # 特征
y = np.array([0, 0, 1, 1])          # 标签(二分类)# 训练模型
model = LogisticRegression()
model.fit(X, y)# 预测概率
print(model.predict_proba([[1.5]]))  # 输出 [[0.85, 0.15]](属于0类的概率85%)
print(model.predict([[1.5]]))        # 输出 [0](类别标签)

5. 关键特性

(1) 决策边界

  • 线性边界:逻辑回归的决策边界是线性的(在特征空间中的超平面)。
  • 非线性扩展:可通过多项式特征或核方法处理非线性问题(类似多项式回归)。

(2) 概率解释

  • 输出是校准后的概率(可直接用于风险评估)。
  • 需注意:概率准确性依赖特征质量和模型校准。

(3) 正则化

  • 防止过拟合:添加L1/L2惩罚项(如 penalty='l2')。
  • 超参数 C:控制正则化强度(C越小,惩罚越强)。

6. 多分类扩展

  • OvR(One-vs-Rest):训练K个二分类器(K为类别数),选择概率最高的类别。
  • Softmax回归:直接输出多类概率分布(需用 multi_class='multinomial')。
# 多分类示例
X_multi = np.array([[1], [2], [3], [4], [5]])
y_multi = np.array([0, 0, 1, 1, 2])  # 3个类别model_multi = LogisticRegression(multi_class='ovr')
model_multi.fit(X_multi, y_multi)

7. 应用场景

  • 医学:疾病预测(如癌症诊断)。
  • 金融:信用评分(是否违约)。
  • 营销:用户行为预测(是否购买)。

8. 优缺点

优点缺点
输出概率,可解释性强。仅能处理线性可分或适度非线性数据。
计算高效,适合大规模数据。对特征相关性和异常值敏感。
支持正则化,防止过拟合。需特征工程(如缩放、处理共线性)。

9. 常见问题

Q1:逻辑回归为什么用交叉熵损失而非MSE?

  • MSE的缺陷:非凸优化,易陷入局部最优;梯度在概率极端值时消失。
  • 交叉熵的优势:凸函数,梯度更合理。

Q2:如何评估逻辑回归性能?

  • 指标:准确率、精确率、召回率、AUC-ROC曲线。
  • 代码
    from sklearn.metrics import classification_report
    print(classification_report(y_true, y_pred))
    

10. 总结

  • 逻辑回归 = 线性回归 + Sigmoid激活 + 交叉熵损失
  • 核心输出:概率(需设定阈值转为类别)。
  • 适用场景:二分类、概率预测、线性决策边界问题。

它是分类任务的“瑞士军刀”,理解其原理是掌握更复杂模型(如神经网络)的基础!


http://www.lryc.cn/news/581836.html

相关文章:

  • get: ()=>state 和get: ()=>{state}
  • std::vector<bool>有什么特殊的吗
  • Podman与Docker详细比较:从原理到使用
  • 单片机总复习
  • 开关电源抄板学习
  • Spring Cloud Alibaba/Spring Boot整合华为云存储实例(REST API方式)
  • 反向遍历--当你修改一个元素的outerHTML时,该元素会被从 DOM 中移除
  • Python设计小游戏方法简介
  • 【C++】string类(二)相关接口介绍及其使用
  • 2025年03月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • LeetCode 每日一题 2025/6/30-2025/7/6
  • WPF学习笔记(26)CommunityToolkit.Mvvm与MaterialDesignThemes
  • 端到端矢量化地图构建与规划
  • 【机器学习笔记 Ⅱ】1 神经网络
  • 从源码到思想:OneCode框架模块化设计如何解决前端大型应用痛点
  • RDF安装使用教程
  • 408第三季part2 - 计算机网络 - 传输层
  • 计算机网络实验——配置ACL
  • 植物大战僵尸杂交重制版1.0,经典焕新,重燃策略塔防之火
  • C 语言指针与作用域详解
  • 计算机网络实验——互联网安全实验
  • SQL Server从入门到项目实践(超值版)读书笔记 20
  • Solidity——什么是selfdestruct
  • 数据结构---链表结构体、指针深入理解(三)
  • nginx的使用
  • 机器学习手写字体识别系统:技术演进与应用实践
  • Qt:QPushButton、QRadioButton、QCheckBox
  • 1.1_4 计算机网络的分类
  • ARMv8 创建3级页表示例
  • QML与C++交互之QML端信号绑定C++端槽函数