注:
文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程。
笔记原作者:红色石头
微信公众号:AI有道

上一节课介绍了Linear Regression线性回归,用均方误差来寻找最佳的权重向量\(w\),获得最好的线性预测。本节课将介绍Logistic Regression逻辑回归问题。

一、Logistic Regression Problem

一个心脏病预测的问题:根据患者的年龄、血压、体重等信息,来预测患者是否会有心脏病。很明显这是一个二分类问题,其输出\(y\)只有\({0,1}\)两种情况。

二元分类,一般情况下,理想的目标函数\(f(x)>0.5\),则判断为正类\(1\);若\(f(x)<0.5\),则判断为负类\(-1\)。

但是,如果我们想知道的不是患者有没有心脏病,而是到底患者有多大的几率是心脏病。这表示,我们更关心的是目标函数的值(分布在0,1之间),表示是正类的概率(正类表示是心脏病)。这跟我们原来讨论的二分类问题不太一样,我们把这个问题称为软性二分类问题('soft' binary classification)。这个值越接近\(1\),表示正类的可能性越大;越接近\(0\),表示负类的可能性越大。

对于软性二分类问题,理想的数据是分布在\([0,1]\)之间的具体值,但是实际中的数据只可能是\(0\)或者\(1\),我们可以把实际中的数据看成是理想数据加上了噪声的影响。

如果目标函数是\(f(x)=P(+1|x)\in[0,1]\)的话,我们如何找到一个好的Hypothesis跟这个目标函数很接近呢?
首先,根据我们之前的做法,对所有的特征值进行加权处理。计算的结果为\(s\),我们称之为'risk score':

但是特征加权和\(s\in (-\infty,\infty)\),如何将\(s\)值限定在\([0,1]\)之间呢?一个方法是使用sigmoid Function,记为\(\theta(s)\)。那么我们的目标就是找到一个hypothesis \(h(x)=\theta(w^Tx)\)。

Sigmoid Function函数记为\(\theta(s)=\frac{1}{1+e^{-s}}\),满足\(\theta(-\infty)=0\),\(\theta(0)=\frac{1}{2}\) ,\(\theta(+\infty)=1\)。这个函数是平滑的、单调的S型函数。

对于逻辑回归问题,hypothesis就是这样的形式:\[h(x)=\frac{1}{1+e^{-w^Tx}}\]我们的目标就是求出这个预测函数\(h(x)\),使它接近目标函数\(f(x)\)。

二、Logistic Regression Error

现在我们将Logistic Regression与之前讲的Linear Classification、Linear Regression做个比较

这三个线性模型都会用到线性score function \(s=w^Tx\)。linear classification的误差使用的是0/1 err;linear regression的误差使用的是squared err。那么logistic regression的误差该如何定义呢?

先介绍一下“似然性”的概念。目标函数\(f(x)=P(+1|x)\),如果我们找到了一个hypothesis很接近target function。也就是说,在所有的Hypothesis集合中找到一个hypothesis与target function最接近,能产生同样的数据集D,包含\(y\)输出label,则称这个hypothesis是最大似然likelihood。

logistic function: \(h(x)=\theta(w^Tx)\)满足一个性质:\(1-h(x)=h(-x)\),所以\[likelihood(h)=P(x_1)h(+x_1)\times P(x_2)h(-x_2)\times ... P(x_N)h(-x_N)\]
因为\(P(x_n)\)对所有的\(h\)来说,都是一样的,所以我们可以忽略它。那么我们可以得到logistic \(h\)正比于所有的\(h(y_nx_n)\)乘积。我们的目标就是让乘积值最大化。

如果将\(w\)代入的话:

为了把连乘问题简化计算,我们可以引入\(ln\)操作,让连乘转化为连加:

接着,我们将maximize问题转化为minimize问题,添加一个负号就行,并引入平均数操作\(\frac{1}{N}\):

将logistic function的表达式带入,那么minimize问题就会转化为如下形式:

至此,我们得到了logistic regression的err function,称之为cross-entropy error交叉熵误差:

三、Gradient of Logistic Regression Error

我们已经推导了\(E_{in}\)的表达式,那接下来的问题就是如何找到合适的向量\(w\),让\(E_{in}\)最小。

Logistic Regression的\(E_{in}\)是连续、可微、二次可微的凸曲线(开口向上),根据之前Linear Regression的思路,我们只要计算\(E_{in}\)的梯度为零时的\(w\),即为最优解。

对\(E_{in}\)计算梯度:

最终得到梯度的表达式为:

为了计算\(E_{in}\)最小值,我们就要找到让\(\nabla E_{in}(w)\)等于0的位置。

