【发布时间】:2015-02-08 15:40:43
【问题描述】:
我正在使用库 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 页
给出的示例表明,成本参数越大,我们获得的支持向量就越少。那么这里有什么问题呢?
[EDIT 1] 我与上述图书馆的编辑交换了一些电子邮件,他举了一个反例。
“基本上可以,但这不是线性的,试试:”
N = sapply(1:1000, function(i) svm(Species ~ ., data = iris, cost = i)$tot.nSV) 情节(N)
【问题讨论】:
-
每个模型的性能如何?如果 gamma =1 导致您的数据点半径过宽,那么它们同样糟糕,并且由于成本太高并且 SVM 选择了更好的 SV 组合,它的性能往往会更差
-
但是 Gamma=1/sigma^2 ,这不应该导致相对较小的半径吗?无论如何,改变 Gamma 不会改变我所描述的行为!
-
嗯,这取决于.. 根据您的数据规模可能大或小。你在扩展你的数据吗?取值范围是多少?对于 RBF 内核,是 C 和 gamma 的组合控制了 SV 的数量
标签: r machine-learning data-mining svm