文章目录

    • 一、逻辑回归的核心思想:从线性到概率
      • 1. 线性回归的局限与突破
        • Sigmoid函数特性(代码可视化):
    • 2. 逻辑回归的预测公式
    • 二、损失函数:如何学习最优参数?
      • 1. 对数损失函数的数学定义
        • 损失函数解析:
      • 2. 代码中的损失函数体现
    • 三、参数优化:梯度下降法
      • 1. 梯度计算与参数更新
      • 2. 代码中的优化器选择
    • 四、多分类逻辑回归
      • 1. 多分类原理
      • 2. 代码实现
    • 五、正则化:防止过拟合
    • 六、总结:逻辑回归的核心逻辑

逻辑回归(Logistic Regression)是机器学习中经典的分类算法,尽管名称包含 “回归”,但本质是通过概率建模解决分类问题。本文将结合具体代码,从数学原理到实际应用,全面解析逻辑回归的工作机制。

一、逻辑回归的核心思想:从线性到概率

1. 线性回归的局限与突破

线性回归通过公式 y^=wTx+b\hat{y} = w^T x + by^=wTx+b 预测连续值,但分类问题需要离散的类别输出(如0/1)。逻辑回归的解决方案是:用线性模型输出作为输入,通过Sigmoid函数转换为[0,1]区间的概率值

Sigmoid函数的数学定义:
σ(z)=11+e−z\sigma(z) = \frac{1}{1+e^{-z}} σ(z)=1+ez1

其中 z=wTx+bz = w^Tx + bz=wTx+b(线性回归输出)。

Sigmoid函数特性(代码可视化):
import numpy as np
import matplotlib.pyplot as pltdef sigmoid(z):return 1 / (1 + np.exp(-z))z = np.linspace(-10, 10, 100)
plt.plot(z, sigmoid(z), 'b-')
plt.axhline(y=0.5, color='r', linestyle='--', label='阈值0.5')
plt.xlabel('z = w·x + b')
plt.ylabel('σ(z) 概率值')
plt.title('Sigmoid函数曲线')
plt.legend()
plt.show()

从图像可见,Sigmoid 函数将任意实数 zzz 映射到 (0,1),完美适配概率的定义:

  • z→+∞z \to +\inftyz+ 时,σ(z)→1\sigma(z) \to 1σ(z)1(高概率属于正类)
  • z→−∞z \to -\inftyz 时,σ(z)→0\sigma(z) \to 0σ(z)0(高概率属于负类)
  • z=0z = 0z=0 时,σ(z)=0.5\sigma(z) = 0.5σ(z)=0.5(决策阈值)

2. 逻辑回归的预测公式

结合 Sigmoid 函数,逻辑回归的概率预测公式为:

p^=P(y=1∣x)=σ(wTx+b)=11+e−(wTx+b)\hat{p} = P(y=1|x) = \sigma(w^T x + b) = \frac{1}{1+e^{-(w^T x+b)}} p^=P(y=1∣x)=σ(wTx+b)=1+e(wTx+b)1

分类决策规则:

  • p^≥0.5\hat{p} \geq 0.5p^0.5,预测为正类(y=1y = 1y=1
  • p^<0.5\hat{p} < 0.5p^<0.5,预测为负类(y=0y = 0y=0

二、损失函数:如何学习最优参数?

逻辑回归通过对数损失函数(Log Loss)学习参数 wwwbbb,其设计思想是:让正确分类的样本概率尽可能高,错误分类的样本概率尽可能低

1. 对数损失函数的数学定义

对于二分类问题(y∈{0,1}y \in \{0, 1\}y{0,1}),单个样本的损失为:

L(w,b)=−[y⋅log⁡(p^)+(1−y)⋅log⁡(1−p^)]L(w, b) = -[y \cdot \log(\hat{p}) + (1 - y) \cdot \log(1 - \hat{p})] L(w,b)=[ylog(p^)+(1y)log(1p^)]

损失函数解析:
  • y=1y = 1y=1 时,损失简化为 −log⁡(p^)-\log(\hat{p})log(p^)p^\hat{p}p^ 越接近 1,损失越小
  • y=0y = 0y=0 时,损失简化为 −log⁡(1−p^)-\log(1 - \hat{p})log(1p^)p^\hat{p}p^ 越接近 0,损失越小

所有样本的平均损失(成本函数):

J(w,b)=−1n∑i=1n[yi⋅log⁡(p^i)+(1−yi)⋅log⁡(1−p^i)]J(w, b) = -\frac{1}{n} \sum_{i=1}^{n} [y_i \cdot \log(\hat{p}_i) + (1 - y_i) \cdot \log(1 - \hat{p}_i)] J(w,b)=n1i=1n[yilog(p^i)+(1yi)log(1p^i)]

2. 代码中的损失函数体现

在sklearn的LogisticRegression中,损失函数已内置实现,无需手动编写。以下代码展示如何通过数据学习参数:

import numpy as np
from sklearn.linear_model import LogisticRegression# 示例数据
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])  # 特征
y = np.array([0, 0, 1, 1])                       # 标签# 创建并训练逻辑回归模型
model = LogisticRegression()
model.fit(X, y)# 输出学习到的参数
print("权重w:", model.coef_)  # 对应w1, w2
print("偏置b:", model.intercept_)  # 对应b

