限制R svm包e1071中的支持向量数量?

时间:2016-03-07 17:22:55

标签: r svm

我在e1071包中使用了svm函数。据我所知,svm基本功能可以使用超平面(支持向量)分隔两个线性可分类。更高级的功能允许您执行数字回归和非线性分离。 当我开始对某些数据进行测试时,我无法理解为什么模型的输出是一组庞大的支持向量。 当我在一些非常简单的测试示例上运行它时,我得到了相同的结果。这是一个例子:

X = rnorm(1000)
Y = rnorm(1000)
data = data.frame(X, Y, Z = as.factor(X + Y > 0))
model = svm(formula = Z ~ X + Y, data = data, kernel = "linear")

结果如下:

Call:
svm(formula = Z ~ X + Y, data = data, kernel = "linear")


Parameters:
  SVM-Type:  C-classification 
SVM-Kernel:  linear 
  cost:  1 
  gamma:  0.5 

Number of Support Vectors:  102

此示例显然只能通过一个支持向量线性分离。如果不相信你可以运行:

ggplot(data, aes(X, Y, col = Z)) + geom_point()

102支持向量是什么意思?为什么支持向量的数量不是参数?

由于

1 个答案:

答案 0 :(得分:1)

软边距硬边距 svm之间存在区别。这由成本参数控制,该成本参数惩罚允许支持向量违反边际约束的程度。因此,只有在成本参数(非常)较大的情况下,才能获得最少数量的支持向量(三个而不是一个)。尝试使用成本参数的示例值> 10000,你会得到三个支持向量。