我看了很多的资料,大部分的资料将这款都是从前向后讲,先将公式,讲理论,然后再说怎么做,搞的人一头雾水.
我这次从后往前讲,先将怎么做,再将为什么这么做.
首先我们先看单纯的线性回归方程:
如果我们用矩阵的形式表示这个函数就是
那么y的取值范围是什么?是[].
按照我之前说的,我们先讲我们要怎么做,再讲我们为什么要这么做.
我们想把y的取值范围变成[0,1]怎么办呢?
很简单,我们把线性回归得到的结果再作为一个特征值传入一个新的函数,经过转换,将其转换成一个值域在[0,1]之间的值
其中,这个是sigmoid函数,那么这个函数的图相是什么样子的呢?
图1
这个函数有很好的特性,首先他的取值范围在[0,1].其次,在t=0的点y=0.5,换句话说,当t>0的时候σ(t)>0.5,当t<0的时候σ(t)<0.5.
对于概率来讲,这是个非常优秀的函数,基本上涵盖了我们对概率的最基本的认知.
好!这时候有意思的来了!我们讲了怎么做,下面我们将为什么做.
看到这张图,假设我们有10个样本,其中圆形有5个,三角形有5个.我们想通过一条线最大程度的讲两种类型的样本隔绝开来,那么绿色的线就是我们想找的这条线.在绿色的线上面都归于圆,在绿线之下都归于三角形.如果一个新的样本进来,这条直线会查看这个样本在这条线的什么位置,然后做出判断.
那么这条线怎么找到呢?
还记得我们做线性回归的时候如何找到那条线的吗?我们没有去找这条线,我们只是假设了一个初始值,然后通过设置一个cost function 通过梯度下降法让系统自己去找最优解.好那么再深入的问一下cost function是什么呢?就是我们想要的结果跟我们现在的结果的差值,换句话说就是能衡量我们想要的系统的好坏的一个方程.cost function越小我们的系统就越好.
所以这个问题就变成了我们怎么找到一个合适的cost function去代表我们想要的结果的误差?
我们先想一下我们找这个cost function的逻辑是什么,从图1看
1. 假设原本样本y=1,而t越小算出来的y'越小,则cost越大
2. 假设原本样本y=0,而t越大算出来的y'越大,cost越大
为什么呢,我们想当y=1的时候也就是说明这个样本铁是方块,而t越小则说明体统认为这个东西属于三角的概率越大这样说明误差过大.反过来亦然.
cost function就是
我们整理成一个式子就是
当y=1时,p趋近于零的时候,在这个时候可以看此时-log(p)趋近于正无穷,这是因为当p趋近于0的时候,按照我们之前的这个分类的方式,我们就会把这个样本分类成0这一类,但是这个样本实际是1这一类,显然我们分错了,那么此时我们对它进行惩罚,这个惩罚是正无穷的,随着p逐渐的增高,可以看我们的损失越来越小,当我们的p到达1的时候,也就是根据我们的分类标准,我们会将这个样本x分类成1,此时,它和这个样本真实的y等于1是一致的,那么此时损失函数取0也就是没有任何损失,当y=0时同理.
我们现在可以开始整理了
两个式子一综合
剩下的就是用梯度下降法求解这个方程的最优解了.
该解法转载自VitoLin
上述式子中所有的θ都是在sigmoid函数中,那么先对sigmoid函数求导数
那么logσ(t)的导数呢?
由此可知, 前半部分的导数:
其中y(i)是常数
再求后半部分:
这其中
将结果代入,化简得:
就得到后半部分的求导结果:
将前后部分相加:
既:
就可以得到:
此时我们回忆一下线性回归的向量化过程
参考这个,可以得到:
3/11日更新
说实话我一开始没有看太懂这个推导,直到我昨天学了cross entropy之后这个过程才慢慢清晰.非常感谢飞鱼说人工智能
logistics regression到底在做一件什么事呢?假设我们有一组合适的回归参数θ (s=θx+b) ,首先我们可以通过回归方程以及新的样本算出来s的值,而这个值就是就是上图中的SCORES,然后我们通过sigmoid函数把分数转换为概率,接着我们通过cross entrophy(此处为二分类形式的cross entropy,在二分类情况下只有两个类别属于y或者不属于y,属于y的概率是pi,不属于y的概率是1-pi.)这个cost function来编码
那如果我们想通过cross entropy来反向优化寻找回归参数θ应该怎么做呢?按照我们之前求各种regression(线性,lasso,ridge等等)的做法,我们就是求,也就是cost function对我们regression参数的导数,然后再通过梯度下降法求解最优解.对于来说我们不好直接求解,但是我们可以用微分的基本公式把这个求偏导按步骤拆成不同的偏导公式相乘.
我们接下来一点一点的算这些偏导就可以了.
第一个
还记得上面说的,yi只有两个可能的取值 1或者0.
下面求
最后求最简单的
把这三步连起来求