三、参数优化:梯度下降法

逻辑回归通过梯度下降法最小化损失函数 J(w,b)J(w, b)J(w,b),核心是沿损失函数的负梯度方向迭代更新参数。

1. 梯度计算与参数更新

损失函数对参数的偏导数(梯度)为:

  • 对权重 wjw_jwj

∂J∂wj=1n∑i=1n(p^i−yi)⋅xij\frac{\partial J}{\partial w_j} = \frac{1}{n} \sum_{i=1}^{n} (\hat{p}_i - y_i) \cdot x_{ij} wjJ=n1i=1n(p^iyi)xij

  • 对偏置 bbb

∂J∂b=1n∑i=1n(p^i−yi)\frac{\partial J}{\partial b} = \frac{1}{n} \sum_{i=1}^{n} (\hat{p}_i - y_i) bJ=n1i=1n(p^iyi)

参数更新公式(α\alphaα 为学习率):

wj=wj−α⋅∂J∂wjw_j = w_j - \alpha \cdot \frac{\partial J}{\partial w_j} wj=wjαwjJ

b=b−α⋅∂J∂bb = b - \alpha \cdot \frac{\partial J}{\partial b} b=bαbJ

2. 代码中的优化器选择

sklearn 的 LogisticRegression 提供多种求解器(优化算法),如:

  • lbfgs:默认求解器,适合中小数据集
  • saga:支持大规模数据和 L1 正则化

四、多分类逻辑回归

逻辑回归可通过一对多(One-vs-Rest)策略扩展到多分类问题(如示例代码中的 3 分类任务)。

1. 多分类原理

对于 KKK 个类别,训练 KKK 个二分类模型:

  • 模型 1:区分 “类别 1” 和 “其他类别”
  • 模型 2:区分 “类别 2” 和 “其他类别”
  • 模型 KKK:区分 “类别 KKK” 和 “其他类别”

预测时选择概率最高的类别作为结果。

2. 代码实现

import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline# 加载数据(前三列为特征,第四列为标签1/2/3)
data = np.loadtxt('datingTestSet2.txt', delimiter='\t')
X = data[:, :-1]  # 特征
y = data[:, -1]   # 标签# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1000
)# 构建模型管道(标准化+逻辑回归)
clf_pipeline = Pipeline([('scaler', StandardScaler()),  # 特征标准化(加速收敛)('logistic', LogisticRegression(C=0.01,          # 正则化强度倒数(值越小正则化越强)max_iter=1000,   # 迭代次数multi_class='ovr'  # 多分类策略:一对多))
])# 训练与评估
clf_pipeline.fit(X_train, y_train)
print("三分类准确率:", clf_pipeline.score(X_test, y_test))

五、正则化:防止过拟合

逻辑回归通过正则化限制参数大小,避免模型过度复杂。sklearn中通过参数C控制正则化强度(C=1/λλ为正则化系数):

  • C越小:正则化越强,参数更接近 0,防止过拟合
  • C越大:正则化越弱,模型可能更复杂
# 对比不同C值的效果
for C in [0.01, 0.1, 1, 10]:model = Pipeline([('scaler', StandardScaler()),('logistic', LogisticRegression(C=C, max_iter=1000))])model.fit(X_train, y_train)print(f"C={C}时的准确率:", model.score(X_test, y_test))

