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_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
その後、同じパラメーターを使用し、最初に勾配フィーチャ(ベクトルサイズ200要素)を抽出して、DigitsおよびMNISTデータセットでテストしました。
数字:
- 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つについては、結果が良好であると言えます。他の人はどうですか?ランダムツリーからより多くを期待しました。MNISTkNNではより高い精度が得られますが、それを高くする方法はありますか。BoostとBayesは非常に低い精度を提供します。最後に、これらの分類子を使用して複数の分類子システムを作成したいと思います。何かアドバイス?