Logistic回归计算过程的推导

https://blog.csdn.net/ligang_csdn/article/details/53838743

https://blog.csdn.net/weixin_30014549/article/details/52850870

https://www.cnblogs.com/HolyShine/p/6403116.html

2. 基本原理

Logistic Regression和Linear Regression的原理是相似的,按照我自己的理解,可以简单的描述为这样的过程:

(1)找一个合适的预测函数(Andrew Ng的公开课中称为hypothesis),一般表示为 _h_函数,该函数就是我们需要找的分类函数,它用来预测输入数据的判断结果。这个过程时非常关键的,需要对数据有一定的了解或分析,知道或者猜测预测函数的”大概”形式,比如是线性函数还是非线性函数。

(2)构造一个Cost函数(损失函数),该函数表示预测的输出( h)与训练数据类别( y)之间的偏差,可以是二者之间的差( h-y)或者是其他的形式。综合考虑所有训练数据的”损失”,将Cost求和或者求平均,记为 _J(θ)_函数,表示所有训练数据预测值与实际类别的偏差。

(3)显然, _J(θ)_函数的值越小表示预测函数越准确(即 _h_函数越准确),所以这一步需要做的是找到J(θ)函数的最小值。找函数的最小值有不同的方法,Logistic Regression实现时有的是梯度下降法(Gradient Descent)。

3. 具体过程

3.1 构造预测函数

Logistic Regression虽然名字里带”回归”,但是它实际上是一种分类方法,用于两分类问题(即输出只有两种)。根据第二章中的步骤,需要先找到一个预测函数( h),显然,该函数的输出必须是两个值(分别代表两个类别),所以利用了Logistic函数(或称为Sigmoid函数),函数形式为:

Logistic回归计算过程的推导

对应的函数图像是一个取值在0和1之间的S型曲线(图1)。

Logistic回归计算过程的推导

图1

接下来,您需要确定数据分区的边界类型。对于图2和图3中的两个数据分布,很明显,图2需要线性边界,而图3需要非线性边界。接下来,我们将只讨论线性边界的情况。

[En]

Next, you need to determine the boundary type of the data partition. For the two data distributions in figures 2 and 3, it is clear that figure 2 requires a linear boundary, while figure 3 requires a non-linear boundary. Next we will only discuss the case of linear boundaries.

Logistic回归计算过程的推导

图2

Logistic回归计算过程的推导

图3

在线性边界的情况下,边界形式如下:

[En]

In the case of a linear boundary, the boundary forms are as follows:

Logistic回归计算过程的推导

施工预测函数为:

[En]

The construction prediction function is:

Logistic回归计算过程的推导

_hθ(x)_函数的值有特殊的含义,它表示结果取1的概率,因此对于输入x分类结果为类别1和类别0的概率分别为:

Logistic回归计算过程的推导

3.2 构造Cost函数

Andrew Ng在课程中直接给出了Cost函数及 _J(θ)_函数如式(5)和(6),但是并没有给出具体的解释,只是说明了这个函数来衡量 _h_函数预测的好坏是合理的。

Logistic回归计算过程的推导

Logistic回归计算过程的推导

实际上这里的Cost函数和 _J(θ)_函数是基于最大似然估计推导得到的。下面详细说明推导的过程。(4)式综合起来可以写成:

Logistic回归计算过程的推导

取似然函数为:

[En]

Take the likelihood function as:

Logistic回归计算过程的推导

对数似然函数为:

[En]

Logarithmic likelihood functions are:

Logistic回归计算过程的推导

最大似然估计就是要求得使 l(θ)取最大值时的 θ,其实这里可以使用梯度上升法求解,求得的 _θ_就是要求的最佳参数。但是,在Andrew Ng的课程中将 _J(θ)_取为(6)式,即:

Logistic回归计算过程的推导

因为乘了一个负的系数 -1/m,所以 _J(θ)_取最小值时的 _θ_为要求的最佳参数。

3.3 梯度下降法求 J(θ) 的最小值

求 _J(θ)_的最小值可以使用梯度下降法,根据梯度下降法可得 _θ_的更新过程:

Logistic回归计算过程的推导

式中为 _α_学习步长,下面来求偏导:

Logistic回归计算过程的推导

在上述公式的解中使用以下公式:

[En]

The following formula is used in the solution of the above formula:

Logistic回归计算过程的推导

因此,(11)式的更新过程可以写成:

Logistic回归计算过程的推导

因为式中 _α_本来为一常量,所以 _1/m_一般将省略,所以最终的 _θ_更新过程为:

Logistic回归计算过程的推导

