分類器の精度を高める方法は?
-
16-10-2019 - |
質問
OpenCV Letter_Recog.cppの例を使用して、ランダムなツリーやその他の分類子を実験しています。この例には、ランダムツリー、ブースト、MLP、KNN、ナイーブベイズ、SVMの6つの分類器の実装があります。 20000インスタンスと16の機能を備えたUCIレター認識データセットが使用されます。これは、トレーニングとテストのために半分に分割されます。 SVMの経験があるので、認識エラーをすぐに3.3%に設定しました。いくつかの実験の後、私が得たものは次のとおりです。
UCIレター認識:
- Rtrees -5.3%
- ブースト-13%
- MLP -7.9%
- knn(k = 3)-6.5%
- ベイズ-11.5%
- SVM -3.3%
使用されるパラメーター:
rtrees -max_num_of_trees_in_the_forrest = 200、max_depth = 20、min_sample_count = 1
boost -boost_type = real、weak_count = 200、weight_trim_rate = 0.95、max_depth = 7
MLP -method = backprop、param = 0.001、max_iter = 300(デフォルト値 - 実験するには遅すぎます)
knn(k = 3)-k = 3
ベイズ - なし
SVM -RBFカーネル、c = 10、ガンマ= 0.01
その後、同じパラメーターを使用し、最初に勾配機能を抽出することにより、数字とMNISTデータセットでテストしました(Vector Size 200要素):
数字:
- Rtrees -5.1%
- ブースト-23.4%
- MLP -4.3%
- knn(k = 3)-7.3%
- ベイズ-17.7%
- SVM -4.2%
MNIST:
- rtrees -1.4%
- ブースト - メモリから
- MLP -1.0%
- knn(k = 3)-1.2%
- ベイズ-34.33%
- SVM -0.6%
私はSVMとKNNを除くすべての分類子に慣れていません。これら2つは、結果が問題ないように見えると言えるでしょう。他の人はどうですか?私はランダムな木からもっと多くのことを期待していました、Mnist Knnはより良い正確さ、それをより高くする方法のアイデアを与えますか?ブーストとベイズは非常に低い精度を与えます。最後に、これらの分類子を使用して、複数の分類器システムを作成したいと思います。何かアドバイス?
解決
次元削減
もう1つの重要な手順は、トレーニングとテストデータセットのエラー率を比較して、過度に適合しているかどうかを確認することです(「次元の呪い」のため)。たとえば、テストデータセットのエラー率がトレーニングデータセットのエラーよりもはるかに大きい場合、これは1つのインジケーターになります。
この場合、PCAやLDAなどの次元削減技術を試すことができます。
あなたが興味を持っているなら、私はPCA、LDA、その他いくつかのテクニックについてここに書いています: http://sebastianraschka.com/index.html#machine_learning そして、私のgithubリポジトリでこちら: https://github.com/rasbt/pattern_classification
クロス検証
また、より客観的な方法で分類子のパフォーマンスを評価するために、交差検証技術を見てみることもできます。
他のヒント
ランダムな木にもっと期待していました:
通常、N機能用のランダムフォレストでは、SQRT(N)機能が各決定ツリーの構築に使用されます。あなたの場合から n= 20、設定を試してみることができます max_depth (各決定ツリーを構築するためのサブ機能の数)5に。
決定木の代わりに、線形モデルが提案され、ランダムフォレスト、特に多項ロジスティック回帰と素朴なベイズの基本推定器として評価されています。これにより、精度が向上する可能性があります。
Mnist Knnはより良い正確さを与えます、それをより高くする方法はありますか?
- より高い値で試してください k (5または7と言います)。 Kの値が高いと、ポイントのクラスラベルに関するより支持的な証拠が得られます。
- K-nearest Neighborを実行する前に、PCAまたはFisherの線形判別分析を実行できます。これにより、ポイント間の距離を計算中に相関する機能を取り除く可能性があるため、Kネイバーはより堅牢になります。
- Kネイバー間の距離の分散に基づいて、異なるポイントに対して異なるK値を試してください。