Pandas: Pandas get_dummies () و n-1 Categorical Encoding Option لتجنب العلاقة الخطية المتداخلة؟

تم إنشاؤها على ١٥ يناير ٢٠١٦  ·  3تعليقات  ·  مصدر: pandas-dev/pandas

عند إجراء الانحدار الخطي وتشفير المتغيرات الفئوية ، يمكن أن تكون العلاقة الخطية المتداخلة المثالية مشكلة. للتغلب على هذا ، فإن الأسلوب المقترح هو استخدام أعمدة n-1. سيكون من المفيد إذا كان لدى pd.get_dummies() معامل منطقي يقوم بإرجاع n-1 لكل عمود فئوي يتم ترميزه.

مثال:

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

بدلاً من ذلك ، أود الحصول على بعض المعلمات مثل drop_first=True في get_dummies() وهي تفعل شيئًا كالتالي:

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

مصادر
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

التعليق الأكثر فائدة

سيكون من المفيد السماح بإسقاط قيمة معينة ، وليس فقط "الأولى".

تؤثر الفئة المحذوفة (المجموعة المرجعية) على تفسير المعاملات.

على سبيل المثال ، من أفضل الممارسات حذف القيمة "الأكبر" كفئة مرجعية ؛

""

hot = df [['vol_k'، 'activation']]

cat_vars = list (df.select_dtypes (include = ['category']). أعمدة)
لـ var في cat_vars:
جديد = pd.get_dummies (df [var])
hot = hot.join (جديد)

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

""

ال 3 كومينتر

يبدو جيدًا ، هل أنت مهتم بتقديم طلب سحب؟

: +1:

سيكون من المفيد السماح بإسقاط قيمة معينة ، وليس فقط "الأولى".

تؤثر الفئة المحذوفة (المجموعة المرجعية) على تفسير المعاملات.

على سبيل المثال ، من أفضل الممارسات حذف القيمة "الأكبر" كفئة مرجعية ؛

""

hot = df [['vol_k'، 'activation']]

cat_vars = list (df.select_dtypes (include = ['category']). أعمدة)
لـ var في cat_vars:
جديد = pd.get_dummies (df [var])
hot = hot.join (جديد)

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

""

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات