逻辑回归(logistic regression)是分类算法的一种,通过形成决策边界,达到对数据进行分类的效果。
1.逻辑回归模型
逻辑回归的模型如下:
p
1
=
p
(
y
=
1
∣
x
)
=
1
1
+
e
−
θ
T
x
=
g
(
θ
T
x
)
p
0
=
p
(
y
=
0
∣
x
)
=
e
−
θ
T
x
1
+
e
−
θ
T
x
=
1
−
g
(
θ
T
x
)
p_1=p(y=1|x)=\frac{1}{1+e^{-\theta^Tx}}=g(\theta^Tx) \\ p_0=p(y=0|x)=\frac{e^{-\theta^Tx}}{1+e^{-\theta^Tx}}=1-g(\theta^Tx) \\
p1=p(y=1∣x)=1+e−θTx1=g(θTx)p0=p(y=0∣x)=1+e−θTxe−θTx=1−g(θTx)
将上式合并后,有
p
(
y
∣
x
)
=
p
1
y
p
0
1
−
y
p(y|x)=p_1^yp_0^{1-y}
p(y∣x)=p1yp01−y
2.算法思想
逻辑回归中,以二分类为例,最终预测得到的是一个分类,也就是0或者1。若目标函数
h
θ
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
+
.
.
.
+
θ
n
x
n
h_θ=θ_0+θ_1x_1+θ_2x_2+...+θ_nx_n
hθ=θ0+θ1x1+θ2x2+...+θnxn,最终得到的值,往往不可能刚好是0或者1,因此我们需要做一个映射,使得目标分数在刚好映射到0和1。这里用到一个新的函数
g
(
z
)
=
1
1
+
e
−
z
g(z)=\frac{1}{1+e^{-z}}
g(z)=1+e−z1,该函数为Sigmoid函数,它的图像如下:
可以发现,该函数在x无穷大时,函数值趋近于1,x无穷小时,函数值趋近于0,这符合我们的模型。并且,函数在x=0时,函数值为0.5,我们恰好可以x=0为界,将x大于0的输入值预测为1,将x小于0的输入值预测为0。
对于sigmoid函数,其求导非常方便,因为他的导数可以通过函数值直接计算出来,证明如下
g
′
(
z
)
=
d
d
z
1
1
+
e
−
z
=
e
−
z
(
1
+
e
−
z
)
2
=
1
(
1
+
e
−
z
)
(
1
−
1
1
+
e
−
z
)
=
g
(
z
)
(
1
−
g
(
z
)
)
\begin{aligned}g^{'}(z) &=\frac{d}{dz}\frac{1}{1+e^{-z}}\\ &=\frac{e^{-z}}{(1+e^{-z})^2}\\ &=\frac{1}{(1+e^{-z})}(1-\frac{1}{1+e^{-z}})\\ &=g(z)(1-g(z)) \end{aligned}
g′(z)=dzd1+e−z1=(1+e−z)2e−z=(1+e−z)1(1−1+e−z1)=g(z)(1−g(z))
因此,我们的目标函数变为
h
θ
(
x
)
=
g
(
θ
T
x
)
=
1
1
+
e
−
θ
T
x
h_θ(x)=g(θ^Tx)=\frac{1}{1+e^{-θ^Tx}}
hθ(x)=g(θTx)=1+e−θTx1,此时的
h
θ
(
x
)
h_θ(x)
hθ(x)相当于对于新输入样本预测为1的概率。当一组θ确定时,其函数图像也能够确定下来,此时的函数图像被称为“决策边界”,比如
h
θ
(
x
)
=
θ
0
+
θ
1
x
1
+
θ
2
x
2
h_θ(x)=θ_0+θ_1x_1+θ_2x_2
hθ(x)=θ0+θ1x1+θ2x2的一个决策边界可能是
x
1
+
2
x
2
=
0
x_1+2x_2=0
x1+2x2=0,这时候决策边界大于0的一边,也就是输入新样本使得
x
1
+
2
x
2
≥
0
x_1+2x_2\geq 0
x1+2x2≥0被划分为分类“1”,
x
1
+
2
x
2
<
0
x_1+2x_2<0
x1+2x2<0的一边被划分为分类“0”。
那么如何确定合适的θ来确定生成决策边界呢?我们选取合适的损失函数
c
o
s
t
(
h
θ
(
x
)
,
y
)
=
{
−
l
o
g
(
h
θ
(
x
)
)
y
=
1
−
l
o
g
(
1
−
h
θ
(
x
)
)
y
=
0
cost(h_θ(x),y)=\begin{cases} -log(h_θ(x)) & y=1 \\ -log(1-h_θ(x)) & y=0 \end{cases}
cost(hθ(x),y)={−log(hθ(x))−log(1−hθ(x))y=1y=0
−
l
o
g
(
h
θ
(
x
)
)
-log(h_θ(x))
−log(hθ(x))的函数图像如下:
−
l
o
g
(
1
−
h
θ
(
x
)
)
-log(1-h_θ(x))
−log(1−hθ(x))的函数图像如下:
对于y=1的情况,从图像上可以发现,当我们的预测值为1的代价为0,当我们的预测值接近0时,被赋予极高的代价惩罚。
对于y=0的情况,从图像上可以发现,当我们的预测值为0的代价为0,当我们的预测值接近1时,被赋予极高的代价惩罚。
这符合我们的对损失函数的直观感受,并且为了方便计算,我们进一步将损失函数统一合并成以下的形式:
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)=-ylog(h_θ(x))-(1-y)log(1-h_θ(x))
cost(hθ(x),y)=−ylog(hθ(x))−(1−y)log(1−hθ(x))
因此对于整个函数的损失函数,我们定义为
J
(
θ
)
=
−
1
m
[
∑
i
=
1
m
y
(
i
)
l
o
g
(
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
]
J(θ)=-\frac{1}{m}[\sum_{i=1}^my^{(i)}log(h_θ(x^{(i)}))+(1-y^{(i)})log(1-h_θ(x^{(i)}))]
J(θ)=−m1[i=1∑my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]
最后使用我们的老朋友——梯度下降算法求解该损失函数,就可以求出最佳的θ使得代价最小,从而得到我们想要的决策边界。
3.极大似然估计
上面对于损失函数的推导有些过于直观,通过极大似然估计我们可以很快的得到同样的式子。
极大似然估计目的是利用已知的样本结果,反推出导致当前结果的最大概率的参数值。极大似然估计基于这样一种现象:假如有两个箱子,一个箱子里面有1颗黑球999颗白球,另一个箱子里面有999颗黑球1颗白球,并告诉你现在取出一颗黑球,问黑球是从哪个箱子取出来的。从第一印象来判断,我们肯定会觉得是有999颗黑球的箱子取出来的可能性比较大,并且也符合我们的经验事实。这便是“极大似然”的由来。
对其求极大似然估计,构造似然函数
L
(
θ
)
\mathcal{L} (\theta)
L(θ),求解使得样本概率最大的
θ
\theta
θ值,有
θ
^
=
arg
max
θ
L
(
θ
)
=
arg
max
θ
log
P
(
Y
∣
X
)
=
arg
max
θ
log
∏
i
=
1
N
P
(
y
i
∣
x
i
)
=
arg
max
θ
∑
i
=
1
N
log
P
(
y
i
∣
x
i
)
=
arg
max
θ
∑
i
=
1
N
log
(
p
1
y
i
p
0
1
−
y
i
)
=
arg
max
θ
∑
i
=
1
N
(
y
i
log
p
1
+
(
1
−
y
i
)
log
p
0
)
=
arg
max
θ
∑
i
=
1
N
(
y
i
log
g
(
θ
T
x
i
)
+
(
1
−
y
i
)
log
(
1
−
g
(
θ
T
x
i
)
)
)
\begin{aligned} \hat \theta &=\arg \max_\theta \mathcal{L} (\theta) \\ &=\arg \max_\theta \log P(Y|X) \\ &=\arg \max_\theta \log \prod_{i=1}^N P(y_i|x_i) \\ &=\arg \max_\theta \sum_{i=1}^N\log P(y_i|x_i) \\ &=\arg \max_\theta \sum_{i=1}^N\log \left(p_1^{y_i}p_0^{1-y_i}\right) \\ &=\arg \max_\theta \sum_{i=1}^N \left(y_i\log p_1+(1-y_i)\log p_0 \right) \\ &=\arg \max_\theta \sum_{i=1}^N \left(y_i\log g(\theta^Tx_i)+(1-y_i)\log (1-g(\theta^Tx_i)) \right) \\ \end{aligned}
θ^=argθmaxL(θ)=argθmaxlogP(Y∣X)=argθmaxlogi=1∏NP(yi∣xi)=argθmaxi=1∑NlogP(yi∣xi)=argθmaxi=1∑Nlog(p1yip01−yi)=argθmaxi=1∑N(yilogp1+(1−yi)logp0)=argθmaxi=1∑N(yilogg(θTxi)+(1−yi)log(1−g(θTxi)))
对取得的
L
(
θ
)
\mathcal{L} (\theta)
L(θ)求偏导,得
∂
∂
θ
L
(
θ
)
=
∑
i
=
1
N
(
y
i
1
g
(
θ
T
x
i
)
−
(
1
−
y
i
)
1
1
−
g
(
θ
T
x
i
)
)
∂
∂
θ
g
(
θ
T
x
i
)
=
∑
i
=
1
N
(
y
i
1
g
(
θ
T
x
i
)
−
(
1
−
y
i
)
1
1
−
g
(
θ
T
x
i
)
)
g
(
θ
T
x
i
)
(
1
−
g
(
θ
T
x
i
)
)
∂
∂
θ
θ
T
x
i
=
∑
i
=
1
N
(
y
i
(
1
−
g
(
θ
T
x
i
)
)
−
(
1
−
y
i
)
g
(
θ
T
x
i
)
)
x
i
=
∑
i
=
1
N
(
y
i
−
h
θ
(
x
i
)
)
x
i
\begin{aligned} \frac{∂}{∂\theta}\mathcal{L}(\theta) &=\sum_{i=1}^N(y_i\frac{1}{g(\theta^Tx_i)}-(1-y_i)\frac{1}{1-g(\theta^Tx_i)})\frac{∂}{∂\theta}g(\theta^Tx_i) \\ &=\sum_{i=1}^N(y_i\frac{1}{g(\theta^Tx_i)}-(1-y_i)\frac{1}{1-g(\theta^Tx_i)})g(\theta^Tx_i) (1-g(\theta^Tx_i))\frac{∂}{∂\theta}\theta^Tx_i\\ &=\sum_{i=1}^N(y_i(1-g(\theta^Tx_i))-(1-y_i)g(\theta^Tx_i))x_i\\ &=\sum_{i=1}^N(y_i-h_\theta(x_i))x_i \end{aligned}
∂θ∂L(θ)=i=1∑N(yig(θTxi)1−(1−yi)1−g(θTxi)1)∂θ∂g(θTxi)=i=1∑N(yig(θTxi)1−(1−yi)1−g(θTxi)1)g(θTxi)(1−g(θTxi))∂θ∂θTxi=i=1∑N(yi(1−g(θTxi))−(1−yi)g(θTxi))xi=i=1∑N(yi−hθ(xi))xi
对于似然函数,本来我们应该是求出似然函数的最大值,但是我们可以对其做一点处理,将其变为求最小值,用梯度下降的方法来求解。
定义损失函数
J
(
θ
)
=
−
1
N
L
(
θ
)
J(\theta)=-\frac{1}{N}\mathcal{L}(\theta)
J(θ)=−N1L(θ),得
∂
∂
θ
J
(
θ
)
=
1
N
∑
i
=
1
N
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
(
i
)
\frac{∂}{∂\theta}J(\theta)=\frac{1}{N}\sum_{i=1}^N(h_\theta(x^{(i)})-y^{(i)})x^{(i)}
∂θ∂J(θ)=N1i=1∑N(hθ(x(i))−y(i))x(i)
最终得到
θ
\theta
θ的迭代公式为
θ
:
=
θ
−
α
1
N
∑
i
=
1
N
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
(
i
)
\theta:=\theta-\alpha\frac{1}{N}\sum_{i=1}^N(h_\theta(x^{(i)})-y^{(i)})x^{(i)}
θ:=θ−αN1i=1∑N(hθ(x(i))−y(i))x(i)
4.多分类问题
对于多分类问题,如何使用逻辑回归来解决呢?实际上,我们可以将其看成是多个二分类任务,我们可以构造这样的分类器,他们分别划分分类i和非分类i,因此对于一个三分类任务来说,就有4个这样的分类器,每个分类器识别出其中1种类型,而将其他三种类型视为同一种。这样的话,我们只需要训练4个分类器,并在新样本到来的时候,将4个分类器运行一遍,将其中预测值最大的那个分类器对应的分类作为我们的预测值即可。