逻辑回归损失函数推导

引言

假设今天希望将机器学习应用到医院中去,比如对于某一个患了心脏病的病人,求他3个月之后病危的概率。那么我们该选择哪一个模型,或者可以尝试已经学过的线性回归?

但是很遗憾的是,如果我们要利用线性回归,我们收集到的资料中应当包含病人3个月后病危的概率。这在实际中是很难得到的,因为对于一个患病的病人,你只能知道他3个月后到底是病危或者存活。所以线性回归并不适用这种场景。

logistic函数

上面提到我们最终的目标是一个概率值\(P(y|x)\),这里\(y=+1\)指代病人3个月后病危这个事件;\(y=-1\)指代病人3个月后存活这个事件。显然\(P(-1|x) = 1 - P(1|x)\).

我们先前学过线性回归,知道可以通过加权的方式求出各项特征的'分数',那这个分数怎么转换为一个概率值?这里就需要引入一个logistic函数。它的表达式为:$$
\theta(s)=\frac{1}{1+e^{-s}}

\[它的图像如下所示: <img src="https://img2018.cnblogs.com/blog/1531067/201903/1531067-20190312232659084-1342501547.png" height=50% width=50%> 可以看到这个函数有十分不错的性质: 1. $\theta(-∞)=0, \ \theta(+∞)=1$ 2. $1-\theta(s)=\theta(-s)$ 也就是说我们可以把加权得到的'分数'通过logistic函数转化为一个概率值,并且加权得到的'分数'越大,这个概率值也越大。这真的还蛮有道理的。 好了,我们的模型已经定义完毕了,称它为逻辑回归模型:\]

\begin{equation}
h(x) = \frac{1}{1+e{-wTx}} \ \ \ \ \ w,x都是向量
\end{equation}