另外,补充一下,3.2节中提到求得 l(θ)取最大值时的 _θ_也是一样的,用梯度上升法求(9)式的最大值,可得:

Logistic回归计算过程的推导

结果发现,上述公式与(14)式相同,所以梯度上升法和梯度下降法是完全相同的,这就是为什么在机器学习的实战中使用梯度上升法的原因。

[En]

It is found that the above formula is the same as (14), so the gradient ascending method and the gradient descending method are exactly the same, which is the reason why the gradient ascending method is used in the actual combat of machine learning.

3.4 梯度下降过程向量化

关于 _θ_更新过程的vectorization,Andrew Ng的课程中只是一带而过,没有具体的讲解。

《机器学习实战》连Cost函数及求梯度等都没有说明,所以更不可能说明vectorization了。但是,其中给出的实现代码确是实现了vectorization的,图4所示代码的32行中weights(也就是 θ)的更新只用了一行代码,直接通过矩阵或者向量计算更新,没有用for循环,说明确实实现了vectorization,具体代码下一章分析。

文献[3]中也提到了vectorization,但是也是比较粗略,很简单的给出vectorization的结果为:

Logistic回归计算过程的推导

且不论该更新公式正确与否,这里的Σ(…)是一个求和的过程,显然需要一个for语句循环m次,所以根本没有完全的实现vectorization,不像《机器学习实战》的代码中一条语句就可以完成 _θ_的更新。

下面说明一下我理解《机器学习实战》中代码实现的vectorization过程。

约定训练数据的矩阵形式如下, _x_的每一行为一条训练样本,而每一列为不同的特称取值:

Logistic回归计算过程的推导

约定待求的参数 _θ_的矩阵形式为:

Logistic回归计算过程的推导

先求 x.θ_并记为 _A

Logistic回归计算过程的推导

hθ(x)-y_并记为 _E

Logistic回归计算过程的推导

_g(A)_的参数 _A_为一列向量,所以实现 _g_函数时要支持列向量作为参数,并返回列向量。由上式可知 _hθ(x)-y_可以由 _g(A)-y_一次计算求得。

再来看一下(15)式的 _θ_更新过程,当 _j=0_时:

Logistic回归计算过程的推导

同样的可以写出 θj

Logistic回归计算过程的推导

总而言之,它是:

[En]

To sum up, it is:

Logistic回归计算过程的推导

综上所述,vectorization后 _θ_更新的步骤如下:

(1)求 A=x.θ

(2)求 E=g(A)-y

(3)求θ:=θ-α.x’.E,x’表示矩阵x的转置。

也可以概括为:

[En]

It can also be summed up as:

Logistic回归计算过程的推导

前面已经提到过:1/m是可以省略的。

4. 代码分析

图4中是《机器学习实战》中给出的部分实现代码。

Logistic回归计算过程的推导

图4

sigmoid函数就是前文中的 _g(z)_函数,参数inX可以是向量,因为程序中使用了Python的numpy。

gradAscent函数是梯度上升的实现函数,参数dataMatin和classLabels为训练数据,23和24行对训练数据做了处理,转换成numpy的矩阵类型,同时将横向量的classlabels转换成列向量labelMat,此时的dataMatrix和labelMat就是(18)式中的x和y。alpha为学习步长,maxCycles为迭代次数。weights为n维(等于 x_的列数)列向量,就是(19)式中的 _θ

29行的for循环将更新 θ_的过程迭代maxCycles次,每循环一次更新一次。对比3.4节最后总结的向量化的 _θ_更新步骤,30行相当于求了 _A=x.θ_和 _g(A),31行相当于求了 E=g(A)-y,32行相当于求 θ:=θ-α.x’.E。所以这三行代码实际上与向量化的 _θ_更新步骤是完全一致的。

总结一下,从上面代码分析可以看出,虽然只有十多行的代码,但是里面却隐含了太多的细节,如果没有相关基础确实是非常难以理解的。相信完整的阅读了本文,就应该没有问题了!^_^。

【参考文献】

[1]《机器学习实战》——【美】Peter Harington
[2] Stanford机器学习公开课(https://www.coursera.org/course/ml
[3] http://blog.csdn.net/abcjennifer/article/details/7716281
[4] http://www.cnblogs.com/tornadomeet/p/3395593.html
[5] http://blog.csdn.net/moodytong/article/details/9731283
[6] http://blog.csdn.net/jackie_zhu/article/details/8895270

Original: https://www.cnblogs.com/bnuvincent/p/9695666.html
Author: Alexander
Title: Logistic回归计算过程的推导

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/7602/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部
最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总