До сих пор я удалял коллинеарные переменные как часть процесса подготовки данных, просматривая корреляционные таблицы и удаляя переменные, которые превышают определенный порог. Есть ли более приемлемый способ сделать это? Кроме того, я знаю, что рассмотрение только двух переменных одновременно не является идеальным, измерения, такие как VIF, учитывают потенциальную корреляцию между несколькими переменными. Как можно было бы систематически выбирать переменные комбинации, которые не проявляют мультиколлинеарности?
У меня есть данные внутри фрейма данных панд, и я использую модели Склеарна.
python
multicollinearity
scikit-learn
oRange1
источник
источник
Ответы:
Спасибо SpanishBoy - Это хороший кусок кода. @ilanman: это проверяет значения VIF, а затем отбрасывает переменные, чей VIF больше 5. Под «производительностью» я думаю, что он подразумевает время выполнения. Приведенный выше код занял у меня около 3 часов, чтобы запустить около 300 переменных, 5000 строк.
Кстати, я изменил его, чтобы удалить некоторые дополнительные петли. Кроме того, я сделал его немного чище и возвращаю фрейм данных с уменьшенными переменными. Эта версия сократила мое время выполнения наполовину! Мой код ниже - надеюсь, это поможет.
источник
usdm
метод пакетаvifstep
) для VIF, и время выполнения было действительно круто. Как я уже говорил, вариант выше и ваш (оптимизированный вдвое) настолько медленны по сравнению с R. Есть еще идеи, как оптимизировать?Вы можете попробовать использовать следующий код:
Это работает, но мне не нравится производительность этого подхода
источник
Я попробовал ответ SpanishBoy и обнаружил ошибки в работе сервера при работе с фреймом данных. Вот отлаженное решение.
У меня также не было проблем с производительностью, но я не проверял это всесторонне.
источник
RuntimeWarning: divide by zero encountered in double_scalars