上式可以看成\(\theta(-y_nw^Tx_n)\)是\(-y_nx_n\)的线性加权。要求\(\theta(-y_nw^Tx_n)\)与\(-y_nx_n\)的线性加权和为0,那么一种情况是线性可分,这是因为如果所有的权重\(\theta(-y_nw^Tx_n)\)为0,那就能保证\(\nabla E_{in}(w)\)为\(0\)。\(\theta(-y_nw^Tx_n)\)是sigmoid function,根据其特性,只要让\(-y_nw^Tx_n\ll 0\),即\(y_nw^Tx_n\gg 0\)。\(y_nw^Tx_n\gg 0\)表示对于所有的点, \(y_n\)与\(w^Tx_n\)都是同号的,这表示数据集D必须是全部线性可分的才能成立。

然而,保证所有的权重为0是不太现实的,总有不等于0的时候,那么另一种常见的情况是非线性可分,只能通过使加权和为零,来求解\(w\)。这种情况没有closed-form解,与Linear Regression不同,只能用迭代方法求解。

之前所说的Linear Regression有closed-form解,可以说是“一步登天”的;但是PLA算法是一步一步修正迭代进行的,每次对错误点进行修正,不断更新\(w\)值。PLA的迭代优化过程表示如下:

\(w\)每次更新包含两个内容:一个是每次更新的方向\(y_nx_n\),用\(v\)表示,另一个是每次更新的步长\(\eta\)。参数\((v,\eta)\)和终止条件决定了我们的迭代优化算法。

四、Gradient Descent

根据上一节PLA的思想,迭代优化让每次\(w\)都有更新:

我们把曲线\(E_{in}(w)\)看做是一个山谷的话,要求\(E_{in}(w)\)最小,即可比作下山的过程。整个下山过程由两个因素影响:一个是下山的单位方向\(v\);另外一个是下山的步长\(\eta\)。

利用微分思想和线性近似,假设每次下山我们只前进一小步,即\(\eta\)很小,那么根据泰勒Taylor一阶展开,可以得到:\[E_{in}(w_t+\eta v)\approx E_{in}(w_t)+\eta v^T \nabla E_{in}(w_t)\]
迭代的目的是让\(E_{in}\)越来越小,即让\(E_{in}(w_t+\eta v)<E_{in}(w_t)\)。\(\eta\)是标量,如果两个向量方向相反的话,那么他们的内积最小(为负),也就是说如果方向\(v\)与梯度\(\nabla E_{in}(w_t)\)反向的话,那么就能保证每次迭代\(E_{in}(w_t+\eta v)<E_{in}(w_t)\)都成立。因此我们令下降方向为:\[v=-\frac{\nabla E_{in}(w_t)}{\|\nabla E_{in}(w_t)\|}\]
\(v\)是单位向量, \(v\)每次都是沿着梯度的反方向走,这种方法称为梯度下降(gradient descent)算法。那么每次迭代公式就可以写成:\[w_{t+1} = w_t-\eta \frac{\nabla E_{in}(w_t)}{\|\nabla E_{in}(w_t)\|}\] 下面讨论一下\(\eta\)的大小对迭代优化的影响: \(\eta\)如果太小的话,那么下降的速度就会很慢; \(\eta\)如果太大的话,那么之前利用Taylor展开的方法就不准了,造成下降很不稳定,甚至会上升。因此,\(\eta\) 应该选择合适的值,一种方法是在梯度较小的时候,选择小的\(\eta\),梯度较大的时候,选择大的\(\eta\),即正比于\(\|\nabla E_{in}(w_t)\|\)。这样保证了能够快速、
稳定地得到最小值\(E_{in}(w)\)。

