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 randomForest
pacote e aceito padrões para todos os parâmetros
Respostas:
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}
fonte
Como você está obtendo essa AUC de 99% em seus dados de treinamento? Esteja ciente de que há uma diferença entre
e
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.
fonte
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
randomForest
muito, mas, pelo que sei, existem vários parâmetros que você pode usar para ajustar suas florestas:nodesize
- tamanho mínimo dos nós terminaismaxnodes
- número máximo de nós terminaismtry
- número de variáveis usadas para construir cada árvore (obrigado @ user777)fonte
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.Você pode usar métodos de validação cruzada, como a validação cruzada K fold.
fonte
você pode ajustar seus parâmetros usando gridsearch
fonte
GridSearchCV
está dentro é chamadomodel_selection
e, portanto, deve ser a segunda linha de códigofrom sklearn.model_selection import GridSearchCV
.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.
fonte