分享 | 机器学习算法之逻辑回归 LR

2018-12-22 17:36:44 +08:00
 linglingk

逻辑回归又称 LR,是一种广义的线性回归分析模型,它是分类中极为常用的手段,因此,掌握其内在原理是非常必要的。

逻辑回归就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,最后测试验证这个求解模型的好坏。

逻辑回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别)。

回归模型中,y 是一个定性变量,比如 y = 0 或 1,logistic 方法主要应用于研究某些事件发生的概率。

假设有一个二分类问题,输出为 y 属于 {0,1},而线性回归模型产生的预测值为 z = w^T * x + b 是实数值,我们希望有一个理想的阶跃函数来帮我们实现 z 值到 0/1 值的转化:

然而该函数不连续,我们希望有一个单调可微的函数来供我们使用,这时我们就可以使用 Sigmoid 函数来代替:

sigmoid 函数图像如下:

使用了 Sigmoid 函数之后,由于其取值在 [0, 1] 之间,我们就可以将其视为类 1 的后验概率估计 p(y=1|x)。通俗的说,就是如果有了一个测试点 x,那么就可以用 Sigmoid 函数算出来的结果来当做该点 x 属于类别 1 的概率大小。于是,在分类的时候,当计算的结果大于 0.5 时,我们则以高概率将其归为 1 类,否则则归为 0 类。

知道了什么是逻辑回归后,我们就需要训练模型,找到模型对应的参数,这时候我们就需要把模型对应的代价函数定义出来,以优化此目标函数。

这里如果我们像线性回归一样,利用误差的平方和来作为代价函数:

这里的 i 代表第 i 个样本,如果将 sigmoid 函数代入此代价函数里会发现这是目标函数是一个非凸函数,这就意味着代价函数有着许多的局部最小值,这不利于我们的求解:

非凸函数与凸函数函数图像如下:

这时候我们可以使用最大似然法去计算代价函数。前面,我们提到了 sigmoid 函数可以视为类 1 的后验估计,所以我们有:

其中,p(y = 1 | x;w) 表示给定 w,那么样本 x 为类 1 的概率大小。因此有:

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

为了让训练出来的模型很好,则对于已知的样本,对于类 1 的样本,则以高概率偏向 1 ( sigmoid 函数值大),对于类 0 的样本,则以高概率偏向 0 ( 1 - sigmoid 函数的值大),这样则表示 L(w) 的值应该尽可能的大。

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

我们现在要求的是使得 j(w) 取得最大值时的 w。这时候我们在 l(w) 前面加个负号就变成取最小值,这就是我们最终的代价函数:

对于 sigmoid 函数有一个很重要的性质,下面的推导会利用此性质:

这里我们要明确一点,梯度的负方向就是代价函数下降最快的方向。这样我们就可以使用梯度下降求解参数 w:

对于每一个参数,则有:

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

此式与线性回归时更新权重用的式子极为相似,也许这也是逻辑回归要在后面加上回归两个字的原因吧。

当然,在样本量极大的时候,每次更新权重会非常耗费时间,这时可以采用随机梯度下降法,这时每次迭代时需要将样本重新打乱,然后用下式不断更新权重。 如是去掉了求和,针对每个样本点都进行更新,即:

604 次点击
所在节点    算法
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/520036

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX