逻辑回归虽然名字带有回归,但它是一种分类算法,当然和线性回归一样,逻辑回归会有回归系数,也有回归方程。
Logistic Regression和Linear Regression的原理是相似的,可以简单的描述为这样的过程:
(1)找一个合适的预测函数,一般表示为h函数,该函数就是我们需要找的分类函数,它用来预测输入数据的判断结果。这个过程是非常关键的,需要对数据有一定的了解或分析,知道或者猜测预测函数的“大概”形式,比如是线性函数还是非线性函数。
(2)构造一个Cost函数(损失函数),该函数表示预测的输出(h)与训练数据类别(y)之间的偏差,可以是二者之间的差(h-y)或者是其他的形式。综合考虑所有训练数据的“损失”,将Cost求和或者求平均,记为J(θ)函数,表示所有训练数据预测值与实际类别的偏差。
(3)显然,J(θ)函数的值越小表示预测函数越准确(即h函数越准确),所以这一步需要做的是找到J(θ)函数的最小值。找函数的最小值有不同的方法,Logistic Regression实现时有梯度下降法(Gradient Descent)。
二分类问题
1、寻找预测函数:Logistic函数/也称sigmoid函数
首先需要先找到一个预测函数(h),显然,该函数的输出必须是两类值(分别代表两个类别),所以利用了Logistic函数(或称为Sigmoid函数),函数形式为:
(1)
σ
(
z
)
=
1
1
+
e
−
z
\sigma(z)=\frac{1}{1+e^{-z}} \tag1
σ(z)=1+e−z1(1)
函数形状如下图,从图形可以看出,当
x
=
0
x=0
x=0时,函数值是0.5,随着
x
x
x的增大,对应的函数值将逼近于1,而随着
x
x
x的减小,对应的函数值将逼近于0。sigmoid函数看起来像一个阶跃函数,为了实现logsitic回归分类器,我们可以在每个样本的特征上都乘以一个回归系数(给一个权重数值),然后把结果相加,把这个总和代入sigmoid函数中,从而得到一个范围在0~1之间的数值。则任何大于0.5的数据被分入1类,小于0.5的即被归入0类所以Logsitic函数被看作一种概率估计,属于判别模型。
(2)
z
=
w
0
x
0
+
w
1
x
1
+
⋯
+
w
n
x
n
z=w_0x_0+w_1x_1+\cdots+w_nx_n \tag2
z=w0x0+w1x1+⋯+wnxn(2)
写成向量的形式即:
z
=
w
T
x
z = w^Tx
z=wTx
有时候为了方便会把权值和输入向量进行扩充,即
w
=
(
w
0
,
w
1
,
.
.
.
,
w
n
,
b
)
T
w=(w_0, w_1, ..., w_n, b)^T
w=(w0,w1,...,wn,b)T;
x
=
(
x
0
,
x
1
,
.
.
.
,
x
n
,
1
)
T
x=(x_0, x_1, ..., x_n, 1)^T
x=(x0,x1,...,xn,1)T
一般写损失函数都用
θ
\theta
θ,所以把公式(2)里的
w
w
w改写成
θ
\theta
θ,即
z
=
θ
T
x
z = \theta^Tx
z=θTx,那么就得到了我们的预测函数:
(3)
h
θ
(
x
)
=
g
(
θ
T
x
)
=
1
1
+
e
−
θ
T
x
h_{\theta}(x)=g(\theta^Tx)=\frac{1}{1+e^{-\theta^Tx}} \tag3
hθ(x)=g(θTx)=1+e−θTx1(3)
2、构造损失函数
逻辑回归的损失函数是根据最大似然函数推导出来的。
最大似然估计的目的就是:利用已知样本的结果,反推最有可能(最大概率)导致这样结果的参数值。
举例说明一下:
假如有一个罐子,里面有黑白两种颜色的球,数目多少不知,两种颜色的比例也不知。我们想知道罐中白球和黑球的比例:
但我们不能把罐中的球全部拿出来数。现在我们可以每次任意从已经摇匀的罐中拿一个球出来,记录球的颜色,然后把拿出来的球再放回罐中。这个过程可以重复,我们可以用记录的球的颜色来估计罐中黑白球的比例。
假如在前面的一百次重复记录中,有七十次是白球,请问罐中白球所占的比例最有可能是多少?
很多人马上就有答案了:70%。而其后的理论支撑是什么呢?
理论依据:
白球概率 p p p;黑球概率 1 − p 1 - p 1−p
从罐子中取出一个球,该球是白球的概率: p p p
从罐子中取出三个球,三个球都是白球的概率: p 3 p^3 p3
从罐子中取出100个球,其中70个球是白球,30个球是黑球,概率: p 70 ∗ ( 1 − p ) 30 p^{70}*(1-p)^{30} p70∗(1−p)30
当这个事件概率最大的时候, p p p就是最有可能的值,那么问题就转化成求:
p 70 ∗ ( 1 − p ) 30 p^{70}*(1-p)^{30} p70∗(1−p)30最大值的问题了。
对该式求导数,并令导数等于0:
70 ∗ p 69 ∗ ( 1 − p ) 30 + p 70 ∗ 30 ∗ ( 1 − p ) 29 ∗ ( − 1 ) = 0 70*p^{69}*(1-p)^{30} + p^{70}*30*(1-p)^{29} * (-1) = 0 70∗p69∗(1−p)30+p70∗30∗(1−p)29∗(−1)=0
整理得到: 70 − 100 ∗ p = 0 70 - 100*p = 0 70−100∗p=0,则p=70%
有没有觉得自己很聪明?一秒钟就完成了这些计算!!!
sigmoid函数是0~1之间的函数,也可以表示样本属于真是标记类别的概率,那么样本属于真实类别的概率,即似然函数是:
(4)
P
(
y
∣
x
;
θ
)
{
h
θ
(
x
)
,
y
=
1
1
−
h
θ
(
x
)
,
y
=
0
P(y|x; \theta)\begin{cases} h_\theta(x), & y=1 \\ 1-h_\theta(x), & y=0 \end{cases}\tag 4
P(y∣x;θ){hθ(x),1−hθ(x),y=1y=0(4)
把上式写在一起:
(5)
P
(
y
∣
x
;
θ
)
=
h
θ
(
x
)
y
(
1
−
h
θ
(
x
)
)
1
−
y
,
y
=
{
0
,
1
}
P(y|x; \theta)=h_\theta(x)^{y}(1-h_\theta(x))^{1-y}, \qquad y=\{0,1\} \tag 5
P(y∣x;θ)=hθ(x)y(1−hθ(x))1−y,y={0,1}(5)
对于所有样本而言,似然函数公式(4)可写成:
(6)
L
(
θ
)
=
∏
i
=
1
m
P
(
y
(
i
)
∣
x
(
i
)
;
θ
)
=
∏
i
=
1
m
h
θ
(
x
(
i
)
)
y
(
i
)
(
1
−
h
θ
(
x
(
i
)
)
)
1
−
y
(
i
)
,
\begin{aligned} L(\theta) & =\prod_{i=1}^mP(y^{(i)}|x^{(i)}; \theta) \\ & = \prod_{i=1}^mh_\theta(x^{(i)})^{y^{(i)}}(1-h_\theta(x^{(i)}))^{1-y^{(i)}}, \end{aligned}\tag 6
L(θ)=i=1∏mP(y(i)∣x(i);θ)=i=1∏mhθ(x(i))y(i)(1−hθ(x(i)))1−y(i),(6)
乘法并不好计算,因此取对数似然函数即:
(7)
l
(
θ
)
=
l
o
g
(
L
(
θ
)
)
=
∑
i
=
1
m
(
y
(
i
)
(
l
o
g
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
)
\begin{aligned} l(\theta) & = log(L(\theta)) \\ & = \sum_{i=1}^m\Bigg(y^{(i)}\left(log \ h_\theta(x^{(i)})\right)+\left(1-y^{(i)}\right)\log \ \left(1-h_\theta(x^{(i)})\right)\Bigg) \end{aligned}\tag 7
l(θ)=log(L(θ))=i=1∑m(y(i)(log hθ(x(i)))+(1−y(i))log (1−hθ(x(i))))(7)
求出
l
(
θ
)
l(\theta)
l(θ)的最大值,也就是逻辑回归的最优解,也就是求
−
l
(
θ
)
-l(\theta)
−l(θ)的最小值,那么逻辑回归的损失函数就是
−
l
(
θ
)
-l(\theta)
−l(θ),很多这种写法:
(8)
J
(
θ
)
=
−
1
m
∑
i
=
1
m
(
y
(
i
)
(
l
o
g
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
)
J(\theta) = - \frac{1}{m}\sum_{i=1}^m\Bigg(y^{(i)}\left(log \ h_\theta(x^{(i)})\right)+\left(1-y^{(i)}\right)\log \ \left(1-h_\theta(x^{(i)})\right)\Bigg) \tag 8
J(θ)=−m1i=1∑m(y(i)(log hθ(x(i)))+(1−y(i))log (1−hθ(x(i))))(8)
不知道这个
1
m
\frac{1}{m}
m1是怎么推出来的,猜测是m个样本求平均数?因为m是常数,对结果没有影响。
3、求解损失函数的最小值
求解损失函数的最小值,就是使公式(8)的 J ( θ ) J(\theta) J(θ)最小,因为 x , y x,y x,y都是训练数据集中已知的数值,因此就是求出使 J ( θ ) J(\theta) J(θ)最小的 θ \theta θ值。可以使用迭代尺度法,拟牛顿法、梯度下降法求解。
这里介绍用梯度下降法求解:
(9)
θ
:
=
θ
−
α
∂
∂
θ
J
(
θ
)
\theta:= \theta - \alpha\frac{\partial}{\partial \theta}J(\theta) \tag 9
θ:=θ−α∂θ∂J(θ)(9)
其中:
α
\alpha
α 为步长,偏导数
∂
∂
θ
J
(
θ
)
\frac{\partial}{\partial \theta}J(\theta)
∂θ∂J(θ)为梯度。
- (a) 求梯度,也就是偏导数
其中对 g ( θ T x ( i ) ) g(\theta^Tx^{(i)}) g(θTx(i))的 θ \theta θ求偏导数,结合公式(3),用到了如下复合求偏导数的公式:
- (b)
θ
\theta
θ 的梯度下降最终公式
θ j + 1 = θ j − α ∑ i = 1 m ( g ( θ T x ( i ) ) − y ( i ) ) x ( i ) \theta_{j+1} = \theta_{j} - \alpha \sum_{i=1}^{m}\Big(g(\theta^Tx^{(i)})-y^{(i)}\Big)x^{(i)} θj+1=θj−αi=1∑m(g(θTx(i))−y(i))x(i)
其中 j j j表示每次迭代的次数, m m m表示总样本量,计算得到的最终结果就是逻辑回归的回归系数。
由此可以看出,每一次的梯度方向是和所有样本有关的,如果训练集很大,那么计算量也很大。
关于梯度下降的详细资料可以参考下面这篇文章:
https://www.cnblogs.com/always-fight/p/8933625.html
多分类问题
对于多分类问题,是和二分类问题比较像的:
- 首先把第一类看做正类,其余所有类别看做负类,可以得到第一类样本的概率 p 1 p1 p1;
- 再把第二类看做正类,其余所有类别看做负类,这样就可以得到第二类样本的概率 p 2 p2 p2;
- 依次循环下去得到所有类别的概率。
对于多分类问题,给定一个预测样本,输出的是所有类别的概率,取其中最大的那个作为预测样本的结果。
可以粗略看下这篇文章:
https://blog.csdn.net/u011734144/article/details/79717470