MATLAB | 赠书 | 逻辑回归(Logistic Regression)

Posted slandarer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB | 赠书 | 逻辑回归(Logistic Regression)相关的知识,希望对你有一定的参考价值。

微信公众号 slandarer随笔
这篇文章正在抽奖赠书
欢迎过去参与抽奖,文末有该书更详细介绍:
请在微信打开抽奖地址

抽奖推送链接:抽奖地址

之前的最小二乘法的两种解读那篇文章,我们拟合了多项式,拟合了线性多元函数,我们的函数映射结果是数值,但我们想要的得到的结果如果不是数值,而是(是/否)(TRUE/FALSE)应该怎么做?此即逻辑回归。

代价函数及其梯度(Cost function and gradient)

首先来看要拟合的函数,下面是我们之前拟合的函数的形式,很明显拟合结果为一个数值。
h θ ( x ) = θ T x = ∑ i = 0 n θ i x i = θ 0 + θ 1 x 1 + ⋯ + θ n x n h_\\theta(x)=\\theta^Tx=\\sum_i=0^n \\theta_i x_i=\\theta_0+\\theta_1 x_1+\\cdots+\\theta_n x_n hθ(x)=θTx=i=0nθixi=θ0+θ1x1++θnxn
我们想要将一个范围 ( − ∞ , ∞ ) (-\\infty,\\infty) (,)的数值映射到(是/否)(1/0)我们非常自然的能够想到sigmoid函数,这是一个能将数值从 ( − ∞ , ∞ ) (-\\infty,\\infty) (,)映射到 ( 0 , 1 ) (0,1) (0,1)的函数:
g ( z ) = 1 1 + e − z g(z)=\\frac11+e^-z g(z)=1+ez1

我们直接把sigmoid函数往原本的拟合函数外面一套,拟合的函数不就能把变量很顺滑的映射到 ( 0 , 1 ) (0,1) (0,1)了嘛,然后我们认为大于0.5就代表是,小于0.5就代表否,美滋滋:
h θ ( x ) = g ( θ T x ) h_\\theta(x)=g(\\theta^Tx) hθ(x)=g(θTx)

我们再来看代价函数的改变,代价函数我们并没用平常的平方损失函数,而是用了如下的一个形式:
J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) log ⁡ ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J(\\theta)=\\frac1m \\sum_i=1^m\\left[-y^(i) \\log \\left(h_\\theta\\left(x^(i)\\right)\\right)-\\left(1-y^(i)\\right) \\log \\left(1-h_\\theta\\left(x^(i)\\right)\\right)\\right] J(θ)=m1i=1m[y(i)log(hθ(x(i)))(1y(i))log(1hθ(x(i)))]
别看这个形式有些复杂,但其实并没有那么可怕,首先它将m个数据组都带入了后面的式子求了一个均值。而对于单独一组数据,我们的代价函数的形式是下面这样的:
J ( θ ) = − y log ⁡ ( h θ ( x ) ) − ( 1 − y ) log ⁡ ( 1 − h θ ( x ) ) J(\\theta)=-y\\log \\left(h_\\theta\\left(x\\right)\\right)-\\left(1-y\\right) \\log \\left(1-h_\\theta\\left(x\\right)\\right) J(θ)=ylog(hθ(x))(1y)log(1hθ(x))
我们的y值取值只有(1/0),x很难真正取到正负无穷,也就是说 h θ ( x ) h_\\theta(x) hθ(x)范围为(0,1)并不会真正取到两端点,这时候代价函数可以看作一个条件函数:
J ( θ ) = − log ⁡ ( h θ ( x ) ) y = 1 − log ⁡ ( 1 − h θ ( x ) ) y = 0 J(\\theta)=\\begincases -\\log \\left(h_\\theta\\left(x\\right)\\right) &y=1\\\\ -\\log \\left(1-h_\\theta\\left(x\\right)\\right) &y=0 \\endcases J(θ)=log(hθ(x))log(1hθ(x))y=1y=0
y=1时,我们考察的是 h θ ( x ) h_\\theta(x) hθ(x)与1的接近程度,越接近1, − log ⁡ ( h θ ( x ) ) -\\log(h_\\theta(x)) log(hθ(x))就越趋紧于0,y=0时,我们考察的是 1 − h θ ( x ) 1-h_\\theta(x) 1hθ(x)与1的接近程度,越接近1, − log ⁡ ( 1 − h θ ( x ) ) -\\log(1-h_\\theta(x)) log(1hθ(x))就越趋紧于0,总而言之,这是一个越接近真实值,计算值越接近0,越远离真实值,计算值越接近正无穷的非常巧妙的函数。

我们要求代价函数的极小值点,当然还是要让偏导等于0,这里我们对 J ( θ ) J(\\theta) J(θ)求一下偏导,这玩意没那么好求,因此我们就一层一层来呗,先研究对sigmoid函数求导,再研究对 h θ ( x ) h_\\theta(x) hθ(x)求偏导然后链式求导法则走起来:

第三层求导:
g ( z ) = 1 1 + e − z g ′ ( z ) = e − z ( 1 + e − z ) 2 = 1 + e − z − 1 ( 1 + e − z ) 2 = 1 1 + e − z ( 1 + e − z − 1 1 + e − z ) = g ( z ) ( 1 − g ( z ) ) \\beginaligned g(z)&=\\frac11+e^-z\\\\ g'(z)&=\\frace^-z(1+e^-z)^2=\\frac1+e^-z-1(1+e^-z)^2\\\\ &=\\frac11+e^-z(\\frac1+e^-z-11+e^-z)\\\\ &=g(z)(1-g(z)) \\endaligned g(z)g(z)=1+ez1=(1+以上是关于MATLAB | 赠书 | 逻辑回归(Logistic Regression)的主要内容,如果未能解决你的问题,请参考以下文章

机器学习之 Logistic 回归(逻辑回归)

如何用matlab模拟一个逻辑回归的方程啊,求大神帮忙写代码

在 Matlab 中使用 L2 正则化实现逻辑回归

Matlab 正则化逻辑回归 - 如何计算梯度

MATLAB逻辑回归实例及代码

matlab中的正则化逻辑回归代码