上一篇讲了回归算法求解关于feature的线性函数的问题,这一篇讲一下求解分类问题的思路。
先看一个函数:
这个函数叫logistic函数(下面都写成$F(x)$),它的表达式是$F(x)=\frac{1}{1+e^{-x}}$,有$\lim_{x\rightarrow\infty}F(x)=1$和$\lim_{x\rightarrow-\infty}F(x)=0$。由上图可以看出,在$x=\pm4$的时候就已经非常接近极限了。
这个函数有什么用呢?
上一篇文章讲了线性回归的思路,这个算法对于线性函数关系非常好用,或者它对于大多数连续函数都非常好用。但是分类问题不是连续函数,比如二分类问题,它只有两个值,0或者1。
那我们可以这样想,我定义的函数还是线性关系的函数,$Y=\Theta^TX$,如果根据这个函数算出来的值大于0,我就认为它是1,如果算出来小于0,我就认为它是1。这是一个很自然的思路。但是问题在哪里?问题在于怎么定义损失函数?因为我们的训练集的Y值都是只有0或者1,所以我们显然需要把我们定义的函数Y也映射到[0,1]之间,否则我们压根没法写出损失函数(怎么跟真实值去求距离?)。那么我们用什么函数呢?就是logistic函数。因此我们最后选择的关系函数是$Y=F(\Theta^TX)$,其中F是logistic函数。
从概率上讲,我们可以把Y理解为这个样本是1的概率。此外其实能把实数映射到[0,1]之间的函数很多,为什么选择这个呢?事实上不仅有这一种,只要效果好都可以。
后面会看到,logistic函数求导还有非常好的性质,从而使得表达式非常简洁。
那么有了关系函数,我们要来定义损失函数了。损失函数怎么定义呢?最简单的一种思路:按照原来的$J(\Theta,X,Y)={\frac{1}{m}}\sum_{i=1}^{m}{\frac{(\Theta^{T}X^{i}-Y^{i})^2}{2}}$的思路,改成$J(\Theta,X,Y)={\frac{1}{m}}\sum_{i=1}^{m}{\frac{(F(\Theta^{T}X^{i})-Y^{i})^2}{2}}$。但是这样有一个问题,那就是惩罚的力度不够大,假设我们定义的损失函数就是这个,那么我们来求一下偏导。
首先,$\frac{\text{d}F(x)}{\text{d}x}=(\frac{1}{1+e^{-x}})'=-(1+e^{-x})^{-2}(-e^{-x})=\frac{1}{1+e^{-x}}\frac{e^{-x}}{1+e^{-x}}=F(x)(1-F(x))$。
然后,给J求偏导:
$\frac{\partial {J(\Theta)}}{\partial \Theta_i}$
$=\frac{1}{m}\sum_{i=1}^{m}\frac{\partial{\frac{(F(\Theta^{T}X^{i})-Y^{i})^2}{2}}}{\partial \Theta_i}$
$=\frac{1}{m}\sum_{j=1}^{m}\frac{\partial{\frac{(F(\Theta^{T}X^{j})-Y^{j})^2}{2}}}{\partial F(\Theta^TX^j)}\frac{\partial F(\Theta^TX^j)}{\partial \Theta^TX^j}\frac{\partial \Theta^TX^j}{\partial \Theta_i}$
$=\frac{1}{m}\sum_{j=1}^{m}(F(\Theta^TX^j)-Y^j)F(\Theta^TX^j)(1-F(\Theta^TX^j))X^j_i$
因为F(x)的值域是(0,1)的,而且通常X也会规范化到[0,1]之间,另外Y也是0或者1的值,所以这个偏导的值有可能非常非常的小。不仅如此,而且F(x)的变化有可能非常非常的缓慢,因此对这个函数回归是非常不靠谱的。
由数学的对称美的思想,我们用了$e$来做事情,也要用$\log$来做事情,事实上用$\log$来解决F(x)变化缓慢最合适不过了。
定义损失函数如下:$J(\Theta)=\frac{1}{m}\sum_{j=1}^{m}(-(1-Y^j)\log(1-F(\Theta^TX^j))-Y^j\log(F(\Theta^TX^j)))$
可以分类讨论一下,就可以知道,这个损失函数的意思就是:当$Y^j=0$时,$F(\Theta^TX^j)$越接近0,损失函数越小;当$Y^j=1$时,$F(\Theta^TX^j)$越接近1,损失函数越小。而且与真实值差距太多的时候,损失函数会趋近于无穷大。
对J求偏导:
$\frac{\partial J(\Theta)}{\partial \Theta_i}$
$=\frac{1}{m}\sum_{j=1}^{m}\frac{\partial{(-(1-Y^j)\log(1-F(\Theta^TX^j))-Y^j\log(F(\Theta^TX^j)))}}{\partial \Theta_i}$
$=-\frac{1}{m}\sum_{j=1}^{m}((1-Y^j)\frac{\partial \log(1-F(\Theta^TX^j))}{\partial \Theta_i}+Y^j\frac{\partial \log(F(\Theta^TX^j))}{\partial \Theta_i})$
$=-\frac{1}{m}\sum_{j=1}^{m}((1-Y^j)\frac{\partial \log(1-F(\Theta^TX^j))}{\partial F(\Theta^TX^j)}\frac{\partial F(\Theta^TX^j)}{\partial \Theta^TX^j}\frac{\partial \Theta^TX^j}{\partial \Theta_i}+Y^j\frac{\partial \log(F(\Theta^TX^j))}{\partial F(\Theta^TX^j)}\frac{\partial F(\Theta^TX^j)}{\partial \Theta^TX^j}\frac{\partial \Theta^TX^j}{\partial \Theta_i})$
$=\frac{1}{m}\sum_{j=1}^{m}((1-Y^j)F(\Theta^TX^j)X^j_i-Y^j(1-F(\Theta^TX^j))X^j_i)$
$=\frac{1}{m}\sum_{j=1}^{m}(F(\Theta^TX^j)-Y^j)X^j_i$
结果让人震惊!
再回顾一下线性回归的J求偏导的结果:
$\frac{\partial J(\Theta)}{\partial \Theta_i}=\frac{1}{m}\sum_{j=1}^{m}(\Theta^TX^j-Y^j)*X^j_i$
由此可以看出,这个损失函数定义的非常科学合理。