【机器学习】支持向量机SVM
关于支持向量机SVM,这里也只是简单地作个要点梳理,尤其是要注意的是SVM的SMO优化算法、核函数的选择以及参数调整。在此不作过多阐述,单从应用层面来讲,重点在于如何使用libsvm,但对其原理算法要理解。
SVM理论推导是有些复杂的,关键是怎么把目标函数在约束条件下,最终转化为一个凸二次优化问题。在这里推荐一个写的比较经典的文章,july的博客里的一篇文章《支持向量机通俗导论(理解SVM的三层境界)》,博文链接:http://blog.csdn.net/v_july_v/article/details/7624837
一、步骤
1.找最大分类间隔
2.定目标函数
3.计算α值(不断调整训练)与ω值
4.SMO(串行最小化)可以优化算法
5.核函数对高维数据处理
二、SVM要点
要学会如何使用libsvm以及一些参数的调节经验,另外需要理清楚svm算法的一些思路:
1.svm中最优分类面是对所有样本的几何裕量最大,即
经过一系列推导可得为优化下面原始目标:
注意:选择最大间隔分类器的原因:因为几何间隔与样本的误分次数存在关系:误分次数≤(2R/δ)^2,其中的分母就是样本到分类间隔距离,分子中的R是所有样本中的最长向量值。
2.拉格朗日理论:
可以将1中的优化目标转换为拉格朗日的形式(通过各种对偶优化,KKD条件),最后目标函数为:
我们只需要最小化上述目标函数,其中的α为原始优化问题中的不等式约束拉格朗日系数。
3. 对2中最后的式子分别w和b求导可得:
由上面第1式子可以知道,如果我们优化出了α,则直接可以求出w了,即模型的参数搞定。而上面第2个式子可以作为后续优化的一个约束条件。
4. 对2中最后一个目标函数用对偶优化理论可以转换为优化下面的目标函数:
而这个函数可以用常用的优化方法求得α,进而求得w和b。
5. 按照道理,svm简单理论应该到此结束。不过还是要补充一点,即在预测时有:
那个尖括号我们可以用核函数代替,这也是svm经常和核函数扯在一起的原因。
6. 最后是关于松弛变量的引入,(因为之前的推导条件太苛刻,其实在分类过程中会出现噪声,如果对噪声零容忍,那么可能导致分类误解,为了解决此问题故引入松弛变量)
因此原始的目标优化公式为:
此时对应的对偶优化公式为:(对偶公式:就是同一值,目标函数倒过来,min化为max)
与前面的相比只是α多了个上界。
三、算法流程
对于样本数很多时(几千个),SVM所需要的内存很大,对于此问题,目前的解决方法有2种:块算法和分解算法。
这里libsvm采用的是分解算法里的SMO(串行最小化),其每次训练都只选择2个样本,基本流程图如下:
这里有两个重要算法:一个是α的选择,一个是α的更新。
(1) α的选择:选择2个和KKT条件违背最严中的两个αi,包含两层循环…
(2) α的更新:…
四、优缺点
优点:
1.可用于线性/非线性分类,也可用于回归
2.低泛化误差
3.容易解释,计算复杂度低
缺点:
1.对参数和核函数选择敏感
2.原始SVM只擅长处理二分类问题