sklearn中的svm

Reading time ~1 minute

1.介绍

svm可以用来分隔不均衡(unbalanced)的类。

SVM的优点有:

  • 1.高维空间很有效
  • 2.对于维度数目大于sample数目,仍有效
  • 3.在决策函数(支持向量)中使用一个训练点的子集,因此内存很高效
  • 4.多样化:决策函数使用不同的kernel函数。提供了通用的kernel,但也可以指定特定的kernel。

SVM的缺点包括:

  • 1.如果feature数大于sample数,会给出各差的性能
  • 2.SVM不直接提供概率评估(因而,不能使用计算高昂的5-fold交差验证)

sklearn中SVM支持dense和sparse训练样本向量作为输入。

2.分类器

SVC, NuSVC和LinearSVC可以进行多分类。

SVC和NuSVC两者类似,在输入参数上有细微差别,并具有不同的数学公式。另一方面,LinearSVC是另一个SVM的线性实现。注意LinearSVC不接受kernel参数,因为本身已经是线性的。

SVM决策树依赖于一些训练子集,称为支持向量。这些支持向量可以由clf分类器的成员属性指定:如:support_vectors_, support_ and n_support.

2.1 score和probabilities

  • decision_function: SVM的该方法,为每个样本给出了每个分类的score。
  • probability:设为True, 表示开启类成员的概率估计(predict_proba/predict_log_proba)。在二分类问题中,概率的标准化使用Platt scaling:在SVM的score进行logistic回归, 在训练集上进行额外的cross-validation。

在Platt scaling中的cross-validation,在大训练集上开销很大。

2.2 实际使用时的tips

  • 1.避免数据拷贝:对于SVC, SVR, NuSVC和NuSVR来说,如果传进来的数据不是C-order连续,或不是double精度的,那么在调用底层的C实现时将引起数据拷贝。你可以通过检查flags属性来确认下numpy数据是否是C连续的。 而对于LinearSVC来说,。。。
  • 2.Kernel的cache size:对于SVC, SVR, NuSVC和NuSVR来说,kernel的cache size对运行时长有很大影响。如果你具有足够的RAM,推荐将cache_size设得更高,缺省为200(MB). 比如500,或1000.
  • 3.设置C: C缺省为1,这是个合理的选择。如果你发现有很多噪声,可以减小该值。相应的正则项部分可以更好地估计。
  • 4.支持向量机算法没有归一化,因此强烈建议进行数据归一化!!例如,在输入向量X的每个属性归一化成[0,1]或[-1,+1],或者将它们标准化成均值为0和方差为1。注意,必须在test vector上进行相同的归一化,来获得有意义的数据。详见数据预处理
  • 5.NuSVC/OneClassSVM/NuSVR的参数nu,逼近训练误差和支持向量。
  • 6.在SVC中,如果分类的数据是不均衡的(比如:positive很多,negative很少),可以设置class_weight=’balanced’,并尝试不同的处罚因子C.

参考:

1.http://scikit-learn.org/stable/auto_examples/svm/plot_separating_hyperplane_unbalanced.html