2016-03-07 97 views
0

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

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

有一个软保证金硬保证金 SVM之间的区别。这由成本参数控制,该成本参数惩罚允许支持向量违反边际约束的程度。因此,只有在成本参数(非常大)的情况下,您才能获得支持向量的最小数量(三个而不是一个)。尝试使用成本参数> 10000的值,您将获得三个支持向量。

+0

感谢您的回答。事实上,一个巨大的成本函数为我提供了所需的3个向量(我忘了边际)。你能否详细说明为什么我们在明显线性可分的变量情况下得到3个以上的向量?是否因为其他向量为成本函数产生一个客观价值,足以接近最低成本? – eaglefreeman

+0

随着成本的降低,保证金的增加会导致越来越多的宝贝现在躺在边缘区域。边缘区域的点越多,支撑向量就越多。 – DatamineR