逻辑回归
来源:互联网 发布:怎样参加淘宝抢购 编辑:程序博客网 时间:2024/06/13 00:31
[原创] 用人话解释机器学习中的Logistic Regression(逻辑回归)
转载请注明出处:http://www.codelast.com/
友情提示:如果觉得页面中的公式显示太小,可以放大页面查看(不会失真)。
Logistic Regression(或Logit Regression),即逻辑回归,简记为LR,是机器学习领域的一种极为常用的算法/方法/模型。
你能从网上搜到十万篇讲述Logistic Regression的文章,也不多我这一篇,但是,就像我写过的最优化系列文章一样,我仍然试图用“人话”来再解释一遍——可能不专业,但是容易看得懂。那些一上来就是几页数学公式什么的最讨厌了,不是吗?
所以这篇文章是写给完全没听说过Logistic Regression的人看的,我相信看完这篇文章,你差不多可以从无到有,把逻辑回归应用到实践中去。
Logistic Regression是一种分类算法。分类,也就是把一个群体(或问题,或数据)分为几个类别,例如,男/女/人妖;爱她的人/不爱她的人;今天会下雨/今天不会下雨。
Logistic Regression最常用于处理“二分类”问题,也就是说分类只有两个,像“爱她的人/不爱她的人”就是二分类,而“男/女/人妖”就不是二分类。当然,Logistic Regression也可以用于处理多分类问题,即所谓的“多分类逻辑回归”(Multiclass Logistic Regression),但本文并不涉及这个方面。
所以,说得简单点就是,给你一条数据,用Logistic Regression可以判断出这条数据应该被分到两个类别中的哪个中去。
文章来源:http://www.codelast.com/
Logistic Regression在现实世界中非常有用。例如,可以用它来判断一个用户是否会点击一个广告(会点击/不会点击),可以用Logistic Regression来判断两类人是否会相爱(会相爱/不会相爱),等等。
机器学习的主旨就是通过对历史数据的计算(即“学习”),得到一些未知参数的值,从而可以推断出新数据会有什么结论。例如一个非常简单的函数:
(1, 5.5)
(1.5, 7)
(2, 6.5)
我们怎样能够预测一个未知的自变量
显然我们的任务就是计算出两个未知参数
文章来源:http://www.codelast.com/
Logistic Regression也是类似,我们有一个函数
由于现实世界是复杂的,因变量
现在给我们一堆
但是这个函数是什么呢?如下:
其中,
文章来源:http://www.codelast.com/
那么,这个略显奇怪的函数是怎么来的呢?
首先我们看
但是这个加权求和的结果是在
通过这个WiKi页面你可以知道,其实所谓的逻辑函数,就是这样的一个函数:
这个函数是由 Pierre François Verhulst(皮埃尔·弗朗索瓦·韦吕勒)在1844~1845年的时候给它起的名字。而我们上面的函数(1),就是这个形式。
逻辑函数的图像是这个样子的:
它的函数值刚好就是在(0,1)之间。
所以,我们通过逻辑函数,就可以计算出一个事件的概率了((0,1)之间)。但是不要忘了,我们前面说要处理二分类问题,得到一个(0,1)之间的任意值并不能归到两个分类中的一个里去,所以还要把这个概率值“归类”。其实这里很简单,我们可以在
在各种机器学习的文章中,你都会看到,它们给了逻辑函数一个常用的名字:Sigmoid函数。sigmoid,意为“S形的”,这正符合其函数图像特点,所以大家记住就行了。
文章来源:http://www.codelast.com/
现在,我们已经有了函数,下一步任务就是求出函数表达式中的未知参数向量
以前面讲过的函数
你会发现,当已知几组
(1, 5.5)
(1.5, 7)
(2, 6.5)
你无论如何也不可能找到一对
这条直线如果要精确地通过其中的两个点,那么就不能通过第三个点。所以,最终求出来的
因此,问题在于,我们如何画一条直线,使得其是“最优”的?“最优”的评判标准是什么?
文章来源:http://www.codelast.com/
为了理解“最优”,我们需要先了解一些概念。
- 损失函数/Loss Function/代价函数/Cost Function
按WiKi的定义:
In mathematical optimization, statistics, decision theory and machine learning, a loss function or cost function is a function that maps an event or values of one or more variables onto a real number intuitively representing some "cost" associated with the event. An optimization problem seeks to minimize a loss function.
The loss function quantifies the amount by which the prediction deviates from the actual values.
文章来源:http://www.codelast.com/
所以现在问题来了,损失函数的表达式又是什么?
在探讨损失函数的表达式之前,我们先来看一下损失函数有哪些种类。
损失函数有很多种,例如下面几个:
(1)0-1损失函数:可用于分类问题,即该函数用于衡量分类错误的数量,但由于此损失函数是非凸(non-convex)的,因此在做最优化计算时,难以求解,所以,正因为如此,0-1损失函数不是那么“实用”(如果这句话有误,请指正)。
(2)平方损失函数(Square Loss):常用于线性回归(Linear Regression)。
(3)对数损失(Log Loss)函数:常用于其模型输出每一类概率的分类器(classifier),例如逻辑回归。
(4)Hinge损失函数:常用于SVM(Support Vector Machine,支持向量机,一种机器学习算法)。中文名叫“合页损失函数”,因为hinge有“合页”之意。这个翻译虽然直白,但是你会发现,99%的文章都不会用它的中文名来称呼它,而是用“Hinge损失”之类的说法。
这些都是人们的经验总结,当然,说每一种损失函数常用于什么机器学习算法,也都是有数学依据的。但是在这里,我们讲的是Logistic Regression,所以只看对数损失函数。对数损失函数通常用于衡量分类器(classifier)的精度,这里的“分类器”也就是指机器学习的模型,它对每一个类别输出一个概率值。从前面的文章中,我们已经知道了,逻辑回归就是这样一种分类器,所以才用对数损失函数来衡量其精度。
有时候,对数损失函数(Log Loss)也被叫作交叉熵损失函数(Cross-entropy Loss)。交叉熵这个名字比较拗口,在信息理论中,熵用于衡量某种事件的“不可预测性”,而交叉熵=事件的真实分布+不可预测性,所以交叉熵可以用于度量两个概率分布(真实分布&预测分布)之间的差异性,即:交叉熵损失函数(对数损失函数)可以衡量一个模型对真实值带来的额外噪音,通过最小化交叉熵损失函数(对数损失函数),我们就可以最大化分类器(模型)的精度。
上面这一大段话试图用简单的描述让你相信,为什么要用Log Loss来衡量Logistic Regression的误差,但是没有给出证明。有人可能会说,为什么不能用其他的方法来衡量,例如用平方损失函数(Square Loss)。事实上,这是有数学依据的——它会导致损失函数是一个关于参数向量
文章来源:http://www.codelast.com/
到这里为止,我们还是没有提到损失函数的数学表达式,但是如果要计算损失函数的值,我们是回避不了的,必须要知道。所以,这里用 L 来表示损失函数(取Loss之意),则对数损失函数的表达式为:
其中,
这个对数损失函数的表达式中并没有出现我们要求解的参数
再来仔细看一下这个式子:N 为数据集的条数(有多少组
因此,我们只要找到一个参数向量
求得了这个最优的
文章来源:http://www.codelast.com/
- 求解方法
在大的方向上,你可以选择不使用搜索方向的算法(例如信赖域算法),也可以选择众多使用搜索方向的算法(例如梯度下降法)。
在是否计算目标函数的导数这个方面,你可以使用不用求目标函数导数的算法(例如Powell共轭方向集方法),也可以使用要求目标函数导数的算法(例如梯度下降法)。由于某些目标函数形式特别复杂,计算其导数特别麻烦,所以在这种时候,不用计算导数的算法可能大有帮助。
事实上,在现在各种机器学习library百花齐放的今天,我们基本上不需要自己编写这些算法的具体实现,只需要调用它们即可。例如,通过Spark的Machine Learning Library (MLlib),我们可以直接使用Stochastic gradient descent (SGD),Limited-memoryBFGS (L-BFGS)等实现。但是对这背后的原理有所了解,对工作学习是有帮助的。
- [原创] 为树莓派添加 DS1302 实时时钟(硬件时钟)/ Add a DS1302 RTC for RPi
- [原创] 在IntelliJ IDEA中使用插件查看Maven conflict
6 thoughts on “[原创] 用人话解释机器学习中的Logistic Regression(逻辑回归)”
发表评论 取消回复
功能
- 登录
- 文章RSS
- 评论RSS
- WordPress.org
搜索本站
- 逻辑回归
- 逻辑回归
- 逻辑回归
- 逻辑回归
- 逻辑回归
- 逻辑回归
- 逻辑回归
- 逻辑回归
- 逻辑回归
- 逻辑回归
- 逻辑回归
- 逻辑回归
- 逻辑回归
- 逻辑回归
- 逻辑回归
- 逻辑回归
- 逻辑回归
- 逻辑回归
- 当你的深度学习模型走进死胡同,问问自己这5个问题
- 请慎用javascript:void(0),尤其是在坑爹的IE6中
- Q109:用PBRT渲染Blender导出的模型
- Linux下添加Tomcat为系统服务
- 欢迎使用CSDN-markdown编辑器
- 逻辑回归
- 第3周-强大的数据结构(字典集合+scipy的数据结构)
- docker学习(1) 安装
- Android之Handler用法总结
- Python注意(1)
- Linux 下svn恢复到某一版本
- android异常compileDebugJavaWithJavac
- 获取布局
- c# 使用UDPClient实现异步通信
看了你的评论我对我来说就是醍醐灌顶 谢谢! 很想认识你
Reply您寫得太好了, 讓我心領神會。有個問題想再請教一下,關於θ訓練出來之後帶入式子1, 是要用什麼門檻值來決定是屬於第1類還是屬於2類呢? 還是通常都使用0.5 呢?
Reply这个阈值是根据业务的实际情况来设置/调整的,并不是个固定值,需要根据数据来分析。
Reply你的答案就是我想要的
Reply发现了一个干货博客,好玩的内容也很多,好开心,收藏之!
Reply您写的非常好。
Reply