本博客记录《机器学习实战》(MachineLearningInAction)的学习过程,包括算法介绍和python实现。
SMO算法
前两篇文章介绍了SVM的原理,经过一番推导,原始问题转化为:
minα∑i=1n12∑i,j=1nαiαjyiyjK(xi,xj)−αis.t.,0≤αi≤C,i=1,...,n∑i=1naiyi=0
SMO算法就是用来解决这个问题,求解出这些 α 之后,超平面的参数就可以通过这些 α 计算出来。
二元优化
SMO算法的核心在于,它把原本n个参数的优化问题拆分为很多个小的子问题,每次只优化其中的两个参数而固定其它参数,两个参数的优化是很快的,从而使得最终算法的效率非常高。
假设在n个参数(α1,...,αn)中选取α1和α1进行优化,其它参数全部视为常数,则原问题化简为:
minΨ(α1,α2)=12K11α21+12K22α22+K12y1y2α1α2−(α1+α2)+y1v1α1+y2v2α2