Sklearn 中的逻辑回归

news2025/1/30 17:20:09

逻辑回归的数学模型

基本模型

逻辑回归主要用于处理二分类问题。二分类问题对于模型的输出包含 0 和 1,是一个不连续的值。分类问题的结果一般不能由线性函数求出。这里就需要一个特别的函数来求解,这里引入一个新的函数 Sigmoid 函数,也成为逻辑函数。
h θ ( x ) = g ( θ T x ) z = θ T x g ( z ) = 1 1 + e − z h_\theta(x) = g(\theta^Tx) \\ z = \theta^Tx \\ g(z) = \frac{1}{1 + e^{-z}} hθ(x)=g(θTx)z=θTxg(z)=1+ez1
这里函数 g ( z ) g(z) g(z) 将任何实数映射到了 ( 0 , 1 ) (0, 1) (0,1) 区间中,从而将任何值函数转换为适合分类的函数。这里我们将线性回归模型函数插入到这个函数中形成新的逻辑回归模型。

图 1 Sigmoid 函数

如图所示,转换后可以看到在 x = 0 x = 0 x=0 处有一个明显的变化,两边的函数值无限接近于 0 和 1,而中间的交界处则根据输出来判断如何分类,例如 h θ ( x ) = 0.7 h_\theta(x) = 0.7 hθ(x)=0.7 则表示有 70% 的概率输出为 1。

决策边界

决策边界(Decision boundary)即为输出的分界点。二分类问题的输出是离散的零一分类,也就是说:
h θ ( x ) ≥ 0.5 → y = 1 h θ ( x ) < 0.5 → y = 0 h_\theta(x) \ge 0.5 \rarr y = 1 \\ h_\theta(x) < 0.5 \rarr y = 0 hθ(x)0.5y=1hθ(x)<0.5y=0
那么此处由 Sigmoid 函数的性质可以得到:
θ T x ≥ 0 ⇒ y = 1 θ T x < 0 ⇒ y = 0 \theta^T x \ge 0 \Rightarrow y = 1 \\ \theta^T x < 0 \Rightarrow y = 0 θTx0y=1θTx<0y=0
那么此处根据输入 x x x 来判断输出从当前值跳变到另一个值的边界,即为决策边界。在上面 Sigmoid 函数的实例图中,假设输入函数仅是简单的 z = x z = x z=x,并且认为当 h θ ( x ) ≥ 0.5 h_\theta(x) \ge 0.5 hθ(x)0.5 时,输出 y = 1 y = 1 y=1,那么可以看到, x = 0 x = 0 x=0​ 即为其决策边界。

在更复杂的情况下,假设

θ T x = θ 0 + θ 1 x 1 + θ 2 x 2 \theta^T x = \theta_0 + \theta_1 x_1 + \theta_2 x_2 θTx=θ0+θ1x1+θ2x2

那么通过变形可得到
θ 0 + θ 1 ⋅ x = − θ 2 ⋅ y y = θ 0 + θ 1 ⋅ x θ 2 \theta_0 + \theta_1 \cdot x = - \theta_2 \cdot y \\ y = \frac{\theta_0 + \theta_1 \cdot x}{\theta_2} θ0+θ1x=θ2yy=θ2θ0+θ1x

代价函数

根据模型的代价函数(Cost function)即可根据对当前参数的评估最后找到最优解,逻辑回归的代价函数定义为:
J ( θ ) = 1 m ∑ i = 1 m C o s t ( h θ ( x ( i ) ) , y ( i ) ) C o s t ( h θ ( x ) , y ) = − log ⁡ ( h θ ( x ) )  if  y = 1 C o s t ( h θ ( x ) , y ) = − log ⁡ ( 1 − h θ ( x ) )  if  y = 0 J(\theta) = \frac{1}{m}\sum^m_{i = 1}\mathrm{Cost}(h_\theta(x^{(i)}), y^{(i)}) \\ \begin{align} &\mathrm{Cost}(h_\theta(x), y) = -\log(h_\theta(x)) & \text{ if } y = 1 \\ &\mathrm{Cost}(h_\theta(x), y) = -\log(1 - h_\theta(x)) & \text{ if } y = 0 \\ \end{align} J(θ)=m1i=1mCost(hθ(x(i)),y(i))Cost(hθ(x),y)=log(hθ(x))Cost(hθ(x),y)=log(1hθ(x)) if y=1 if y=0

