机器学习算法系列(三)

news2024/10/2 6:35:29

机器学习算法之–对数几率回归(逻辑斯蒂回归)算法

上个算法(算法系列二)介绍了如何使用线性模型进行回归学习,但若要做的是分类任务,则需要找一个单调可微函数将分类任务的真实标记y与线性回归模型的预测值联系起来。

虽然名字叫回归,但其实是分类学习方法

一、算法原理

对于给定的输入实例x,可求出P(Y=0|x)和P(Y=1|x)的条件概率值的大小比较,将实例x分到概率值较大的那一类。

1.1、预测函数

找出一个预测函数模型,输出值在[0,1]之间。接着,再选择一个基准值(例如0.5),若预测值》0.5,则预测为1;否则预测为0;【二分类问题】

我们可选择: g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+ez1作为预测函数。
该函数称为Sigmoid函数,也可称作Logistic函数(名称由来),其图形如下

图中可以看出:

  • z=0:g(z) = 0.5
  • z>0:g(z) > 0.5,当z越来越大时,g(z)无限接近于1。
  • z<0:g(z) < 0.5,当z越来越小时,g(z)无限接近于0。

显然,这正符合我们想要的分类方式。

我们再结合线性回归的预测函数 h θ ( x ) = θ T x h_\theta(x)=\theta^Tx hθ(x)=θTx,则逻辑斯蒂回归算法的预测函数如下: r = h θ ( x ) = g ( z ) = g ( θ T x ) = 1 1 + e − θ T x r=h_\theta(x)=g(z)=g(\theta^Tx)=\frac{1}{1+e^{-\theta^Tx}} r=hθ(x)=g(z)=g(θTx)=1+eθTx1

此处求解的是在输入x,参数θ的前提下,y=1的概率,用概率论公式可表示为 h θ ( x ) = P ( y = 1 ∣ x , θ ) h_\theta(x)=P(y=1|x,\theta) hθ(x)=P(y=1∣x,θ)
且必有: P ( y = 1 ∣ x , θ ) + P ( y = 0 ∣ x , θ ) = 1 P(y=1|x,\theta)+P(y=0|x,\theta)=1 P(y=1∣x,θ)+P(y=0∣x,θ)=1

r为正例可能性,1-r是其反例可能性,二者比值 r 1 − r \frac{r}{1-r} 1rr称为“几率”,反映了x作为正例的相对可能性,进一步对几率取对数,则得到“对数几率” l n r 1 − r ln\frac{r}{1-r} ln1rr
在二分类中,这是一个非黑即白的世界

实际上,这是在用线性回归模型的预测结果去逼近真是标记的对数几率,因此成为对数几率回归

对于

算法优点:

  • 直接对分类可能性进行建模,无需事先假设数据分布
  • 可得到近似概率预测
  • 求解的目标函数是任意阶可导凸函数,数学性质very good

1.2、参数估计(如何计算θ)

在训练过程中,算法通过最大化似然函数求解θ。具体来说,似然函数表示的是P(Y|X)的条件概率。统计学家通常使用“最大似然估计”方法来进行参数估计。这种方法就是求解参数W,使得模型的似然函数在已知观测数据下最大。
l n P ( y = 1 ∣ x ) 1 − P ( y = 0 ∣ x ) = θ T x = w x ln\frac{P(y=1|x)}{1-P(y=0|x)} = \theta^Tx=wx ln1P(y=0∣x)P(y=1∣x)=θTx=wx

也就是说,在逻辑回归中,输出y=1的对数几率是输入x的线性函数
显然有, P ( y = 1 ∣ x ) = e θ T x 1 + e θ T x P ( y = 0 ∣ x ) = 1 1 + e θ T x P(y=1|x)=\frac{e^{\theta^Tx}}{1+e^{\theta^Tx}}\\P(y=0|x)=\frac{1}{1+e^{\theta^Tx}} P(y=1∣x)=1+eθTxeθTxP(y=0∣x)=1+eθTx1

