一、SVM原理
SVM的理论基础可以从最简单的线性分类问题来推出,间隔最大的分类器具有最好的泛化性(源自Margin理论)。但由于线性问题的局限性,SVM通过使用核函数进行输入空间到核特征空间上的映射,成功的转化为可表达任意非线性问题。核函数的对偶性,使得计算量与特征的纬数无关。由KKT()条件,可知分类超平面由且仅由分类边界上的点(支持向量SV)决定,非支持向量不影响分类,一般几万的样本实际上可能只有几千个支持向量,从而形成了解的稀疏性。SVM本质上是一个二次规划优化问题,它将分类精度与分类超平面的泛化性组合起来,看成是约束条件下的优化问题。核的Mercer条件(核矩阵是正定的,即该矩阵的特征值非负),保证了该优化问题只有一个全局最值。
二、SVM实现
SVM的实现更关注的是在一定的存储空间的前提下、更快的训练以达到收敛。通常不是实际的收敛,而是采用启发式方法,在满足一定的容忍条件的前提下停止迭代。常用的算法是梯度上升(下降)算法,即每次更新参数时从梯度的方向来,以最快的增加对偶函数的值。由于内存的有限,实际情况中可能不能把所有的训练数据都加载进内存,因此可以从近似的方法:选择活动工作集(对对偶目标函数贡献最大的N个点或者违反KKT条件的N个点或者参数>0且<c的点),实际训练中可以采用随机更新的方法。
此外,还有一种更高效的算法,SMO(序贯最小优化算法),本质上也是梯度算法,不过为保持KKT条件,每次优化只同时更新两个点,二者之间的参数变化关系可以推导得出,且这两个点的选择也可以通过一些启发式方法获得,原则上还是选择对对偶目标函数贡献最大的点。这样迭代到满足终止条件后,学到的参数就是最终的解。
三、SVM工具包
Libsvm(采用SMO算法实现,在Quality项目中使用过此工具,比较简单,核函数选择rbf,参数可采用交叉验证的方式得到,已实验过二类、多类、回归问题,未尝试聚类问题)
Svmlight(据说速度快,我还没用过,但感觉是否因为终止条件的不同导致?)
四、SVM应用
1、文本分类
2、回归学习
文本聚类