Hasta ahora, he eliminado las variables colineales como parte del proceso de preparación de datos al observar las tablas de correlación y eliminar las variables que están por encima de un cierto umbral. ¿Hay una forma más aceptada de hacer esto? Además, soy consciente de que solo mirar la correlación entre 2 variables a la vez no es lo ideal, las mediciones como VIF tienen en cuenta la correlación potencial entre varias variables. ¿Cómo se elegiría sistemáticamente combinaciones de variables que no exhiban multicolinealidad?
Tengo mis datos dentro de un marco de datos de pandas y estoy usando los modelos de sklearn.
python
multicollinearity
scikit-learn
naranja1
fuente
fuente
Respuestas:
Gracias SpanishBoy - Es un buen código. @ilanman: Esto verifica los valores de VIF y luego elimina las variables cuyo VIF es más de 5. Por "rendimiento", creo que se refiere al tiempo de ejecución. El código anterior me tomó alrededor de 3 horas para ejecutar en aproximadamente 300 variables, 5000 filas.
Por cierto, lo he modificado para eliminar algunos bucles adicionales. Además, lo hice un poco más limpio y devolví el marco de datos con variables reducidas. ¡Esta versión redujo mi tiempo de ejecución a la mitad! Mi código está debajo. Espero que ayude.
fuente
usdm
método de paquetevifstep
) para VIF y el tiempo de ejecución fue realmente genial. Como dije antes, la variante anterior y su (optimizado a la mitad) son tan lentas en comparación con la R. ¿Alguna otra idea de cómo optimizar aún?Puede intentar usar el siguiente código:
Funciona, pero no me gusta el rendimiento de ese enfoque.
fuente
Intenté la respuesta de SpanishBoy y encontré errores de servicio al ejecutarlo para un marco de datos. Aquí hay una solución depurada.
Tampoco tuve problemas con el rendimiento, pero no lo he probado exhaustivamente.
fuente
RuntimeWarning: divide by zero encountered in double_scalars