设: P ( y = 1 ∣ x ) = π ( x ) , P ( y = 0 ∣ x ) = 1 − π ( x ) P(y=1|x)=\pi(x), P(y=0|x)=1-\pi(x) P(y=1∣x)=π(x),P(y=0∣x)=1π(x)
于是可以通过极大似然估计来估计模型参数,似然函数为
∏ i = 1 n [ π ( x i ) ] y i [ 1 − π ( x ) ] 1 − y i \prod_{i=1}^n[\pi(x_i)]^{y^i}[1-\pi(x)]^{1-y^i} i=1n[π(xi)]yi[1π(x)]1yi
对数似然函数为 L ( w ) = ∑ i = 1 n [ y i l o g π ( x i ) + ( 1 − y i ) l o g ( 1 − π ( x ) ) ] L(w)=\sum_{i=1}^n[y_ilog\pi(x_i)+(1-y_i)log(1-\pi(x))] L(w)=i=1n[yilogπ(xi)+(1yi)log(1π(x))]

  • 成本函数(所有样本的成本平均值):- 1 n L ( w ) \frac{1}{n}L(w) n1L(w)

L ( w ) 求极值,便可得到 w 的估计值,问题也就变成了第一对数似然函数为目标的最优化问题 L(w)求极值,便可得到w的估计值,问题也就变成了第一对数似然函数为目标的最优化问题 L(w)求极值,便可得到w的估计值,问题也就变成了第一对数似然函数为目标的最优化问题

二、模型优化

2.1、梯度下降算法、

根据梯度下降算法定义,可以得到
θ j = θ j − α ∂ J ( θ ) ∂ θ j \theta_j=\theta_j-\alpha\frac{\partial J(\theta)}{\partial \theta_j} θj=θjαθjJ(θ)
此处关键是求成本函数的偏导数,最终得到梯度下降算法公式
θ j = θ j − α 1 m ∑ i = 1 m ( ( h ( x i ) − y i ) x j i ) \theta_j= \theta_j-\alpha\frac{1}{m}\sum_{i=1}^m ((h(x^i)-y^i)x_j^i) θj=θjαm1i=1m((h(xi)yi)xji)

注意此处的形式和线性回归算法的参数迭代公式是一样的,但数值计算方法完全不同
逻辑: h θ ( x ) = 1 1 + e − θ T x h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}} hθ(x)=1+eθTx1
线性: h θ ( x ) = θ T x h_\theta(x)=\theta^Tx hθ(x)=θTx

*除了梯度下降算法之外,还有拟牛顿法等都可以求得其最优解

三、多元分类

逻辑回归可以解决二分类问题,那如果需要分类的超过了两个类别呢?显然也是也以应对的。

假设总共有n+1个类别,y={0,1,2,3,…,n},思路是转化为二元分类

  • 类别一:0,类别二:1~n,分别计算概率;
  • 类别一:1,类别二:0,2~n,再分别计算概率;
  • 类别一:n,类别二:0~n-1,再分别计算概率。

由此可见,总共需要n+1个预测函数,分别计算P(y=0|x,θ),…,P(y=n|x,θ)

  • 最后预测值: p r e d i c t i o n = m a x i ( h θ ( i ) ( x ) ) prediction=max_i(h_\theta^{(i)}(x)) prediction=maxi(hθ(i)(x))

预测出概率最高的哪个类别,就是样本所属类别

四、正则化

  • 采用正则化可以用来解决模型过拟合问题
  • 保留所有的特征,减少特征的权重 θ j \theta_j θj的值,确保所有的特征对预测值都有少量的贡献。
    当每个特征Xi对预测值Y都有少量的贡献时,这样的模型可以良好的工作,这就是正则化的目的。

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

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

相关文章

Scons自动大型系统构建工具

1、先了解一下make 在Linux系统上做过c/c++开发的同学们都知道一个项目工程管理工具:make和Makefile。 make 这个工具自上个世纪 70 年代 Stuart Feldman 在贝尔实验室开发出以来,就一直是类 UNIX 程序员的最爱之一。 通过检查文件的修改时间,make 工具可以知道编译目标文…

