【问题标题】:SVM: Cost parameter VS. number of support vectorsSVM:成本参数VS。支持向量的数量
【发布时间】: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


【解决方案1】:

我从库创建者那里收到了这个答案:

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

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

情节(N)

【讨论】:

    【解决方案2】:

    你的直觉是绝对正确的,但你需要看到你的分类算法在你一无所知的无限维度空间中跳舞。将 C 从 1 更改为 1000 可能会将分类边界——字面意思——置于宇宙的不同部分。尝试在较小的 C 范围内进行实验,看看它是如何变化的。我将 C 从 256000, 128000, 64000, ... 32, 16, 8, 4, 2 (每次减半)变化,并在 C = 15、8、4 等附近发现了有趣的行为。您会看到有数百个点符合条件是支持向量,表面可以按照您想要的方式弯曲。因此,增加“C 意味着更多支持向量”规则仅在统计上是正确的。 SV 的确切数量会因点的放置方式和曲面曲线的方式而异。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-09
      • 2016-06-21
      • 2023-03-15
      • 2019-06-27
      • 2017-09-19
      • 2020-07-13
      • 2018-10-26
      • 2016-05-25
      相关资源
      最近更新 更多