图 2 Sigmoid 的损失函数

这里可以看出,当 y = 1  and  h θ ( x ) → 0 y = 1 \text{ and } h_\theta(x) \rarr 0 y=1 and hθ(x)0 时,损失函数的值会趋向于无穷,可以直观看到损失函数对模型预测与实际值的差距评估。机器学习的主要目标就是要将损失函数降到最低,以求得最优模型。

梯度下降

通过梯度下降(Gradient descent)找到最优解,首先将代价函数转化为如下形式。不难看出在某一情况时,另一种情况会被化为 0,这样做的目的是方便编程:
C o s t ( h θ ( x ) , y ) = − y log ⁡ ( θ ( x ) ) − ( 1 − y ) log ⁡ ( 1 − h θ ( x ) ) \mathrm{Cost}(h_\theta(x), y) = - y \log(\theta(x)) - (1 - y) \log(1 - h_\theta(x)) Cost(hθ(x),y)=ylog(θ(x))(1y)log(1hθ(x))
那么整个代价函数如下:
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=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]
则可以求出梯度下降迭代的步骤:
θ j : = θ j − α ∂ J ( θ ) ∂ θ j 即  θ j : = θ j − α m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_j := \theta_j - \alpha\frac{\partial{J(\theta)}}{\partial{\theta_j}} \\ \text{即 } \theta_j := \theta_j - \frac{\alpha}{m}\sum^m_{i = 1}(h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)} θj:=θjαθjJ(θ) θj:=θjmαi=1m(hθ(x(i))y(i))xj(i)

Sklearn 逻辑回归模型

数据整理

假设有一份学生的成绩单和大学录取的名单,学生们通过两门考试的两门分数来被决定是否被录取。这是一个两个特征的二分类问题,首先整理一下数据。

data = pd.read_csv('ex2data1.txt', names=['exam1', 'exam2', 'is_admitted'])
print(data.head())

# 将数据拆分成是否录取的两批,绘制散点
positive = data[data['is_admitted'] == 1]
negative = data[data['is_admitted'] == 0]

fig, ax = plt.subplots(figsize=(12, 8))
ax.scatter(positive['exam1'], positive['exam2'], s=50, c='b', alpha=0.5, label='Admitted')
ax.scatter(negative['exam1'], negative['exam2'], s=50, c='r', alpha=0.5, label='Not Admitted')
ax.legend()
ax.set_xlabel('Exam 1 Score')
ax.set_ylabel('Exam 2 Score')
plt.show()
       exam1      exam2  admitted
0  34.623660  78.024693         0
1  30.286711  43.894998         0
2  35.847409  72.902198         0
3  60.182599  86.308552         1
4  79.032736  75.344376         1

图 3 数据预览

逻辑回归模型

这里将从上面读取的数据传递给定义的逻辑回归的模型,并训练得到模型参数。

X = data[['exam1', 'exam2']].values
Y = data['is_admitted'].values

# 定义并训练模型
model = LogisticRegression()
model.fit(X, Y)

print("Model Coefficients:", model.coef_)
print("Intercept:", model.intercept_)
Model Coefficients: [[0.20535491 0.2005838 ]]
Intercept: [-25.05219314]

验证

验证模型的准确性,首先从模型中取出相关参数,即为 θ \theta θ 。这里需要说明一下数学模型中与 Sklearn 逻辑回归模型的属性,首先求出决策边界:
y = θ 0 + θ 1 ⋅ x θ 2 y = \frac{\theta_0 + \theta_1 \cdot x}{\theta_2} y=θ2θ0+θ1x
这里 θ 0 \theta_0 θ0 为偏置, θ 1 \theta_1 θ1 θ 2 \theta_2 θ2 是每个特征的系数。两者分别对应了两个属性。

