我在R语言中使用e1071库来训练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] 208svm.model <- svm(Type ~ ., data = Glass, cost = 1, gamma= 1)sum(svm.model$nSV)#[1] 183svm.model <- svm(Type ~ ., data = Glass, cost = 100000, gamma= 1)sum(svm.model$nSV)#[1] 172
我的问题是:这里的成本参数是否等同于软间隔SVM的对偶拉格朗日公式中的C参数?如果这两个参数是相同的,那么我们不应该观察到支持向量数量的增加吗?
“然而,在任何正则化方案中,选择适当的C值(惩罚因子)至关重要。如果C值过大,我们对不可分点的惩罚过高,可能会存储许多支持向量并导致过拟合。如果C值过小,可能会导致欠拟合。”Alpaydin (2004),第224页
所展示的例子表明,成本参数越大,我们得到的支持向量就越少。这里出了什么问题?
[编辑1] 我与提到的库的编辑们交换了一些电子邮件,他提供了一个反例。
“基本上,是的,但这不是线性的,试试这个:”
N = sapply(1:1000, function(i) svm(Species ~ ., data = iris, cost = i)$tot.nSV)plot(N)
回答:
我从库的创建者那里收到了这个回答:
基本上,是的,但这不是线性的,试试这个:
N = sapply(1:1000, function(i) svm(Species ~ ., data = iris, cost = i)$tot.nSV)
plot(N)