0

5 つのラベルを持つ 2 つのマルチクラス データ セットがあり、1 つはトレーニング用、もう 1 つは相互検証用です。これらのデータ セットは .csv ファイルとして保存されるため、この実験ではコントロールとして機能します。

libsvm 用の C++ ラッパーと、libsvm 用の MATLAB 関数があります。

C++ と MATLAB の両方の場合: RBF カーネルで C タイプの SVM を使用して、C 値とガンマ値の 2 つのリストを反復処理します。パラメータの組み合わせごとに、トレーニング データ セットでトレーニングしてから、クロス検証データ セットを予測します。予測の精度を 2D マップに保存します。これは、精度をもたらした C 値とガンマ値に相関します。

私は、さまざまなトレーニングおよび相互検証データ セットを何度も再作成しました。C++ と MATLAB の精度は毎回異なります。時にはたくさん!ほとんどの場合、MATLAB の方が精度が高くなりますが、C++ 実装の方が優れている場合もあります。

これらの違いは何が原因でしょうか? 私が試しているC /ガンマ値は同じで、残りのSVMパラメーター(デフォルト)も同じです。

4

1 に答える 1

4

C と Matlab のコードは同じ svm.cファイルを使用するため、大きな違いはありません。では、その理由は何でしょうか?

  • コードに実装エラーがあります。残念ながら、これが最も可能性の高いエラーです。
  • 使用されているラッパーにバグがあるか、他のバージョンの libsvm を使用している場合は、matlab コード (libsvm は純粋な C で記述され、Python、Matlab、および Java ラッパーが付属しているため、C++ ラッパーは「公式ではない」) またはラッパーがいくつかの追加を想定しています。 C/Matlab/Python/Java 実装のデフォルトではないデフォルト値
  • 多少ランダム化された形式で相互検証を実行します (データをシャッフルしてからフォールディングします。これは完全に正しく合理的ですが、2 つの異なる実行で異なる結果につながります)
  • コードの 1 つ (または両方) で .csv からデータをロードするときに丸め/変換が実行され、不整合が発生します (実際には発生する可能性は低いですが、それでも可能性はあります)。
于 2013-09-19T19:38:20.673 に答える