前言
Logistic回归是把线性回归(连续的)转化为二分类的问题(不连续的)的模型
今天从头梳理一下Logistic回归。
文章的整体思路是:
- 由Odds引出logit函数
- 由logit函数推导出它的反函数sigmod函数
- sigmod函数推导出Logistic回归
- 求解参数 θ \theta θ值
Odds引出logit函数
Odds的全称是:The Odds Of Experiencing An Event
翻译过来就是事件发生与不发生的概率的比值。
它是用来衡量特征当中分类之间关联的一种方式。指的是事件发生的概率(简称正例下文会经常用到)与该事件不发生的概率(负例)的比值,即:
o
d
d
s
=
p
1
−
p
odds = \frac{p}{1-p}
odds=1−pp
由此引出一个新的函数 --> Logit函数,其中就是Odds取对数,即:
l
o
g
i
t
(
p
)
=
ln
p
1
−
p
=
θ
T
x
logit(p) = \ln\frac{p}{1-p} = \theta^T x
logit(p)=ln1−pp=θTx
θ
T
x
\theta^T x
θTx是什么呢?
θ
T
\theta^T
θT是
θ
⃗
\vec\theta
θ转置,
θ
⃗
\vec\theta
θ是个列向量,机器学习中所有的向量默认都是列向量。Logistic回归不是通过线性回归进行二分类吗?
θ
\theta
θ就是线性回归方程的系数。
θ
T
\theta^T
θT展开以后就是:
θ
T
=
[
θ
1
,
θ
2
,
θ
3
,
⋯
 
,
θ
n
]
\theta^{T} = [\theta_{1}, \ \theta_{2},\ \theta_{3}, \ \cdots, \ \theta_{n}]
θT=[θ1, θ2, θ3, ⋯, θn]
x
x
x(小写)也是个列向量,表示一个样本中的数据,
x
x
x(小写)展开以后为:
x
⃗
=
[
x
1
x
2
x
3
⋮
x
n
]
\vec x = \begin{bmatrix} x_{1} \\ x_{2} \\ x_{3} \\ \vdots \\ x_{n} \end{bmatrix}
x=⎣⎢⎢⎢⎢⎢⎡x1x2x3⋮xn⎦⎥⎥⎥⎥⎥⎤
则:
θ
T
x
=
θ
1
x
1
,
θ
2
x
2
,
θ
3
x
3
,
⋯
 
