Estoy usando el ejemplo de OpenCV letter_recog.cpp para experimentar en árboles aleatorios y otros clasificadores. Este ejemplo tiene implementaciones de seis clasificadores: árboles aleatorios, impulso, MLP, kNN, Bayes ingenuos y SVM. Se utiliza el conjunto de datos de reconocimiento de letras UCI con 20000 instancias y 16 características, que dividí por la mitad para capacitación y pruebas. Tengo experiencia con SVM, así que configuré rápidamente su error de reconocimiento en 3.3%. Después de experimentar un poco, lo que obtuve fue:
Reconocimiento de letras UCI:
- RTrees - 5.3%
- Impulso: 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: boost_type = REAL, cuenta_debilitada = 200, weight_trim_rate = 0.95, max_depth = 7
MLP: método = BACKPROP, param = 0.001, max_iter = 300 (valores predeterminados: demasiado lento para experimentar)
kNN (k = 3) - k = 3
Bayes - ninguno
SVM - núcleo RBF, C = 10, gamma = 0.01
Después de eso, utilicé los mismos parámetros y probé en los conjuntos de datos Dígitos y MNIST extrayendo primero las características de gradiente (elementos de tamaño de vector 200):
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%
- Boost - sin memoria
- MLP - 1.0%
- kNN (k = 3) - 1.2%
- Bayes - 34,33%
- SVM - 0.6%
Soy nuevo en todos los clasificadores, excepto SVM y kNN, para estos dos puedo decir que los resultados parecen estar bien. ¿Qué hay de los demás? Esperaba más de los árboles aleatorios, en MNIST kNN ofrece una mayor precisión, ¿alguna idea de cómo hacerlo más alto? Boost y Bayes dan una precisión muy baja. Al final, me gustaría usar estos clasificadores para hacer un sistema de clasificadores múltiples. ¿Algún consejo?