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