Eu estou usando o exemplo do letter_recog.cpp do OpenCV para experimentar em árvores aleatórias e outros classificadores. Este exemplo possui implementações de seis classificadores - árvores aleatórias, reforço, MLP, kNN, ingênuo Bayes e SVM. É usado o conjunto de dados de reconhecimento de cartas da UCI com 20000 instâncias e 16 recursos, que eu divido ao meio para treinamento e teste. Tenho experiência com o SVM, então rapidamente defino seu erro de reconhecimento para 3,3%. Depois de algumas experiências, o que consegui foi:
Reconhecimento de letras UCI:
- RTrees - 5,3%
- Aumento - 13%
- MLP - 7,9%
- kNN (k = 3) - 6,5%
- Bayes - 11,5%
- SVM - 3,3%
Parâmetros utilizados:
RTrees - max_num_of_trees_in_the_forrest = 200, max_depth = 20, min_sample_count = 1
Impulso - tipo_ impulso = REAL, número_ fraco = 200, peso_trim_rate = 0,95, profundidade_máx = 7
MLP - método = BACKPROP, param = 0,001, max_iter = 300 (valores padrão - muito lento para experimentar)
kNN (k = 3) - k = 3
Bayes - nenhum
SVM - kernel RBF, C = 10, gama = 0,01
Depois disso, usei os mesmos parâmetros e testei nos conjuntos de dados Digits e MNIST extraindo primeiro os recursos de gradiente (elementos do tamanho 200 do vetor):
Dígitos:
- RTrees - 5,1%
- Impulso - 23,4%
- MLP - 4,3%
- kNN (k = 3) - 7,3%
- Bayes - 17,7%
- SVM - 4,2%
MNIST:
- RTrees - 1,4%
- Impulso - falta de memória
- MLP - 1,0%
- kNN (k = 3) - 1,2%
- Bayes - 34,33%
- SVM - 0,6%
Eu sou novo em todos os classificadores, exceto SVM e kNN, para esses dois posso dizer que os resultados parecem bons. E os outros? Eu esperava mais de árvores aleatórias, no MNIST kNN dá melhor precisão, alguma idéia de como aumentá-lo? Boost e Bayes oferecem precisão muito baixa. No final, eu gostaria de usar esses classificadores para criar um sistema de múltiplos classificadores. Algum conselho?