SVM及Libsvm&Liblinear

一、概念
支持向量机(SVM,Support Vector Machine)(https://www.cnblogs.com/d0main/p/6918818.html)属于一种线性分类器,是建立在统计学习理论的VC维理论和结构风险最小原理的基础上,根据有限的训练集,在模型的复杂性和学习性之间寻求最佳的折中,以获得最好的泛化能力的经典分类方法。对于SVM可以简单的理解为(以二分类为例)根据训练集中数据及其label找到一个分割面把两类准确的分开,分割面的确定是根据支持向量和分割面的距离最大化确定的。SVM是当前最好的有监督学习算法,它的出现解决了神经网络的局部最优化的问题,得到全局最优化,因此一经提出到现在得到广泛的应用。

二、SVM参数选择
n 为特征数,m 为训练样本数。
(1) 如果相较于 m 而言,n 要大许多,即训练集数据量不够支持我们训练一个复杂的非线性模型(会导致high variance),我们选用逻辑回归模型或者不带核函数的支持向量机。
(2) 如果 n 较小,而且 m 大小中等,例如 n 在 1-1000 之间,而 m 在 10-10000 之间,使用高斯核函数的支持向量机。(效果拔群,远胜逻辑回归模型或者不带核函数的支持向量机)
(3) 如果 n 较小,而 m 较大,例如 n 在 1-1000 之间,而 m 大于 50000,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征(否则会导致high bias),然后使用逻辑回归或不带核函数的支持向量机。

三、SVM实现多分类
 SVM算法最初是为二值分类问题设计的,当处理多类问题时,就需要构造合适的多类分类器。目前,构造SVM多类分类器的方法主要有两类:一类是直接法,直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多类分类。这种方法看似简单,但其计算复杂度比较高,实现起来比较困难,只适合用于小型问题中;另一类是间接法,主要是通过组合多个二分类器来实现多分类器的构造,常见的方法有one-against-one和one-against-all两种。

  1. 一对多法(one-versus-rest,简称1-v-r SVMs)。训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM。分类时将未知样本分类为具有最大分类函数值的那类。
  2. 一对一法(one-versus-one,简称1-v-1 SVMs)。其做法是在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。Libsvm中的多类分类就是根据这个方法实现的。
  3. 层次支持向量机(H-SVMs)。层次分类法首先将所有类别分成两个子类,再将子类进一步划分成两个次级子类,如此循环,直到得到一个单独的类别为止。 对c和d两种方法的详细说明可以参考论文《支持向量机在多类分类问题中的推广》(计算机工程与应用。2004)
  4. 其他多类分类方法。除了以上几种方法外,还有有向无环图SVM(Directed Acyclic Graph SVMs,简称DAG-SVMs)和对类别进行二进制编码的纠错编码SVMs。

猜你喜欢

转载自blog.csdn.net/lihe4151021/article/details/121409826