逻辑回归算法原理

http://ihoge.cn/2018/LR.html

逻辑回归模型

逻辑回归也被称为对数几率回归,算法名虽然叫做逻辑回归,但是该算法是分类算法,个人认为这是因为逻辑回归用了和回归类似的方法来解决了分类问题。

逻辑回归模型是一种分类模型,用条件概率分布的形式表示 P(Y|X)P(Y|X),这里随机变量 X 取值为 n 维实数向量,例如x=(x(1),x(2),...,x(n))x=(x(1),x(2),...,x(n)),Y 取值为 0 或 1。即:

P(Y=1|x)=exp(wx+b)1+exp(wx+b)P(Y=1|x)=exp⁡(w⋅x+b)1+exp⁡(w⋅x+b)

P(Y=0|0)=11+exp(wx+b)P(Y=0|0)=11+exp⁡(w⋅x+b)

或:

ϕ(x)=11+ewTxbϕ(x)=11+e−wTx−b

假设有一个二分类问题,输出为y{0,1}y∈{0,1},二线性回归模型z=wTx+bz=wTx+b是个实数值,我们希望有一个理想的阶跃函数来帮我什么实现z值到0/1值的转化,于是找到了Sigmoid函数来代替:

g(z)=11+ezg(z)=11+e−z

有了 Sigmoid 函数之后,由于其值取值范围在[0,1]。就可以将其视为类 1 的后验概率估计 p(y=1|X)p(y=1|X)。说白了,就是如果有了一个测试点 x,那么就可以用Sigmoid函数算出来的结果当作该点 x 属于类别 1 的概率大小。

于是,非常自然地,我们把 Sigmoid 函数计算得到的值大于等于0.5的归为类别1,小于0.5的归为类别0:

逻辑函数的损失函数

接下来要做的就是根据给定的训练集,把参数 w 给求出来了。要找参数 w,首先就得把代价函数(Cost Function)给定义出来,也就是目标函数。

我们第一个想到的自然是模仿线性回归的做法,利用误差平方和来当代价函数:

J(θ)=12mi=0m(ϕ(xi)yi)2J(θ)=12m∑i=0m(ϕ(xi)−yi)2

这时将预测函数 g(z(i))=11+ex(i)g(z(i))=11+e−x(i)代入损失函数的话,会发现这是一个非凸函数,这意味着代价函数有着许多的局部最小值,这不利于我们求解:


那么我们不妨来换一个思路解决这个问题。前面,我们提到了 ϕ(z) 可以视为类1的后验估计,所以我们有:

其中 p(y=1|x;w)p(y=1|x;w) 表示给定 w,那么 x 点 y=1 的概率大小。于是上面两式可以写成一般形式:

注:以上的过程说明,最大似然估计与误差平方和等价!这就是为什么逻辑回归的损失函数可以用最大似然函数进行估计的原因。

接下来我们就要用极大似然估计来根据给定的训练集估计出参数 w:

为了简化运算,我们对上面这个等式的两边都取一个对数:

我们现在要求的是使得 l(w) 最大的 w。没错,我们的代价函数出现了,我们在 l(w) 前面加个负号不就变成就最小了吗?不就变成我们代价函数了吗?

为了更好地理解这个代价函数,我们不妨拿一个例子的来看看:

也就是说:

下面是函数图:

从图中不难看出,如果样本的值是1的话,估计值 ϕ(z) 越接近1付出的代价就越小,反之越大;同理,如果样本的值是0的话,估计值 ϕ(z) 越接近0付出的代价就越小,反之越大。

逻辑回归的模型求解

在开始梯度下降之前,要这里插一句,Sigmoid function 有一个很好的性质就是 :

ϕ(z)=ϕ(z)(1ϕ(z))ϕ′(z)=ϕ(z)(1−ϕ(z))

这个后续会用到。

还有,我们要明确一点,梯度的负方向就是代价函数下降最快的方向:这里来解释下。借助泰勒公式展开,有:

其中,f′(x) 和 δ 为向量,那么这两者的内积就等于:

当 θ=π 时,也就是 δ 在 f′(x) 的负方向上时,取得最小值,也就是下降的最快的方向了。
于是有:

即:

其中,wjwj 表示第 j 个特征的权重;η 为学习率,用来控制步长。 重点来了:

所以,在使用梯度下降法更新权重时,只要根据下式即可:

此式与线性回归时更新权重用的式子极为相似,也许这也是逻辑回归要在后面加上回归两个字的原因吧。当然,在样本量极大的时候,每次更新权重会非常耗费时间,这时可以采用随机梯度下降法,这时每次迭代时需要将样本重新打乱,然后用下式不断更新权重:

也就是去掉了求和,而是针对每个样本点都进行更新。

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

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

相关文章

.net core入门之web应用

2019独角兽企业重金招聘Python工程师标准>>> 其实铺垫了那么久,终于到重点了,迫不及待了吧,那么我们用重量级工具Visual Studio 2015,安装Update3, 安装DotNetCore.1.0.1-VS2015Tools.Preview2.0.2.exe&…

python里split_python中split()的用法

原博文 2018-10-19 15:15 − Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则仅分隔 num 个子字符串。 语法: str.split(str"", numstring.count(str)) str -- 分隔符,默认为所有的空字符&…

