【问题标题】:Tuning SVM parameters in R - Overfitting在 R 中调整 SVM 参数 - 过拟合
【发布时间】:2017-09-28 11:51:03
【问题描述】:

我目前正在从事一个项目,我需要针对二进制分类问题训练 SVM(RBF 内核)分类器。我正在使用 R 和 LIBSVM(包 e1071) 并正在探索使用 tune 函数来调整我的 SVM 的参数。

我的 R 代码如下:

svmTune <- tune(svm, train.x=x, train.y=y, kernel='radial',
                ranges=list(cost=10^(-5:5), gamma=seq(0, 100, 0.5)))

考虑到在我的问题中,我正在处理一个不平衡的数据集,我还考虑添加一个class.weights 参数:

svmTune <- tune(svm, train.x=x, train.y=y, kernel='radial',
                ranges=list(cost=10^(-5:5), gamma=seq(0, 100, 0.5)),
                class.weights=c('0'=numZeros/(numZeros+numOnes),
                                '1'=numOnes/(numZeros+numOnes)))

我的问题是我似乎得到了一个无用的分类器:我总是得到一个支持向量数量与训练数据长度相同(或非常接近,如34 个 SV 用于 35 个训练实例);这个模型要么记住训练数据(训练数据的 AUC 为 1),要么在预测它时惨遭失败(AUC 为 0.5)。关于测试数据的性能,我总是得到 0.5 的 AUC...

我知道我们可以创建一个tune.control 对象来调整几个控制参数,我也尝试更改它的一些参数,但似乎无法改善我的结果....

有人可以帮我理解我做错了什么吗?我不应该以这样的自动化方式为 SVM 尝试多个参数吗?

【问题讨论】:

    标签: r classification libsvm


    【解决方案1】:

    这似乎是过度拟合的情况。由于数据点很少,因此该算法默认只记住数据并不奇怪。尝试阅读有关参数调整和/或模型选择的交叉验证,网上有很多很棒的资源。这本书有很多使用R的例子:http://www-bcf.usc.edu/~gareth/ISL/

    【讨论】:

      猜你喜欢
      • 2014-11-28
      • 2016-07-01
      • 2015-06-20
      • 2016-11-20
      • 2020-08-07
      • 2018-06-10
      • 2014-05-18
      • 2015-03-25
      • 1970-01-01
      相关资源
      最近更新 更多