从概率分布的角度推导逻辑回归的损失函数
逻辑回归是一种分类算法。
- y = w T x + b y=\mathbf{w^{T} x}+b y=wTx+b
- 采用非线性映射: z = 1 1 + e − y z=\frac{1}{1+e^{-y}} z=1+e−y1
- 逻辑回归一定选取sigmoid函数,其实就是把y的值从 ( − ∞ , + ∞ ) (-\infty,+\infty) (−∞,+∞)压缩到 ( 0 , 1 ) (0,1) (0,1)
其实,逻辑回归本质上对应于(0-1)分布,说明如下:
令 h ( x ) = g ( θ T x ) = 1 1 + e − θ T x h(\mathbf{x})=g(\mathbf{\theta^Tx})=\frac{1}{1+e^{-\mathbf{\theta^Tx}}} h(x)=g(θTx)=1+e−θTx1
则:
h
(
x
)
h(\mathbf{x})
h(x)代表了结果为1的概率。即y取1的概率为h(x),y取0的概率为1-h(x)
P
(
y
=
1
∣
x
,
θ
)
=
h
(
x
)
P
(
y
=
0
∣
x
,
θ
)
=
1
−
h
(
x
)
P(y=1|\mathbf{x,\theta})=h(\mathbf{x})\\ P(y=0|\mathbf{x,\theta})=1-h(\mathbf{x})
P(y=1∣x,θ)=h(x)P(y=0∣x,θ)=1−h(x)
于是:
P
(
y
∣
x
,
θ
)
=
h
(
x
)
y
(
1
−
h
(
x
)
)
1
−
y
P(y|\mathbf{x,\theta})=h(\mathbf{x})^y(1-h(\mathbf{x}))^{1-y}
P(y∣x,θ)=h(x)y(1−h(x))1−y
似然函数:
L
(
θ
)
=
∏
i
=
1
n
h
(
x
i
)
y
i
(
1
−
h
(
x
i
)
)
1
−
y
i
L(\mathbf{\theta})=\prod_{i=1}^{n}h(\mathbf{x}^i)^{y^i}(1-h(\mathbf{x}^i))^{1-y^i}
L(θ)=i=1∏nh(xi)yi(1−h(xi))1−yi
对数似然函数:
l
n
L
(
θ
)
=
∑
i
=
1
n
[
y
i
l
n
h
(
x
i
)
+
(
1
−
y
i
)
l
n
(
1
−
h
(
x
i
)
)
]
lnL(\mathbf{\theta})=\sum_{i=1}^{n}[y^ilnh(\mathbf{x}^i)+(1-y^i)ln(1-h(\mathbf{x}^i))]
lnL(θ)=i=1∑n[yilnh(xi)+(1−yi)ln(1−h(xi))]
其实,该函数是一个凹函数,也就是说
−
l
n
L
(
θ
)
-lnL(\mathbf{\theta})
−lnL(θ)是一个凸函数,证明如下:
根据“凸函数的非负线性组合依旧是凸函数”的原则,我们只需要证明
−
l
n
(
h
(
x
)
)
和
−
l
n
(
1
−
h
(
x
)
)
-ln(h(\mathbf{x}))和-ln(1-h(\mathbf{x}))
−ln(h(x))和−ln(1−h(x))是凸函数即可。
−
l
n
(
h
(
x
)
)
=
l
n
(
1
+
e
−
θ
T
x
)
∇
θ
l
n
(
1
+
e
−
θ
T
x
)
=
e
−
θ
T
x
1
+
e
−
θ
T
x
(
−
x
)
=
(
h
(
x
)
−
1
)
x
∇
θ
2
l
n
(
1
+
e
−
θ
T
x
)
=
h
(
x
)
(
1
−
h
(
x
)
)
x
x
T
\begin{aligned}-ln(h(\mathbf{x}))&=ln(1+e^{-\mathbf{\theta^Tx}})\\ \nabla_{\theta}ln(1+e^{-\mathbf{\theta^Tx}})&=\frac{e^{-\mathbf{\theta^Tx}}}{1+e^{-\mathbf{\theta^Tx}}}(-\mathbf{x})=(h(\mathbf{x})-1)\mathbf{x}\\ \nabla_{\theta}^2ln(1+e^{-\mathbf{\theta^Tx}})&=h(\mathbf{x})(1-h(\mathbf{x}))\mathbf{x}\mathbf{x^T} \end{aligned}
−ln(h(x))∇θln(1+e−θTx)∇θ2ln(1+e−θTx)=ln(1+e−θTx)=1+e−θTxe−θTx(−x)=(h(x)−1)x=h(x)(1−h(x))xxT
注意:在求Hessian矩阵时,需要对
x
\mathbf{x}
x做转置。
对于任意的向量
z
\mathbf{z}
z,
z
T
h
(
x
)
(
1
−
h
(
x
)
)
x
x
T
z
=
h
(
x
)
(
1
−
h
(
x
)
)
⎵
常
数
(
x
T
z
)
2
⎵
常
数
≥
0
\mathbf{z^T}h(\mathbf{x})(1-h(\mathbf{x}))\mathbf{x}\mathbf{x^T}\mathbf{z}=\underbrace{h(\mathbf{x})(1-h(\mathbf{x}))}_{常数}\underbrace{(\mathbf{x^T}\mathbf{z})^2}_{常数} \ge0
zTh(x)(1−h(x))xxTz=常数
h(x)(1−h(x))常数
(xTz)2≥0
所以hessian矩阵是半正定矩阵,所以该函数是凸函数。
同理,可以证明 − l n ( 1 − h ( x ) ) -ln(1-h(\mathbf{x})) −ln(1−h(x))是凸函数。
这样,我们接下来就可以用梯度下降法来求解最优的 θ \theta θ值了。
所以我们也可以得出这样的结论:逻辑回归的损失函数就是对数似然函数的负值。
直观理解逻辑回归的损失函数
cost ( h θ ( x ) , y ) = { − log ( h θ ( x ) ) if y = 1 − log ( 1 − h θ ( x ) ) if y = 0 \operatorname{cost}\left(h_{\theta}(x), y\right)=\left\{\begin{aligned}-\log \left(h_{\theta}(x)\right) & \text { if } y=1 \\-\log \left(1-h_{\theta}(x)\right) & \text { if } y=0 \end{aligned}\right. cost(hθ(x),y)={−log(hθ(x))−log(1−hθ(x)) if y=1 if y=0
分析上面的损失函数:
-
当真实值 y = 1 y=1 y=1时,预测值 h ( x ) h(x) h(x)越接近1,损失越接近0;预测值越接近0,损失值接近正无穷。
-
当真实值 y = 0 y=0 y=0时,预测值 h ( x ) h(x) h(x)越接近0,损失越接近0;预测值越接近1,损失值接近正无穷。
因此,符合要求。
从图中也可以看出,两个函数均是凸函数,因此凸函数的线性组合依旧是凸函数,可以得知损失函数是凸函数,可以直接采用梯度下降法等优化算法求解。整理后,损失函数如下:
J
=
−
∑
i
=
1
n
[
y
i
l
n
h
(
x
i
)
+
(
1
−
y
i
)
l
n
(
1
−
h
(
x
i
)
)
]
J=-\sum_{i=1}^{n}[y^ilnh(\mathbf{x}^i)+(1-y^i)ln(1-h(\mathbf{x}^i))]
J=−i=1∑n[yilnh(xi)+(1−yi)ln(1−h(xi))]
向量形式为:
J
=
−
1
m
[
l
n
h
(
x
)
T
y
+
l
n
(
1
−
h
(
x
)
)
T
(
1
−
y
)
]
J=-\frac{1}{m}[lnh(\mathbf{x})^T\mathbf{y}+ln(1-h(\mathbf{x}))^T\mathbf{(1-y)}]
J=−m1[lnh(x)Ty+ln(1−h(x))T(1−y)]
对损失函数求梯度可以得到:
∂
J
(
θ
)
∂
θ
j
=
1
m
∑
i
=
1
m
(
h
θ
(
x
(
i
)
)
−
y
(
i
)
)
x
j
(
i
)
\frac{\partial J(\theta)}{\partial\theta_{j}} = \frac{1}{m}\sum_{i=1}^{m} ( h_\theta (x^{(i)})-y^{(i)})x^{(i)}_{j}
∂θj∂J(θ)=m1i=1∑m(hθ(x(i))−y(i))xj(i)
向量形式为:(向量形式不好直接推导,可以先推导上面的结果,然后转为向量形式)向量化的结果在变成时特别方便。
∂
J
(
θ
)
∂
θ
=
1
m
X
T
(
g
(
X
θ
)
−
y
)
\frac{\partial J(\theta)}{\partial\theta} = \frac{1}{m} X^T(g(X\theta)-y)
∂θ∂J(θ)=m1XT(g(Xθ)−y)
为什么逻辑回归的损失函数不采用最小二乘呢?
- 原因1:逻辑回归本质上是从(0-1)分布而来,而线性回归本质上是从高斯分布而来,二者就不应该混用 。
- 原因2:假设使用最下二乘,那么损失函数为 ∑ i = 1 n [ y i − g ( θ T x i ) ] 2 \sum_{i=1}^{n}[y^i-g(\mathbf{\theta ^Tx}^i)]^2 ∑i=1n[yi−g(θTxi)]2,但是 y i y^i yi的取值只有0和1,而g函数的取值为 [ 0 , 1 ] [0,1] [0,1],两者都不对应,误差肯定很大,这个函数也不是凸函数,有许多局部极小值。
从二分类过渡到多分类
有两种方法,即one vs one 和 one vs rest。
- one vs one。考虑N个类别,c1,c2,c3,c4…cn。这种方法将其中的任意两个类别进行配对,从而产生n(n-1)/2个分类任务。比如,我们为区分c1和c2构建一个分类器,该分类器把c1视为正类,把c2视为负类。在测试阶段,新样本将同时提交给所有分类器,于是,我们就可以得到n(n-1)/2个分类结果,最终结果可以通过投票产生。
- one vs rest。每次将一个类的样例作为正例,所有其它类的样例作为负例。训练N个分类结果。在测试时,计算每个分类器预测为正例的概率,取最大的那一个作为最终结果。这种方法要求算法必须能够输出分类的概率,比如逻辑回归。当算法仅仅给出一个决策性的结果,不能给出分类概率时,这种方法便不适用,比如(svm)
*
参考自《机器学习(周志华)》