概述
一看到这个驴唇不对马嘴的名字,就忍不住笑,明明是个分类算法,却非要命名为逻辑回归。这是个历史问题,是由于逻辑规则算法中的假设函数而来的,它的假设函数别名为“逻辑函数”。 逻辑回归是用来解决二分类问题的机器学习方法,用来评估某种事物的可能性。
名词解释
伯努利分布
这个名词非常好记:“不努力”。 伯努利分布又称“两点分布”或“0-1分布”,来源于伯努利实验。在做实验的时候,只有两种结果:成功、失败。假设成功的概率为p,则失败的概率就是1-p。
基本原理
逻辑回归是基于线性回归实现的,在线性回归的基础上增量了一个函数,从而增加了非线性的特性。
假设函数
线性回归的假设函数是
h
θ
(
x
)
=
θ
T
X
h_θ(x)=θ^TX
h θ ( x ) = θ T X ,逻辑回归在线性函数的基础上增加函数
g
(
z
)
=
1
1
+
e
−
z
g(z)=\frac{1}{1+e^{-z}}
g ( z ) = 1 + e − z 1 ,得出逻辑回归的假设函数是:
h
θ
(
x
)
=
g
(
θ
T
X
)
=
1
1
+
e
−
θ
T
X
h_θ(x)=g(θ^TX)=\frac{1}{1+e^{-θ^TX}}
h θ ( x ) = g ( θ T X ) = 1 + e − θ T X 1
为了方便理解,假设这是一个二分类问题,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 = θ T X > = 0
当
g
(
z
)
<
0.5
g(z)<0.5
g ( z ) < 0 . 5 时,结果y为0.也就是
z
=
θ
T
X
<
0
z=θ^TX<0
z = θ T X < 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 ∗ x 1 + θ 2 ∗ x 2 ) ,θ取值是
[
−
3
1
1
]
\left[\begin{matrix}-3&1&1\end{matrix}\right]
[ − 3 1 1 ] (参数的拟合过程老师没有给出,此处的目的是为了解释决策边界,而不是参数的拟合),根据上面的推导过程有以下的结论:
当
z
=
θ
T
X
>
=
0
z=θ^TX>=0
z = θ T X > = 0 时,y=1,即
θ
0
+
θ
1
∗
x
1
+
θ
2
∗
x
2
>
=
0
θ_0+θ_1*x_1+θ_2*x_2 >=0
θ 0 + θ 1 ∗ x 1 + θ 2 ∗ x 2 > = 0 ,带入θ值, 即
−
3
+
x
1
+
x
2
>
=
0
-3+x_1+x_2 >=0
− 3 + x 1 + x 2 > = 0 即
x
1
+
x
2
>
=
3
x_1+x_2 >=3
x 1 + x 2 > = 3 时,y=1
同理当
z
=
θ
T
X
<
0
z=θ^TX<0
z = θ T X < 0 时,y=0,即
x
1
+
x
2
<
3
x_1+x_2 <3
x 1 + x 2 < 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 ∗ x 1 + θ 2 ∗ x 2 + θ 3 ∗ x 1 2 + θ 4 ∗ x 2 2 ) ,θ取值是
[
−
1
0
0
1
1
]
\left[\begin{matrix}-1&0&0&1&1\end{matrix}\right]
[ − 1 0 0 1 1 ] ,根据上面的推导过程有以下的结论:
当
z
=
θ
T
X
>
=
0
z=θ^TX>=0
z = θ T X > = 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 ∗ x 1 + θ 2 ∗ x 2 + θ 3 ∗ x 1 2 + θ 4 ∗ x 2 2 > = 0 ,带入θ值, 即
−
1
+
x
1
2
+
x
2
2
>
=
0
-1+x_1^2+x_2^2>=0
− 1 + x 1 2 + x 2 2 > = 0 即
x
1
2
+
x
2
2
>
=
1
x_1^2+x_2^2 >=1
x 1 2 + x 2 2 > = 1 时,y=1
同理当
z
=
θ
T
X
<
0
z=θ^TX<0
z = θ T X < 0 时,y=0,即
x
1
2
+
x
2
2
<
1
x_1^2+x_2^2 <1
x 1 2 + x 2 2 < 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 ( θ ) = 2 m 1 i = 1 ∑ m ( h θ ( x ( i ) ) − y ( i ) ) 2 = m 1 i = 1 ∑ m 2 1 ( 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
c o s t ( h θ ( x ( i ) ) , y ( i ) ) = 2 1 ( 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
c o s t ( h θ ( x ) , y ) = 2 1 ( h θ ( x ) − y ) 2 因为在逻辑回归中
h
θ
(
x
)
=
1
1
+
e
−
θ
T
X
h_θ(x)=\frac{1}{1+e^{-θ^TX}}
h θ ( x ) = 1 + e − θ T X 1 则代入到
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\}
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 } 该公式等价于:
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\}
c o s t ( h θ ( x ) , y ) = { − y ∗ l o g ( h θ ( x ) ) − ( 1 − y ) l o g ( 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