台湾大学林轩田机器学习基石课程学习笔记10 -- Logistic Regression

上一节课,我们介绍了Linear Regression线性回归,以及用平方错误来寻找最佳的权重向量w,获得最好的线性预测。本节课将介绍Logistic Regression逻辑回归问题。

一、Logistic Regression Problem

一个心脏病预测的问题:根据患者的年龄、血压、体重等信息,来预测患者是否会有心脏病。很明显这是一个二分类问题,其输出y只有{-1,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)=\frac1{1+e^{-s}},满足\theta(-\infty)=0\theta(0)=\frac12\theta(+\infty)=1。这个函数是平滑的、单调的S型函数。则对于逻辑回归问题,hypothesis就是这样的形式: h(x)=\frac1{1+e^{-w^Tx}}

那我们的目标就是求出这个预测函数h(x),使它接近目标函数f(x)。

二、Logistic Regression Error

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

这三个线性模型都会用到线性scoring 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)。那么,似然性h: likelihood(h)=P(x_1)h(+x_1)\times P(x_2)h(-x_2)\times \cdots P(x_N)h(-x_N)

因为P(x_n)对所有的h来说,都是一样的,所以我们可以忽略它。那么我们可以得到logistic h正比于所有的h(y_nx)乘积。我们的目标就是让乘积值最大化。

如果将w代入的话:

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

接着,我们将maximize问题转化为minimize问题,添加一个负号就行,并引入平均数操作\frac1N

将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≪0 ,即y_nw^Tx_n≫0y_nw^Tx_n≫0 表示对于所有的点,y_nw^Tx_n都是同号的,这表示数据集D必须是全部线性可分的才能成立。

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

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

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

四、Gradient Descent

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

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

利用微分思想和线性近似,假设每次下山我们只前进一小步,即η很小,那么根据泰勒Taylor一阶展开,可以得到: E_{in}(w_t+\eta v)\approx E_{in}(w_t)+\eta v^T\nabla E_{in}(w_t)

关于Taylor展开的介绍,可参考我另一篇博客: 多元函数的泰勒(Taylor)展开式

迭代的目的是让E_{in}越来越小,即让E_{in}(w_t+\eta v)<E_{in}(w_t)。η是标量,因为如果两个向量方向相反的话,那么他们的内积最小(为负),也就是说如果方向vv与梯度\nabla E_{in}(w_t)反向的话,那么就能保证每次迭代)E_{in}(w_t+\eta v)<E_{in}(w_t)都成立。则,我们令下降方向v为: v=-\frac{\nabla E_{in}(w_t)}{||\nabla E_{in}(w_t)||}

v是单位向量,v每次都是沿着梯度的反方向走,这种方法称为梯度下降(gradient descent)算法。那么每次迭代公式就可以写成: w_{t+1}\leftarrow w_t-\eta\frac{\nabla E_{in}(w_t)}{||\nabla E_{in}(w_t)||}

下面讨论一下η的大小对迭代优化的影响:η如果太小的话,那么下降的速度就会很慢;η如果太大的话,那么之前利用Taylor展开的方法就不准了,造成下降很不稳定,甚至会上升。因此,η应该选择合适的值,一种方法是在梯度较小的时候,选择小的η,梯度较大的时候,选择大的η,即η正比于||\nabla E_{in}(w_t)||。这样保证了能够快速、稳定地得到最小值E_{in}(w)

对学习速率η做个更修正,梯度下降算法的迭代公式可以写成: w_{t+1}\leftarrow 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)=\frac1N\sum_{n=1}^N\theta(-y_nw_t^Tx_n)(-y_nx_n)
  • 迭代跟新w_{t+1}\leftarrow w_t-\eta\nabla E_{in}(w_t)
  • 满足\nabla E_{in}(w_{t+1})\approx0或者达到迭代次数,迭代结束

五、总结

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

注明:

文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT派

理解SVM的三层境界(二)

第二层、深入SVM 2.1、从线性可分到线性不可分 2.1.1、从原始问题到对偶问题的求解 接着考虑之前得到的目标函数: ? 由于求 的最大值相当于求 ...

36930
来自专栏Petrichor的专栏

深度学习: 如何训练网络

随机批处理,mini-batch,一种 在模型每轮 (epoch) 训练进行前将训练数据集随机打乱 (shuffle) 的 训练机制。

44930
来自专栏人工智能LeadAI

使用Python和R语言从头开始理解和编写神经网络

前言 本篇文章是原文(https://www.analyticsvidhya.com/blog/2017/05/neural-network-from-scra...

400150
来自专栏专知

【干货】深度学习最佳实践之权重初始化

【导读】深度学习中有很多简单的技巧能够使我们在训练模型的时候获得最佳实践,比如权重初始化、正则化、学习率等。对于深度学习初学者来说,这些技巧往往是非常有用的。本...

35280
来自专栏琦小虾的Binary

学习July博文总结——支持向量机(SVM)的深入理解(上)

前言 本文是参照CSDN的July大神的热门博文《支持向量机通俗导论(理解SVM的三层境界》)写的。目的是因为July大神文中说,SVM理论的理解,需要一遍一遍...

41980
来自专栏技术翻译

用数学方法解密神经网络

在本文中,我们将讨论简单神经网络背后的数学概念。其主要目的是说明在建立我们自己的人工智能模型时,数学是如何发挥巨大作用的。

20100
来自专栏智能算法

机器学习三人行(系列五)----你不了解的线性模型(附代码)

到目前为止,我们已经将机器学习模型和他们的训练算法大部分视为黑盒子。 如果你经历了前面系列的一些操作,如回归系统、数字图像分类器,甚至从头开始建立一个垃圾邮件分...

388160
来自专栏包子铺里聊IT

经典智能算法快速入门之神经网络——技术篇

在上一篇文章里,小编给大家概括地介绍了下神经网络的历史和应用。这次,小编要给大家细细讲解下神经网络的组成,和几种常见神经网络的模型及其适用领域。 基本组成 顾名...

39390
来自专栏智能算法

入门 | 一文简述深度学习优化方法----梯度下降

从很大程度上来说,深度学习实际上是在解决大量烦人的优化问题。神经网络仅仅是一个非常复杂的函数,包含数百万个参数,这些参数代表的是一个问题的数学解答。以图像分类为...

14230
来自专栏程序生活

机器学习(三)使用Python和R语言从头开始理解和编写神经网络介绍目录神经网络背后的直观知识多层感知器及其基础知识什么是激活函数?前向传播,反向传播和训练次数(epochs)多层感知器全批量梯度下降

本篇文章是原文的翻译过来的,自己在学习和阅读之后觉得文章非常不错,文章结构清晰,由浅入深、从理论到代码实现,最终将神经网络的概念和工作流程呈现出来。自己将其翻译...

49770

扫码关注云+社区

领取腾讯云代金券