As florestas aleatórias podem fazer muito melhor que o erro de teste de 2,8% no MNIST?

9

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 rfpara 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 paramsargumento, 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%.

MaxB
fonte
5
lembre-se de que uma floresta aleatória está tomando uma variável de decisão 1 (ou seja, pixel) de cada vez. Portanto, não é muito bom para o processamento de imagens -raw. Você está em melhor situação primeira usando algum tipo de pré-processamento (por exemplo PCA, etc) para desenvolver as variáveis de decisão mais significativas
seanv507
Exatamente o que seanv507 disse. O OpenCV possui muitas funções para extração de recursos que podem detectar variáveis ​​explicativas bastante úteis para trabalhar com a floresta aleatória.
precisa
3
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 . Não existe esse consenso.
Marc Claesen

Respostas:

14

É possível fazer muito melhor do que o erro de teste de 2,8% no MNIST usando florestas aleatórias?

Provavelmente sim. Mas isso não significa que você estará usando os mesmos recursos que obtém por padrão. As árvores de decisão em geral não funcionam bem em problemas de alta dimensão como esse, pois você está dividindo apenas um recurso por vez. A floresta aleatória estende a utilidade das árvores de decisão, mas elas ainda têm o mesmo problema. Bater 2,8% com RF provavelmente exigirá que você faça algum pré-processamento de recursos e transforme-os em um subconjunto mais útil.

Redes neurais e SVMs do kernel estão implicitamente fazendo alguma transformação / engenharia de recursos. Portanto, de certa forma, é impressionante que a Random Forest fique decentemente próxima sem nenhum trabalho extra (de fato, a verdadeira razão pela qual a RF se tornou popular é que era estupidamente fácil obter resultados "bons o suficiente").

Eu pensei que o consenso geral era que as florestas aleatórias geralmente são pelo menos tão boas quanto as SVMs do kernel

Não existe esse consenso. Eles geralmente têm resultados semelhantes em termos de precisão - mas são algoritmos muito diferentes, com diferentes pontos fortes e fracos. Em muitos problemas, as precisões são semelhantes; em outros, os SVMs vencem por uma boa margem; em alguns RF, por uma boa margem.

Raff.Edward
fonte