coef = model.coef_[0]
intercept = model.intercept_[0]
x = np.linspace(30, 100, 1000)
y = -(coef[0] * x + intercept) / coef[1]

fig, ax = plt.subplots(figsize=(12, 8))
ax.scatter(positive['exam1'], positive['exam2'], s=50, c='b', alpha=0.5, label='Admitted')
ax.scatter(negative['exam1'], negative['exam2'], s=50, c='r', alpha=0.5, label='Not Admitted')
ax.plot(x, y, label='Decision Boundary', c='grey')
ax.legend()
ax.set_xlabel('Exam 1 Score')
ax.set_ylabel('Exam 2 Score')
plt.show()

最后可以看出决策边界较好的分割了两类点集。

图 4 决策边界

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot 自定义属性

Spring Boot 自定义属性 在 Spring Boot 应用程序中&#xff0c;application.yml 是一个常用的配置文件格式。它允许我们以层次化的方式组织配置信息&#xff0c;并且比传统的 .properties 文件更加直观。 本文将介绍如何在 Spring Boot 中读取和使用 application.yml 中的配…

1.2第1章DC/DC变换器的动态建模-1.2Buck-Boost 变换器的交流模型--电力电子系统建模及控制 (徐德鸿)--读书笔记

1.2 Buck-Boost 变换器的交流模型 Buck- Boost变换器是一种典型的DC/DC变换器&#xff0c;具有升压和降压功能其输出电压的极性与输入电压相反&#xff0c;见图1-4a。当电感L的电流i(t)连续时一个开关周期可以分为两个阶段。在阶段1&#xff0c;开关在位置1时&#xff0c;即&am…

数据结构:二叉树—面试题(一)

目录 1、相同的树 2、另一棵树的子树 3、翻转二叉树 4、平衡二叉树 5、对称二叉树 6、二叉树遍历 7、二叉树的分层遍历 1、相同的树 习题链接https://leetcode.cn/problems/same-tree/description/ 描述&#xff1a; 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一…

LangChain概述

文章目录 为什么需要LangChainLLM应用开发的最后1公里LangChain的2个关键词LangChain的3个场景LangChain的6大模块 为什么需要LangChain 首先想象一个开发者在构建一个LLM应用时的常见场景。当你开始构建一个新项目时&#xff0c;你可能会遇到许多API接口、数据格式和工具。对于…

Java基于SSM框架的互助学习平台小程序【附源码、文档】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

lightweight-charts-python 包 更新 lightweight-charts.js 的方法

lightweight-charts-python 是 lightweight-charts.js 的 python 包装&#xff0c;非常好用 lightweight-charts 更新比较频繁&#xff0c;导致 lightweight-charts-python 内置的 lightweight-charts 经常不是最新的。 新的 lightweight-charts 通常可以获得性能改进和bug修复…

React第二十七章(Suspense)

Suspense Suspense 是一种异步渲染机制&#xff0c;其核心理念是在组件加载或数据获取过程中&#xff0c;先展示一个占位符&#xff08;loading state&#xff09;&#xff0c;从而实现更自然流畅的用户界面更新体验。 应用场景 异步组件加载&#xff1a;通过代码分包实现组件…

解决报错“The layer xxx has never been called and thus has no defined input shape”

解决报错“The layer xxx has never been called and thus has no defined input shape”(这里写自定义目录标题) 报错显示 最近在跑yolo的代码时遇到这样一个错误&#xff0c;显示“the layer {self.name} has never been called”.这个程序闲置了很久&#xff0c;每次一遇到…

【AI论文】FilmAgent: 一个用于虚拟3D空间中端到端电影制作自动化的多智能体框架

摘要&#xff1a;虚拟电影制作涉及复杂的决策过程&#xff0c;包括剧本编写、虚拟摄影以及演员的精确定位和动作设计。受近期基于语言智能体社会的自动化决策领域进展的启发&#xff0c;本文提出了FilmAgent&#xff0c;这是一个新颖的、基于大型语言模型&#xff08;LLM&#…

hive:数据导入,数据导出,加载数据到Hive,复制表结构

