簡體   English   中英

在R中調整SVM參數-過度擬合

[英]Tuning SVM parameters in R - Overfitting

我目前正在從事一個項目,該項目需要針對二進制分類問題訓練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)))

我的問題是,我似乎得到了一個無用的分類器:我總是得到一個最佳模型( svmTune$best.model )一個SVM,其支持向量的數量與訓練數據的長度相同(或者非常接近,例如34 SV(用於35個訓練實例); 該模型要么記憶訓練數據(相對於訓練數據,其AUC為1),要么無法預測(AUC為0.5)。 關於測試數據的性能,我總是得到0.5的AUC。

我知道我們可以創建一個tune.control對象來調整幾個控制參數,並且我也嘗試過更改其一些參數,但似乎無法改善結果。

有人可以幫助我了解我在做什么錯嗎? 我不應該像這樣以自動化方式嘗試為SVM嘗試幾個參數嗎?

這似乎是過度擬合的情況。 由於數據點太少,因此該算法默認只存儲數據就不足為奇了。 嘗試閱讀有關參數驗證和/或模型選擇的交叉驗證的信息,在線上有很多不錯的資源。 本書有很多使用R的示例: http : //www-bcf.usc.edu/~gareth/ISL/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM