一、理论篇
1、概述
线性回归模型能对连续值结果进行预测。但是,在现实生活中更为常见的是分类问题,其中最简单的就是二分类问题(是或否)。
回归得到的结果是定量的,是一个具体的数值,将定量的实数值转换为定性的分类值通常有以下两种方法。
(1)找一个阈值作为分水岭与回归实数值进行对比,该做法是线性分类;
(2)将回归实数值转换成概论值为0~1的实数,再与一个阈值比较,该做法是对率/逻辑分类。
逻辑回归(Logistic regression,简称LR)虽然其中带有“回归”两个字,但逻辑回归其实是一个分类模型,并且广泛应用于各个领域之中,比如垃圾邮件分类、预测肿瘤是良性还是恶性、预测某人的信用是否良好等。
而对于逻辑回归而言,最为突出的两点就是其模型简单和模型的可解释性强。
逻辑回归模型的优劣势:
优点:实现简单,易于理解和实现;计算代价不高,速度很快,存储资源低;
缺点:容易欠拟合,分类精度可能不高。
2、逻辑回归模型
线性回归模型可被简写为
y
=
w
T
x
+
b
y=w^Tx+b
y=wTx+b。很多时候,我们不是直接用线性模型对
y
y
y进行建模,比如:
l
n
(
y
)
=
w
T
x
+
b
ln(y)=w^Tx+b
ln(y)=wTx+b即
y
=
l
n
−
1
(
w
T
x
+
b
)
=
e
x
p
(
w
T
x
+
b
)
y=ln^{-1}(w^Tx+b)=exp(w^Tx+b)
y=ln−1(wTx+b)=exp(wTx+b)
上述模型被称为对数线性回归模型,它试图让
e
x
p
(
w
T
x
+
b
)
exp(w^Tx+b)
exp(wTx+b)逼近
y
y
y,即
l
n
(
y
)
ln(y)
ln(y)与
w
w
w呈线性关系。更一般地,对于任何单调函数
h
(
⋅
)
h(·)
h(⋅),令
h
(
y
)
=
w
T
x
+
b
h(y)=w^Tx+b
h(y)=wTx+b即
y
=
h
−
1
(
w
T
x
+
b
)
=
g
(
w
T
x
+
b
)
y=h^{-1}(w^Tx+b)=g(w^Tx+b)
y=h−1(wTx+b)=g(wTx+b)
上述模型被称为广义线性回归模型,其中函数
h
(
⋅
)
h(·)
h(⋅)被称为联系函数,而
g
=
h
−
1
g=h^{-1}
g=h−1是联系函数的反函数。
对于二分类任务,其输出标记为
y
∈
{
0
,
1
}
y∈\{0,1\}
y∈{0,1},而线性回归模型产生的预测值
z
=
w
T
x
+
b
z=w^Tx+b
z=wTx+b是实值,于是,我们需将实值
z
z
z转换为0/1值。最理想的是“单位阶跃函数”。
y
=
{
0
z
<
0
0.5
z
=
0
1
z
>
0
y=\begin{cases} 0& \text{$z<0$}\\ 0.5& \text{$z=0$}\\ 1& \text{$z>0$}\\ \end{cases}
y=⎩⎪⎨⎪⎧00.51z<0z=0z>0
即若预测值
z
z
z大于零就判为正类,小于零就判为反类,预测值为临界值零则可任意判别,如下图所示:
但是,单位阶跃函数不连续,所以我们找到了能在一定程度上近似单位阶跃函数的“替代函数”,并且它单调可微,这个函数就是对数几率函数。对数几率函数是一种“Sigmoid函数”,它将
z
z
z值转化为一个接近0或1的
y
y
y值。
我们定义逻辑回归的预测函数为
y
=
g
(
w
T
x
+
b
)
y=g(w^Tx+b)
y=g(wTx+b),其中
g
(
z
)
g(z)
g(z)是sigmoid函数。sigmoid函数可以将任意实数转换为0~1之间的概率值。图像如下:
g
(
z
)
=
1
1
+
e
−
z
,
g(z)=\cfrac{1}{1+e^{-z}},
g(z)=1+e−z1,
所以
y
=
g
(
w
T
x
+
b
)
=
1
1
+
e
−
(
w
T
x
+
b
)
y=g(w^Tx+b)=\cfrac{1}{1+e^{-(w^Tx+b)}}
y=g(wTx+b)=1+e−(wTx+b)1。
变形得,
l
n
y
1
−
y
=
w
T
x
+
b
ln\cfrac{y}{1-y}=w^Tx+b
ln1−yy=wTx+b。
如果将 y y y设为样本 x x x为正类的可能性,那么 1 − y 1-y 1−y就是 x x x为负类的可能性。两者的比值被称为概率/几率;类比赌球的赔率2:1,即赢球的概率为2/3,而输球的概率为1/3。在概率上求对数就变成对数概率/几率,简称对率。
在上面的sigmoid函数图象中,
g
(
θ
T
x
)
g(θ^Tx)
g(θTx)的值以0.5作为分类的边界。
(1)当
z
≥
0
z≥0
z≥0时,
g
(
z
)
≥
0.5
g(z)≥0.5
g(z)≥0.5;即当
θ
T
x
≥
0
θ^Tx≥0
θTx≥0时,
g
(
θ
T
x
)
≥
0.5
g(θ^Tx)≥0.5
g(θTx)≥0.5,此时将样本归为‘1’类。
(2)当
z
≤
0
z≤0
z≤0时,
g
(
z
)
≤
0.5
g(z)≤0.5
g(z)≤0.5;即当
θ
T
x
≤
0
θ^Tx≤0
θTx≤0时,
g
(
θ
T
x
)
≤
0.5
g(θ^Tx)≤0.5
g(θTx)≤0.5,此时将样本归为‘0’类。
【例子】如图,红色‘×’代表‘1’类,蓝色‘○’代表‘0’类。此时我们可以先构建一个二元回归方程
z
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
z=θ_0+θ_1x_1+θ_2x_2
z=θ0+θ1x1+θ2x2,当
z
≥
0
z≥0
z≥0时,
g
(
z
)
≥
0.5
g(z)≥0.5
g(z)≥0.5,此时将样本划分为类别‘1’;当
z
≤
0
z≤0
z≤0时,
g
(
z
)
≤
0.5
g(z)≤0.5
g(z)≤0.5,此时将样本划分为类别‘0’;决策边界就是
z
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
=
0
z=θ_0+θ_1x_1+θ_2x_2=0
z=θ0+θ1x1+θ2x2=0。
对于数据
i
i
i(其中
i
=
1
,
2
,
.
.
.
,
m
i=1,2,...,m
i=1,2,...,m),建模如下:
p
(
y
(
i
)
=
1
∣
x
(
i
)
;
w
)
=
1
1
+
e
−
(
w
T
x
+
b
)
=
g
(
w
T
x
(
i
)
)
p(y^{(i)}=1|x^{(i)};w)=\cfrac{1}{1+e^{-(w^Tx+b)}}=g(w^Tx^{(i)})
p(y(i)=1∣x(i);w)=1+e−(wTx+b)1=g(wTx(i))
(表示当给定特征
x
(
i
)
x^{(i)}
x(i)和参数
w
w
w时
y
(
i
)
=
1
y^{(i)}=1
y(i)=1的条件概率)
p
(
y
(
i
)
=
0
∣
x
(
i
)
;
w
)
=
1
−
p
(
y
(
i
)
=
1
∣
x
(
i
)
;
w
)
=
1
−
g
(
w
T
x
(
i
)
)
=
1
1
+
e
w
T
x
+
b
p(y^{(i)}=0|x^{(i)};w)=1-p(y^{(i)}=1|x^{(i)};w)=1-g(w^Tx^{(i)})=\cfrac{1}{1+e^{w^Tx+b}}
p(y(i)=0∣x(i);w)=1−p(y(i)=1∣x(i);w)=1−g(wTx(i))=1+ewTx+b1
(表示当给定特征
x
(
i
)
x^{(i)}
x(i)和参数
w
w
w时
y
(
i
)
=
0
y^{(i)}=0
y(i)=0的条件概率)
这种对条件概率建模的方法解释性更强,不仅在给定特征 x ( i ) x^{(i)} x(i)和参数 w w w的情况下测出类别,即 y ( i ) = 1 y^{(i)}=1 y(i)=1或 y ( i ) = 0 y^{(i)}=0 y(i)=0,同时也给出了该预测类别对应的概率。
利用条件概率来描述数据是正类和负类的可能性,则数据
i
i
i对应的概率公式可写成
L
i
(
w
)
=
p
(
1
∣
x
(
i
)
;
w
)
y
(
i
)
p
(
0
∣
x
(
i
)
;
w
)
(
1
−
y
(
i
)
)
L_i(w)=p(1|x^{(i)};w)^{y^{(i)}}p(0|x^{(i)};w)^{(1-y^{(i)})}
Li(w)=p(1∣x(i);w)y(i)p(0∣x(i);w)(1−y(i))
从上式可知,当
y
(
i
)
=
1
y^{(i)}=1
y(i)=1时,
1
−
y
(
i
)
=
0
1-y^{(i)}=0
1−y(i)=0,因此
L
i
(
w
)
L_i(w)
Li(w)可简化成
p
(
1
∣
x
(
i
)
;
w
)
p(1|x^{(i)};w)
p(1∣x(i);w);当
y
(
i
)
=
0
y^{(i)}=0
y(i)=0时,
1
−
y
(
i
)
=
1
1-y^{(i)}=1
1−y(i)=1,因此
L
i
(
w
)
L_i(w)
Li(w)可简化成
p
(
0
∣
x
(
i
)
;
w
)
p(0|x^{(i)};w)
p(0∣x(i);w)。
假设所有数据都是独立同分布的,则由二项分布得知它们一起发生的概率(似然函数)为
L
(
w
)
=
∏
i
=
1
m
L
i
(
w
)
=
∏
i
=
1
m
p
(
1
∣
x
(
i
)
;
w
)
y
(
i
)
p
(
0
∣
x
(
i
)
;
w
)
(
1
−
y
(
i
)
)
L(w)=\prod \limits_{i=1}^mL_i(w)=\prod \limits_{i=1}^mp(1|x^{(i)};w)^{y^{(i)}}p(0|x^{(i)};w)^{(1-y^{(i)})}
L(w)=i=1∏mLi(w)=i=1∏mp(1∣x(i);w)y(i)p(0∣x(i);w)(1−y(i))
【对于参数为 θ θ θ的概率模型, p ( x ∣ θ ) p(x|θ) p(x∣θ)可称为 θ θ θ的可能性(假设观察到 x x x)。如果我们观察到 x x x并且想要估计产生它的 θ θ θ,则用最大似然估计(MLE)选择最大化 p ( x ∣ θ ) p(x|θ) p(x∣θ)的 θ θ θ。】
利用最大似然估计解出参数
w
w
w,使得
L
(
w
)
L(w)
L(w)最大。在优化过程中,优化函数的“累加”比“累乘”(似然函数)要简单。因此,将似然函数
L
(
w
)
L(w)
L(w)上取对数,生成对数似然函数
l
(
w
)
l(w)
l(w)就可以了,对数似然函数为
l
(
w
)
=
l
n
[
L
(
w
)
]
l(w)=ln[L(w)]
l(w)=ln[L(w)]
=
l
n
[
∏
i
=
1
m
L
i
(
w
)
]
=ln[\prod \limits_{i=1}^mL_i(w)]
=ln[i=1∏mLi(w)]
=
l
n
[
∏
i
=
1
m
p
(
1
∣
x
(
i
)
;
w
)
y
(
i
)
p
(
0
∣
x
(
i
)
;
w
)
(
1
−
y
(
i
)
)
]
=ln[\prod \limits_{i=1}^mp(1|x^{(i)};w)^{y^{(i)}}p(0|x^{(i)};w)^{(1-y^{(i)})}]
=ln[i=1∏mp(1∣x(i);w)y(i)p(0∣x(i);w)(1−y(i))]
=
∑
i
=
1
m
l
n
[
p
(
1
∣
x
(
i
)
;
w
)
y
(
i
)
p
(
0
∣
x
(
i
)
;
w
)
(
1
−
y
(
i
)
)
]
=\sum_{i=1}^{m}ln[p(1|x^{(i)};w)^{y^{(i)}}p(0|x^{(i)};w)^{(1-y^{(i)})}]
=i=1∑mln[p(1∣x(i);w)y(i)p(0∣x(i);w)(1−y(i))]
=
∑
i
=
1
m
[
y
(
i
)
l
n
(
p
(
1
∣
x
(
i
)
;
w
)
)
+
(
1
−
y
(
i
)
)
l
n
(
p
(
0
∣
x
(
i
)
;
w
)
)
]
=\sum_{i=1}^{m}[y^{(i)}ln(p(1|x^{(i)};w))+(1-y^{(i)})ln(p(0|x^{(i)};w))]
=i=1∑m[y(i)ln(p(1∣x(i);w))+(1−y(i))ln(p(0∣x(i);w))]
=
∑
i
=
1
m
[
y
(
i
)
l
n
(
g
(
w
T
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
l
n
(
1
−
g
(
w
T
x
(
i
)
)
)
]
=\sum_{i=1}^{m}[y^{(i)}ln(g(w^Tx^{(i)}))+(1-y^{(i)})ln(1-g(w^Tx^{(i)}))]
=i=1∑m[y(i)ln(g(wTx(i)))+(1−y(i))ln(1−g(wTx(i)))]
3、逻辑回归的代价函数
【在
l
(
w
)
l(w)
l(w)前加负号,将“最大化对数似然函数”转换成“最小误差函数”】
以对数似然函数来定义对率回归下的误差函数:
J
(
w
)
=
−
1
m
∑
i
=
1
m
l
(
w
)
=
1
m
∑
i
=
1
m
[
−
y
(
i
)
l
n
(
g
(
w
T
x
(
i
)
)
)
−
(
1
−
y
(
i
)
)
l
n
(
1
−
g
(
w
T
x
(
i
)
)
)
]
J(w)=-\frac{1}{m}\sum_{i=1}^ml(w)=\frac{1}{m}\sum_{i=1}^m[-y^{(i)}ln(g(w^Tx^{(i)}))-(1-y^{(i)})ln(1-g(w^Tx^{(i)}))]
J(w)=−m1i=1∑ml(w)=m1i=1∑m[−y(i)ln(g(wTx(i)))−(1−y(i))ln(1−g(wTx(i)))]
真实类别为‘1’时代价函数图像【图3.1】
真实类别为‘0’时的代价函数图像【图3.2】
(1)由图3.1可知,当真实类别
y
=
1
y=1
y=1时,如果预测结果
h
θ
(
x
)
=
1
h_θ(x)=1
hθ(x)=1,则
c
o
s
t
→
0
cost→0
cost→0;如果
h
θ
(
x
)
=
0
h_θ(x)=0
hθ(x)=0,则
c
o
s
t
→
∞
cost→∞
cost→∞;
【如果真实类别为y=1,且分类预测结果为1,则代价趋近于0,否则代价趋近于无穷】
(2)由图3.2可知,当真实类别
y
=
0
y=0
y=0时,如果预测结果
h
θ
(
x
)
=
1
h_θ(x)=1
hθ(x)=1,则
c
o
s
t
→
∞
cost→∞
cost→∞;如果
h
θ
(
x
)
=
0
h_θ(x)=0
hθ(x)=0,则
c
o
s
t
→
0
cost→0
cost→0。
【如果真实类别为y=0,且分类预测结果为0,则代价趋近于0,否则代价趋近于无穷】
合并上面两个代价函数,可以得到总体代价函数为
4、梯度下降法
梯度下降法的目的是求解一组
θ
θ
θ,使得代价函数
J
(
θ
)
J(θ)
J(θ)的值达到最小。
5、线性不可分
【例子1】线性可分:下图是exam1和exam2的分数以及对应录取结果的散点图:
【例子2】非线性可分:下图是芯片1和芯片2的测试结果以及对应分类的散点图:
在例子1中,从散点图可以看出,录取的学生和没录取的学生的分类可以有一条直线来完成,这样的问题叫作线性可分问题,处理起来会比较简单。
在例子2中,两类数据不能用一条直线来分类,这种问题属于线性不可分问题。
因此,我们需要用更复杂的模型来描述对率函数
g
(
⋅
)
g(·)
g(⋅)的自变量。比如,在例子2中,我们采用多项式模型,即把现有的两个特征通过多项式合成更多的特征。打个比方,用
x
1
x_1
x1和
x
2
x_2
x2代表这个特征,一个基于
x
1
x_1
x1和
x
2
x_2
x2的2次多项式最多可扩展为5项:
[
f
1
,
f
2
,
f
3
,
f
4
,
f
5
]
=
[
1
,
x
1
,
x
2
,
x
1
2
,
x
1
x
2
,
x
2
2
]
[f_1,f_2,f_3,f_4,f_5]=[1,x_1,x_2,x_1^2,x_1x_2,x_2^2]
[f1,f2,f3,f4,f5]=[1,x1,x2,x12,x1x2,x22]
用
f
f
f代表转换后的特征,它是一个5维的向量。
6、类别不平衡
在分类任务中,当不同类别的样本数目差别很大时,会给学习过程带来很大困难。比如99个正例和1个负例,那么设计一个永远预测为正类的模型,准确率高达99%,但是这种模型没有什么意义和价值,因为他预测不出任何负类。
所以当一个训练数据集,假设正例个数远大于负例个数,则有以下三种解决方法:
(1)对正例进行欠采样,去除一些正例使得正/负例的个数接近,用
p
>
0.5
p>0.5
p>0.5条件来预测正类;
(2)对负例进行过采样,增加一些负例使得正/负例的个数接近,用
p
>
0.5
p>0.5
p>0.5条件来预测正类;
(3)阈值移动,用
p
>
m
+
m
p>\frac{m^+}{m}
p>mm+(而不是
p
>
0.5
p>0.5
p>0.5)条件来预测正类。
7、多分类问题
我们上面讨论的情况都是基于二分类问题,即只能区分两个类别,是最简单的模型。那么区分两个以上的类别(多分类问题),比如辨别手写数字0-9共10个类别。我们可以采取下面3种常见的分类策略。
(1)一对一(One vs One,OvO)
(2)一对其他(One vs Rest,OvR)
(3)多分类回归(Softmax Regression,SR)
给定一个具有N个分类类别的数据集,OvO将这N个类别两两配对,从而产生N(N-1)/2个二分类任务,则我们需要训练N(N-1)/2个分类器。在测试阶段,新样本将同时交给所有分类器,于是我们将得到N(N-1)/2个分类结果,最终结果可通过投票产生:即把被预测得最多的类别作为最终分类结果。
OvR则是每次将一个类的样例作为正例、所有其他类的样例作为反例来训练N个分类器。在测试时若仅有一个分类器预测为正类,则对应的类别标记作为最终分类结果。若有多个分类器预测为正类,则通常考虑各分类器的预测置信度,选择置信度最大的类别标记作为分类结果。
容易看出,OvR只需训练N个分类器,而OvO需训练N(N-1)/2个分类器。因此,N(N-1)/2的存储开销和测试时间开销通常比 OvR更大。但在训练时,OvR的每个分类器均使用全部训练样例,而OvO的每个分类器仅用到两个类的样例,因此,在类别很多时,OvO的训练时间开销通常比OvR更小。至于预测性能,则取决于具体的数据分布,在多数情形下两者差不多。
OvO和OvR分类策略都是把多类别分类问题转换成二类别分类问题,而softmax函数(多分类函数)是直接把对率回归推广到多类别分类中,不必组成多个二分类模型。
多分类回归思想很简单,假设总共有
K
K
K个类别,给定一个特征
x
x
x,该模型计算属性第
k
k
k类的分数
s
k
(
x
)
=
w
k
T
x
s_k(x)=w_k^Tx
sk(x)=wkTx,然后进行归一化,转换成属于第
k
k
k类的概率,公式如下:
p
k
=
e
s
k
(
x
)
∑
j
=
1
K
e
s
j
(
x
)
p_k=\frac{e^{s_k(x)}}{\sum_{j=1}^Ke^{s_j(x)}}
pk=∑j=1Kesj(x)esk(x)
下面用一个实际例子展示了如何将得分2、1、-1利用softmax函数转换成概率
p
1
、
p
2
、
p
3
p_1、p_2、p_3
p1、p2、p3。
s 1 s_1 s1 | s 2 s_2 s2 | s 3 s_3 s3 |
---|---|---|
2 | 1 | -1 |
e s 1 e^{s_1} es1 | e s 2 e^{s_2} es2 | e s 3 e^{s_3} es3 |
---|---|---|
7.39 | 2.72 | 0.37 |
∑ k = 1 3 e s k \sum_{k=1}^{3}e^{s_k} k=1∑3esk |
---|
10.48 |
p 1 = e s 1 ∑ k = 1 3 e s k p_1=\frac{e^{s_1}}{\sum_{k=1}^3e^{s_k}} p1=∑k=13eskes1 | p 2 = e s 2 ∑ k = 1 3 e s k p_2=\frac{e^{s_2}}{\sum_{k=1}^3e^{s_k}} p2=∑k=13eskes2 | p 3 = e s 3 ∑ k = 1 3 e s k p_3=\frac{e^{s_3}}{\sum_{k=1}^3e^{s_k}} p3=∑k=13eskes3 |
---|---|---|
0.71 | 0.26 | 0.04 |
为了防止上溢和下溢,令 x i = s i − max i ( s i ) x_i=s_i-\max_i(s_i) xi=si−maxi(si),则 p 1 = e x 1 ∑ k = 1 3 e x k p_1=\frac{e^{x_1}}{\sum_{k=1}^3e^{x_k}} p1=∑k=13exkex1, p 2 = e x 2 ∑ k = 1 3 e x k p_2=\frac{e^{x_2}}{\sum_{k=1}^3e^{x_k}} p2=∑k=13exkex2, p 3 = e x 3 ∑ k = 1 3 e x k p_3=\frac{e^{x_3}}{\sum_{k=1}^3e^{x_k}} p3=∑k=13exkex3。
和对率回归的二分类模型一样,多分类回归的多分类模型将估计概率最高的类别作为预测结果。上面例子中, p 1 p_1 p1最大,因此预测为类别1。