Até o momento, removi variáveis colineares como parte do processo de preparação de dados, observando as tabelas de correlação e eliminando as variáveis que estão acima de um determinado limite. Existe uma maneira mais aceita de fazer isso? Além disso, estou ciente de que apenas analisar a correlação entre duas variáveis por vez não é o ideal, medições como o VIF levam em consideração a correlação potencial entre várias variáveis. Como alguém escolheria sistematicamente combinações de variáveis que não exibem multicolinearidade?
Eu tenho meus dados dentro de um quadro de dados do pandas e estou usando os modelos do sklearn.
python
multicollinearity
scikit-learn
orange1
fonte
fonte
Respostas:
Obrigado SpanishBoy - É um bom pedaço de código. @ilanman: Isso verifica os valores VIF e descarta variáveis cujo VIF é maior que 5. Por "desempenho", acho que ele quer dizer tempo de execução. O código acima levou cerca de 3 horas para executar em cerca de 300 variáveis, 5000 linhas.
A propósito, eu o modifiquei para remover alguns loops extras. Além disso, eu o tornei um pouco mais limpo e retornei o quadro de dados com variáveis reduzidas. Esta versão reduziu meu tempo de execução pela metade! Meu código está abaixo - Espero que ajude.
fonte
usdm
método de pacotevifstep
) para VIF e o tempo de execução foi muito legal. Como eu disse antes, a variante acima e a sua (otimizada pela metade) são tão lentas em comparação com a R. Alguma outra idéia de como otimizar ainda?Você pode tentar usar o código abaixo:
Funciona, mas não gosto do desempenho dessa abordagem
fonte
Tentei a resposta do SpanishBoy e encontrei erros de serval ao executá-lo para um quadro de dados. Aqui está uma solução depurada.
Também não tive problemas com o desempenho, mas não o testei extensivamente.
fonte
RuntimeWarning: divide by zero encountered in double_scalars