关于原子服务的思考

在我们以往的工作中经常会遇到“原子服务”或“原子化服务”的概念&#xff0c;如果没有一个清晰的概念边界&#xff0c;会使大家的沟通和讨论无法在同一个共识上展开&#xff0c;大家不在同一频道上&#xff0c;割裂于不同的领域空间&#xff0c;难以产生一致性的进展。那么&a…

SAR ADC系列26:系统设计

目录 串一下知识点&#xff1a; 设计一个高速异步SAR ADC 设计目标&#xff1a; 电路架构&#xff1a;&#xff08;具体电路看前文&#xff09; 采样网络&#xff1a; 采样电容&#xff1a; CDAC开关切换策略&#xff1a; CDAC阵列冗余设计&#xff1a; SAR 逻辑 比…

谈谈内存模型happen-before讲的什么?

大家好我是易安&#xff01; 今天我要讲述的是Java内存模型中的happen-before。 Java语言在设计之初就引入了线程的概念&#xff0c;以充分利用现代处理器的计算能力。多线程机制既带来了强大、灵活的优势&#xff0c;也带来了线程安全等令人混淆的问题。在这种情况下&#xff…

二叉查找树

目录 一、二叉查找树概念 二、结点内部类代码实现&#xff1a; 三、二叉查找树的插入原理​编辑 四、遍历的方式&#xff08;中序遍历&#xff09;&#xff1a; 五、二叉查找树实现指定值删除对应的结点 六、main方法测试 一、二叉查找树概念 二、结点内部类代码实现&…

聚类问题的算法总结

目录 一、K-means算法 1、算法原理 2、如何确定K值 3、算法优缺点 二、DBScan聚类 1、算法原理 2、处理步骤 3、算法优缺点 聚类代码实现 聚类算法属于无监督学习&#xff0c;与分类算法这种有监督学习不同的是&#xff0c;聚类算法事先并不需要知道数据的类别标签&am…

高效释放数据价值,数智融合平台有门道

在数字经济时代&#xff0c;数据上升为新的关键生产要素&#xff0c;逐渐超越土地、资本等传统要素&#xff0c;成为社会经济发展和企业创新更加重要的驱动力。 但如何充分释放数据价值在当下依然是一个世界性难题。一方面&#xff0c;企业与组织逐渐拥有海量数据规模和丰富应…

基于CBC、ECB、CTR、OCF、CFB模式的AES加密算法

1、什么是AES加密算法 什么是加密算法&#xff1f;我在文章《从个人角度看什么是加密算法》中描述了我对加密算法的一些浅薄的理解。我不是信息安全领域的大神&#xff0c;只求有一个入门罢了&#xff01; 这篇文章是文章《从个人角度看什么是加密算法》的延伸&#xff0c;所…

【C++初阶】:缺省函数和函数重载

c入门一.缺省函数二.函数重载1.参数类型不同2.参数个数不同3.参数顺序不同一.缺省函数 缺省函数&#xff0c;顾名思义就是可以在传参时不传或者少传参数的函数。这里举个例子&#xff1a; 完全缺省 上面的就属于全缺省&#xff0c;可以不传任何参数&#xff0c;当然也可以传参…

Codeforces Round 862 (Div. 2) -- D. A Wide, Wide Graph(树的直径 贪心 简单的树形dp)

题目如下&#xff1a; 题意简说&#xff1a; 树上两点 u,vu, vu,v&#xff0c;如果 u,vu, vu,v 的距离大于等于 kkk 则在图 GkG_kGk​ 上 u,vu, vu,v 有一条无向边。 求当 kkk 等于 [1, n] 的时候&#xff0c;图 GkG_kGk​ 的连通块数量。 思路 or 题解&#xff1a; 我们可以…

【服务器】Dell PowerEdge R750 安装GPU

