欢迎转载,可以关注博客:http://blog.csdn.net/cqy_chen
题目可能不全,因为有字数限制,不好意思,可以参考:
https://www.csie.ntu.edu.tw/~htlin/course/ml15fall/
概要
本课程前面的16节课是机器学习基石,后面的16节课是机器学习技法。介绍更多的机器学习知识,主要围绕特征转换问题:
1)如何规范和扩展更多的特征,这个引出了支持向量机
2)如何将特征进行融合,这个引出了adaboosting算法
3)如何辨别和学习隐藏的特征,这里引出了一些类神经网络的算法,比如深度学习。
最大化间隔超平面
在学习这个的时候,首先看看以前学习到的PLA,如下图:
但是我们知道,PLA最后得到的结果不是确定的,和初始的点有关系的,最后只要分开了就好了。
这三条先要选择哪一条比较好呢?
根据VC理论:
因为模型的复杂度没有区别,这三条线的理论保证是样的。但是如果真要选择,估计大多数人都会选择第三条线。
假设数据中存在噪音,就是未知的点可能会落在已知点的附近。
如下图:
如果采用左边的分类器,那么这个分类器忍受噪音比较低。右边的忍受噪音比较高。由于过拟合的因素中包含噪音,所以如果能够更好的区分噪音,那么分类器就更加鲁棒。这个鲁棒程度就和线离最近点的距离有关写,这个距离越大就越鲁棒。
所以我们现在的目的就是要找到这样一条线,使得该条线和最近点的距离最宽。这条线需要满足两个条件:
1)假设资料可分,这条线要将资料完全分开。
2)该条线要离最近的点的距离最大。称这个距离为:margin。
数学上的表示如下:
标准最大化间隔问题
上面引出了支持向量机的表现形式,这里为了后面的推导方便,将
w
拆分成两部分, 一个是
由于需要计算点到直线的距离,这个如何计算呢?
设得到的超平面是: wTx+b=0 ,超平面上两个点: x′以及x′′ ,那么我们得到,任意一个点到超平面的距离其实就是该点到超平面的点的连线在法向量上的投影。如下图所示:
就是一个向量在法向量上的投影如下:
由于可以线性分开,所以:
所以现在公式变成了:
同时我们看看 wx+b=0和3wT+3b=0 是一样的嘛,所以可以假设最近的点满足: yn(wTxn+b)=1 那么我们可以得到:
因为条件表示的是要使得最小的那个点满足 yn(wTxn+b)=1 ,那么等价于对于所有的点 yn(wTxn+b)≥1 ,如果放缩到这样的条件,会不会所有的点都大于1呢,没有等于1的情况?可以用反证法,这里就不细说了。同时将最大化变成最小化,同时添加一个 12 ,便于后面进行推导。
条件替换之后变成了:
支持向量机
那么要如何求解上面的式子呢?先来看看一个简单的案例:
假如有4个点,如下,根据式子得到四个不等式:
将不等式1和3相加消去b,将2和3相加消去
w1和b
我们可以得到
w1=1,w2=−1,b=−1
,这个我们称为支持向量机。这几个点和线段绘制如下:
将所有的点分为了2种,一种是在边界上的点,一种不是在边界上的点。我们称边界上的点为支持向量,准确的说是支持向量的候选集。
那么如何求解呢?仔细观察这个问题,这个其实是一个二次规划问题,这个是被研究烂的问题,可以直接通过二次规划进行求解。只需要表示成二次规划的格式就好了。
二次规划问题形式如下;
将上的式子表示成二次规划的情形如下;
所以直接带入二次规划就完事儿了,但是这样直接算是有代价的,对于数据量不是很大情况,可以这样搞定,如果数据量比较大,哈哈后面会讲到。
这个称为线性硬分割支持向量机,当然也可以将x进行映射到高维空间。
支持向量机背后的理论
为什么SVM会比简单的PLA做的好呢?背后是什么理论?
我们对比下正则化和SVM限制条件:
那么我们可以清晰的看到,SVM和正则化就是换了方向,所以可以认为SVM是正则化的一种。
那么对比PLA呢,假如我们限定SVM的线的宽度必须要大于一个度,
那么可以看到同样是可以分割线中,PLA的假设空间是要大于SVM的,这就导致PLA的复杂度大于SVM。从VC维理论进一个解释。
假设X是在一个R为半径的圆圈中:
要想找一条线来shatter这三个点,如果线对胖瘦没有要求,那么,vc维就是3,如果限定了胖瘦大小,有的点肯定是没法shatter的,就会导致vc维会小于3。
就是说:
所以SVM的VC维和线的胖瘦有关也和X所在的超球体半径有关。这样就可以推出SVM的
Eout
应该会比PLA来的好。
同时对比下超平面和SVM之间的差异:
Tables | SVM(胖的分割线) | 超平面 | 超平面+特征转换 |
---|---|---|---|
假设空间 | 比超平面少 | 少 | 多 |
边界 | 简单 | 简单 | 复杂 |
所以我们能不能采用SVM和特征转换联合起来,一方面得到少的假设空间,同时边界还比较复杂。
这就是kernel版本的SVM
关于kernel可以参考:
http://blog.csdn.net/cqy_chen/article/details/77932270
下节课这里也会讲到kernel的SVM
欢迎转载,可以关注博客:http://blog.csdn.net/cqy_chen