名目上は良い問題ですが、何かおかしいことが起こっているからだと確信しています...
コンテキストとして、私は顔の表情/認識空間の問題に取り組んでいるので、100% の精度を得ることは信じられないほど信じられないようです (ほとんどのアプリケーションでもっともらしいというわけではありません...)。データセットには一貫したバイアスがあり、SVM が答えを引き出すのを非常に簡単にしている、= または = のいずれかだと思います。おそらく、SVM 側で何か間違ったことをしたのでしょう。
何が起こっているのかを理解するのに役立つ提案を探しています-それは私ですか(=私のLibSVMの使用法)? それともデータですか?
詳細:
- 約 2500 個のラベル付きデータ ベクトル/インスタンス (変換された個人のビデオ フレーム -- 合計 20 人未満)、バイナリ分類問題。~900 機能/インスタンス。約 1:4 の比率で設定された不均衡なデータ。
- subset.py を実行して、データをテスト (500 インスタンス) とトレーニング (残り) に分けました。
- 「svm-train -t 0」を実行しました。(注:明らかに「-w1 1 -w-1 4」は必要ありません...)
- テスト ファイルに対して svm-predict を実行しました。精度=100%!
試したこと:
- 不注意なコマンドライン引数エラーにより、同じデータファイルでトレーニングとテストを行っていないことを約10回確認しました
- Subset.py を (-s 1 を使用しても) 何度も再実行し、複数の異なるデータ セットのみをトレーニング/テストしました (最も魔法のようなトレーニング/テスト PA をランダムに実行した場合)
- テストファイルがトレーニングデータのサブセットではないことを確認するために、単純な差分のようなチェックを実行しました
- データの svm-scale は精度に影響しません (accuracy=100%)。(ただし、サポート ベクターの数は nSV=127、bSV=64 から nBSV=72、bSV=0 に減少します。)
- ((奇妙)) デフォルトの RBF カーネル (逆線形 -- つまり、'-t 0' を削除) を使用すると、精度がガベージ (?!) になります
- (サニティ チェック) スケーリングされたデータ セットでトレーニングされたモデルをスケーリングされていないデータ セットに対して使用して svm-predict を実行すると、精度 = 80% になります (つまり、常に支配的なクラスを推測します)。これは厳密には、私のマシンで svm-predict が名目上正しく動作していることを確認するための健全性チェックです。
暫定的な結論?:
データの何かがおかしくなっています。どういうわけか、データ セット内に、SVM が検出している微妙な実験者主導の効果があります。
(しかし、これは最初のパスで、RBF カーネルがガベージ結果を返す理由を説明しません。)
a) LibSVM の使用法を修正する方法 (それが実際に問題である場合) または b) LibSVM が拾っているデータの微妙な実験バイアスを判断する方法についての提案をいただければ幸いです。