各种教程 官方教程 https://www.dell.com/support/manuals/zh-cn/poweredge-r750/per750_ism_pub/%E5%AE%89%E8%A3%85-gpu?guidguid-6bb1c301-7595-4c6d-b631-b6a5761c6052&langzh-cn 手册PDF版&#xff1a; https://dl.dell.com/content/manual16153190-dell-emc-powe…

OKR与敏捷开发的结合

当你想达成某件事情时&#xff0c;你在内心会有一个设想的期望结果。这是一个非常简单、基本的概念&#xff0c;并且是从很多人小时候就培养起来的。我们可以将这种现象总结一句话&#xff1a; 通过 ________ 来衡量__________ 。 这就是 John Doerr 在其著作《Measure what Ma…

JavaWeb开发 —— Maven

目录 一、概述 1. 介绍 2. 安装 二、maven-idea 集成 1. 配置及创建Maven项目 2. IDEA 创建Maven项目 3. IDEA导入 Maven 项目 三、依赖管理 1. 依赖配置 2. 依赖传递 3. 依赖范围 4. 生命周期 一、概述 1. 介绍 ① Apache Maven 是一个项目管理和构建工…

【UDP报文和TCP协议特性】

目录1.UDP报文1.1报文长度1.2校验和2.TCP协议特性2.1确认应答2.2超时重传2.3连接管理2.3.1三次握手2.3.2四次挥手2.4滑动窗口2.5流量控制2.6拥塞控制2.7延时应答2.8捎带应答2.9面向字节流2.10异常情况3.小结3.1tcp小结3.2tcp和UDp应用场景的差异4.寄语1.UDP报文 udp是传输层最…

【Android】之【内存管理】

一、Android内存运行是如何运行的&#xff1f; 物理内存即移动设备上的ram&#xff0c;当启动一个android程序时&#xff0c;会启动一个dalvik vm进程&#xff0c;系统会给它分配固定的内存空间【16m,32m,64m,不定&#xff0c;没有统一标准&#xff0c;每个虚拟机会有堆内存阈…

【Minecraft开服教程】使用 MCSM 面板一键搭建我的世界服务器,并内网穿透公网远程联机

文章目录前言1.Mcsmanager安装2.创建Minecraft服务器3.本地测试联机4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射内网端口5.远程联机测试6. 配置固定远程联机端口地址6.1 保留一个固定TCP地址6.2 配置固定TCP地址7. 使用固定公网地址远程联机前言 MCSManager是一个开源…

C++ float 数据的保存格式

总体上&#xff0c;在计算机中&#xff0c; float 数据的的保存按照如下转换逻辑&#xff1a;10进制数 >二进制数>科学计数法二进制数>c 条件下下浮点数在内存中的保存格式&#xff08;这里面有个转换算法&#xff0c;需要理清楚&#xff09;。 下面举出一个案例&…

Python+selenium自动化测试实战项目(全面,完整,详细)

前言 之前的文章说过&#xff0c; 要写一篇自动化实战的文章&#xff0c; 这段时间比较忙再加回家过清明一直没有更新&#xff0c;今天整理一下实战项目的代码共大家学习。&#xff08;注:项目是针对我们公司内部系统的测试&#xff0c;只能内部网络访问&#xff0c;外部网络无…

使用fetch()异步请求API数据实现汇率转换器

任务8 https://segmentfault.com/a/1190000038998601 https://chinese.freecodecamp.org/news/how-to-master-async-await-with-this-real-world-example/ 跟随上面的指示&#xff0c;理解异步函数的编写&#xff0c;并且实现这个汇率转换器。 第一步&#xff1a;在工作区初始…

AI失业潮来袭,某些部门裁员过半

历史的车轮滚滚向前&#xff0c;每次生产力的大幅跃进&#xff0c;都会造成一批失业潮。想当年&#xff0c;纺纱机的出现让无数手工作坊的织布师傅失业。如今&#xff0c;在AI技术的催化下&#xff0c;同样的事正在互联网行业的各个领域重演。疯狂的裁员浪潮 “AI15秒做的&…