12 votos

¿Pueden los bosques aleatorios mejorar el error de prueba del 2,8% en MNIST?

No he encontrado ninguna literatura sobre la aplicación de los Bosques Aleatorios a MNIST, CIFAR, STL-10, etc. así que pensé en probarlos con el permutación-invariante El propio MNIST.

En R Lo intenté:

randomForest(train$x, factor(train$y), test$x, factor(test$y), ntree=500)

Esto funcionó durante 2 horas y obtuvo un error de prueba del 2,8%.

También probé scikit-learn con

RandomForestClassifier(n_estimators=2000,
                       max_features="auto", 
                       max_depth=None)

Tras 70 minutos, obtuve un error de prueba del 2,9%, pero con n_estimators=200 en cambio, obtuve un error de prueba del 2,8% tras sólo 7 minutos.

Con OpenCV , lo intenté

rf.train(images.reshape(-1, 28**2), 
         cv2.CV_ROW_SAMPLE, 
         labels.astype('int'))

Esto se ejecutó durante 6,5 minutos, y utilizando rf para la predicción dio un error de prueba del 15%. No sé cuántos árboles entrenó, ya que su vinculación con Python para Bosques Aleatorios parece ignorar el params al menos en la versión 2.3.1. Tampoco he podido averiguar cómo dejar claro a OpenCV que quiero resolver un problema de clasificación, en lugar de regresión -- tengo mis dudas, porque sustituir astype('int') con astype('float32') da el mismo resultado.

En redes neuronales para el permutación-invariante MNIST, el estado del arte es de un 0,8% de error en la prueba, aunque el entrenamiento probablemente tomaría más de 2 horas en una CPU.

¿Es posible hacer mucho mejor que el error de prueba del 2,8% en MNIST utilizando Random Forests? Pensaba que el consenso general era que los bosques aleatorios suelen ser al menos tan buenos como los SVM de núcleo, que creo que pueden obtener un error de prueba del 1,4%.

5 votos

Recuerde que un bosque aleatorio toma una decisión de 1 variable (es decir, un píxel) a la vez. Por lo tanto, no es muy bueno para el procesamiento de imágenes en bruto. Es mejor utilizar primero algún tipo de preprocesamiento (por ejemplo, PCA, etc.) para desarrollar variables de decisión más significativas.

0 votos

Exactamente lo que dijo seanv507. OpenCV tiene un montón de funciones para la extracción de características que pueden detectar variables explicativas bastante útiles para que el bosque aleatorio trabaje con ellas.

3 votos

Pensaba que el consenso general era que los bosques aleatorios suelen ser al menos tan buenos como las SVM de núcleo . No existe tal consenso.

17voto

Raff.Edward Puntos 573

¿Es posible mejorar el error de prueba del 2,8% en MNIST utilizando Random Forests?

Probablemente, sí. Pero eso no significa que vaya a utilizar las mismas características que tiene por defecto. Los árboles de decisión, en general, no funcionan bien en problemas de alta dimensión como éste, ya que sólo se divide en una característica a la vez. Los bosques aleatorios amplían la utilidad de los árboles de decisión, pero siguen teniendo el mismo problema. Superar el 2,8% con RF probablemente requerirá hacer algún preprocesamiento de las características y transformarlas en un subconjunto más útil.

Las redes neuronales y las SVM de núcleo están haciendo implícitamente alguna transformación/ingeniería de características. Así que en cierto sentido es impresionante que Random Forest se acerque decentemente sin ningún trabajo adicional (de hecho, la verdadera razón por la que RF se hizo popular es que era estúpidamente fácil obtener resultados "suficientemente buenos").

Pensaba que el consenso general era que los bosques aleatorios suelen ser al menos tan buenos como las SVM de núcleo

No existe tal consenso. Suelen tener resultados similares en términos de precisión, pero son algoritmos muy diferentes con distintos puntos fuertes y débiles. En muchos problemas las precisiones son similares, en otros los SVM ganan por un buen margen, en algunos RF gana por un buen margen.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X