Pandas: ¿Pandas get_dummies () y opción de codificación categórica n-1 para evitar la colinealidad?

Creado en 15 ene. 2016  ·  3Comentarios  ·  Fuente: pandas-dev/pandas

Al hacer regresión lineal y codificar variables categóricas, la colinealidad perfecta puede ser un problema. Para evitar esto, el enfoque sugerido es usar columnas n-1. Sería útil si pd.get_dummies() tuviera un parámetro booleano que devuelva n-1 para cada columna categórica que se codifique.

Ejemplo:

>>> df
    Account  Network      Device
0  Account1   Search  Smartphone
1  Account1  Display      Tablet
2  Account2   Search  Smartphone
3  Account3  Display  Smartphone
4  Account2   Search      Tablet
5  Account3   Search  Smartphone
>>> pd.get_dummies(df)
   Account_Account1  Account_Account2  Account_Account3  Network_Display  \
0                 1                 0                 0                0   
1                 1                 0                 0                1   
2                 0                 1                 0                0   
3                 0                 0                 1                1   
4                 0                 1                 0                0   
5                 0                 0                 1                0   

   Network_Search  Device_Smartphone  Device_Tablet  
0               1                  1              0  
1               0                  0              1  
2               1                  1              0  
3               0                  1              0  
4               1                  0              1  
5               1                  1              0 

En cambio, me gustaría tener algún parámetro como drop_first=True en get_dummies() y hace algo como esto:

>>> new_df = pd.DataFrame(index=df.index)
>>> for i in df:
    new_df = new_df.join(pd.get_dummies(df[i]).iloc[:, 1:])


>>> new_df
   Account2  Account3  Search  Tablet
0         0         0       1       0
1         0         0       0       1
2         1         0       1       0
3         0         1       0       0
4         1         0       1       1
5         0         1       1       0

Fuentes
http://fastml.com/converting-categorical-data-into-numbers-with-pandas-and-scikit-learn/
http://stackoverflow.com/questions/31498390/how-to-get-pandas-get-dummies-to-emit-n-1-variables-to-avoid-co-lineraity
http://dss.princeton.edu/online_help/analysis/dummy_variables.htm

Reshaping

Comentario más útil

Sería ventajoso permitir eliminar un valor específico, no solo el "primero".

La categoría omitida (grupo de referencia) influye en la interpretación de los coeficientes.

Por ejemplo, una de las mejores prácticas es omitir el valor "más grande" como categoría de referencia;

`` ``

hot = df [['vol_k', 'activación']]

cat_vars = list (df.select_dtypes (include = ['categoría']). columnas)
para var en cat_vars:
nuevo = pd.get_dummies (df [var])
hot = hot.join (nuevo)

#drop most frequent variable for ref category
drop_col = df.groupby([var]).size().idxmax()
hot.drop(drop_col, axis=1, inplace=True)

print(var + " dropping " + drop_col)
print(df.groupby([var]).size())`

''

Todos 3 comentarios

Suena bien, ¿está interesado en enviar una solicitud de extracción?

: +1:

Sería ventajoso permitir eliminar un valor específico, no solo el "primero".

La categoría omitida (grupo de referencia) influye en la interpretación de los coeficientes.

Por ejemplo, una de las mejores prácticas es omitir el valor "más grande" como categoría de referencia;

`` ``

hot = df [['vol_k', 'activación']]

cat_vars = list (df.select_dtypes (include = ['categoría']). columnas)
para var en cat_vars:
nuevo = pd.get_dummies (df [var])
hot = hot.join (nuevo)

#drop most frequent variable for ref category
drop_col = df.groupby([var]).size().idxmax()
hot.drop(drop_col, axis=1, inplace=True)

print(var + " dropping " + drop_col)
print(df.groupby([var]).size())`

''

¿Fue útil esta página
0 / 5 - 0 calificaciones