Pandas: Pandas get_dummies() dan n-1 Categorical Encoding Option untuk menghindari Collinearity?

Dibuat pada 15 Jan 2016  ·  3Komentar  ·  Sumber: pandas-dev/pandas

Saat melakukan regresi linier dan pengkodean variabel kategori, kolinearitas sempurna bisa menjadi masalah. Untuk menyiasatinya, pendekatan yang disarankan adalah menggunakan n-1 kolom. Akan berguna jika pd.get_dummies() memiliki parameter boolean yang mengembalikan n-1 untuk setiap kolom kategori yang dikodekan.

Contoh:

>>> 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 

Sebagai gantinya, saya ingin memiliki beberapa parameter seperti drop_first=True di get_dummies() dan melakukan sesuatu seperti ini:

>>> 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

Sumber
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

Komentar yang paling membantu

Akan menguntungkan untuk mengizinkan menjatuhkan nilai tertentu, bukan hanya yang 'pertama'.

Kategori yang dihilangkan (kelompok referensi) mempengaruhi interpretasi koefisien.

Misalnya, salah satu praktik terbaik adalah menghilangkan nilai 'terbesar' sebagai kategori referensi;

````

panas = df[['vol_k', 'aktivasi']]

cat_vars = daftar(df.select_dtypes(include=['category']).columns)
untuk var di cat_vars:
baru = pd.get_dummies(df[var])
panas = panas. gabung (baru)

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

```

Semua 3 komentar

Kedengarannya bagus, tertarik untuk mengajukan permintaan tarik?

:+1:

Akan menguntungkan untuk mengizinkan menjatuhkan nilai tertentu, bukan hanya yang 'pertama'.

Kategori yang dihilangkan (kelompok referensi) mempengaruhi interpretasi koefisien.

Misalnya, salah satu praktik terbaik adalah menghilangkan nilai 'terbesar' sebagai kategori referensi;

````

panas = df[['vol_k', 'aktivasi']]

cat_vars = daftar(df.select_dtypes(include=['category']).columns)
untuk var di cat_vars:
baru = pd.get_dummies(df[var])
panas = panas. gabung (baru)

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

```

Apakah halaman ini membantu?
0 / 5 - 0 peringkat