对学习速率\(\eta\)做个更修正,梯度下降算法的迭代公式可以写成:\[w_{t+1} = w_t-\eta' \nabla E_{in}(w_t)\]
其中\[\eta'=\frac{\eta}{\|\nabla E_{in}(w_t)\|}\]
总结一下基于梯度下降的Logistic Regression算法步骤如下:

  • 初始化\(w_0\)
  • 计算梯度\(\nabla E_{in}(w_t)=\frac{1}{N}\sum^N_{n=1}\theta(-y_nw^T_tx_n)(-y_nx_n)\)
  • 迭代更新\(w_{t+1} = w_t-\eta' \nabla E_{in}(w_t)\)
  • 满足\(\nabla E_{in}(w_{t+1})\approx 0\) 或者达到迭代次数,迭代结束

五、总结

我们今天介绍了Logistic Regression。首先,从逻辑回归的问题出发,将\(P(+1|X)\)作为目标函数,将\(\theta(w^Tx)\)作为hypothesis。接着,我们定义了logistic regression的err function,称之为cross-entropy error交叉熵误差。然后,我们计算logistic regression error的梯度,最后,通过梯度下降算法,计算\(\nabla E_{in}(w_{t+1})\approx 0\) 时对应的\(w_t\)值。

机器学习基石10-Logistic Regression的更多相关文章

  1. Stanford机器学习笔记-2.Logistic Regression

    Content: 2 Logistic Regression. 2.1 Classification. 2.2 Hypothesis representation. 2.2.1 Interpretin ...

  2. 机器学习实战python3 Logistic Regression

    代码及数据:https://github.com/zle1992/MachineLearningInAction logistic regression 优点:计算代价不高,易于理解实现,线性模型的一 ...

  3. Andrew Ng机器学习编程作业:Logistic Regression

    编程作业文件: machine-learning-ex2 1. Logistic Regression (逻辑回归) 有之前学生的数据,建立逻辑回归模型预测,根据两次考试结果预测一个学生是否有资格被大 ...

  4. Andrew Ng机器学习 二: Logistic Regression

    一:逻辑回归(Logistic Regression) 背景:假设你是一所大学招生办的领导,你依据学生的成绩,给与他入学的资格.现在有这样一组以前的数据集ex2data1.txt,第一列表示第一次测验 ...

  5. 【笔记】机器学习 - 李宏毅 - 6 - Logistic Regression

    Logistic Regression 逻辑回归 逻辑回归与线性回归有很多相似的地方.后面会做对比,先将逻辑回归函数可视化一下. 与其所对应的损失函数如下,并将求max转换为min,并转换为求指数形式 ...

  6. 机器学习基石:10 Logistic Regression

    线性分类中的是非题------>概率题, 设置概率阈值后,大于等于该值的为O,小于改值的为X.------>逻辑回归. O为1,X为0: 逻辑回归假设: 逻辑函数/S型函数:光滑,单调, ...

  7. 机器学习基石笔记:10 Logistic Regression

    线性分类中的是非题------>概率题, 设置概率阈值后,大于等于该值的为O,小于改值的为X.------>逻辑回归. O为1,X为0: 逻辑回归假设: 逻辑函数/S型函数:光滑,单调, ...

  8. 10 Logistic Regression

    线性分类中的是非题 --->概率题 (设置概率阈值后,大于等于该值的为O,小于改值的为X) --->逻辑回归 O为1,X为0 逻辑回归假设 逻辑函数/S型函数:光滑,单调 自变量趋于负无穷 ...

  9. 【 Logistic Regression 】林轩田机器学习基石

    这里提出Logistic Regression的角度是Soft Binary Classification.输出限定在0~1之间,用于表示可能发生positive的概率. 具体的做法是在Linear ...

随机推荐

  1. ActiveMQ 复杂类型的发布与订阅

    很久没po文章了,但是看到.Net里关于ActiveMQ发送复杂类型的文章确实太少了,所以贴出来和大家分享 发布: //消息发布 public class Publisher { private IC ...

  2. 快速同步GitHub代码库

    因伟大的墙的存在,github下载速度奇慢, 简单办法,在csdn code建一个账号,然后创建工程的时候选择导入模式, 填入github的项目git URL. 然后.. 从csdn的code下载就快 ...

  3. sed的惯常用法

    1:注释掉某一行这个经常会遇到的,把配置文件里某一行注释掉.让他不起作用.sed -i -e ’121 s/^/#/’ /usr/local/apache2/conf/httpd.conf上面一行命令 ...

  4. UTF编码问题小结

    在编程当中经常出现乱码的问题,而由此一般会引发很多惨剧,如读文件不成功.用户名显示乱码等,所以端午节抽了一小点时间好好看了一下编码问题,以备遗忘. 首先是中文编码,除了台湾和香港常用的BIG5,国内大 ...

  5. MySQL - 建库、建表、查询

    本章通过演示如何使用mysql客户程序创造和使用一个简单的数据库,提供一个MySQL的入门教程.mysql(有时称为“终端监视器”或只是“监视”)是一个交互式程序,允许你连接一个MySQL服务器,运行 ...

  6. Python with ASP

    Python with ASP Python with ASP

  7. 基于Stm32的MP3播放器设计与实现

    原创博文,转载请注明出处 这是我高级电子技术试验课做的作业,拿来共享一下.项目在安福莱例程基础之上进行的功能完善,里面的部分内容可参考安福莱mp3例程.当然用的板子也是安福莱的板子,因为算起来总共做了 ...

  8. Ninja 之路:试炼!求生演习——异步 I/O、http

    鸣人火影之路的第一步,就是跟着卡卡西学习基本的忍术,让自己先在忍者的世界里生存下来,so,想要在 node 的世界里游刃有余,必须要掌握异步 I/O.http等核心技能. ok,第一步先学会读懂需求 ...

  9. Yarn任务提交流程(源码分析)

    关键词:yarn rm mapreduce 提交 Based on Hadoop 2.7.1 JobSubmitter addMRFrameworkToDistributedCache(Configu ...

  10. PREV-5_蓝桥杯_错误票据

    问题描述 某涉密单位下发了某种票据,并要在年终全部收回. 每张票据有唯一的ID号.全年所有票据的ID号是连续的,但ID的开始数码是随机选定的. 因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成 ...