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
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())`
''
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)
''