No he encontrado ninguna literatura sobre la aplicación de bosques aleatorios a MNIST, CIFAR, STL-10, etc., así que pensé en probarlos con el MNIST invariante de permutación.
En R , 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)
Después de 70 minutos, obtuve un error de prueba de 2.9%, pero con n_estimators = 200 en su lugar, obtuve un error de prueba de 2.8% después de solo 7 minutos.
Con OpenCV , intenté
rf.train(images.reshape(-1, 28**2),
cv2.CV_ROW_SAMPLE,
labels.astype('int'))
Esto funcionó durante 6,5 minutos, y el uso rf
para la predicción dio un error de prueba del 15%. No sé cuántos árboles entrenó, ya que su enlace de Python para bosques aleatorios parece ignorar el params
argumento, al menos en la versión 2.3.1. Tampoco podía encontrar la manera de dejar claro a OpenCV que yo quiero resolver un problema de clasificación, en lugar de la regresión - Tengo mis dudas, porque la sustitución astype('int')
con astype('float32')
da el mismo resultado.
En las redes neuronales , para el punto de referencia MNIST invariante de permutación, el estado del arte es un error de prueba del 0.8%, aunque el entrenamiento probablemente tomaría más de 2 horas en una CPU.
¿Es posible hacerlo mucho mejor que el error de prueba del 2.8% en MNIST usando bosques aleatorios? Pensé que el consenso general era que los bosques aleatorios generalmente son al menos tan buenos como los SVM del núcleo, lo que creo que puede obtener un error de prueba del 1.4%.