5

私は libsvm に Python インターフェイスを使用しています。グリッド検索を使用して最適なパラメーター (RBF カーネル) を選択した後、モデルをトレーニングしてクロス検証 (関連する場合は 5 倍) を行っていることに気付きましCgamma。受け取る精度は、トレーニング データ セットのラベルの比率と同じです。

3947 個のサンプルがあり、そのうち 2898 個はラベル -1 で、残りはラベル 1 です。つまり、サンプルの 73.4229% です。

そして、モデルをトレーニングして 5 つのフォールドを交差検証すると、次のようになります。

optimization finished, #iter = 1529
nu = 0.531517 obj = -209.738688,
rho = 0.997250 nSV = 1847, nBSV = 1534
Total nSV = 1847
Cross Validation Accuracy = 73.4229%

これは、SVM が機能を考慮していないということですか? それとも、ここでデータに問題があるのでしょうか? それらは両方ともまったく関連していますか?73.4229 の番号を超えることができません。また、サポート ベクターの数はデータセットのサイズよりもはるかに少ないはずですが、この場合はそうではないようです。

一般に、相互検証の精度がデータセット内のラベルの比率と同じであるとはどういう意味ですか?

4

1 に答える 1

6

データセットが不均衡です。つまり、大部分が同じクラスです。これにより、デフォルトまたはマジョリティクラスの分類器と呼ばれるものが作成され、すべてをマジョリティクラスの一部として分類するだけで、高精度が実現されます。したがって、データが原因で、機能が考慮されていないのは正しいことです。

libsvm READMEは、これに対処するためにペナルティの重みを変えることを提案しています。そして、ここに関連する質問があります:https ://stats.stackexchange.com/questions/20948/best-way-to-handle-unbalanced-multiclass-dataset-with-svm

不平衡データの詳細については、サポートベクターマシンのユーザーガイドのセクション7を参照してください。

于 2012-12-03T11:15:00.020 に答える