R语言 支持向量机

支持向量机可以想象成一个平面,改平面定义了个数据点之间的界限,而这些数据点代表它们的特征绘制多维空间中的样本。支持向量机的目标是创建一个称为超平面的平面边界,它使得任何一个的数据划分都是相当均匀的。支持向量机几乎可以适用于所有的学习任务,包括分类(svm)、数值预测、回归(svr)

R实现及参数说明

1)kernlab

 函数ksvm()通过。Call接口,使用bsvm和libsvm库中的优化方法。对于分类,有C-SVM分类算法和v-SVM分类算法,同时还包括C分类器的有界约束的版本;对于回归,提供了ε-SVM回归算法和v-SVM回归算法;对于多类分类,有一对一(one-against-one)方法和原生多类分类方法。

2)e1071

使用libsvm库中的优化方法。多分类通过一对一的投票机制(one-against-one voting scheme)实现。e1071包的tune()函数在指定的范围内选取合适的参数。

3)klaR包
klaR
对库SVMlight进行了简单的包装,提供了函数svmlight()以分类,可视化。Svmlight()支持C-SVM进行分类,ε-SVM进行回归;以一对所有(one-against-all)进行多类分类。SVMlight支持高斯核,多项式,线性和sigmoid核。Svmlight()的参数形式为字符串形式。

4)svmpath

svmpath包里的函数可用来选取支持向量机的cost参数C

核函数:

Linear:使用它的话就成为线性向量机,效果基本等价于Logistic回归。但它可以处理变量极多的情况,例如文本挖掘。

Polynomialn次多项式核函数,适用于图像处理问题。选择n的好方法是从1(一个线性模型)开始,然后递增至估计误差不再改进为止。通常,相当小的数目就足够了。

Radial basis,高斯核函数,最流行易用的选择。参数包括了sigma,其值若设置过小,会有过度拟合出现。

Sigmoid:反曲核函数,多用于神经网络的激活函数。实践中,核函数的选择一般并不导致结果准确率的很大差别(也有特例!)


参数说明:

kernel: 核函数用于训练和预测。 该参数可以设置为类内核的任何函数,该函数计算两个向量参数之间的特征空间中的内积

C:违约成本(默认值:1)这是拉格朗日公式中正则项的’C’常数

nu:nu参数设置训练误差的上限和数据点分数的下限成为支持向量


代码:

  library(kernlab)
  svm.model <- ksvm(Species ~ ., data = iris, kernel = 'rbfdot')
  predict(svm.model, iris[c(3, 10, 56, 68, 107, 120), ])
  svm.t <- table(iris$Species, predict(svm.model, iris, type = 'response'))
  1 - sum(diag(svm.t))/sum(svm.t)   # 计算误差率
  
  
  library(e1071) 
  model <- svm(Species ~ ., data = iris, method = "C-classification", 
               kernel = "radial", cost = 10, gamma = 0.1)
  summary(model)
  svm.t <- table(iris$Species, predict(model, iris, type = 'response'))
  1 - sum(diag(svm.t))/sum(svm.t)   # 计算误差率
  plot(model, iris, Petal.Width ~ Petal.Length, slice = list(Sepal.Width = 3, Sepal.Length = 4))
  

点赞