先说下线性回归(直接上图)
如上图所示,根据肿瘤尺寸数据进行判断。设hypothesis函数为根据上图可以看出线性h(x)能够将上述数据进行有效分类,当h(x)>0.5,则为肿瘤患者,当h(x)<0.5,则为正常。但是线性模型会出现下面的一种情况
此时通过调整线性模型的参数后最终得到的线性模型为蓝色的直线,此时就会发现最右侧的红色叉号被预测成了正常,这显然是不合理的,并且后果是严重的(人家有病,你预测正常,影响治疗.....),此外以二分类为例子,假设label={0,1},但是我们使用线性模型最终的到predict y可能非常大或者非常小,这显然是不合理的。由此引入了所谓的logistic regression(逻辑回归)。
2logistic regression(逻辑回归)
逻辑回归其实就是改变了我们的hypothesis(如下图所示)
此时的0<h(x)<1,还有就是sigmoid function等价于logistic funtion,可以发现在用这个模型来处理上面的肿瘤问题,就可以解决上述的分错情况,并且预测的y值永远都在[0,1],说道这里,再说一下决策边界(decision boundary)其实就是将数据最大化正确分类的边界面。例如下图,假设形如h(x)=g(θ0+θ1x1+θ2x2)的hypothesis参数θ=[-3,1,1]T,
则有
predict Y=1, if -3+x1+x2>=0
predict Y=0, if -3+x1+x2<0
刚好能够将图中所示数据集进行很好地分类
另外还有非线性决策边界,都差不多。
logistic regression的cost function
回想一下线性回归的costfunction如下所示
此时我们不能再用线性模型的cost function来设计逻辑回归的cost function,因为这涉及到非凸函数的梯度下降问题(容易陷入局部极小值),具体如下图所示,左下方的图是将逻辑回归的hypothesis函数直接使用线性模型的cost function涉及模式得到的costfunction图,因为逻辑回归本身的hypothesis函数就是一个非线性的,所以以这种方式最终的得到的cost
function肯定是一个非凸函数,如果在使用梯度下降方法进行优化参数,很容易陷入局部最小值,影响最终的分类结果。
此时就到了cost function的设计时刻了。如下图所示
刚开始我也不理解为什么这么设计costfunction,后来看andrew的视频中有详细的解释,上图中的坐标横轴代表的是h(x),纵轴代表的是cost function,注意上述坐标图是在y=1的情况下画出的此时对应有,当h(x)=1也就是我们的预测值为1,且y=1(实际标签值=1),此时说明我们能够正确预测,且cost
function=0,对应的正好是坐标图中的(1,0)这个点,如图所示,曲线与h(x)轴的交点为(1,0),当我们的h(x)=0,也就是预测为0,且y=1,也就是实际对应标签应该是1的时候,这是表明判断是错误的,是有误差的,对应上图中的h(x)=0时,cost趋近于无穷大,也就是说y=1的条件下,如果我们能够正确预测,则cost=0,对应曲线与h(x)轴的交点(1,0),当预测错误(h(x)=0),此时的cost趋近于无穷大,也就是说我们对这种错误的情况,会进行惩罚,赋予cost function一个非常大的数,之后在进行梯度下降的时候进行调整。同理,当y=0的时候的情形是相类似的。如下图所示(分析过程和y=1类似)
以上对于logistic 的cost function解释来自于coursera的短幅教程,因为是短幅教程,所以Andrew教授没有对其做详细的公式推导证明,想观看的小伙伴可以去网易公开课上找到详细的教程以及推导。我后边有花时间看了下Andrew的详细课程,下面来具体推导下logistic 的cost function具体推导以及由来。
首先我们的hypothesis为现在我们做如下假设:也就是说h(x)代表的是在x为随机变量,theata为参数的情况下y=1的概率。由此我们可以退出最大似然函数(在x为随机变量,theata为参数的条件下y的最大似然函数如下)如下
下面我们要做的就是找到一个合适的theata使得L(theata)的值最大,利用高数里边学的知识,先设l(theata)=log(L(theata)),再利用反梯度下降法,然后一步一步的迭代更新theata的值,从而找到最大L(theata)时候的theata值。如下所示(这里的l(theata)是不是与我们上边的cost function有点相似啊,其实就是它了):
注意这里请观察theataj,与我们的线性model形式惊人的相似,难道logistic什么都没有做吗?和liner model一样吗?其实不是这样,这里的h(x)已经不是线性了,这点很重要。
ok,到这里基本上logistic已经讲完,后续再继续补充吧,还有一种更为高效的方法,直接通过矩阵运算得到更新的theata,避免这么多的迭代,后边在继续补充!
reference:
http://blog.csdn.net/pakko/article/details/37878837
http://blog.csdn.net/abcjennifer/article/details/7716281
http://open.163.com/movie/2008/1/E/B/M6SGF6VB4_M6SGHM4EB.html