逻辑回归详解:从原理到实践
在机器学习的广阔领域中,逻辑回归(Logistic Regression)虽名为 “回归”,实则是一种用于解决二分类(0 或 1)问题的有监督学习算法。它凭借简单易懂的原理、高效的计算性能以及出色的解释性,在数据科学、医学诊断、金融风控等诸多领域中得到了广泛应用。接下来,我们将从多个维度深入剖析逻辑回归,带你揭开它的神秘面纱。
一、逻辑回归的基本概念
在回归分析中,线性回归是通过构建线性方程来预测连续值,例如根据房屋面积、房间数量等特征预测房价。而逻辑回归面对的是分类问题,比如判断一封邮件是垃圾邮件(1)还是正常邮件(0) 。
逻辑回归基于线性回归模型,但引入了一个关键的转换函数 ——Sigmoid 函数,将线性回归模型的输出值映射到 [0, 1] 区间,使其能够表示某一事件发生的概率。假设线性回归模型的输出为,其中是参数向量,是特征向量。Sigmoid 函数的表达式为:
g(z)=1+e−z1
Sigmoid 函数的图像呈现出 “S” 型曲线,当
z
趋近于正无穷时,
g(z)
趋近于 1;当
z
趋近于负无穷时,
g(z)
趋近于 0 。将线性回归的输出
z
代入 Sigmoid 函数,得到逻辑回归模型的预测函数:
hθ(x)=g(θTx)=1+e−θTx1
hθ(x)
表示给定特征
x
时,样本属于正类(类别 1)的概率。例如,
hθ(x)=0.8
,则意味着该样本有 80% 的概率属于正类。
二、逻辑回归的数学推导
(一)损失函数
对于线性回归,我们使用均方误差(MSE)作为损失函数来衡量预测值与真实值之间的差异。但在逻辑回归中,由于预测的是概率值,均方误差不再适用,而是采用对数损失函数(Log Loss),也称为交叉熵损失函数(Cross-Entropy Loss)。
假设样本数据集,其中是第个样本的特征向量,是第个样本的真实标签。单个样本的对数损失函数为:
L(hθ(x),y)=−[ylog(hθ(x))+(1−y)log(1−hθ(x))]
当
y=1
时,损失函数简化为
−log(hθ(x))
,此时
hθ(x)
越接近 1,损失越小;当
y=0
时,损失函数变为
−log(1−hθ(x))
,
hθ(x)
越接近 0,损失越小。
整个数据集的对数损失函数(成本函数)为:
J(θ)=−m1i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
(二)参数优化
逻辑回归的目标是找到一组最优的参数,使得成本函数最小化。通常使用梯度下降法(Gradient Descent)来更新参数。
首先,计算成本函数关于参数的梯度:
∂θj∂J(θ)=m1i=1∑m(hθ(x(i))−y(i))xj(i)
然后,使用梯度下降的更新公式来迭代更新参数
θj
:
θj:=θj−α∂θj∂J(θ)
其中,
α
是学习率,控制每次参数更新的步长。不断重复上述过程,直到成本函数
J(θ)
收敛到最小值或达到预设的迭代次数,此时得到的参数
θ
即为逻辑回归模型的最优参数。
三、逻辑回归的实现步骤
(一)数据预处理
- 数据清洗:检查数据集中是否存在缺失值、异常值,并进行相应处理。例如,对于缺失值可以采用删除含有缺失值的样本、均值填充、中位数填充等方法;对于异常值可以通过统计分析或可视化手段识别并进行修正或删除。
- 特征编码:如果数据集中存在类别型特征,需要将其转换为数值型特征。常用的编码方式有独热编码(One-Hot Encoding)、标签编码(Label Encoding)等 。例如,对于 “颜色” 特征(红、绿、蓝),使用独热编码会将其转换为三个新的特征,每个特征表示一种颜色是否出现(0 或 1)。
- 特征标准化:将特征缩放到相同的尺度,常用的方法有归一化(Min-Max Scaling)和标准化(Z-Score Standardization)。归一化将特征值映射到 [0, 1] 区间,公式为
x′=xmax−xminx−xmin
;标准化将特征值转换为均值为 0,标准差为 1 的分布,公式为x′=σx−μ
,其中μ
是均值,σ
是标准差。
(二)模型训练
在 Python 中,可以使用 Scikit-learn 库方便地实现逻辑回归模型的训练。以下是一个简单的示例代码:
TypeScript
取消自动换行复制
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
import numpy as np
# 加载数据集(这里以鸢尾花数据集为例)
iris = load_iris()
X = iris.data[:, :2] # 选取前两个特征
y = (iris.target == 0).astype(int) # 将类别0作为正类,其他作为负类
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建逻辑回归模型对象
model = LogisticRegression()
# 训练模型
model.fit(X_train, y_train)
(三)模型评估
训练好模型后,需要对其性能进行评估。常用的评估指标有:
- 准确率(Accuracy):表示预测正确的样本数占总样本数的比例,公式为
Accuracy=TP+TN+FP+FNTP+TN
,其中TP
(真正例)是被正确预测为正类的样本数,TN
(真负例)是被正确预测为负类的样本数,FP
(假正例)是被错误预测为正类的样本数,FN
(假负例)是被错误预测为负类的样本数。
- 精确率(Precision):表示预测为正类的样本中真正为正类的比例,公式为
Precision=TP+FPTP
。
- 召回率(Recall):表示实际为正类的样本中被正确预测为正类的比例,公式为
Recall=TP+FNTP
。
- F1 值:是精确率和召回率的调和平均数,公式为
F1=Precision+Recall2×Precision×Recall
。
- ROC 曲线(Receiver Operating Characteristic Curve):以假正率(FPR)为横轴,真正率(TPR)为纵轴绘制的曲线,曲线下面积(AUC,Area Under Curve)越大,模型性能越好。
可以使用 Scikit-learn 库中的相关函数计算这些评估指标,示例代码如下:
TypeScript
取消自动换行复制
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, roc_curve
import matplotlib.pyplot as plt
# 预测测试集
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print("准确率:", accuracy)
# 计算精确率
precision = precision_score(y_test, y_pred)
print("精确率:", precision)
# 计算召回率
recall = recall_score(y_test, y_pred)
print("召回率:", recall)
# 计算F1值
f1 = f1_score(y_test, y_pred)
print("F1值:", f1)
# 计算ROC曲线和AUC
y_scores = model.predict_proba(X_test)[:, 1] # 得到正类的预测概率
fpr, tpr, thresholds = roc_curve(y_test, y_scores)
auc = roc_auc_score(y_test, y_scores)
# 绘制ROC曲线
plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % auc)
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()
四、逻辑回归的优缺点
(一)优点
- 简单易懂:逻辑回归的原理和模型结构相对简单,容易理解和解释,适合向非技术人员展示模型的决策过程。
- 计算效率高:模型训练和预测的计算复杂度较低,能够快速处理大规模数据集。
- 可解释性强:可以通过参数
θ
的大小和正负来判断每个特征对预测结果的影响方向和程度 。例如,θj>0
表示特征xj
增大时,样本属于正类的概率增加;θj<0
则表示特征xj
增大时,样本属于正类的概率减小。
- 不需要复杂的特征工程:对特征的要求相对宽松,不需要过多的特征转换和组合。
(二)缺点
- 假设条件限制:逻辑回归基于特征与对数几率之间的线性关系假设,如果数据不符合该假设,模型性能可能不佳。
- 对非线性数据处理能力有限:虽然可以通过引入多项式特征等方法处理部分非线性问题,但对于复杂的非线性关系,效果不如决策树、神经网络等模型。
- 容易欠拟合:在处理复杂数据分布时,如果模型过于简单,可能无法捕捉数据的复杂模式,导致欠拟合。
五、逻辑回归的扩展与应用
(一)多分类问题
逻辑回归不仅可以处理二分类问题,还可以通过扩展应用于多分类问题,常见的方法有 “一对多(One-vs-Rest,OvR)” 和 “多对多(One-vs-One,OvO)” 。
- 一对多:将多分类问题转化为多个二分类问题。对于
K
个类别,训练K
个逻辑回归模型,每个模型将其中一个类别作为正类,其余类别作为负类。预测时,将样本输入到K
个模型中,选择概率最大的类别作为预测结果。
- 多对多:对于
K
个类别,两两组合构建2K(K−1)
个二分类模型。预测时,根据各个模型的预测结果进行投票,得票最多的类别为最终预测结果。
(二)实际应用场景
- 医学诊断:根据患者的症状、检查指标等特征,预测患者是否患有某种疾病。
- 金融风控:评估客户的信用风险,判断客户是否会违约。
- 市场营销:预测用户是否会购买某产品,以便进行精准营销。
- 文本分类:对新闻文章、邮件等文本进行分类,如区分新闻类别、判断邮件是否为垃圾邮件等。
逻辑回归作为机器学习领域的经典算法,以其简洁高效、可解释性强的特点,在众多领域发挥着重要作用。通过深入理解其原理、掌握实现方法,并结合实际应用场景进行灵活运用,能够为数据分析和决策提供有力支持。随着机器学习技术的不断发展,逻辑回归也在与其他算法结合,衍生出更多强大的模型和应用。希望本文能帮助你对逻辑回归有更全面、深入的认识,为进一步探索机器学习的奥秘奠定基础。
以上详细介绍了逻辑回归的方方面面。若你对某个部分还想深入了解,或是有特定的应用场景需求,欢迎随时和我说。
相关文章:
逻辑回归详解:从原理到实践
在机器学习的广阔领域中,逻辑回归(Logistic Regression)虽名为 “回归”,实则是一种用于解决二分类(0 或 1)问题的有监督学习算法。它凭借简单易懂的原理、高效的计算性能以及出色的解释性,在数…...
FastAPI集成APsecheduler的BackgroundScheduler+mongodb(精简)
项目架构: FastAPI(folder) >app(folder) >core(folder) >models(folder) >routers(folder) >utils(folder) main.py(file) 1 utils文件夹下新建schedulers.py from apscheduler.schedulers.background import BackgroundScheduler from apschedu…...
本地部署FreeGPT+内网穿透公网远程访问,搞定ChatGPT外网访问难题
FreeGPT是一个基于GPT 3.5/4的ChatGPT聊天网页用户界面,提供了一个开放的聊天界面,开箱即用。ChatGPT是非常热门的,但访问体验一直不太理想。为了解决这一问题,出现了各类方法和工具,其中FreeGPT是一款非常实用的…...

