Não encontrei nenhuma literatura sobre a aplicação de florestas aleatórias no MNIST, CIFAR, STL-10, etc., então pensei em experimentá-las com o MNIST invariante, permutador .
Em R , tentei:
randomForest(train$x, factor(train$y), test$x, factor(test$y), ntree=500)
Isso foi executado por 2 horas e ocorreu um erro de teste de 2,8%.
Eu também tentei o scikit-learn , com
RandomForestClassifier(n_estimators=2000,
max_features="auto",
max_depth=None)
Após 70 minutos, obtive um erro de teste de 2,9%, mas com n_estimators = 200, obtive um erro de teste de 2,8% após apenas 7 minutos.
Com o OpenCV , tentei
rf.train(images.reshape(-1, 28**2),
cv2.CV_ROW_SAMPLE,
labels.astype('int'))
Isso foi executado por 6,5 minutos e o uso rf
para previsão deu um erro de teste de 15%. Não sei quantas árvores ele treinou, pois a ligação do Python para as florestas aleatórias parece ignorar o params
argumento, pelo menos na versão 2.3.1. Também não consegui descobrir como deixar claro para o OpenCV que eu quero resolver um problema de classificação, em vez de regressão - eu tenho minhas dúvidas, porque substituir astype('int')
por astype('float32')
dá o mesmo resultado.
Nas redes neurais , para o benchmark MNIST invariante com permutação , o estado da arte é de 0,8% de erro de teste, embora o treinamento provavelmente demore mais de 2 horas em uma CPU.
É possível fazer muito melhor do que o erro de teste de 2,8% no MNIST usando florestas aleatórias? Eu pensei que o consenso geral era que as florestas aleatórias geralmente são pelo menos tão boas quanto os SVMs do kernel, que eu acredito que podem receber um erro de teste de 1,4%.