请和我一起学习机器学习算法之逻辑回归
为什么不用线性回归做分类问题
所谓逻辑回归就是用来分类的回归,所谓分类,就是我们希望预测的结果是离散的值,而不是连续的值。再线性回归的章节上,我们有讨论到对数几率回归。
为什么我们不用线性回归做分类问题呢?
如上图,如果我们对上面的肿瘤预测的分类问题做线性回归,可能会得到一条蓝色的线,我们以0.5作为阈值,当预测值大于0.5是表现为恶性肿瘤,到小鱼0.5时表现为良性,看起来一切都很完美,可以如果样本情况向下面这个情况呢?
由于出现一个点离同一个种类距离较远,在线性拟合的过程中,出现一些偏移,导致线性预测的效果变差,产生这个结果的原因是什么呢?
是因为我们的h(x)的预测结果,很可能远大于1,或者远远小于0,这导致,在拟合的过程中出现误差。
因此我们希望在分类结果就在0<x<1 内,因此我们引入了逻辑回归。
逻辑回归Sigmoid函数
我们通过逻辑函数,将预测值限制在0~1 之间
h
θ
(
x
)
=
g
(
Θ
T
X
)
g
(
z
)
=
1
1
+
e
−
z
h_\theta(x)=g(\Theta^TX) \\ g(z)=\frac{1}{1+e^{-z}}
hθ(x)=g(ΘTX)g(z)=1+e−z1
将预测函数代入可得
我们假设
y
=
1
;
i
f
,
h
θ
(
x
)
≥
0.5
y
=
0
;
i
f
,
h
θ
(
x
)
<
0.5
y=1 ; if , h_\theta(x) \geq 0.5 \\ y=0;if, h_\theta(x) < 0.5
y=1;if,hθ(x)≥0.5y=0;if,hθ(x)<0.5
考虑到g(z) 函数的特殊性,我们可以很容易的得到
y
=
1
;
w
h
e
n
e
v
e
r
,
z
≥
0
y
=
0
;
w
h
e
n
e
v
e
r
,
z
<
0
y=1 ; whenever,z \geq 0 \\ y=0;whenever, z < 0
y=1;whenever,z≥0y=0;whenever,z<0
值得注意的是,这里的逻辑回归可以是非线性的。比如下图所示样本
也许下面的非线性方程会更加适合次分类
h
θ
(
x
)
=
g
(
−
1
+
x
1
2
+
x
2
2
)
h_\theta(x)=g(-1+x_1^2+x_2^2)
hθ(x)=g(−1+x12+x22)
在使用逻辑回归的过程中,由于z=0作为我们判别的分界,我们将z=0称作为决策边界
逻辑回归的代价函数
在线性回归过程中,我们使用的代价函数是:
J
(
θ
0
,
θ
1
,
.
.
.
,
θ
n
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
i
)
−
y
i
)
2
J(\theta_0,\theta_1,...,\theta_n)=\frac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(\boldsymbol x^i)-y^i)^2
J(θ0,θ1,...,θn)=2m1i=1∑m(hθ(xi)−yi)2
也就是说我们可以把代价函数简写为:
c
o
s
t
(
h
θ
(
x
i
)
,
y
i
)
=
1
2
(
h
θ
(
x
i
)
−
y
i
)
2
cost(h_\theta(\boldsymbol x^i),\boldsymbol y^i)=\frac{1}{2}(h_{\theta}(\boldsymbol x^i)-y^i)^2
cost(hθ(xi),yi)=21(hθ(xi)−yi)2
如果我们在逻辑回归中使用用相同的代价函数,因为sigmoid函数的引入,代价损失函数会出现非凸函数。我们无法使用梯度下降获得全局最优解。
为了使得代价函数是一个凸函数,我们需要重新定义代价函数,在逻辑回归中,我们通常使用下面的函数作为代价函数
c
o
s
t
(
h
θ
(
x
)
,
y
)
=
−
log
(
h
θ
(
x
)
)
,
当
y
=
1
c
o
s
t
(
h
θ
(
x
)
,
y
)
=
−
log
(
1
−
h
θ
(
x
)
)
,
当
y
=
0
cost(h_\theta(x),y)=-\log(h_\theta(x)), 当 y=1 \\ cost(h_\theta(x),y)=-\log(1-h_\theta(x)), 当 y=0
cost(hθ(x),y)=−log(hθ(x)),当y=1cost(hθ(x),y)=−log(1−hθ(x)),当y=0
考虑,当h(x)预测值接近0,而实际的标签确实1的情况,取上面的代价函数,当预测结果接近于0,而实际结果为1,会产生一个巨大的代价。
同理,当h(x)预测值接近1,而实际的标签确实0的情况,取上面的代价函数,当预测结果接近于1,而实际结果为0,也会产生一个巨大的代价。
考虑到y 只有0、1两个值,则可以将上面的代价函数合起来写为:
c
o
s
t
(
h
θ
(
x
)
,
y
)
=
−
y
log
(
h
θ
(
x
)
)
−
(
1
−
y
)
log
(
1
−
h
θ
(
x
)
)
cost(h_\theta(x),y)=-y\log(h_\theta(x))-(1-y)\log(1-h_\theta(x))
cost(hθ(x),y)=−ylog(hθ(x))−(1−y)log(1−hθ(x))
对于逻辑回归的代价函数则为:
J
(
θ
)
=
1
m
∑
i
=
1
m
c
o
s
t
(
h
θ
(
x
)
,
y
)
J
(
θ
)
=
−
1
m
{
∑
i
=
1
m
[
y
(
i
)
log
(
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
}
J(\theta)=\frac{1}{m}\sum_{i=1}^{m}cost(h_\theta(x),y) \\ J(\theta)=-\frac{1}{m}\{\sum_{i=1}^{m}[y^{(i)}\log(h_\theta(x^{(i)}))+(1-y^{(i)})\log(1-h_\theta(x^{(i)}))]\}
J(θ)=m1i=1∑mcost(hθ(x),y)J(θ)=−m1{i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]}
NOTE: 这个代价函数实际上是根据统计学的极大似然函数中求得的,并且他是一个凸函数,我们可以通过梯度下降方法来获取最优解。
那么,我们就可以通过最优化代价函数的方式来获取最合适的参数
min
θ
J
(
θ
)
\min_\theta J(\theta)
θminJ(θ)
逻辑回归的参数求解
考虑到我们获得的代价函数J是一个凸函数,我们通过梯度下降求解:
J
(
θ
)
=
−
1
m
{
∑
i
=
1
m
[
y
(
i
)
log
(
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
]
}
J(\theta)=-\frac{1}{m}\{\sum_{i=1}^{m}[y^{(i)}\log(h_\theta(x^{(i)}))+(1-y^{(i)})\log(1-h_\theta(x^{(i)}))]\}
J(θ)=−m1{i=1∑m[y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]}
梯度下降更新方式:
θ
j
:
=
θ
j
−
α
∂
∂
θ
j
J
(
θ
)
\theta_j:=\theta_j-\alpha \frac{\partial}{\partial \theta_j}J(\theta)
θj:=θj−α∂θj∂J(θ)
也就是:
θ
j
:
=
θ
j
−
α
∑
i
=
1
m
(
h
θ
(
x
(
i
)
−
y
(
i
)
)
x
j
(
i
)
)
\theta_j:=\theta_j-\alpha \sum_{i=1}^{m}(h_\theta(x^{(i)}-y^{(i)})x_{j}^{(i)})
θj:=θj−αi=1∑m(hθ(x(i)−y(i))xj(i))
如果你和我一起学习过线性回归的话,你会惊奇的发现逻辑回归的梯度下降和线性绘图的梯度下降的更新方式是完全一样的。 但你要知道的是这两个是不同的两个算法,尽管过程中梯度下降的公式完全一样,但是各个函数之间的定义已经完全不同了。
当然,使用特征缩放等相关的方法依旧能过加速参数收敛。
其他优化算法
- conjugate gradient (共轭梯度)
- BFGS
- L-BFGS
代价函数的推导
已知:
h
θ
(
x
)
h_\theta(x)
hθ(x)表示
x
x
x已知的情况下,y=1的概率
p
(
y
=
1
∣
x
,
w
)
p(y=1|x,w)
p(y=1∣x,w)。那么,y=0的概率为:
1
−
h
θ
(
x
)
1-h_\theta(x)
1−hθ(x)。合写为:
p
(
y
∣
x
,
w
)
=
h
θ
(
x
)
y
(
1
−
h
θ
(
x
)
)
(
1
−
y
)
p(y|x,w)={h_\theta(x)}^y(1-h_\theta(x))^{(1-y)}
p(y∣x,w)=hθ(x)y(1−hθ(x))(1−y)
现在要依据样本计算出最合适的参数
w
w
w, 则可使用极大似然估计法估计,样本出现的似然概率为:
L
(
w
)
=
∏
i
=
1
N
h
θ
(
x
i
)
y
i
(
1
−
h
θ
(
x
i
)
)
(
1
−
y
i
)
L(w)=\prod_{i=1}^N{h_\theta(x_i)}^{y_i}(1-h_\theta(x_i))^{(1-y_i)}
L(w)=i=1∏Nhθ(xi)yi(1−hθ(xi))(1−yi)
取对数:
ln
L
(
w
)
=
∑
i
=
1
N
(
y
i
ln
h
θ
(
x
i
)
+
(
1
−
y
i
)
ln
(
1
−
h
θ
(
x
i
)
)
)
\ln L(w) = \sum_{i=1}^{N}(y_i\ln h_\theta(x_i)+(1-y_i)\ln (1-h_\theta(x_i)) )
lnL(w)=i=1∑N(yilnhθ(xi)+(1−yi)ln(1−hθ(xi)))
添加负号,则取最小值。
NOTE: 本文参考吴恩达机器学习,请勿用于商业用途,如有侵权,告知即删。