Sto usando l'esempio di OpenCV letter_recog.cpp per sperimentare su alberi casuali e altri classificatori. Questo esempio ha implementazioni di sei classificatori: alberi casuali, boosting, MLP, kNN, ingenui Bayes e SVM. Viene utilizzato il set di dati di riconoscimento lettere UCI con 20000 istanze e 16 funzionalità, che ho diviso a metà per addestramento e test. Ho esperienza con SVM, quindi ho impostato rapidamente il suo errore di riconoscimento al 3,3%. Dopo qualche sperimentazione quello che ho ottenuto è stato:
Riconoscimento lettera UCI:
- RTree - 5,3%
- Incremento - 13%
- MLP - 7,9%
- kNN (k = 3) - 6,5%
- Bayes - 11,5%
- SVM - 3,3%
Parametri utilizzati:
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 (valori predefiniti - troppo lento per sperimentare)
kNN (k = 3) - k = 3
Bayes - nessuno
SVM - kernel RBF, C = 10, gamma = 0,01
Dopo di che ho usato gli stessi parametri e testato su cifre e set di dati MNIST estraendo prima le caratteristiche del gradiente (dimensione del vettore 200 elementi):
cifre:
- RTree - 5,1%
- Incremento - 23,4%
- MLP - 4,3%
- kNN (k = 3) - 7,3%
- Bayes - 17,7%
- SVM - 4,2%
MNIST:
- RTree - 1,4%
- Boost - memoria esaurita
- MLP - 1,0%
- kNN (k = 3) - 1,2%
- Bayes - 34,33%
- SVM - 0,6%
Sono nuovo di tutti i classificatori tranne SVM e kNN, per questi due posso dire che i risultati sembrano soddisfacenti. E gli altri? Mi aspettavo di più dagli alberi casuali, su MNIST kNN offre una maggiore precisione, qualche idea su come aumentarlo? Boost e Bayes offrono una precisione molto bassa. Alla fine mi piacerebbe usare questi classificatori per creare un sistema di classificatori multipli. Qualche consiglio?