hive不建议用insert,因为Hive是建立在Hadoop之上的数据仓库工具&#xff0c;主要用于批处理和大数据分析&#xff0c;而不是为OLTP&#xff08;在线事务处理&#xff09;操作设计的。INSERT操作会非常慢 数据导入 命令行界面:建一个文件 查询数据>>复制>>粘贴到新…

VUE之路由Props、replace、编程式路由导航、重定向

目录 1、路由_props的配置 2、路由_replaces属性 3、编程式路由导航 4、路由重定向 1、路由_props的配置 1&#xff09;第一种写法&#xff0c;将路由收到的所有params参数作为props传给路由组件 只能适用于params参数 // 创建一个路由器&#xff0c;并暴露出去// 第一步…

【开源免费】基于Vue和SpringBoot的社区智慧养老监护管理平台(附论文)

本文项目编号 T 163 &#xff0c;文末自助获取源码 \color{red}{T163&#xff0c;文末自助获取源码} T163&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

excel如何查找一个表的数据在另外一个表是否存在

比如“Sheet1”有“张三”、“李四”“王五”三个人的数据&#xff0c;“Sheet2”只有“张三”、“李四”的数据。我们通过修改“Sheet1”的“民族”或者其他空的列&#xff0c;修改为“Sheet2”的某一列。这样修改后筛选这个修改的列为空的或者为出错的&#xff0c;就能找到两…

当AI学会“顿悟”:DeepSeek-R1如何用强化学习突破推理边界?

开篇&#xff1a;一场AI的“青春期叛逆” 你有没有想过&#xff0c;AI模型在学会“推理”之前&#xff0c;可能也经历过一段“中二时期”&#xff1f;比如&#xff0c;解题时乱写一通、语言混搭、答案藏在火星文里……最近&#xff0c;一支名为DeepSeek-AI的团队&#xff0c;就…

(Java版本)基于JAVA的网络通讯系统设计与实现-毕业设计

源码 论文 下载地址&#xff1a; ​​​​c​​​​​​c基于JAVA的网络通讯系统设计与实现(源码系统论文&#xff09;https://download.csdn.net/download/weixin_39682092/90299782https://download.csdn.net/download/weixin_39682092/90299782 第1章 绪论 1.1 课题选择的…

STM32调试手段:重定向printf串口

引言 C语言中经常使用printf来输出调试信息&#xff0c;打印到屏幕。由于在单片机中没有屏幕&#xff0c;但是我们可以重定向printf&#xff0c;把数据打印到串口&#xff0c;从而在电脑端接收调试信息。这是除了debug外&#xff0c;另外一个非常有效的调试手段。 一、什么是pr…

基于Flask的哔哩哔哩评论数据可视化分析系统的设计与实现

【Flask】基于Flask的哔哩哔哩评论数据可视化分析系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统可以搜索查看作者、播放量、评论等相关信息&#xff0c;并将相关的分析…

YOLO目标检测4

一. 参考资料 《YOLO目标检测》 by 杨建华博士 本篇文章的主要内容来自于这本书&#xff0c;只是作为学习记录进行分享。 二. 环境搭建 (1) ubuntu20.04 anaconda安装方法 (2) 搭建yolo训练环境 # 首先&#xff0c;我们建议使用Anaconda来创建一个conda的虚拟环境 conda cre…

​ONES 春节假期服务通知

ONES 春节假期服务通知 灵蛇贺岁&#xff0c;瑞气盈门。感谢大家一直以来对 ONES 的认可与支持&#xff0c;祝您春节快乐&#xff01; 「2025年1月28日 &#xff5e; 2025年2月4日」春节假期期间&#xff0c;我们的值班人员将为您提供如下服务 &#xff1a; 紧急问题 若有紧急问…

Redis部署方式全解析:优缺点大对比

Redis部署方式全解析&#xff1a;优缺点大对比 一、引言 Redis作为一款高性能的内存数据库&#xff0c;在分布式系统、缓存、消息队列等众多场景中都有着广泛的应用。选择合适的Redis部署方式&#xff0c;对于系统的性能、可用性、可扩展性以及成本等方面都有着至关重要的影响…