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=0∑nθ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+e−z1
我们直接把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=1∑m[−y(i)log(hθ(x(i)))−(1−y(i))log(1−hθ(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))−(1−y)log(1−hθ(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(1−hθ(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)
1−hθ(x)与1的接近程度,越接近1,
−
log
(
1
−
h
θ
(
x
)
)
-\\log(1-h_\\theta(x))
−log(1−hθ(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+e−z1=(1+以上是关于MATLAB | 赠书 | 逻辑回归(Logistic Regression)的主要内容,如果未能解决你的问题,请参考以下文章