赞
踩
逻辑斯蒂回归是一个用于分类的有监督学习分类方法,常常用来解决二分类问题。原始的逻辑斯蒂回归不能解决多分类问题,但是我们可以改造他们之后用来解决多分类问题(后面讨论)。他返回的结果是0-1之间的数字,用以表示可能性,也就是概率(这里的不是真正的概率,而是类概率)。我们可以根据业务需求设定相应的阈值,将回归结果与阈值相比较,进行分类。
作为一种解决二分类问题的分类方法,逻辑斯蒂回归也是需要找到一个预测函数,该函数必须要满足输出值可以分别代表两个类别的需求,所以我们引入了sigmoid函数(比较平滑,能够更好的拟合):
σ
(
z
)
=
1
1
+
e
−
z
\sigma(z)=\frac{1}{1+e^{-z}}
σ(z)=1+e−z1
sigmoid函数可以将原本普通的线性回归的(负无穷到正无穷的)预测结果映射到(0,1)区间内,以使我们可以进行有效的分类。
sigmoid函数的改造方法就是将普通线性回归的矩阵形式,也就是特征加权求和(β表示权重),带入到函数中作为变量,让他可以预测分类概率(y=1)为例
y
=
x
β
y=x\beta
y=xβ
P
(
y
)
=
1
1
+
e
−
x
β
P(y)=\frac{1}{1+e^{-xβ}}
P(y)=1+e−xβ1
同普通线性回归一样,逻辑斯蒂回归也需要求损失函数(SSE残差的平方和),但将sigmoid函数带入到普通损失函数方程中构成的函数不是凸函数,不易优化,容易陷入局部最小值,因此逻辑斯蒂回归换了别的形式的函数作为损失函数,叫做“对数损失函数”。推导过程详见最大似然估计。
J
(
β
)
=
−
log
L
(
β
)
=
−
∑
i
=
1
n
(
[
y
i
×
log
(
1
1
+
e
−
x
i
β
)
]
+
[
(
1
−
y
i
)
×
log
(
1
−
1
1
+
e
−
x
i
β
)
]
)
J(\beta)=-\log L(β)=-\sum_{i=1}^n([y_i\times\log(\frac{1}{1+e^{-x_iβ}})]+[(1-y_i)\times \log(1-\frac{1}{1+e^{-x_iβ}})])
J(β)=−logL(β)=−i=1∑n([yi×log(1+e−xiβ1)]+[(1−yi)×log(1−1+e−xiβ1)])
概率 - 描述某个事件发生的可能性。
似然性 - 一个事情已经发生,反过来反推在什么参数条件下,这个事情发生的概率最大。
已知参数β的前提下,预测某件事x发生的条件概率P(x|β)
已知某个已经发生的事件x,位置参数β的似然函数 L(β|x)
P
(
x
∣
β
)
=
L
(
β
∣
x
)
P(x|β)=L(β|x)
P(x∣β)=L(β∣x)
一个参数β对应一个似然函数的值,β变化的时候,L(β|x) 也会发生变化,当我们取得某个参数的值的时候,似然函数的值达到最大值,说明这个参数下最有可能发生x事件,即这个参数最合理。(最优β,使当前观察到的数据出现可能性最大的β)
在二分类问题中,y值能取0和1, 公式可写为:
P
(
y
)
=
P
(
y
=
1
)
y
P
(
y
=
0
)
1
−
y
P(y)=P(y=1)^yP(y=0)^{1-y}
P(y)=P(y=1)yP(y=0)1−y
以上式子,更加严谨的写法,需要增加特征x和参数β:
式子1:
P
(
y
∣
x
,
β
)
=
P
(
y
=
1
∣
x
,
β
)
y
[
1
−
P
(
y
=
1
∣
x
,
β
)
]
1
−
y
P(y|x,β)=P(y=1|x,β)^y [1-P(y=1|x,β)]^ {1-y}
P(y∣x,β)=P(y=1∣x,β)y[1−P(y=1∣x,β)]1−y
式子2:
P
(
y
=
1
)
=
1
1
+
e
−
x
β
P(y=1)=\frac{1}{1+e^{-xβ}}
P(y=1)=1+e−xβ1
将式子1和式子2联立:
P
(
y
∣
x
,
β
)
=
(
1
1
+
e
−
x
β
)
y
(
1
−
1
1
+
e
−
x
β
)
1
−
y
P(y|x,β)=(\frac{1}{1+e^{-xβ}})^y(1-\frac{1}{1+e^{-xβ}})^{1-y}
P(y∣x,β)=(1+e−xβ1)y(1−1+e−xβ1)1−y
根据上面的似然函数的定义,也就是说要最大化我们见到的样本数据的概率,就是要求这个最大值:
L
(
β
)
=
∏
i
=
1
n
P
(
y
i
∣
x
i
β
)
=
∏
i
=
1
n
(
1
1
+
e
−
x
)
y
(
1
−
1
1
+
e
−
x
)
1
−
y
L(β)=\prod_{i=1}^nP(y_i|x_iβ)=\prod_{i=1}^n(\frac{1}{1+e^{-x}})^y(1-\frac{1}{1+e^{-x}})^{1-y}
L(β)=i=1∏nP(yi∣xiβ)=i=1∏n(1+e−x1)y(1−1+e−x1)1−y
以上式子求最大值比较麻烦,但是我们可以先取对数然后将乘积转变为加法取对数之后可以成为如下:
log
L
(
β
)
=
∑
i
=
1
n
(
[
y
i
×
log
(
1
1
+
e
−
x
i
β
)
]
+
[
(
1
−
y
i
)
×
log
(
1
−
1
1
+
e
−
x
i
β
)
]
)
\log L(β)=\sum_{i=1}^n([y_i\times\log(\frac{1}{1+e^{-x_iβ}})]+[(1-y_i)\times \log(1-\frac{1}{1+e^{-x_iβ}})])
logL(β)=i=1∑n([yi×log(1+e−xiβ1)]+[(1−yi)×log(1−1+e−xiβ1)])
我们需要考虑两种情况:
第一种是在考虑penalty参数的选择
penalty参数选择如果L2正则化,那么4种可选的算法{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’}都可以选择。
但是如果是L1正则化的话, 就只能选择‘liblinear’了。原因是newton-cg, lbfgs和sag这三种优化算法时都需要损失函数的⼀阶或者⼆阶连续导数,因此不能⽤于没有连续导数的L1正则化,
第二种情况:考虑逻辑斯蒂回归用在多分类场景下multi_class参数的选择
如果multi_class参数选择的是ovr,则4种损失函数的优化⽅⽅法liblinear,newton-cg, lbfgs和sag都可以选择
如果multi_class参数选择的是multinomial,则只能则选择newton-cg, lbfgs和sag。
这里补充一个有关sag优化方法:样本量大的时候,sag是我们的第一选择,这是因为sag每次只会用部分样本进行梯度迭代。
sag不能用于L1正则化项,所以当样本量大的时候,我们需要做取舍,或者可以通过其他途径实现目的,比如要么通过采样降低样本量,要么自己先将重要特征选出来。
原始逻辑斯蒂回归本身是不能解决多分类问题,但是我们可以改造他们,用以解决多分类问题。
训练的时间是原本分类的N倍(sklearn默认使用OVR)
OvR的思想很简单,⽆论你是多少元逻辑回归,我们都可以看做⼆元逻辑回归。具体做法是,对于第K 类的分类决策,我们把所有第K类的样本作为正例,除了第K类样本以外的所有样本都作为负例,然后在上⾯做⼆元逻辑回归,得到第K类的分类模型。其他类的分类模型获得以此类推。
将多个分类通过多个不同的模型(一一预测),多个结果选择预测率最高的结果, ⼀共需要K次分类
举例说明:如果模型有T类,我们每次在所有的T类样本⾥⾯选择两类样本出来,不妨记为T1类和T2类,把所有的输出为T1和T2的样本放在⼀起,把T1作为正例,T2作为负例,进⾏⼆元逻辑回归,得到模型参数。我们⼀共需要T(T- 1)/2次分类。
通俗的说,就是将类别进行两两组合,然后进行单独训练预测,最终在所有的预测种类中比较其赢数(概率)最高的即为分类结果。这样就将问题拆解成了二分类问题了。
实际上就是代替sigmoid函数,直接实现多分类的方式。
优点:
缺点:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。