我使用库e1071在R中训练支持向量机模型,改变代价函数,观察得到的支持向量数目。
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我的问题是:这里的成本参数是否等同于软裕度支持向量机的对偶拉格朗日公式中的C参数?如果这些参数是相同的,那么我们不应该观察到越来越多的支持向量吗?
“然而,与任何正则化方案一样,这里关键的是为惩罚因子C选择一个适当的值。如果它太大,我们对不可分离的点会有很高的惩罚,我们可能会存储许多支持向量和过度拟合。如果它太小,我们可能会有欠拟合。”Alpaydin (2004),第224页
算例表明,成本参数越大,得到的支持向量越少。那么这里出了什么问题?
编辑1我与上述图书馆的编辑交换了一些电子邮件,他举了一个反例。
“基本上,是的,但这不是线性的,试试:”
N= sapply(1:1000,函数(I)svm(物种~ .,数据=虹膜,成本=i)$tot.nSV图(N)
发布于 2016-10-11 15:44:50
我从图书馆创建者那里得到了这个答案:
基本上,是的,但这不是线性的,请尝试: N= sapply(1:1000,函数(I)svm(物种~,数据=虹膜,成本= i)$tot.nSV) 地块(N)
发布于 2015-05-29 20:41:37
你的直觉是绝对正确的,但你需要看到你的分类算法是在一个无限维空间中跳舞,你什么都不知道。把C从1变到1000可能需要分类边界--字面意思是--在宇宙的另一个部分。试着在较小的C范围内进行实验,看看它是如何变化的。我改变了C从256000,128000,64000,32,16,8,4,2(每次减半),并发现了有趣的行为围绕C= 15,8,4等。你看到有数百个点符合支持向量和曲面可以曲线任何你想要的方向。因此,增加"C意味着更多的支持向量“规则将只在统计上是正确的。SVs的确切数量将取决于点的布局方式和曲面曲线。
https://stackoverflow.com/questions/27401105
复制相似问题