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?
Esperaba más de los árboles al azar :
Con bosques aleatorios, típicamente para características N, las características sqrt (N) se usan para cada construcción de árbol de decisión. Como en su caso N = 20, puede intentar establecer max_depth (el número de subcaracterísticas para construir cada árbol de decisión) en 5.
En lugar de árboles de decisión, se han propuesto y evaluado modelos lineales como estimadores de base en bosques aleatorios, en particular la regresión logística multinomial y las ingenuas Bayes. Esto podría mejorar su precisión.
En MNIST kNN ofrece una mayor precisión, ¿alguna idea de cómo aumentarla?
fuente