逻辑回归损失函数推导

释放双眼,带上耳机,听听看~!

引言

假设今天希望将机器学习应用到医院中去,比如对于某一个患了心脏病的病人,求他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}} \\]
它的图像如下所示:

逻辑回归损失函数推导

可以看到这个函数有十分不错的性质:

  1. \\(\\theta(-∞)=0, \\ \\theta(+∞)=1\\)
  2. \\(1-\\theta(s)=\\theta(-s)\\)

也就是说我们可以把加权得到的\'分数\'通过logistic函数转化为一个概率值,并且加权得到的\'分数\'越大,这个概率值也越大。这真的还蛮有道理的。

好了,我们的模型已经定义完毕了,称它为逻辑回归模型:\\[ \\begin{equation} h(x) = \\frac{1}{1+e^{-w^Tx}} \\ \\ \\ \\ \\ 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^{-y_iw^Tx_i})} \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ w与x_i都是向量,x_i表示第i笔数据 \\end{equation}\\]
大功告成,我们得到了逻辑回归的损失函数,它长成(15)式这个样子\\[\\begin{equation} J(w)= \\sum_{i=1}^{n}\\ln{(1+e^{-y_iw^Tx_i})} \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ 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_iw^Tx_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_iw^Tx_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_iw^Tx_i}}{1+e^{-y_iw^Tx_i}} * (-y_ix_i) \\ \\ \\ \\ 想象将对单个w_i的结果笔直堆成一个向量 \\end{equation}\\]
\\(\\frac{e^{-y_iww^Tx_i}}{1+e^{-y_iww^Tx_i}}\\)正好是逻辑回归函数,所以最终对\\(w\\)的梯度写成下面这个样子\\[ \\begin{equation} \\frac{\\partial J(w)}{\\partial w} = \\sum_{i=1}^{n}h(-y_iw^Tx_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_iw^Tx_i}}{1+e^{-y_iw^Tx_i}} * (-y_ix_i) \\ \\ \\ \\ \\ lr是大于0的系数 \\end{equation}\\]

给TA打赏
共{{data.count}}人
人已打赏
站长资讯

C++_类和对象

2020-11-9 3:44:29

站长资讯

react复习总结(2)--react生命周期和组件通信

2020-11-9 3:44:31

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索