六、总结:逻辑回归的核心逻辑

  1. 模型本质:用 Sigmoid 函数将线性输出转换为概率,实现分类
  2. 决策边界:线性边界( wTx+b=0w^T x + b = 0wTx+b=0
  3. 学习机制:通过对数损失函数和梯度下降学习参数
  4. 扩展能力:支持多分类(一对多策略)和正则化

逻辑回归因其简单、高效、可解释性强(参数w可表示特征重要性),成为工业界处理分类问题的基础工具,也是理解神经网络等复杂模型的入门钥匙。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/93718.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93718.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/93718.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

粒子群优化算法(Particle Swarm Optimization, PSO) 求解二维 Rastrigin 函数最小值问题

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…

【GitHub Workflows 基础(二)】深入理解 on、jobs、steps 的核心语法与执行逻辑

&#x1f4d8; GitHub Workflows 基础&#xff08;二&#xff09;&#xff1a;深入理解 on、jobs、steps 的核心语法与执行逻辑继第一篇讲完 .github/workflows/ 中多个工作流的结构后&#xff0c;本篇将深入 GitHub Actions 的核心三要素&#xff1a;on&#xff08;触发器&…

React Filber及核心原理

1. React Fiber 的核心目标‌‌增量渲染‌&#xff1a;将大型更新拆解为可中断的小任务&#xff08;时间切片&#xff09;&#xff0c;避免阻塞主线程‌优先级调度‌&#xff1a;动态管理任务执行顺序&#xff08;如用户交互 > 动画 > 数据加载&#xff09;。与浏览器协作…

Shader开发(五)什么是渲染管线

在计算机图形学中&#xff0c;渲染管线&#xff08;Rendering Pipeline&#xff09; 是图形处理器&#xff08;GPU&#xff09;将3D网格数据转化为屏幕图像的核心流程。无论是炫酷的游戏画面还是逼真的动画场景&#xff0c;这一切都离不开渲染管线的默默工作。对于想要学习着色…

CentOS7 使用Docker安装MinIO完整教程

目录 1. MinIO简介 什么是MinIO? 为什么选择Docker安装? 2. 环境准备 检查Docker状态 检查防火墙设置 创建存储目录 3. 快速启动MinIO 基础启动命令 验证启动状态 4. 配置持久化存储 停止并删除临时容器 使用数据卷启动MinIO 验证数据持久化 5. 访问MinIO控制台…

【数据库】时序数据库选型指南:从大数据视角看IoTDB的核心优势

文章目录前言-官网链接一、时序数据管理的时代挑战二、时序数据库选型的六大核心维度1. 数据模型设计2. 写入与查询性能3. 存储效率4. 系统扩展性5. 生态兼容性6. 运维复杂度三、IoTDB的技术架构解析1. 存储引擎创新2. 计算引擎优势3. 分布式架构设计四、行业解决方案对比1. 能…

【25-cv-08364】Keith携Hello Angel版权图发案

Hello Angel版权图案件号&#xff1a;25-cv-08364起诉时间&#xff1a;2025/7/22原告&#xff1a;Angelea Clark Van Dam原告律所&#xff1a;Keith受理法院&#xff1a;伊利诺伊州北区地方法院原告介绍原告是是一位来自澳大利亚的艺术家&#xff0c;笔名为Hello Angel&#xf…

SkSurface---像素的容器:表面

如果说 SkCanvas 是画布&#xff0c;是所有绘图操作的提供者的话&#xff0c;那么 SkSurface 就是画布的容器&#xff0c;我们称之为表面&#xff0c;它负责管理画布对应的像素数据。这些像素数据可以是在内存中创建的&#xff0c;也可以是在 GPU 显存中创建的。创建一个空白表…

26.(vue3.x+vite)以pinia为中心的开发模板

效果截图 代码实现 HelloWorld.vue <template><div style="padding: 20px;">介绍:<br>1:使用class 来减少pinia(store)的代码量<br>

华为AI Agent智能园艺助手开发案例

一、引言与行业背景 在数字化与智能化日益渗透我们生活的今天&#xff0c;园艺这一传统而充满生机的领域&#xff0c;也迎来了智能化的革新。华为AI Agent智能园艺助手通过融合人工智能与园艺专业知识&#xff0c;为用户提供一站式、个性化的园艺养护解决方案&#xff0c;彻底改…

Linux Flathub软件管理方法 使用指南

Flathub 使用指南&#xff1a;软件安装、管理及常用软件推荐 一. 什么是 Flathub&#xff1f; Flathub 是 Flatpak 应用程序的主要分发中心&#xff0c;类似于 Linux 上的"应用商店"。它提供了一种跨发行版的软件打包和分发方式&#xff0c;让用户可以在任何 Linux 发…

GitLab 18.2 发布几十项与 DevSecOps 有关的功能,可升级体验【二】

沿袭我们的月度发布传统&#xff0c;极狐GitLab 发布了 18.2 版本&#xff0c;该版本带来了议题和任务的自定义工作流状态、新的合并请求主页、新的群组概览合规仪表盘、下载安全报告的 PDF 导出文件、中心化的安全策略管理&#xff08;Beta&#xff09;等几十个重点功能的改进…

​​免费语音转换服务(TTS)全面指南

​​​​1. TTS技术概述​​ TTS&#xff08;Text-to-Speech&#xff09;通过AI将文字转化为自然语音&#xff0c;核心技术包括​​深度神经网络&#xff08;DNN&#xff09;​​、​​语音韵律建模​​和​​声学合成​​。其核心优势在于&#xff1a; ​​多语言支持​​&a…

正则化都是放在模型的哪个位置呢?

✅ 什么是“正则化”&#xff1f;在神经网络中&#xff0c;正则化&#xff08;Regularization&#xff09; 抑制过拟合的技巧 目的是让模型在训练集和测试集上都表现得好&#xff08;泛化能力强&#xff09;。&#x1f9e0; 常见的正则化手段包括&#xff1a;方法类型通常放在哪…

Python毕业设计 | 基于协同过滤的智能商品推荐与数据大屏系统(Vue+Flask+Scikit-learn,附源码+文档)

个人介绍&#x1f3af; 毕业设计私人教练 专注计算机毕设辅导第 6 年&#xff0c;累计 1v1 带飞 800 同学顺利通关。从选题、开题、代码、论文到答辩&#xff0c;一条龙陪跑&#xff1b;擅长把导师的 “模糊要求” 变成能落地的技术方案。白天写方案&#xff0c;晚上改论文&…

基于千问2.5-VL-7B训练识别人的表情

一、安装LLaMA-Factory 我们使用LLaMA-Factory来进行微调&#xff0c;安装LLaMA-Factory来参考文章&#xff1a; 大模型微调工具LLaMA-Factory的安装流程-CSDN博客 二、下载千问2.5-VL-7B模型 我们使用千问2.5-VL-7B多模态模型来进行微调 通义千问2.5-VL-7B-Instruct 下载…

Android屏幕适配:从dp到px的转换与今日头条适配方案详解

前言 在Android开发中&#xff0c;屏幕适配一直是一个重要且复杂的话题。不同设备有着不同的屏幕尺寸、分辨率和像素密度&#xff0c;如何让应用在各种设备上都能良好显示&#xff0c;是每个开发者都需要面对的问题。本文将深入探讨Android系统中dp到px的转换原理&#xff0c;并…

nvim 缩进4空格

要把 Neovim 配置为缩进 4 空格&#xff0c;并适用于所有语言&#xff08;或某些语言如 C/C&#xff09;&#xff0c;你只需要设置这三个核心选项即可&#xff1a;✅ 通用方式&#xff1a;在 init.lua 或 options.lua 中添加 vim.opt.tabstop 4 -- 一个 <Tab> 等…

pdw估计edw怎么估计

问题一、pdw估计edw怎么估计PDW&#xff08;Pulse Descriptor Word&#xff09;数据是雷达接收到的每一个脉冲的瞬时特征数据&#xff0c;EDW&#xff08;Emitter Descriptor Word&#xff09;是对某一辐射源&#xff08;发射机&#xff09;整体特性的估计。PDW 是每一个脉冲的…

TS语法最佳实践

switch 的 case不能使用条件表达式JavaScript 允许在 switch 的 case 中使用条件表达式&#xff0c;但这种用法实际上是无效的&#xff0c;因为 case 的值会被隐式地转换为布尔值。TypeScript 明确禁止这种用法&#xff0c;以避免隐式类型转换导致的逻辑错误。建议使用 if-else…