SVM:成本参数VS.支持向量的数量

时间:2014-12-10 12:32:38

标签: r machine-learning data-mining svm

我使用库e1071来训练R中的SVM模型,其中我改变了成本函数并观察了得到的支持向量的数量。

library("e1071")
library("mlbench")
data(Glass, package="mlbench")
svm.model <- svm(Type ~ ., data = Glass, cost = 0.00100, gamma= 1)
sum(svm.model$nSV)
#[1] 208
svm.model <- svm(Type ~ ., data = Glass, cost = 1, gamma= 1)
sum(svm.model$nSV)
#[1] 183
svm.model <- svm(Type ~ ., data = Glass, cost = 100000, gamma= 1)
sum(svm.model$nSV)
#[1] 172

我的问题如下: 这里的成本参数是否等于软边界SVM的双拉格朗日公式中的C参数? 如果这些参数相同,那么我们不应该观察到越来越多的支持向量吗?

“然而,在任何正规化方案中,至关重要的是,为C选择适当的值,惩罚因子。如果它太大,我们对不可分的点有很高的惩罚,我们可能存储许多支持矢量和过度装备。如果它太小,我们可能会不合适。“ Alpaydin(2004),第224页

所呈现的示例显示,成本参数越大,我们得到的支持向量越少。那么这里有什么问题?

[编辑1]我与上述图书馆的编辑交换了一些电子邮件,他给出了一个反例。

“基本上,是的,但这不是线性的,请尝试:”

N = sapply(1:1000,function(i)svm(Species~。,data = iris,cost = i)$ tot.nSV) 情节(N)

2 个答案:

答案 0 :(得分:1)

我收到了图书馆创建者的回答:

  

基本上,是的,但这不是线性的,请尝试:

     

N = sapply(1:1000,function(i)svm(Species~。,data = iris,cost = i)$ tot.nSV)

     

积(N)

答案 1 :(得分:0)

你的直觉是绝对正确的,但你需要看到你的分类算法在一个无限维空间中跳舞,你什么都不知道。将C从1改为1000可能会在宇宙的不同部分采用分类边界 - 术语。尝试在较小范围的C中进行实验,看看它是如何变化的。我将C从256000,128000,64000,...... 32,16,8,4,2(每次减半)变为C,并在C = 15,8,4等周围找到了有趣的行为。你看到有数百个点符合条件是支持向量,表面可以曲线任何你想要的方式。因此,增加&#34; C意味着更多的支持向量&#34;规则只有统计学上的真实性。 SV的确切数量将根据点的铺设方式和曲面曲线的方式而变化。