斯坦福公开课——机器学习课程(六)

引言

终于开始了,以前都没学过的支持向量机,听说过它的厉害,却没见识过他到底厉害在哪里。


新的目标函数

由逻辑回归里面的目标函数,来变出新得目标函数:


图中细线为逻辑回归的代价函数,在y=1y=0两种情况下,代价函数和预测值之间的关系。然后我们用粉红色的分段函数来代替原来的连续函数,就有了新的目标函数。

然后我们根据逻辑回归的代价函数,得到新的代价函数:


从图中可以看出,只是把原来的h函数替换掉了。

然后就是一点因为不同的国际惯例而产生的改动。在支持向量机里面,一般会去除m这个变量,然后会把λ放到第一项前面。这样的变换,并没有影响结果,只是因为不同的国际惯例而已。具体如下:


支持向量机中的h函数也变成了如下形式:


这样的改变看似没什么卵用,却会在后续优化中带来巨大的计算优势,却不影响性能。


支持向量机(Support Vector Machine)

支持向量机有时候也叫大间距分类器。

假设我们把上面的代价函数第一项前面的C设置成很大的值,那么这个代价函数在优化的时候,就会尽力的让第一项为0。

那么怎么尽力让第一项为0呢?那就是让尽可能多的h函数的预测值和真实值相吻合,也就是这样:


那么,当所有的都满足的时候,第一项就会为0,代价函数就会变成:


这样会带来一个什么效果呢?以二分类为例:


这个图中,叉和圈如果是线性可分的话,中间可以画出很多条线,例如粉色和绿色,但是支持向量机会画出类似于黑色的这条线,而这条线会有一个尽可能大的离样本点远的特点,也就是和两条蓝色线尽可能远。然后黑色的线和蓝色的线之间的距离就叫做支持向量机的间距。这也就是为什么支持向量机可以叫做大间距分类器。

但是样本不可能总是线性可分的,有时候会有异常点:


如果这个时候,你的C还是很大,那么支持向量机就会从黑色的线变为粉色的线,如果C不是那么大的话,就可以回归到黑色的线。


核函数(Kernels)

概念

在往常,对于下图左边的非线性分类问题:


总可以用右边多项式的形式来写。在支持向量机里面,我们把这些特征变成一个类似于函数的标志:


更换了之后,我们就开始思考一个问题:有没有更好的特征选择?比方说用更高阶的项,更复杂的组合等等,这会让你陷入到宇宙起源的思考之中。

这样就干脆重新定义几个新的特征。先在这个平面上选三个点(先不追究怎么选,为什么):


并定义三个新的特征变量为这三个点的一个函数:


这个similarity函数就叫做核函数。

核函数的作用

从这个核函数的表达式可以看得出来,如果一个点和我们定义的某一个点越近,那么它这一项的值就越接近1,越远就越接近0。


用图来表示其中一个点与其他样本点产生的值的关系,大概就是这样的:


假设我们有一个已经训练好的模型和三个选好的点:


那么粉色的点就可以根据已知的模型参量,得到结果y=1,相应的天蓝色的点就是y=0。最后发现,我们得到了这样一个类似于这样的边界:

支持向量机和核函数

有了上面这些铺垫,就有了支持向量机的另一个形态,目标函数变成如下形式:


其实也就是把里面的x换成了f。然后最后的θ^2变成了如下形式:


这个表示的是某一个核函数对应的θ,其实只是为了更好地节省计算量而设计的,最终的结果和原来的结果相差无几。


如何选择SVM中的参数

又到了一年一度选参数的问题了。有一首歌叫都选C来着?那就从参数C开始吧。


大的C会导致高偏差,低方差。小的C就是低偏差高方差。

接下来登场的是:


这个emmmm,打不出来,原谅我,反正大的这个就会产生高偏差,低方差,并且特征值会很平滑。小的这个就是低偏差,高方差,然后函数就不那么平滑。


逻辑回归VS支持向量机

当你左手一个逻辑回归,右手一个支持向量机,duang,你不知道该用哪一个了。所以到底什么情况下更适合哪个算法呢?

  • 如果特征数相对数据集的数量来说,比较大:用逻辑回归或者没有核函数的支持向量机。
  • 如果特征数比较少,而训练集数量适中:用带有核函数的支持向量机。
  • 如果特征数比较少,而训练集特别大(一百万个数据):用逻辑回归或者没有核函数的支持向量机。

为什么数据特别大的时候反而不用带核函数的支持向量机呢?因为核函数的运行还是没有辣么快,数据集一大,整个运行的速度就慢了。

在一个拥有好的设计的神经网络面前,这些模型的效果都是渣渣。但缺点也很明显,就是训练起来很慢。


后记

终于了解了支持向量机,发现还是挺有意思的,还有三周,加油加油~~~