在实际运用中,很少有人动手实现解决SVM最优化的问题,因为已经有研究者做了很多年的数值优化了,我们再动手实现得不偿失。有很多好用的SVM软件包,比如libnear和libsvm。
有了SVM软件包,我们不再过多关心目标函数最优化的问题,只需要重点考虑核函数的选择。
除了以前经常用到的高斯核函数之外,我们还有其他一些选择,如:
多项式核函数(Polynomial Kernel)
字符串核函数(String kernel)
卡方核函数(chi-square kernel)
直方图交集核函数(histogram intersection kernel)
....
这些核函数和高斯核函数一样,也是根据训练集和地标之间的距离来构建新特征。这些核函数需要满足Mercer's定理,才能被支持向量机的优化软件正确处理。
Mercer 定理:任何半正定的函数都可以作为核函数。所谓半正定的函数f(xi,xj),是指拥有训练数据集合(x1,x2,...xn),我们定义一个矩阵的元素aij = f(xi,xj),这个矩阵式n*n的,如果这个矩阵是半正定的,那么f(xi,xj)就称为半正定的函数。这个mercer定理是核函数必要条件.
半正定矩阵:设A为实对称矩阵,若对于每个非零实向量X,都有X'AX≥0,则称A为半正定矩阵,称X'AX为半正定二次型。(其中,X'表示X的转置。)
除了核函数的选择,还要注意 C 值得设置,我们从以前的分析中,已经了解到了C值的重要性。
从逻辑回归模型,我们得到了支持向量机模型,在两者之间,我们该如何选择?
下面是一些普遍使用的准则:
n为特征数,m为训练样本数。
(1)如果相较于m而言,n要大许多,即训练集数据量不够支持我们训练一个复杂的非线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机。
(2)如果n较小,而且m大小中等,例如n在1-1000之间,而m在10-10000之间,使用高斯核函数的SVM。
(3)如果n 较小,而m较大,例如n在1-1000之间,而m大于50000,则使用SVM会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或者不带核函数的SVM。
值得一提的是,神经网络在以上三种情况都可能会有较好地表现,但是训练神经网络可能非常慢,选择支持向量机的原因主要在于它的代价函数是凸函数,不存在局部最小值,直接是全局最小值。