公开课地址:https://class.coursera.org/ml-003/class/index
授课老师:Andrew Ng
1、classification(分类)
考虑一个预测病人肿瘤的系统,该系统能判断病人的肿瘤是良性还是恶性。我们可以用一个值y∈{0,1}来表示预测结果,当y为0时表明是良性的,y为1时表明是恶性的。我们收集了8个体现肿瘤的大小和性质的样本数据,在平面上描出点如下:
假设我们用数据进行线性回归得到的直线如图所示,那么可以确定一个阈值-0.5,我们可以把malignant等于5的点投影下来,认为肿瘤大小在蓝线左侧的y=0(良性),右侧的y=1(恶性),也可以写成:
但是如果增加了一个样本数据,结果可能会变成这样:
从上图可以看出,此时因为新加入的样本点,线性回归得到的直线向右偏移,如果我们仍然把0.5作为阈值,把投影到左侧的点认为是良性,右侧认为是恶性,那就出错了。原因是这里不是所有点都满足h(x)≥0.5 时y=1,h(x)<0.5时y=0,绿框标出的两个点就是反例。看来,线性回归在这个例子中已经不适用了,我们需要引入更复杂一点的函数,逻辑回归模型就是一种最常见的函数模型,其健壮性较好,适用于多种数据分布。
2、hypothesis representation(假设表示)
再考虑上面病人肿瘤判断问题,如果用概率来表示是不是不容易出错呢?我们可以用h(x)来表示病人肿瘤为恶性的概率,概率大于0.5那就可能是恶性,否则可能为良性,这就没有上面增加一个样本数据导致分类错误的问题了。为此,我们需要把h(x)限定在[0,1]区间内,这可以用一个sigmoid函数来约束:
如上图右侧所示,上面为sigmoid函数的表达式,下面为sigmoid函数的坐标表示,可以发现函数值在正负无穷范围内都处于(0,1)区间,而且正好以0.5区分z值取正负的情况,此时也不再存在因为样本点的加入导致h(x)改变产生误判的情况。这里补充一点,在给定x和theta后,y取0和取1的概率和应该为1:
3、decision boundary(决策边缘)
按照之前的假设,h(x)≥0.5时y=1,否则y=0,不过这里h(x)是引入sigmoid函数的h(x),即:
此时只要判断theta’*x的值与0的关系即可。
举个例子,假设h(x)=g(θ0+θ1x1+θ2x2),参数θ=[-3,1,1]T,那么判断y值只需要判断theta’*x的值,如下:
如果-3+x1+x2≥0,则y=1,否则y=0. 在以x1,x2为坐标系的平面上,y=0和y=1就以x1+x2=3这条线作为分界线,这也就是决策边缘的意思。当然,决策边缘也可以是非线性的,就像下面这样:
可以看出决策边缘的形状与h(x)的形式有很大关系。
4、cost function(代价函数)
又轮到了代价函数,现在是针对新的h(x),求解出theta,式子形式还是一致的:
由于引入了sigmoid函数并且y的取值只有0,1两种,所以代价函数的形式也要进行改变:
分析发现,当y=1,h(x)=1时,代价为0,而如果h(x)=0,那代价将会是无穷大,像下图:
y=0的情况类似。
5、simplified cost function and gradient descent(简化代价函数和梯度下降)
上面我们把代价函数分成两类,其实可以合成一个函数:
这样修改以后,我们还是可以用梯度下降来求解theta。
这过程和线性回归居然一模一样。
6、advanced optimization(进阶优化)
对应求解代价函数最小值,同线性回归一样,我们不止梯度下降一种方法,还有下面左侧括号中的一些方法,右侧是这些方法的优缺点:
用哪种方法,就具体问题具体分析了。
7、multi-class classification:one-vs-all(多分类问题:一对多)
有时候问题并不像判断一个病人肿瘤是恶性还是良性这中二分类问题那么简单,比如判断天气需要区分是晴天、阴天、下雨、下雪等等。对于二分类问题,我们可以用一条线分割,那对于多分类问题呢?
有一种简单的方法,那就是每次只分离出一个类别,有几个类别就构造几个决策边缘,也就是几个h(x):
在上面这个例子中,针对三种类别加以区分,我们需要引入三个逻辑回归分类函数h(x),当对一个样本点进行类别判断时,我们只需要分别计算三个h(x)的值,选择其中求出值最大的那个类别,把样本点归为那一类即可。原因是这里h(x)表示的是x属于某个类别的概率,既然某个类概率最大,那更可能属于这个类别了。
-----------------------------弱弱的分割线-------------------------------
在这一讲中,我觉得最重要的应该是sigmoid函数。首先通过肿瘤性质诊断这个例子让我们发现可以用概率来表示这种二元分类的问题,sigmoid函数也因此被引入。当然,sigmoid函数不仅仅只是逻辑回归用的,还有其他很重要的用途。机器学习群里面推荐看下老师木介绍sigmoid函数的一篇文章,链接如下:http://www.guzili.com/?p=45195