首页 文章

调整R中的SVM参数 - 过度拟合

提问于
浏览
0

我目前正在开发一个项目,我需要为二进制分类问题训练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)))

考虑到这个事实,在我的问题中,我正在处理一个不 balancer 的数据集,我还考虑添加一个 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)))

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

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

有人能帮助我理解我做错了什么吗?我不应该像这样以自动方式为SVM尝试几个参数吗?

1 回答

  • 0

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

相关问题