0

私は、(1) コンピューター カーソルを上に移動する場合と (2) 他の 7 つの基本方向のいずれかに移動する場合、または移動しない場合に対応するニューラル データを区別するために、 1 対静止分類器を実装しています。RBF カーネル (LIBSVM で作成) で SVM 分類器を使用しており、分類器に最適なガンマとコスト パラメータを見つけるためにグリッド検索を行いました。2 つのクラスのそれぞれから 338 要素のトレーニング データを使用してみました (大規模な「残りの」クラスをアンダーサンプリングします)。最初のクラスから 338 要素を使用し、2 番目のクラスから 7218 要素を加重 SVM で使用しました。

また、特徴選択を使用して、使用している特徴の数を 130 から 10 に減らしました。分類器をトレーニングするときに、10 個の「最良」の特徴と 10 個の「最悪」の特徴を使用してみました。また、機能セット全体を使用しました。

残念ながら、私の結果はあまり良くありません。さらに、その理由を説明することもできません。私は 37759 のデータ ポイントでテストしました。そのうちの 1687 は「1」(つまり「上」) クラスからのもので、残りの 36072 は「残り」のクラスからのものでした。すべての場合において、私の分類子は 95% 正確ですが、正しく予測された値はすべて「rest」クラスに分類されます (つまり、すべてのデータ ポイントは「rest」として予測され、誤って予測されたすべての値は「one」に分類されます)。 "/"up" クラス)。各クラスから 338 個のデータ ポイント (トレーニングに使用したものと同じもの) でテストを試みたところ、サポート ベクターの数は 666 であり、データ ポイントの数より 10 少ないことがわかりました。この場合、パーセント精度はわずか 71% です。

何がうまくいかないのか分かりますか?ご提案がありましたら、お知らせください。

ありがとう!

4

2 に答える 2

1

テスト データセットがトレーニング データと同じであることは、トレーニングの精度が 71% であることを意味します。使用したカーネルによってデータが十分に分離できなかった可能性があるため、問題はありません。ただし、懸念事項の 1 つは、サポート ベクターの数が多いことは、オーバーフィッティングの可能性を示唆していることです。

于 2012-04-12T08:18:39.993 に答える
0

これが答えになるかどうかはわかりません-実際にデータを見ずに答えを出すのはおそらく難しいでしょう-しかし、あなたが説明した問題に関するいくつかのアイデアがあります:

  1. 一般に、SVM はクラスを最適に分離する超平面を見つけようとします。ただし、1 対 1 の分類を選択したため、すべての否定的なケース (「残りの」クラス) を混ぜ合わせる以外に選択肢はありません。これにより、「最適な」分離が問題を解決するのにあまり適していない可能性があります。ここが大きな問題になるのではないかと推測しています。そうであるかどうかを確認するには、ネガティブ セットとして別の基数方向を 1 つだけ使用して、結果が改善されるかどうかを確認することをお勧めします。その場合、各方向に 1 つずつ、合計 7 つの分類器をトレーニングできます。もう 1 つのオプションは、libSVM の multiclass オプション、または SVMLight のようなツールを使用することですこれは、複数に対して 1 つを分類できます。
  2. ほとんどの SVM 実装の注意点の 1 つは、重み付けを行っても、正のセットと負のセットの間の大きな違いをサポートできないことです。私の経験から、多くの場合、4 ~ 5 を超える重み係数は問題になります。一方、負の側の多様性が大きいため、同じサイズにすることも最適ではない可能性があります。したがって、338 の肯定的な例と、約 1000 ~ 1200 のランダムな否定的な例を重み付けして使用することをお勧めします。
  3. あなたの質問から少し離れて、私は他のタイプの分類も考えていたでしょう。まず、knnについて考えることをお勧めします。

それが役に立てば幸い :)

于 2011-08-23T10:57:32.840 に答える