,
θ
n
x
n
\theta^T x =\theta_{1}x_{1}, \ \theta_{2}x_{2}, \ \theta_{3}x_{3}, \ \cdots, \ \theta_{n}x_{n}
θTx=θ1x1, θ2x2, θ3x3, ⋯, θnxn
logit函数推导它的反函数sigmod函数
让我们再回到logit函数:
l
o
g
i
t
(
p
)
=
ln
p
1
−
p
logit(p) = \ln\frac{p}{1-p}
logit(p)=ln1−pp
p
p
p是事件发生的概率,取值范围为
(
0
,
1
)
(0, 1)
(0,1),于是logit函数的取值范围为
(
−
∞
,
+
∞
)
(-\infty, +\infty)
(−∞,+∞)
logit函数是人为定义的.在坐标轴上画出来是这样的:
上文中 l o g i t ( p ) = θ T X logit(p) = \theta^T X logit(p)=θTX是我们根据数据构建出来的线性回归方程,我们假设logit函数符合某种线性关系,也就是说和我们的特征之间呈现某种线性关系,注意,这是我们人为定义的.
为什么可以这么人为定义呢?
机器学习中好多算法都是基于某种人为定义的假设,然后基于这种假设进行层层的推导,最终得到某种模型,然后用数据验证我们的假设是否理想(准确率有多高),不理想的话再换一种模型(换一种假设)
sigmod函数其实就是logit函数的反函数,推导如下:
令:
f
=
l
o
g
i
t
(
p
)
f = logit(p)
f=logit(p)
于是有:
f
=
ln
p
1
−
p
f = \ln\frac{p}{1-p}
f=ln1−pp
两边同时取
e
e
e
e
f
=
p
1
−
p
(
1
−
p
)
e
f
=
p
(
1
+
e
f
)
p
=
e
f
p
=
e
f
1
+
e
f
p
=
1
1
+
e
−
f
\begin{aligned} e^{f} = \frac{p}{1-p} \\ \\ (1-p)e^{f} = p \\ \\ (1+e^{f})p = e^{f}\\ \\ p = \frac{e^{f}}{1+e^{f}} \\ p =\frac{1}{1+e^{-f}} \end{aligned}
ef=1−pp(1−p)ef=p(1+ef)p=efp=1+efefp=1+e−f1
而
f
=
θ
T
x
f = \theta^T x
f=θTx,于是我们的sigmod函数就出来了:
p
=
1
1
+
e
−
θ
T
x
p =\frac{1}{1+e^{-\theta^T x}}
p=1+e−θTx1
让我们再回到当初,
当初我们为什么要求解这个sigmoid函数呢?
一开始的时候我们有logit函数,通过这个函数我们可以输入一个p然后得到一个y,但是这没什么鸟用
于是我们假定x与Y之间存在某种线性关系,通过X与Y和Y与P之间的关系,我们得到sigmoid函数,即输入一个x(特征值)得到一个p(概率),这个就很有用了.
那么当初的logit函数为什么要加个
ln
\ln
ln呢?
OK,这就是sigmoid函数的核心:推导出来的sigmoid函数正好将原有函数的取值范围映射到了0和1之间,即sigmod函数:
P
=
g
(
θ
T
x
)
=
1
1
+
e
−
θ
T
x
P
∼
(
0
,
1
)
\begin{aligned} P =g(\theta^T x) = \frac{1}{1+e^{-\theta^T x}} \\ \\ P \sim (0, 1) \end{aligned}
P=g(θTx)=1+e−θTx1P∼(0,1)
OK,它是不是与概率的取值范围是一致的呢?后面处处都会用到滴.
sigmod函数推导Logistic回归
上面我们求导出来 的sigmod函数是连续的,而Logistic是通过线性回归做二分类的,它们怎么连接起来呢?
我们知道:
- X是我们的数据
- Y是分类结果
- P是预测分类结果的概率
我们是不是可以认为:
- 当概率P大于某一阈值的时候是正例
- 当概率P小于某一阈值的时候是负例
我们可以发现sigmod函数是一个关于点
(
0
,
0.5
)
(0, 0.5)
(0,0.5)对称的奇函数,
于是有:
f
(
x
)
+
f
(
−
x
)
=
1
f(x) + f(-x) = 1
f(x)+f(−x)=1
这是一个很好的性质?我们正好可以认为当
P
>
0.5
P > 0.5
P>0.5 的时候是正例,当
P
≤
0.5
P \leq 0.5
P≤0.5的时候是负例。
于是Logistic回归就出来了:
y
^
=
{
1
,
P
(
y
^
=
1
)
>
p
阈
0
,
P
(
y
^
=
0
)
≤
p
阈
\hat y = \begin{cases} 1, P(\hat y = 1) > p_{阈} \\ 0, P(\hat y = 0) \leq p_{阈} \\ \end{cases}
y^={1,P(y^=1)>p阈0,P(y^=0)≤p阈
注:
- y ^ \hat y y^表示预测结果
- y y y表示实际结果
- P ( y ^ = x ) P(\hat y = x) P(y^=x)表示sigmod函数,它可以取到不同的概率值
- Y Y Y本质上就是一个类别(类别不是连续的,直接就是等于 0 0 0,或者等于 1 1 1,只有这两个值)
需要说明的是用线性回归做分类一定要慎重
因为阈值不好确定,本例中的sigmod函数正好关于点
(
0
,
0.5
)
(0, 0.5)
(0,0.5)对称,因此阈值是0.5很合理,但是如果不关于0.5对称呢?这个时候你所设定的阈值可能是盲目的,没有数学依据的.从而导致预测得不准确
求解参数 θ \theta θ值
在线性回归里
P
(
y
∣
x
)
P(y|x)
P(y∣x)符合正态分布:
y
∣
x
∼
N
(
θ
T
x
,
σ
2
)
y|x \sim N(\theta^Tx, \sigma^2)
y∣x∼N(θTx,σ2)
为什么呢?我们可以画个图看下:
在坐标轴中黑色的点表示实际的分布情况,红色的直线表示我们的预测结果,点到线的距离是不是呈正态分布呢?
可以考虑下极大似然估计
为了方便计算我们令$h_{\theta}(x)为sigmod函数,即:
h
θ
(
x
i
)
=
1
1
+
e
−
θ
x
h_{\theta} (x^{i}) = \frac{1}{1 + e^{-\theta x}}
hθ(xi)=1+e−θx1
由上文推导出来的Logistic回归,
假设:
P
(
y
=
1
∣
x
;
θ
)
=
h
θ
(
x
i
)
P
(
y
=
0
∣
x
;
θ
)
=
1
−
h
θ
(
x
i
)
P
(
y
∣
x
;
θ
)
=
(
h
θ
(
x
i
)
)
y
(
1
−
h
θ
(
x
i
)
)
1
−
y
P(y=1 | x;\theta) = h_{\theta} (x^{i})\\ \\ P(y=0 | x; \theta)= 1 - h_{\theta} (x^{i}) \\ \\ P(y | x; \theta)= (h_{\theta} (x^{i}))^{y}(1 - h_{\theta} (x^{i}))^{1-y}
P(y=1∣x;θ)=hθ(xi)P(y=0∣x;θ)=1−hθ(xi)P(y∣x;θ)=(hθ(xi))y(1−hθ(xi))1−y
其实你可以认为将上面Logistic回归两人式合并为一个。
于是可以写出它的概率密度函数,也即似然函数:
L
(
θ
)
=
∏
P
(
y
1
y
2
y
3
⋯
y
m
∣
x
i
;
θ
)
L(\theta) = \prod P(y^{1}y^{2}y^{3} \cdots y^{m} | x_{i}; \theta)
L(θ)=∏P(y1y2y3⋯ym∣xi;θ)
不同的观测值之间是独立同分布的.
于是有:
L
(
θ
)
=
P
(
y
⃗
∣
X
;
θ
)
=
∏
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) &= P(\vec{y} | X; \theta) \\ &= \prod_{i=1}^{m} P(y^{i} | x_{i}; \theta)\\ &=\prod_{i=1}^{m}(h_{\theta} (x^{i}))^{y^{i}}(1 - h_{\theta} (x^{i}))^{1-y^{i}} \end{aligned}
L(θ)=P(y∣X;θ)=i=1∏mP(yi∣xi;θ)=i=1∏m(hθ(xi))yi(1−hθ(xi))1−yi
OK,现在我们求解
L
(
θ
)
L(\theta)
L(θ)的极大值就行了,即极大似然估计。
由于
ln
L
(
θ
)
\ln L(\theta)
lnL(θ)与
L
(
θ
)
L(\theta)
L(θ)的单调性是相同的,而
ln
L
(
θ
)
\ln L(\theta)
lnL(θ)的极值给比较好求,故我们可以求解
ln
L
(
θ
)
\ln L(\theta)
lnL(θ)导数。
在对
ln
L
(
θ
)
\ln L(\theta)
lnL(θ)求导之前,我们先对sigmod函数求导:
我们先来个简化版的:
令
g
(
z
)
=
1
1
+
e
−
z
g(z) = \frac{1}{1+ e^{-z}}
g(z)=1+e−z1
对
g
(
z
)
g(z)
g(z)求导:
g
(
z
)
′
=
(
1
1
+
e
−
z
)
′
=
(
−
1
(
1
+
e
−
z
)
2
)
⋅
(
−
e
−
z
)
=
e
−
z
(
1
+
e
−
z
)
2
=
1
1
+
e
−
z
⋅
e
−
z
1
+
e
−
z
=
1
1
+
e
−
z
⋅
(
1
−
1
1
+
e
−
z
)
=
g
(
z
)
(
1
−
g
(
z
)
)
\begin{aligned} g(z) ' &= \left(\frac{1}{1+ e^{-z}}\right)' \\ &= \left(- \frac{1}{(1+e^{-z})^{2}}\right) \cdot \left(-e^{-z}\right) \\ &= \frac{e^{-z}}{(1+e^{-z})^{2}} \\ &= \frac{1}{1 + e^{-z}} \cdot \frac{e^{-z}}{1+e^{-z}} \\ &= \frac{1}{1 + e^{-z}} \cdot \left(1- \frac{1}{1 + e^{-z}}\right) \\ &= g(z)\left(1- g(z) \right) \end{aligned}
g(z)′=(1+e−z1)′=(−(1+e−z)21)⋅(−e−z)=(1+e−z)2e−z=1+e−z1⋅1+e−ze−z=1+e−z1⋅(1−1+e−z1)=g(z)(1−g(z))
于是我们可以知道
h
θ
(
x
i
)
h_{\theta}(x^{i})
hθ(xi)的导数为:
h
θ
′
(
x
i
)
=
h
θ
(
x
i
)
(
1
−
h
θ
(
x
i
)
)
h_{\theta}'(x^{i}) = h_{\theta}(x^{i})(1- h_{\theta}(x^{i}))
hθ′(xi)=hθ(xi)(1−hθ(xi))
对
L
(
θ
)
L(\theta)
L(θ)取对数:
ln
L
(
θ
)
=
ln
∏
i
=
1
m
(
h
θ
(
x
i
)
y
i
⋅
(
1
−
h
θ
(
x
i
)
1
−
y
i
)
=
∑
i
=
1
m
(
y
i
⋅
ln
h
θ
(
x
i
)
−
(
1
−
y
i
)
⋅
ln
h
θ
(
x
i
)
)
=
∑
i
=
1
m
(
y
i
ln
h
θ
(
x
i
)
+
(
1
−
y
i
)
⋅
ln
(
1
−
h
θ
(
x
i
)
)
)
\begin{aligned} \ln L(\theta) &=\ln \prod_{i=1}^{m}\left(h_{\theta} (x^{i})^{y^{i}} \cdot (1 - h_{\theta} (x^{i})^{1-y^{i}}\right) \\ &= \sum_{i=1}^{m}\left(y^{i} \cdot \ln h_{\theta}(x^{i}) - (1 - y^{i}) \cdot \ln h_{\theta}(x^{i})\right) \\ &= \sum_{i=1}^{m} \left(y^{i} \ln h_{\theta}(x^{i}) + (1 - y^{i}) \cdot \ln (1- h_{\theta}(x^{i}))\right) \\ \end{aligned}
lnL(θ)=lni=1∏m(hθ(xi)yi⋅(1−hθ(xi)1−yi)=i=1∑m(yi⋅lnhθ(xi)−(1−yi)⋅lnhθ(xi))=i=1∑m(yilnhθ(xi)+(1−yi)⋅ln(1−hθ(xi)))
OK,准备工作已经完成了,现在可以对
ln
L
(
θ
)
\ln L(\theta)
lnL(θ)关于
θ
\theta
θ求偏导了:
∂
ln
L
(
θ
)
∂
θ
j
=
(
∑
i
=
1
m
(
y
i
ln
h
θ
(
x
i
)
+
(
1
−
y
i
)
⋅
ln
(
1
−
h
θ
(
x
i
)
)
)
)
′
=
∑
i
=
1
m
(
y
i
h
θ
(
x
i
)
−
1
−
y
i
1
−
h
θ
(
x
i
)
)
⋅
∂
h
θ
(
x
i
)
∂
θ
j
\begin{aligned} \frac{\partial \ln L(\theta)}{\partial\theta_{j}} &=\left(\sum_{i=1}^{m} \left(y^{i} \ln h_{\theta}(x^{i}) + (1 - y^{i}) \cdot \ln (1- h_{\theta}(x^{i}))\right)\right)' \\ &= \sum_{i=1}^{m} \left(\frac{y^{i}}{h_{\theta}(x^{i})} - \frac{1 - y^{i}}{1- h_{\theta}(x^{i})} \right) \cdot \frac{\partial h_{\theta}(x^{i})}{\partial\theta_{j}} \end{aligned}
∂θj∂lnL(θ)=(i=1∑m(yilnhθ(xi)+(1−yi)⋅ln(1−hθ(xi))))′=i=1∑m(hθ(xi)yi−1−hθ(xi)1−yi)⋅∂θj∂hθ(xi)
令
g
(
θ
T
x
i
)
=
h
θ
(
x
i
)
g(\theta^{T}x^{i}) = h_{\theta}(x^{i})
g(θTxi)=hθ(xi),于是有:
∂
ln
L
(
θ
)
∂
θ
j
=
∑
i
=
1
m
(
y
i
g
(
θ
T
x
i
)
−
1
−
y
i
1
−
g
(
θ
T
x
i
)
)
⋅
∂
g
(
θ
T
x
i
)
∂
θ
j
\frac{\partial \ln L(\theta)}{\partial\theta_{j}} = \sum_{i=1}^{m} \left(\frac{y^{i}}{g(\theta^{T}x^{i})} - \frac{1 - y^{i}}{1- g(\theta^{T}x^{i})} \right) \cdot \frac{\partial g(\theta^{T}x^{i})}{\partial\theta_{j}}
∂θj∂lnL(θ)=i=1∑m(g(θTxi)yi−1−g(θTxi)1−yi)⋅∂θj∂g(θTxi)
剩下的就是对
g
(
θ
T
x
i
)
g(\theta^{T}x^{i})
g(θTxi)关于
θ
\theta
θ求偏导。
根据微分链式法则,我们可以先对
g
(
θ
T
x
i
)
g(\theta^{T}x^{i})
g(θTxi)求偏导,再对
θ
T
x
i
\theta^{T}x^{i}
θTxi求偏导。
g
(
θ
T
x
i
)
g(\theta^{T}x^{i})
g(θTxi)就是sigmod函数,上文我们已经求出了它的导数即:
g
(
θ
T
x
i
)
=
g
(
θ
T
x
i
)
⋅
(
1
−
g
(
θ
T
x
i
)
)
g(\theta^{T}x^{i}) = g(\theta^{T}x^{i}) \cdot (1 - g(\theta^{T}x^{i}))
g(θTxi)=g(θTxi)⋅(1−g(θTxi))
然后就是对
θ
T
x
i
\theta^{T}x^{i}
θTxi求偏导,
θ
T
x
i
\theta^{T}x^{i}
θTxi中
θ
T
\theta^{T}
θT是个向量,
x
x
x是个矩阵,
x
i
x^{i}
xi则是个向量,二者相乘展开为:
g
(
θ
T
x
i
)
=
θ
1
x
1
+
θ
2
x
2
+
θ
3
x
3
+
⋯
+
θ
n
x
n
g(\theta^{T}x^{i}) = \theta_{1}x_{1} + \theta_{2}x_{2} + \theta_{3}x_{3} + \cdots + \theta_{n}x_{n}
g(θTxi)=θ1x1+θ2x2+θ3x3+⋯+θnxn
关于
θ
\theta
θ求偏导,除了第
i
i
i项外,其他的都是
0
0
0
于是对
θ
T
x
i
\theta^{T}x^{i}
θTxi关于
θ
j
\theta_{j}
θj求偏导的结果为:
∂
(
θ
T
x
i
)
∂
θ
j
=
x
j
j
\frac{\partial(\theta^{T}x^{i})}{\partial \theta_{j}} = x_{j}^{j}
∂θj∂(θTxi)=xjj
g
(
θ
T
x
i
)
g(\theta^{T}x^{i})
g(θTxi)关于
θ
\theta
θ求偏导的结果就出来了:
∂
g
(
θ
T
x
i
)
∂
θ
j
=
g
(
θ
T
x
i
)
⋅
(
1
−
g
(
θ
T
x
i
)
)
⋅
x
j
j
\frac{\partial g(\theta^{T}x^{i})}{\partial\theta_{j}} = g(\theta^{T}x^{i}) \cdot (1 - g(\theta^{T}x^{i})) \cdot x_{j}^{j}
∂θj∂g(θTxi)=g(θTxi)⋅(1−g(θTxi))⋅xjj
∂
ln
L
(
θ
)
∂
θ
j
\frac{\partial \ln L(\theta)}{\partial\theta_{j}}
∂θj∂lnL(θ)的偏导也出来了:
∂
ln
L
(
θ
)
∂
θ
j
=
∑
i
=
1
m
(
y
i
g
(
θ
T
x
i
)
−
1
−
y
i
1
−
g
(
θ
T
x
i
)
)
⋅
∂
g
(
θ
T
x
i
)
∂
θ
j
=
∑
i
=
1
m
(
y
i
g
(
θ
T
x
i
)
−
1
−
y
i
1
−
g
(
θ
T
x
i
)
)
⋅
g
(
θ
T
x
i
)
⋅
(
1
−
g
(
θ
T
x
i
)
)
⋅
x
j
j
=
∑
i
=
1
m
(
y
i
⋅
(
1
−
g
(
θ
T
x
i
)
)
−
(
1
−
y
i
)
⋅
g
(
θ
T
x
i
)
)
⋅
x
j
j
=
∑
i
=
1
m
(
y
i
−
y
i
g
(
θ
T
x
i
)
−
g
(
θ
T
x
i
)
+
y
i
g
(
θ
T
x
i
)
)
⋅
x
j
j
=
∑
i
=
1
m
(
y
i
−
g
(
θ
T
x
i
)
)
⋅
x
j
j
\begin{aligned} \frac{\partial \ln L(\theta)}{\partial\theta_{j}} &= \sum_{i=1}^{m} \left(\frac{y^{i}}{g(\theta^{T}x^{i})} - \frac{1 - y^{i}}{1- g(\theta^{T}x^{i})} \right) \cdot \frac{\partial g(\theta^{T}x^{i})}{\partial\theta_{j}} \\ &= \sum_{i=1}^{m} \left(\frac{y^{i}}{g(\theta^{T}x^{i})} - \frac{1 - y^{i}}{1- g(\theta^{T}x^{i})} \right) \cdot g(\theta^{T}x^{i}) \cdot \left(1 - g(\theta^{T}x^{i})\right) \cdot x_{j}^{j} \\ &= \sum_{i=1}^{m} \left(y^{i} \cdot \left(1 - g(\theta^{T}x^{i})\right) - (1 - y^{i}) \cdot g(\theta^{T}x^{i}) \right) \ \cdot x_{j}^{j} \\ &= \sum_{i=1}^{m} \left(y^{i} - y^{i}g(\theta^{T}x^{i}) - g(\theta^{T}x^{i}) + y^{i}g(\theta^{T}x^{i}) \right) \ \cdot x_{j}^{j} \\ &= \sum_{i=1}^{m} \left(y^{i} - g(\theta^{T}x^{i}) \right) \ \cdot x_{j}^{j} \\ \end{aligned}
∂θj∂lnL(θ)=i=1∑m(g(θTxi)yi−1−g(θTxi)1−yi)⋅∂θj∂g(θTxi)=i=1∑m(g(θTxi)yi−1−g(θTxi)1−yi)⋅g(θTxi)⋅(1−g(θTxi))⋅xjj=i=1∑m(yi⋅(1−g(θTxi))−(1−yi)⋅g(θTxi)) ⋅xjj=i=1∑m(yi−yig(θTxi)−g(θTxi)+yig(θTxi)) ⋅xjj=i=1∑m(yi−g(θTxi)) ⋅xjj
OK,
L
(
θ
)
L(\theta)
L(θ)的极大似然估计就出来了,它与
ln
L
(
θ
)
\ln L(\theta)
lnL(θ)取得极大值的位置是一样的,即:
∂
ln
L
(
θ
)
∂
θ
j
=
∑
i
=
1
m
(
y
i
−
g
(
θ
T
x
i
)
)
⋅
x
j
j
\frac{\partial \ln L(\theta)}{\partial\theta_{j}} = \sum_{i=1}^{m} \left(y^{i} - g(\theta^{T}x^{i}) \right) \ \cdot x_{j}^{j}
∂θj∂lnL(θ)=i=1∑m(yi−g(θTxi)) ⋅xjj
我们可以看下梯度下降法的公式:
θ
j
=
θ
j
+
α
∑
i
=
1
m
(
y
i
−
h
θ
(
x
i
)
)
⋅
x
j
i
\theta_{j} = \theta_{j} + \alpha\sum_{i=1}^{m}\left( y^{i} - h_{\theta}(x^{i}) \right) \cdot x_{j}^{i}
θj=θj+αi=1∑m(yi−hθ(xi))⋅xji
二者是不是很像呢?
然后我们就可以用梯度下降法来求解Logistic回归了。
写得实在是太长了,也实在是太久了,Logistic回归的损失函数和代码实现等有机会了再写吧。