2017-05-01 8 views
0

私は現在、バイナリ分類問題のためにSVM(RBFカーネル)分類子を訓練する必要があるプロジェクトに取り組んでいます。私はRとLIBSVM(パッケージe1071)を使用していますし、私のSVMのパラメータを調整するtune機能の使用を模索したR - Overfittingでの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))) 

事実を考慮すると、中にいます私は無用分類器を取得しているように見えること

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))) 

私の問題がある:私の問題は、私はまたclass.weights引数を追加すると考えられ、不平衡データセットを取り扱っております、私は常に最適なモデルとして取得します(svmTune$best.model)は、トレーニングデータの長さと同じ数のサポートベクトルを有するSVM(または、34 S.V. 35の訓練事例について);このモデルは訓練データを記憶し(訓練データに対して1のAUCを有する)、またはそれを予測する際に悲惨に失敗する(0.5のAUC)。テストデータのパフォーマンスに関しては、私はいつも0.5のAUCを得ています...

私はtune.controlオブジェクトを作成していくつかの制御パラメータを微調整することができますが、私はそのパラメータのいくつかを変更しようとしました私の結果を改善することができません....

誰かが私が間違っていることを理解するのを助けることができますか?私はこのような自動化された方法でSVMのいくつかのパラメータを試してはいけないのですか?

答えて

0

これはオーバーフィッティングの場合のようです。データポイントが非常に少ないので、アルゴリズムがデフォルトでデータを記憶するだけでは不思議ではありません。パラメータチューニングやモデル選択のクロスバリデーションについては、オンラインで多くの素晴らしいソースがあります。この本はRを使った多くの例を持っています:http://www-bcf.usc.edu/~gareth/ISL/

関連する問題