linux 1.0.3
挂载 这个虚拟机啥时候都能挂起 会有一个这个东东 选择连接虚拟机,然后就连到linux了 这有两个键,一个是和主机连接一个是和虚拟机连接 先把U盘拔掉 原本是没有这个盘的,但是插上去之后,电脑创建了一个虚拟的盘 也就是图中的F…...
基于RK3588的智慧农场系统开发|RS485总线|华为云IOT|node-red|MQTT
一、硬件连接流程 本次采用的是 总线型拓扑:所有设备并联到两根 RS485 总线上(A 和 B-) 二、通信协议配置 1. 主从通信模式 RS485 是半双工:同一时间只能有一个设备发送数据主从架构:通常一个主设备(…...
解锁程序人生学习成长密码,从目标设定开始
解锁程序人生学习成长密码,从目标设定开始 关键词:程序员成长、目标设定、学习路径、技能提升、职业规划、刻意练习、反馈机制 摘要:本文深入探讨程序员如何通过科学的目标设定方法实现职业成长。文章从目标设定的重要性出发,详细介绍了SMART原则、OKR方法等技术,并结合程…...
简单cnn
数据增强 在图像数据预处理环节,为提升数据多样性,可采用数据增强(数据增广)策略。该策略通常不改变单次训练的样本总数,而是通过对现有图像进行多样化变换,使每次训练输入的样本呈现更丰富的形态差异&…...

C#集合循环删除某些行
你想要在遍历集合(例如List)的同时删除某些元素时,直接在循环中删除元素可能会导致问题,因为这可能会改变集合的大小和导致索引问题; 可以用for循环的倒序来删除; 如果要删除满足特定条件的所有元素&…...
相机定屏问题分析四:【cameraserver 最大request buffer超标】后置视频模式预览定屏闪退至桌面
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:相机定屏问题分析三:【配流ConfigStream失败】外屏打开相机视频照片人像来回切换后,相机页面卡死,点击没反应9055522 这一篇我们开始讲: 相机定屏问题分析四:【cameraserver 最大request buffer超…...

【Linux 学习计划】-- 进程地址空间
目录 进程地址的引入 进程地址空间基础原理 区域划分的本质 如何理解进程地址空间 越界访问的本质 进一步理解写时拷贝 重谈 fork 返回值 结语 进程地址的引入 我们先来看一段代码: 首先我们可以看到,父进程和子进程是可以同时可以看到一个变量…...
告别重复 - Ansible 配置管理入门与核心价值
告别重复 - Ansible 配置管理入门与核心价值 还记得我们在 SRE 基础系列中反复强调的“减少琐事 (Toil)”和“拥抱自动化”吗?想象一下这些场景: 你需要部署一个新的 Web 服务集群,每台服务器都需要安装 Nginx、配置防火墙规则、同步 Web 内容、启动服务……手动操作不仅耗时…...
3D Gaussian splatting 04: 代码阅读-提取相机位姿和稀疏点云
目录 3D Gaussian splatting 01: 环境搭建3D Gaussian splatting 02: 快速评估3D Gaussian splatting 03: 用户数据训练和结果查看3D Gaussian splatting 04: 代码阅读-提取相机位姿和稀疏点云3D Gaussian splatting 05: 代码阅读-训练整体流程3D Gaussian splatting 06: 代码…...

CTFHub-RCE 命令注入-过滤空格
观察源代码 代码里面可以发现过滤了空格 判断是Windows还是Linux 源代码中有 ping -c 4 说明是Linux 查看有哪些文件 127.0.0.1|ls 打开flag文件 我们尝试将空格转义打开这个文件 利用 ${IFS} 127.0.0.1|cat${IFS}flag_195671031713417.php 可是发现 文本内容显示不出来&…...
卫生间改造翻新怎么选产品?我在瑞尔特找到了解决方案
在一场打掉重来的卫生间翻新改造中,最令人头疼的,从来都不是瓷砖、吊顶这类“看得见”的工序,而是那些每天都在用、但选错一次就要懊悔好多年的卫浴产品。从功能到体验,从老人适配到美学搭配,这事真不是买个贵的就够了…...
C++ list数据删除、list数据访问、list反转链表、list数据排序
list数据删除,代码见下 #include<iostream> #include<list>using namespace std;void printList(const list<int>& l) {for (list<int>::const_iterator it l.begin(); it ! l.end(); it) {cout << *it << " "…...

Express教程【002】:Express监听GET和POST请求
文章目录 2、监听post和get请求2.1 监听GET请求2.2 监听POST请求 2、监听post和get请求 创建02-app.js文件。 2.1 监听GET请求 1️⃣通过app.get()方法,可以监听客户端的GET请求,具体的语法格式如下: // 1、导入express const express req…...
mysql安装教程--笔记
一、Windows 系统安装 方法1:使用 MySQL Installer(推荐) 1. 下载安装包 访问 MySQL 官网下载页面,选择 MySQL Installer for Windows。 2. 运行安装程序 双击下载的 .msi 文件,选择安装类型: ◦ Developer…...
C++ 观察者模式:设计与实现详解
一、引言 在现代软件开发中,组件间的交互与通信是系统设计的核心挑战之一。观察者模式(Observer Pattern)作为一种行为设计模式,提供了一种优雅的解决方案,用于实现对象间的一对多依赖关系。本文将深入探讨 C++ 中观察者模式的设计理念、实现方式及其应用场景。 二、观察…...

【PostgreSQL 03】PostGIS空间数据深度实战:从地图服务到智慧城市
PostGIS空间数据深度实战:从地图服务到智慧城市 关键词 PostGIS, 空间数据库, 地理信息系统, GIS, 空间查询, 地理分析, 位置服务, 智慧城市, 空间索引, 坐标系统 摘要 PostGIS是PostgreSQL的空间数据扩展,它将普通的关系数据库转变为强大的地理信息系统…...

HIT-csapp大作业:程序人生-HELLO‘s P2P
计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 计算学部 学 号 2023111813 班 级 23L0518 学 生 鲁永哲 指 导 教 师 史先俊 计…...

深入探讨redis:主从复制
前言 如果某个服务器程序,只部署在一个物理服务器上就可能会面临一下问题(单点问题) 可用性问题,如果这个机器挂了,那么对应的客户端服务也相继断开性能/支持的并发量有限 所以为了解决这些问题,就要引入分布式系统,…...

帕金森常见情况解读
一、身体出现的异常节奏 帕金森会让身体原本协调的 “舞步” 出现错乱。它是一种影响身体行动能力的状况,随着时间推进,就像老旧的时钟,齿轮转动不再顺畅,使得身体各个部位的配合逐渐失衡,打乱日常行动的节奏。 …...

清华大学发Nature!光学工程+神经网络创新结合
2025深度学习发论文&模型涨点之——光学工程神经网络 清华大学的一项开创性研究成果在《Nature》上发表,为光学神经网络的发展注入了强劲动力。该研究团队巧妙地提出了一种全前向模式(Fully Forward Mode,FFM)的训练方法&…...

【android bluetooth 案例分析 04】【Carplay 详解 3】【Carplay 连接之车机主动连手机】
1. 背景 在前面的文章中,我们已经介绍了 carplay 在车机中的角色划分, 并实际分析了 手机主动连接车机的案例。 感兴趣可以 查看如下文章介绍。 【android bluetooth 案例分析 04】【Carplay 详解 1】【CarPlay 在车机侧的蓝牙通信原理与角色划分详解】…...

C++学习-入门到精通【11】输入/输出流的深入剖析
C学习-入门到精通【11】输入/输出流的深入剖析 目录 C学习-入门到精通【11】输入/输出流的深入剖析一、流1.传统流和标准流2.iostream库的头文件3.输入/输出流的类的对象 二、输出流1.char* 变量的输出2.使用成员函数put进行字符输出 三、输入流1.get和getline成员函数2.istrea…...

NW969NW978美光闪存颗粒NW980NW984
NW969NW978美光闪存颗粒NW980NW984 技术解析:NW969、NW978、NW980与NW984的架构创新 美光(Micron)的闪存颗粒系列,尤其是NW969、NW978、NW980和NW984,代表了存储技术的前沿突破。这些产品均采用第九代3D TLC…...

使用 ssld 提取CMS 签名并重签名
拿SpringBoard的cms签名和entitlements.xml,对tihook.dylib进行重签名 工具来源:https://github.com/eksenior/ssld...
前端基础之《Vue(17)—路由集成》
一、页面应用程序分类 1、单页面应用程序(SPA) 通过路由系统把组件串联起来的并且只有一个根index.html页面的程序,叫做单页面应用程序。 2、多页面应用程序(MPA) 整个应用程序中,有多个.html页面。每次用…...

大厂前端研发岗位PWA面试题及解析
文章目录 一、基础概念二、Service Worker 深度三、缓存策略实战四、高级能力五、性能与优化六、调试与部署七、安全与更新八、跨平台兼容九、架构设计十、综合场景十一、前沿扩展一、基础概念 什么是PWA?列举3个核心特性 解析:渐进式网页应用。核心特性:离线可用、类原生体…...

第十四章 MQTT订阅
系列文章目录 系列文章目录 第一章 总体概述 第二章 在实体机上安装ubuntu 第三章 Windows远程连接ubuntu 第四章 使用Docker安装和运行EMQX 第五章 Docker卸载EMQX 第六章 EMQX客户端MQTTX Desktop的安装与使用 第七章 EMQX客户端MQTTX CLI的安装与使用 第八章 Wireshark工具…...