设计模式之-命令模式(Command Pattern)

命令模式(Command Pattern)是用来实现在一个请求 - 响应模型松耦合。在命令模式中,请求被发送给调用者和调用它传递给被封装的命令对象。 Command对象将请求传递到接收器的适当的方法来执行特定操作。客户端程序创建接收器对象,然…

android -上传文件到服务器

android上传文件到服务器 重点:最好是设置好content-type这些参数的配置! package com.spring.sky.image.upload.network; import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.Inp…

梯度下降法、随机梯度下降法、批量梯度下降法及牛顿法、拟牛顿法、共轭梯度法

http://ihoge.cn/2018/GradientDescent.html http://ihoge.cn/2018/newton1.html 引言 李航老师在《统计学习方法》中将机器学习的三要素总结为:模型、策略和算法。其大致含义如下: 模型:其实就是机器学习训练的过程中所要学习的条件概率…

浅谈.NET 6 中 gRPC 的最新功能

gRPC 是一个现代的、跨平台的、高性能的 RPC 框架。gRPC 是构建在 ASP.NET Core 之上,也是我们推荐的使用 .NET 构建 RPC 服务的方法。.NET 6 进一步提高了 gRPC 已经非常出色的性能,并添加了一系列新功能,使 gRPC 在现代云原生应用程序中比以…

如果你没有时间读书,至少要保留这个习惯

全世界只有3.14 % 的人关注了爆炸吧知识快节奏的生活中,如何花费少量的时间,就可以让自己的生活发生好的改变?知乎上有一个高赞回答:大量阅读优质文章。见识决定了你的眼界,站得越高,看得越多,你…

C++ 标准模板库

转载于:https://www.cnblogs.com/Flyzhcong/p/3977865.html

.NET Conf 2021 回顾

.NET Conf 2021是有史以来规模最大的.NET Conf,全球演讲者举办了80多场会议!我们非常感谢所有收看直播、在分享会上的提问、参与我们的乐趣和游戏的人。学习将持续到1月底,社区活动将持续进行,所以一定要查看这些活动,并关注我们的会议 GitHu…

男厕改女厕能多敷衍......

1 搓澡时最好不要闲聊(素材来源网络,侵删)▼2 弟弟需要充电多久才能回家?(素材来源网络,侵删)▼3 这都什么野史?▼4 脚崴了怎么办?▼5 钥匙在老地方▼6 被红绿灯伤透…

《Single Image Haze Removal Using Dark Channel Prior》一文中图像去雾算法的原理、实现、效果(速度可实时)...

最新的效果见 :http://video.sina.com.cn/v/b/124538950-1254492273.html 可处理视频的示例:视频去雾效果 在图像去雾这个领域,几乎没有人不知道《Single Image Haze Removal Using Dark Channel Prior》这篇文章,该文是2009年C…

python 运算符重载_Python3面向对象-运算符重载

1:运算符重载介绍运算符重载,就是在某个类的方法中,拦截其内置的操作(比如:,-,*,/,比较,属性访问,等等),使其实例的行为接近内置类型。当类的实例出现在内置操…

docker Failed to get D-Bus connection 报错

在centos7的容器里面出现了一个BUG,就是serveice启动服务的时候出现报错,不能用service启动服务。[roote13c3d3802d0 /]# service httpd startRedirecting to /bin/systemctl start httpd.serviceFailed to get D-Bus connection: Operation not permit…

牛顿法、拟牛顿法、高斯-牛顿法、共轭梯度法推导总结

原文:http://ihoge.cn/2018/newton1.html 前言: 线性最小二乘问题,我们可以通过理论推导可以得到其解析解,但是对于非线性最小二乘问题,则需要依赖迭代优化的方法,牛顿算法是解决非线性最优的常见算法之一…

不用变量交换2个值

题目: 不使用变量交换2个值 代码如下: #include <iostream> using namespace std;int main() { int a = 3;int b = 4;cout<<"a="<<a<<endl;cout<<"b="<<b<<endl;a = a ^ b;b = a ^ b;a = a ^ b;cout<&…

基于事件驱动架构构建微服务第16部分:Azure Active Directory B2C

原文链接: https://logcorner.com/building-micro-services-through-event-driven-architecture-part16-azure-active-directory-b2c/在本教程中&#xff0c;我将展示如何通过使用Azure AD B2C启用Oauth2和OpenId Connect来保护微服务。Azure Active Directory B2C将B2C身份认证…

java 栈和队列实现迷宫代码_LeetCode每日一题--剑指 Offer 09. 用两个栈实现队列(Java)

DailyChallenge剑指 Offer 09. 用两个栈实现队列Easy20200630Description用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和 deleteHead &#xff0c;分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素&#xff0c;d…

提升方法之AdaBoost算法

提升方法之AdaBoost算法 作为非数学专业出身看到密密麻麻的数学公式刚开始真的是非常头疼。算法的物理逻辑的时候尚能理解&#xff0c;但是涉及到具体的数学公式实现就开始懵逼了&#xff1a;为什么要用这个公式&#xff0c;这个公式是怎么推到的&#xff0c;这个公式达到什么…