概述
一看到这个驴唇不对马嘴的名字,就忍不住笑,明明是个分类算法,却非要命名为逻辑回归。这是个历史问题,是由于逻辑规则算法中的假设函数而来的,它的假设函数别名为“逻辑函数”。
逻辑回归是用来解决二分类问题的机器学习方法,用来评估某种事物的可能性。
名词解释
伯努利分布
这个名词非常好记:“不努力”。
伯努利分布又称“两点分布”或“0-1分布”,来源于伯努利实验。在做实验的时候,只有两种结果:成功、失败。假设成功的概率为p,则失败的概率就是1-p。
基本原理
逻辑回归是基于线性回归实现的,在线性回归的基础上增量了一个函数,从而增加了非线性的特性。
假设函数
线性回归的假设函数是
h
θ
(
x
)
=
θ
T
X
h_θ(x)=θ^TX
hθ(x)=θTX,逻辑回归在线性函数的基础上增加函数
g
(
z
)
=
1
1
+
e
−
z
g(z)=\frac{1}{1+e^{-z}}
g(z)=1+e−z1,得出逻辑回归的假设函数是:
h
θ
(
x
)
=
g
(
θ
T
X
)
=
1
1
+
e
−
θ
T
X
h_θ(x)=g(θ^TX)=\frac{1}{1+e^{-θ^TX}}
hθ(x)=g(θTX)=1+e−θTX1
为了方便理解,假设这是一个二分类问题,y的取值只能是0或1。
则
h
θ
(
x
)
h_θ(x)
hθ(x)就是针对指定x,y=1的概率,使用数学概率表示为:
h
θ
(
x
)
=
P
(
y
=
1
∣
x
;
θ
)
h_θ(x)=P(y=1|x;θ)
hθ(x)=P(y=1∣x;θ),意思是在限定x θ的情况下y=1的概率。
y=0的概率就是
P
(
y
=
0
∣
x
;
θ
)
=
1
−
P
(
y
=
1
∣
x
;
θ
)
P(y=0|x;θ)=1-P(y=1|x;θ)
P(y=0∣x;θ)=1−P(y=1∣x;θ)
决策边界
g
(
z
)
g(z)
g(z)函数的效果图如下所示:
当z趋近于无限大时,函数值无限趋近于1;当z趋近于无穷小时,函数值趋近于0;
当z=0时,函数值为0.5。
作为一个二分类问题,结果只能是0和1两种,所以我们做个假设:
- 当 g ( z ) > = 0.5 g(z)>=0.5 g(z)>=0.5时,结果y为1.也就是 z = θ T X > = 0 z=θ^TX>=0 z=θTX>=0
- 当 g ( z ) < 0.5 g(z)<0.5 g(z)<0.5时,结果y为0.也就是 z = θ T X < 0 z=θ^TX<0 z=θTX<0
基于以上的结论,我们可以对具体的逻辑回归案例进行分析,找出两个分类的临界点即决策边界。
线性的决策边界
假设逻辑回归的假设函数为 h θ ( x ) = g ( θ 0 + θ 1 ∗ x 1 + θ 2 ∗ x 2 ) h_θ(x)=g(θ_0+θ_1*x_1+θ_2*x_2) hθ(x)=g(θ0+θ1∗x1+θ2∗x2),θ取值是 [ − 3 1 1 ] \left[\begin{matrix}-3&1&1\end{matrix}\right] [−311](参数的拟合过程老师没有给出,此处的目的是为了解释决策边界,而不是参数的拟合),根据上面的推导过程有以下的结论:
- 当
z
=
θ
T
X
>
=
0
z=θ^TX>=0
z=θTX>=0时,y=1,即
θ
0
+
θ
1
∗
x
1
+
θ
2
∗
x
2
>
=
0
θ_0+θ_1*x_1+θ_2*x_2 >=0
θ0+θ1∗x1+θ2∗x2>=0,带入θ值,
即 − 3 + x 1 + x 2 > = 0 -3+x_1+x_2 >=0 −3+x1+x2>=0
即 x 1 + x 2 > = 3 x_1+x_2 >=3 x1+x2>=3时,y=1 - 同理当
z
=
θ
T
X
<
0
z=θ^TX<0
z=θTX<0时,y=0,即
x
1
+
x
2
<
3
x_1+x_2 <3
x1+x2<3时。
如上图所示,所有的元素以中间紫色的直线为界分为两部分,蓝色为y=0,红色的y=1,紫色的直线就是决策边界。
需要注意的是当θ确定后,决策边界就确定了,它是假设函数的属性,不是训练集的属性。
圆形的决策边界
假设逻辑回归的假设函数为 h θ ( x ) = g ( θ 0 + θ 1 ∗ x 1 + θ 2 ∗ x 2 + θ 3 ∗ x 1 2 + θ 4 ∗ x 2 2 ) h_θ(x)=g(θ_0+θ_1*x_1+θ_2*x_2+θ_3*x_1^2+θ_4*x_2^2) hθ(x)=g(θ0+θ1∗x1+θ2∗x2+θ3∗x12+θ4∗x22),θ取值是 [ − 1 0 0 1 1 ] \left[\begin{matrix}-1&0&0&1&1\end{matrix}\right] [−10011],根据上面的推导过程有以下的结论:
- 当
z
=
θ
T
X
>
=
0
z=θ^TX>=0
z=θTX>=0时,y=1,即
θ
0
+
θ
1
∗
x
1
+
θ
2
∗
x
2
+
θ
3
∗
x
1
2
+
θ
4
∗
x
2
2
>
=
0
θ_0+θ_1*x_1+θ_2*x_2+θ_3*x_1^2+θ_4*x_2^2 >=0
θ0+θ1∗x1+θ2∗x2+θ3∗x12+θ4∗x22>=0,带入θ值,
即 − 1 + x 1 2 + x 2 2 > = 0 -1+x_1^2+x_2^2>=0 −1+x12+x22>=0
即 x 1 2 + x 2 2 > = 1 x_1^2+x_2^2 >=1 x12+x22>=1时,y=1 - 同理当
z
=
θ
T
X
<
0
z=θ^TX<0
z=θTX<0时,y=0,即
x
1
2
+
x
2
2
<
1
x_1^2+x_2^2 <1
x12+x22<1时。
对应的决策边界是个圆形。
不规则的决策边界
通过调整假设函数,可以得出不同的决策边界。
代价函数
代价函数是拟合参数的手段,回顾一下线性回归的代价函数为:
J
(
θ
)
=
1
2
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
=
1
m
∑
i
=
1
m
1
2
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
J(θ )=\frac{1}{2m}\sum_{i=1}^m(h_θ(x^{(i)})-y^{(i)})^2=\frac{1}{m}\sum_{i=1}^m\frac{1}{2}(h_θ(x^{(i)})-y^{(i)})^2
J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2=m1i=1∑m21(hθ(x(i))−y(i))2
假设:
c
o
s
t
(
h
θ
(
x
(
i
)
)
,
y
(
i
)
)
=
1
2
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
2
cost(h_θ(x^{(i)}), y^{(i)})=\frac{1}{2}(h_θ(x^{(i)})-y^{(i)})^2
cost(hθ(x(i)),y(i))=21(hθ(x(i))−y(i))2
简化一下,去掉i
c
o
s
t
(
h
θ
(
x
)
,
y
)
=
1
2
(
h
θ
(
x
)
−
y
)
2
cost(h_θ(x), y)=\frac{1}{2}(h_θ(x)-y)^2
cost(hθ(x),y)=21(hθ(x)−y)2
因为在逻辑回归中
h
θ
(
x
)
=
1
1
+
e
−
θ
T
X
h_θ(x)=\frac{1}{1+e^{-θ^TX}}
hθ(x)=1+e−θTX1
则代入到
J
(
θ
)
J(θ)
J(θ)中后画出的图形如下图所示,有很多局部优化点,这种图形称之为“非凸函数”,不利于进行梯度下降:
下面给出逻辑回归的代价函数:
c
o
s
t
(
h
θ
(
x
)
,
y
)
=
{
−
l
o
g
(
h
θ
(
x
)
)
i
f
y
=
1
−
l
o
g
(
1
−
h
θ
(
x
)
)
i
f
y
=
0
}
cost(h_θ(x), y)= \left\{ \begin{aligned} -log(h_θ(x)) \qquad if \quad y = 1 \\ -log(1 - h_θ(x)) \qquad if \quad y = 0 \\ \end{aligned} \right\}
cost(hθ(x),y)={−log(hθ(x))ify=1−log(1−hθ(x))ify=0}
该公式等价于:
c
o
s
t
(
h
θ
(
x
)
,
y
)
=
{
−
y
∗
l
o
g
(
h
θ
(
x
)
)
−
(
1
−
y
)
l
o
g
(
1
−
h
θ
(
x
)
)
}
cost(h_θ(x), y)= \left\{ \begin{aligned} -y*log(h_θ(x)) -(1-y)log(1 - h_θ(x)) \end{aligned} \right\}
cost(hθ(x),y)={−y∗log(hθ(x))−(1−y)log(1−hθ(x))}
y=1的情况下,代价函数的图形如下所示,y轴代表代价函数的值,则当
h
θ
(
x
)
h_θ(x)
hθ(x)趋近于1时代价函数趋近于0,所以可知
h
θ
(
x
)
=
1
h_θ(x)=1
hθ(x)=1时,y=1的概率最大:
y=0的情况下,代价函数的图形如下所示,y轴代表代价函数的值,则当
h
θ
(
x
)
h_θ(x)
hθ(x)趋近于0时代价函数趋近于0,所以可知
h
θ
(
x
)
=
0
h_θ(x)=0
hθ(x)=0时,y=0的概率最大:
这与我们的推想是一致的,当预测值与实际值一致时,没有代价:
- h θ ( x ) = 0 h_θ(x)=0 hθ(x)=0时,y=0的概率最大,代价为0;
- h θ ( x ) = 1 h_θ(x)=1 hθ(x)=1时,y=1的概率最大,代价为0;
我们同样可以使用梯度下降法去求θ,梯度下降法可以参考线性回归中的描述。
梯度下降并不是唯一的算法,也可以使用conjugate gradiat、BFGS、L-BFGS算法计算,这些算法更加复杂也更加智能,计算速率也更快。
多类别分类算法
多类别分类问题,可以看成是多个二分类问题,假设现在y的取值范围变成了(1,2,3),可以定义以下3个假设函数:
- h θ ( 1 ) ( x ) h^{(1)}_θ(x) hθ(1)(x),表示特定θX的情况下,y=1的概率:P(y=1|x;θ)
- h θ ( 2 ) ( x ) h^{(2)}_θ(x) hθ(2)(x),表示特定θX的情况下,y=2的概率:P(y=2|x;θ)
- h θ ( 3 ) ( x ) h^{(3)}_θ(x) hθ(3)(x),表示特定θX的情况下,y=3的概率:P(y=3|x;θ)
所以假设函数可以表示为: h θ ( i ) ( x ) = P ( y = i ∣ x ; θ ) h^{(i)}_θ(x)=P(y=i|x;θ) hθ(i)(x)=P(y=i∣x;θ)
所以判断x是什么类别,就是把x分别代入到3个公式中,取h最大的i作为最终的类别。
示例
from sklearn.linear_model import LogisticRegression
import os
import pandas as pd
import numpy as np
# 要预测的结果字段
y_label = ['predclass']
# training_data 训练集,指标字段
x_label = [i for i in training_data.columns if i not in y_label]
lr = LogisticRegression(C=0.01, penalty='l1')
lr.fit(training_data[x_label], training_data[y_label])
# test_data是测试集,在测试集上测试一下效果
score = lr.score(test_data[x_label], test_data['predclass'])
# 速度比近邻要快得多
print("score", score)
参考
https://zhuanlan.zhihu.com/p/28408516