原文链接
一、高维映射
现在我们抛出一个例子,引出问题。先考虑情况一,我们可以很容易的将如上的样本集分类,用一个线性分类器即可。但是如下图的情况二呢?很明显,无法找到一条二维的线性直线将蓝黑两类点分类正确。
怎么办呢?是的没错!就是用高维映射,我们将二维坐标点
转化到高维空间就可以用直线划分,比如转化为五维坐标点:
这样,我们得到转化到五维的四个坐标点,接着,我们再找到一条在五维的直线( , b)将这四个点分开,以什么为标准呢?参照二维情况,这里我们用:
注意,我们是以上式为标准,找的一条直线,何谓找到一条直线呢?也就是找到其参数( , b),找到的参数值为:
以此标准代入参数验证这些坐标点,可以得到
看!如此,我们很清楚的将在二维平面难以线性划分的样本集在五维平面上线性划分开来了,perfect!那说明什么呢?
事实上,任何样本集如果利用高维映射转化到无限维上都可以线性划分开
二、什么叫核函数
看上面想的多完美,对于任意线性不可分的样本集,我们只要找到高维映射就都可以在高维空间上划分开了,但是吧,事实是这个
并不都像上面那个例子那么容易求出来,有时是非常困难的,所以呀,我们引出了核函数(kernal function):
我们直接给出了核函数的形式,现在肯定有些难以理解,没关系,只要清楚核函数就是两无限维向量的内积而已,我们现在要记住我们的目的就是:
在计算过程中用这个已知的核函数来代替难以确定的、虚无的高维映射函数
由此,我们在这里总结出SVM算法最大的创意点——核技巧(Kernal Trick):我们在做分类问题的时候,可以不清楚无限维映射的显示表达,只要知道核函数
,那么这个优化问题仍然可解
(对于这个优化式的来由不清楚的可以查看文末链接)。
三、只有核函数K的优化问题
好啦!先喘一口气,我们总结一下,你看上面核函数的表达式,等号左边实际上是一个变量值,而等号右边是两无限维向量的内积,我们前面做的工作实际上就是引入了核函数,这里有个误区,核函数不是将低维度样本集线性不可分划分的方法,高维映射才是,核函数只是简化了这个过程,我们不需要去求解的具体形式而已([这里]有几个关于常用核函数和核函数的举例,你一看就明白了)
那么为什么引入核函数呢,没错,借助它,避开,解以上优化问题!准备好了吗,耐心看下去,我们接着解出上面的优化问题。
首先,为了后续求导方便,我们把设为小于等于零,所以上述优化式改写为:
(这个部分很好理解,前加上负号就ok了)。 我们设
,那么这个原问题的对偶问题(dual problem)为(目标函数用了拉格朗日函数,引入了参数
和
):
免得有人在这里犯糊涂,我在这里多唠叨几句,D表明已知有N个样本点(X,y~i~),我们要做的就是通过这个优化问题在所有的中找到最优的那三个值,怎么算最优,就是这里最大化到什么程度,怎么求出这个值呢?套路!求导呗!
我觉得大家都明白,求导比较繁琐,但肯定不难,稍耐心,肯定能得出正确结果,大家不妨算一算,看看和给出的结果是否一致。 所以,依照求导的结果代入后获得的应该是下确界的值,在maxmize它,再次改写优化问题,约掉,用的是上面的式子:
再次分析一波,上式中y~i~,y~j~是label,已知的值。核函数K则是一开始用户确定采用的那一种核函数(比如常见的高斯核函数和多项式核函数等),而待求的则是,细心的朋友可能已经发现了,优化问题中的
都慢慢“消失”,被核函数
代替,这就是前面我们折腾半天的原因,
避开,用代替,这也是全篇的核心所在!!!
四、测试样本X流程
OK,整理清楚思路,这个问题就很好解了,回归文章开头,我们在测试样本属于哪一类时,用的标准是
我们一般的思路是求出各个部分在求出结果和1比较,但是如果我们把当作一个整体就简洁多了。那么这个整体的形式( 避开
,用
代替)最终是什么呢?实际上,经过代入计算可得,
再次解释一波,这里的是已知的训练集样本,而样本
是未知的,我们正是要判断此样本的label值。
坚持到这里啦!胜利就在前方!现在已经知道的值,要想知道整体的值,还差一个
,怎么求这个
呢?没错,引出最后一个知识点,KKT条件,要想这个对偶问题的解与原问题相等,需要满足这个KKT条件,即:
因为约束,则
,所以根据KKT条件,
由此可得出
五、总结
感谢你一路看到现在,我们对SVM算法做出最后的总结,帮助加深理解:
1)训练阶段
2)测试阶段
输入你想要测试的样本X,再根据(6)分类器:
进行分类,看吧!问题完美解决了!漂亮的算法! **写到深夜了,但还是为这个美丽的算法所折服,你呢?有收获吗?