Random Forest - Como lidar com o excesso de ajustes

41

Tenho formação em ciência da computação, mas estou tentando me ensinar ciência de dados resolvendo problemas na internet.

Eu tenho trabalhado nesse problema nas últimas duas semanas (aproximadamente 900 linhas e 10 recursos). Eu estava inicialmente usando regressão logística, mas agora mudei para florestas aleatórias. Quando executo meu modelo de floresta aleatória nos meus dados de treinamento, obtenho valores realmente altos para auc (> 99%). No entanto, quando executo o mesmo modelo nos dados de teste, os resultados não são tão bons (precisão de aproximadamente 77%). Isso me leva a acreditar que estou ajustando demais os dados do treinamento.

Quais são as melhores práticas para evitar o excesso de ajuste em florestas aleatórias?

Estou usando re rstudio como meu ambiente de desenvolvimento. Estou usando o randomForestpacote e aceito padrões para todos os parâmetros

Abhi
fonte
4
Breiman alega que a RF não superajustou. stat.berkeley.edu/~breiman/RandomForests/cc_home.htm Supondo que ele esteja correto, talvez haja algum tipo de inconsistência entre seu treinamento e o conjunto de testes?
Sycorax diz Restabelecer Monica
RF faz EVITA overfit aos dados de teste se você otimizar o parâmetro de ajuste
Brash Equilibrium
Acho sampsize um parâmetro de ajuste completamente ignorado. stackoverflow.com/questions/34997134/…
Soren Havelund Welling

Respostas:

30

Para evitar o ajuste excessivo na floresta aleatória, a principal coisa que você precisa fazer é otimizar um parâmetro de ajuste que governe o número de recursos escolhidos aleatoriamente para aumentar cada árvore a partir dos dados de inicialização. Normalmente, você fazer isso via vezes de validação cruzada, onde kk , e escolher o parâmetro de ajuste que minimiza o erro de predição testar amostra. Além disso, o cultivo de uma floresta maior melhorará a precisão preditiva, embora geralmente ocorram retornos decrescentes quando você obtém várias centenas de árvores.k{5,10}

Equilíbrio Brash
fonte
1
Obrigado. Existe algum tutorial que mostra como otimizar esses parâmetros?
Abhi
Você precisará se inscrever nos cursos on-line de Stanford, o que é bastante simples, mas aqui está um tutorial em vídeo para fazê-lo em R: class.stanford.edu/courses/HumanitiesScience/StatLearning/…
Brash Equilibrium
Se estou entendendo isso corretamente, usamos a validação cruzada para verificar o número de recursos que entram no modelo de floresta aleatória, em oposição ao número de recursos que o modelo tentará a cada etapa. Correto?
Abhi
4
Eu argumentaria contra essa resposta: dois dos recursos atraentes dos RFs são que é difícil superestimá-los e os parâmetros padrão geralmente são razoavelmente bons. Esta resposta parece sugerir que o RF é sensível aos padrões, o que raramente é o caso
Charles
7
Empiricamente, não achei difícil superajustar floresta aleatória, floresta aleatória guiada, floresta aleatória regularizada ou floresta aleatória regularizada guiada. Eles têm um desempenho regular muito bom na validação cruzada, mas mal quando usados ​​com novos dados devido ao excesso de ajuste. Acredito que tenha a ver com o tipo de fenômeno que está sendo modelado. Não é um grande problema ao modelar um processo mecânico, mas com algo como um modelo comportamental, obtenho resultados muito mais estáveis ​​com uma regressão bem especificada.
Hack-R
33

Como você está obtendo essa AUC de 99% em seus dados de treinamento? Esteja ciente de que há uma diferença entre

predict(model)

e

predict(model, newdata=train)

ao obter previsões para o conjunto de dados de treinamento. A primeira opção recebe os fora-de-saco previsões da floresta aleatória. Isso geralmente é o que você deseja, ao comparar valores previstos com valores reais nos dados de treinamento.

O segundo trata seus dados de treinamento como se fossem um novo conjunto de dados e executa as observações em cada árvore. Isso resultará em uma correlação artificialmente próxima entre as previsões e os dados reais, já que o algoritmo de RF geralmente não poda as árvores individuais, baseando-se no conjunto de árvores para controlar o ajuste excessivo. Portanto, não faça isso se desejar obter previsões sobre os dados de treinamento.

Hong Ooi
fonte
3
Eu estava usando previsão (modelo, dados = trem). Agora mudei para prever (modelo) e meu auc caiu para 87%. Isto é uma coisa boa ou uma coisa ruim?
Abhi
2
Obrigado! Eu descobri que esse era o problema para mim também. Postei uma pergunta de acompanhamento sobre qual medida usar como 'erro de treinamento' para modelos de RF aqui: stats.stackexchange.com/questions/162353/…
Berk U.
Ótimo, obrigado !! Eu também estava cometendo esse erro! Para @Abhi: é uma coisa boa, porque a AUC anterior era absurdamente alta. Este é mais realista. Tente a validação cruzada e meça a AUC com base nisso e você provavelmente verá um valor semelhante.
Curioso
7

Para árvores de decisão, existem duas maneiras de lidar com o ajuste excessivo: (a) não cresça totalmente;

O mesmo se aplica a uma floresta de árvores - não as cultive muito e corte-as.

Não uso randomForestmuito, mas, pelo que sei, existem vários parâmetros que você pode usar para ajustar suas florestas:

  • nodesize - tamanho mínimo dos nós terminais
  • maxnodes - número máximo de nós terminais
  • mtry - número de variáveis ​​usadas para construir cada árvore (obrigado @ user777)
Alexey Grigorev
fonte
1
E mtry, o número de variáveis ​​que o algoritmo desenha para construir cada árvore, por padrão, a raiz quadrada do número total de recursos.
Sycorax diz Restabelecer Monica
Eu deixaria maxnodes e menor sampsize. Decresing maxnodes e sampsize fornecem árvores com menos profundidade e uma floresta mais robusta, sampsize por menor que seja a correlação de árvores também, e a floresta provavelmente convergirá para um erro de previsão com validação cruzada mais baixa, consulte stackoverflow.com/questions/34997134/…
Soren Havelund Welling
2

Você pode usar métodos de validação cruzada, como a validação cruzada K fold.

Fre
fonte
você precisa normalizar / dimensionar os recursos?
charles
4
@charles minhas desculpas. De fato, não é necessário escalar os recursos no uso de florestas aleatórias. Veja: stackoverflow.com/questions/8961586/…
Fre
Eu acho que a validação cruzada seria útil. Este é um relativamente pequeno conjunto de dados com validação de amostra dividida potencialmente produzindo estimativas instáveis de erro (embora reconhecidamente Tenho a sensação de esta não é a questão aqui)
charles
1

você pode ajustar seus parâmetros usando gridsearch

from sklearn.ensemble import RandomForestClassifier

from sklearn.grid_search import GridSearchCV

random_classifier = RandomForestClassifier()

parameters = { 'max_features':np.arange(5,10),'n_estimators':[500],'min_samples_leaf': [10,50,100,200,500]}

random_grid = GridSearchCV(random_classifier, parameters, cv = 5)
Aman Bassi
fonte
Uma tentativa de editor sugere que o módulo GridSearchCVestá dentro é chamado model_selectione, portanto, deve ser a segunda linha de código from sklearn.model_selection import GridSearchCV.
gung - Restabelecer Monica
0

Tente ajustar o parâmetro max_depth em intervalos de [5, 15], mas não mais do que isso, porque se você tiver grande profundidade, há uma grande chance de sobreajuste.

Naveen Chelimilla
fonte