\[也就是说,我们获取到一个病人的特征$x$,将它输入模型,就能知晓这个病人3个月后病危的概率。但是,还有最重要的一步,这个模型的参数$w$如何确定?不同的参数$w$会带来不同的模型$h(x)$.经验告诉我们可以从已获得的资料中找到一些端倪获取最合适的$w$。 ## 损失函数 线性回归中,我们定义了一个平方损失函数,通过对损失函数求导数得到最后的参数。那依样画葫芦,我们也为逻辑回归定义一个损失函数,然后试着对损失函数求梯度,是不是能解出最后的参数了。那么想一下,逻辑回归的损失函数如何定义?还用最小二乘法么?这显然不符合场景,毕竟已有的资料只告诉我们每一组数据对应的结果是哪一类的。 我们还是从数据的产生来分析,现在已有的数据是这些:\]

D = {(x_1, 1), (x_2, 1), (x_3, 1), ... , (x_n, -1)}

\[当然,这些数据的产生是相互独立的,所以获得$D$这笔资料的概率就是\]

\begin{equation}
P(x_1, 1) * P(x_2, 1) * P(x_3, 1) * ... * P(x_n, -1)
\end{equation}$$
再将(2)式写为条件概率分布$$
\begin{equation}
P(x_1)P(1|x_1) * P(x_2)P(1|x_2) * P(x_3)P(1|x_3) * ... * P(x_n)P(-1|x_n)
\end{equation}$$
再者,假设每一笔数据的概率服从0-1分布。$$\begin{equation}
P(y|x_i) =
\left {
\begin{array}{lr}
f(x_i) \ \ \ \ \ \ \ \ \ \ y=+1 \
1 - f(x_i) \ \ \ \ \ y=-1
\end{array}
\right.
\end{equation}$$
所以最后写成的形式:$$\begin{equation}
P(x_1)f(x_1) * P(x_2)f(x_2) * P(x_3)f(x_3) * ... * P(x_n)(1-f(x_n))
\end{equation}$$

也就说这笔资料\(D\)由真正的模型\(f(x)\)产生的话,概率是(5)这么大。但是我们不知道真正的模型f(x)长什么样子,我们现在只知道我们自己定义了一个模型\(h(x)\),它长成(1)这个样子。所以现在的任务就是从很多的\(h(x)_1, h(x)_2, h(x)_3, ..., h(x)_m\)中找到其中一个最接近真正的模型\(f(x)\)并将它作为我们最后的\(h(x)\)

所以如何衡量\(h(x)\)\(f(x)\)的接近程度?如果我们现在用\(h(x)\)代替\(f(x)\)去产生这组数据集\(D\)也能得到一个概率(6).$$\begin{equation}
P(x_1)h(x_1) * P(x_2)h(x_2) * P(x_3)h(x_3) * ... * P(x_n)(1-h(x_n))
\end{equation}$$

使得(6)式的概率最大的那个\(h(x)\)我们会认为它与\(f(x)\)最相似,这就是最大似然的思想。又因为对于所有的\(h(x)_i\)产生的概率:$$\begin{equation}
P(x_1) * P(x_2) * P(x_3) * ... * P(x_n)
\end{equation}$$
这部分都是相同的,所以我们认为最接近\(f(x)\)\(h(x)\)能使(8)最大即可

\[\begin{equation} h(x_1) * h(x_2) * h(x_3) * ... * (1-h(x_n)) \end{equation}\]

再由于logistic函数的第2个性质,可以将(8)变形:

\[\begin{equation} h(x_1) * h(x_2) * h(x_3) * ... * h(-x_n) \end{equation}\]

最终的目标是解出下面这个优化问题:$$\begin{equation}
\mathop{max}\limits_{w} \ \ \prod_{i=1}^{n}h(y_ix_i)
\end{equation}$$
再次变形,求一个式子的最大值,相当于求它相反数的最小:$$\begin{equation}
\mathop{min}\limits_{w} \ \ -\prod_{i=1}^{n}h(y_ix_i)
\end{equation}$$
接下来我们要对(11)式取对数,一方面原因是因为对数函数的单调特性,另一方面是能将原来的连乘简化到连加,所以取对数后:$$\begin{equation}
\mathop{min}\limits_{w} \ \ -\sum_{i=1}^{n}\ln{h(y_ix_i)}
\end{equation}$$
\(h(x)\)展开,能得到$$\begin{equation}
\mathop{min}\limits_{w} \ \ -\sum_{i=1}{n}\ln{\frac{1}{1+e{-y_iw^Tx_i}}} \ \ \ \ \ \ \ \ \ \ w与x_i都是向量,x_i表示第i笔数据
\end{equation}$$
再一次$$\begin{equation}
\mathop{min}\limits_{w} \ \ \sum_{i=1}{n}\ln{(1+e)} \ \ \ \ \ \ \ \ \ \ w与x_i都是向量,x_i表示第i笔数据
\end{equation}$$
大功告成,我们得到了逻辑回归的损失函数,它长成(15)式这个样子$$\begin{equation}
J(w)= \sum_{i=1}{n}\ln{(1+e)} \ \ \ \ \ \ \ \ \ \ w与x_i都是向量,x_i表示第i笔数据
\end{equation}$$
我们的目标就是找到最小化\(J(w)\)的那个\(w\).就像在线性回归中做的那样,接下来我们要利用链式法则对它求导:$$\begin{equation}
\frac{\partial J(w)}{\partial w_j} = \sum_{i=1}^{n}\frac{\partial \ln{(1+e{-y_iwTx_i})}}{\partial (-y_iw^Tx_i)} * \frac{\partial (-y_iw^Tx_i)}{\partial w_j}
\end{equation}$$
化解得到$$\begin{equation}
\frac{\partial J(w)}{\partial w_j} = \sum_{i=1}{n}\frac{e{-y_iwTx_i}}{1+e{-y_iw^Tx_i}} * (-y_ix_{i,j}) \ \ \ \ x_{i,j}是个标量,是第i笔数据中第j个分量
\end{equation}$$
所以对于整个向量\(w\)的梯度为$$
\begin{equation}
\frac{\partial J(w)}{\partial w} = \sum_{i=1}{n}\frac{e{-y_iwTx_i}}{1+e{-y_iw^Tx_i}} * (-y_ix_i) \ \ \ \ 想象将对单个w_i的结果笔直堆成一个向量
\end{equation}$$
\(\frac{e^{-y_iw^Tx_i}}{1+e^{-y_iw^Tx_i}}\)正好可以写成logistic函数的形式,所以最终对\(w\)的梯度写成下面这个样子$$
\begin{equation}
\frac{\partial J(w)}{\partial w} = \sum_{i=1}{n}h(-y_iwTx_i)(-y_ix_i)
\end{equation}$$
很遗憾,我们令(19)等于0的话,很难求解出\(w\)。为此,我们需要用额外的方法求解这个问题。

梯度下降

这个可学习的资料太多了,思想就是假设函数上有一个点,它沿着各个方向都有它的方向导数,那么总是沿着方向导数最大的反方向走,也就是梯度的反方向走,这个点总是能走到最低点。每一次移动的距离用一个系数lr来表示,每次更新\(w\),数次迭代之后,\(w\)趋近于最优解:$$
\begin{equation}
w_{i+1} := w_{i} - lr * \sum_{i=1}{n}\frac{e{-y_iwTx_i}}{1+e{-y_iw^Tx_i}} * (-y_ix_i) \ \ \ \ \ lr是大于0的系数
\end{equation}$$

另一个版本

Let \(p(y_i|x_i, w) = p(y_i=1|x_i, w)^{y_i}(1 - p(y_i=1|x_i, w))^{1-y_i}\),
\begin{equation}
\begin{aligned}
&\max_{w}\prod_{i=1}^N p(y_i | x_i, w) \Leftrightarrow \min_{w}\left(-\sum_{i=1}^N\log{p(y_i|x_i, w)}\right) \
&=\min_{w}\left(-\sum_{i=1}^Ny_i\log{p(y_i=1|x_i, w)}+(1-y_i)\log{(1-p(y_i=1|x_i, w))}\right) \
&=\min_{w}\left(-\sum_{i=1}^Ny_i\log{h(x_i; w)}+(1-y_i)\log{(1-h(x_i; w)})\right) \
\end{aligned}
\end{equation
}
therefore,
\begin{equation}
\begin{aligned}
J(w) = -\sum_{i=1}^Ny_i\log{h(x_i; w)}+(1-y_i)\log{(1-h(x_i; w)}
\end{aligned}
\end{equation
}
then, we derive this function \(J(w)\) as below,
\begin{equation}
\begin{aligned}
\frac{\partial{J(w)}}{\partial{w}} &= -\sum_{i=1}^Ny_i
(\log{h(x_i; w))^\prime}+(1-y_i)(\log{(1-h(x_i; w))})^\prime \
&=-\sum_{i=1}^Ny_i
\frac{h(x_i; w)^\prime}{h(x_i; w)}+(1-y_i)\frac{-h(x_i; w)^\prime}{1-h(x_i; w)}
\end{aligned}
\end{equation
}
Because the derivation of sigmoid function to w is
\begin{equation}
\begin{aligned}
\frac{\partial{h(x_i; w)}}{\partial{w}} &= \frac{\exp{(-wTx_i)}}{(1+\exp{(-wTx_i)})^2} * x_i \
&=h(x_i; w)(1-h(x_i; w)) * x_i
\end{aligned}
\end{equation
}
so, we can get
\begin{equation}
\begin{aligned}
\frac{\partial{J(w)}}{\partial{w}} &=-\sum_{i=1}^Ny_i
\frac{h(x_i; w)^\prime}{h(x_i; w)}+(1-y_i)\frac{-h(x_i; w)^\prime}{1-h(x_i; w)} \
&=-\sum_{i=1}^Ny_i
\frac{h(x_i; w)(1-h(x_i; w)) * x_i}{h(x_i; w)}+(1-y_i)\frac{-h(x_i; w)(1-h(x_i; w)) * x_i}{1-h(x_i; w)} \
&=-\sum_{i=1}^Nx_iy_i(1-h(x_i; w))-x_i(1-y_i)h(x_i;w) \
&=-\sum_{i=1}^Nx_i(y_i-h(x_i; w)) \
&=\sum_{i=1}^Nx_i(h(x_i; w)-y_i)
\end{aligned}
\end{equation
}

posted @ 2019-03-12 23:28  小王点点  阅读(7244)  评论(2编辑  收藏  举报