כיצד לבצע קידוד אחד חם עבור משתנים רב-קטגוריים

צומת המקור: 841101

במאמר זה, נלמד כיצד נוכל להתמודד עם משתנים קטגוריים רבים באמצעות טכניקת הנדסת Features One Hot Encoding.

אבל לפני שנמשיך, הבה נערוך דיון קצר על הנדסת תכונות ו-One Hot Encoding.

הנדסת תכונות

אז, הנדסת תכונות היא תהליך של חילוץ תכונות מנתונים גולמיים תוך שימוש בידע בתחום של הבעיה. ניתן להשתמש בתכונות אלו כדי לשפר את הביצועים של אלגוריתמי למידת מכונה ואם הביצועים יעלו אז זה ייתן את הדיוק הטוב ביותר. אנו יכולים גם לומר שהנדסת תכונות זהה ללמידת מכונה יישומית. הנדסת תכונות היא האמנות החשובה ביותר בלמידת מכונה שיוצרת הבדל עצום בין מודל טוב למודל רע. זהו השלב השלישי בכל מחזור החיים של פרויקט מדעי הנתונים.

הרעיון של שקיפות עבור מודלים של למידת מכונה היא דבר מסובך שכן מודלים שונים דורשים לעתים קרובות גישות שונות עבור סוגי הנתונים השונים. כמו:-

  • נתונים מתמשכים
  • מאפיינים קטגוריים
  • ערכים חסרים
  • נוֹרמָלִיזָצִיָה
  • תאריכים ושעה

אבל כאן נדון רק בתכונות קטגוריות, התכונות הקטגוריות הן אותן תכונות שבהן datatype הוא סוג אובייקט. הערך של נקודת נתונים בכל תכונה קטגורית אינו בצורה מספרית, אלא הוא היה בצורת אובייקט.

ישנן טכניקות רבות לטיפול במשתנים הקטגוריים, חלקן הן:

  • קידוד תווית או קידוד רגיל
  • קידוד חם אחד
  • קידוד דמה
  • קידוד אפקט
  • קידוד בינארי
  • קידוד באזל
  • קידוד Hash
  • קידוד יעד

אז, כאן אנו מטפלים בתכונות קטגוריות על ידי One Hot Encoding, ולכן קודם כל נדון ב-One Hot Encoding.

קידוד חם אחד

אנו יודעים שהמשתנים הקטגוריים מכילים את ערכי התווית ולא ערכים מספריים. מספר הערכים האפשריים מוגבל לרוב לקבוצה קבועה. משתנים קטגוריים נקראים לעתים קרובות נומינליים. אלגוריתמים רבים של למידת מכונה אינם יכולים לפעול ישירות על נתוני התווית. הם דורשים שכל משתני הקלט ומשתני הפלט יהיו מספריים.

המשמעות היא שיש להמיר נתונים קטגוריים לצורה מספרית. אם המשתנה הקטגורי הוא משתנה פלט, ייתכן שתרצה גם להמיר תחזיות על ידי המודל בחזרה לצורה קטגורית כדי להציג אותם או להשתמש בהם ביישום כלשהו.

לדוגמה הנתונים על המגדר הם בצורת 'זָכָר' ו 'נְקֵבָה'.

אבל אם נשתמש בקידוד חד-חם, קידוד ואפשרות למודל להניח סדר טבעי בין קטגוריות עלול לגרום לביצועים גרועים או לתוצאות בלתי צפויות.

ניתן להחיל קידוד חד-חם על ייצוג המספרים השלמים. זה המקום שבו המשתנה המקודד במספר שלם מוסר ומתווסף משתנה בינארי חדש עבור כל ערך שלם ייחודי.

לדוגמה, אנו מקודדים משתנה צבעים,

צבע אדום  צבע כחול
0 1
1 0
0 1

עכשיו נתחיל את המסע שלנו. בשלב הראשון, אנו לוקחים מערך נתונים של חיזוי מחירי דירות.

מערך נתונים

כאן נשתמש במערך הנתונים של house_price המשמש בחיזוי מחיר הבית לפי גודל השטח.

אם ברצונך להוריד את מערך החיזוי של מחירי הבית, לחץ כאן.

ייבוא ​​מודולים

כעת, עלינו לייבא מודולים חשובים מ-python שישמשו עבור הקידוד החם אחד

# ייבוא ​​פנדות ייבוא ​​פנדות כ-pd # ייבוא ​​numpy ייבוא ​​numpy כ-np # ייבוא ​​OneHotEncoder מ-sklearn.preprocessing import OneHotEncoder()

כאן, אנו משתמשים בפנדות המשמשות לניתוח נתונים, NumPyused עבור מערכים n-ממדיים, ומ-sklearn, נשתמש ב-class One Hot Encoder חשוב אחד עבור קידוד קטגורי.

כעת עלינו לקרוא את הנתונים הללו באמצעות Python.

קריאת מערך נתונים

בדרך כלל, מערך הנתונים הוא בצורה של CSV, ומערך הנתונים בו אנו משתמשים הוא גם בצורה של CSV. לקריאת קובץ CSV נשתמש בפונקציית pandas read_csv() . ראה למטה:

# קריאת מערך נתונים df = pd.read_csv('house_price.csv') df.head()

תְפוּקָה:-

אבל עלינו להשתמש רק במשתנים קטגוריים עבור מקודד חם אחד וננסה להסביר רק עם משתנים קטגוריים להבנה קלה.

עבור חלוקת משתנים קטגוריים מנתונים עלינו לבדוק לכמה תכונות יש ערכים קטגוריים.

בדיקת ערכים קטגוריים

לבדיקת ערכים אנו משתמשים בפונקציית pandas select_dtypes המשמשת לבחירת סוגי הנתונים של המשתנה.

# בדיקת תכונות cat = df.select_dtypes(include='O').keys() # display variables cat

תְפוּקָה:-

 

כעת עלינו להוריד את העמודות המספריות הללו ממערך הנתונים ואנו נשתמש במשתנה הקטגורי הזה לשימושנו. אנו משתמשים רק ב-3-4 עמודות קטגוריות ממערך הנתונים להחלת קידוד חם אחד.

יצירת DataFrame חדש

כעת, לשימוש במשתנים קטגוריים ניצור מסגרת נתונים חדשה של עמודות קטגוריות נבחרות.

# יצירת df חדש # הגדרת עמודות אנו משתמשים new_df = pd.read_csv('house_price.csv',usecols=['שְׁכוּנָה','Exterior1st','Exterior2nd']) new_df.head()

תְפוּקָה:-

כעת עלינו לגלות כמה קטגוריות ייחודיות קיימות בכל טור קטגורי.

מציאת ערכים ייחודיים

למציאת ערכים ייחודיים נשתמש בפונקציית pandas unique() .

# ערכים ייחודיים בכל עמודה עבור x ב-new_df.columns: #prinfting ערכים ייחודיים print(x ,':', len(new_df[x].unique()))

תְפוּקָה:-

שכונה: 25
חיצוני ראשון: 1
חיצוני שני: 2

כעת, נלך על הטכניקה שלנו ליישם קידוד חד-חם על משתנים קטגוריים רבים.

טכניקה עבור משתנים רב קטגוריים

הטכניקה היא שנגביל את הקידוד החם אחד ל-10 התוויות השכיחות ביותר של המשתנה. זה אומר שניצור משתנה בינארי אחד עבור כל אחת מ-10 התוויות השכיחות ביותר, זה שווה ערך לקיבוץ כל שאר התוויות תחת קטגוריה חדשה, שבמקרה זה תימחק. לפיכך, 10 משתני הדמה החדשים מציינים אם קיימת אחת מ-10 התוויות השכיחות ביותר 1 או לא אז 0 לתצפית מסוימת.

המשתנים השכיחים ביותר

כאן נבחר את 20 המשתנים השכיחים ביותר.

נניח שניקח משתנה קטגורי אחד שכונה.

# מציאת 20 הקטגוריות המובילות new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

תְפוּקָה:

כאשר תראה בתמונת פלט זו תבחין כי שמות התווית חוזרת 225 פעמים בעמודות השכונה ואנחנו יורדים המספר הזה הולך ופוחת.

אז לקחנו את 10 התוצאות המובילות מלמעלה והמירנו את התוצאה של 10 המובילות לקידוד חם אחד והתוויות השמאלית הופכות לאפס.

תְפוּקָה:-

 

רשימת המשתנים הקטגוריים השכיחים ביותר

# צור רשימה עם 10 המשתנים המובילים top_10 = [x עבור x ב-new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

תְפוּקָה:-

['שמות',
'CollgCr',
'עיר עתיקה',
'אדוארדס',
'סומרסט',
'גילברט',
'NridgHt',
'נַסָר',
'NWAmes',
'SawyerW']

יש את 10 התוויות הקטגוריות המובילות בעמודה 'שכונה'.

הפוך בינארי

כעת, עלינו ליצור את 10 המשתנים הבינאריים של התוויות top_10:

# הפוך בינארי של תוויות

לתווית ב-top_10:

new_df = np.where(new_df['Neighborhood']==label,1,0)

new_df[['שכונה']+top_10]


תְפוּקָה:-

שמות CollgCr עיר עתיקה אדוארדס סומרסט גילברט NridgHt נסר NWAmes סוייר וו
0 CollgCr 0 1 0 0 0 0 0 0 0 0
1 וינקר 0 0 0 0 0 0 0 0 0 0
2 CollgCr 0 1 0 0 0 0 0 0 0 0
3 קראופור 0 0 0 0 0 0 0 0 0 0
4 NoRidge 0 0 0 0 0 0 0 0 0 0
5 מיטשל 0 0 0 0 0 0 0 0 0 0
6 סומרסט 0 0 0 0 1 0 0 0 0 0
7 NWAmes 0 0 0 0 0 0 0 0 1 0
8 עיר עתיקה 0 0 1 0 0 0 0 0 0 0
9 BrkSide 0 0 0 0 0 0 0 0 0 0
10 נסר 0 0 0 0 0 0 0 1 0 0
11 NridgHt 0 0 0 0 0 0 1 0 0 0

אתה יכול לראות כיצד תוויות top_10 מומרות כעת לפורמט בינארי.

ניקח דוגמה, ראה בטבלה היכן 1 מדד וינקר שלא הייתה שייכת לתווית top_10 הקטגוריות שלנו ולכן היא תוביל 0 כל העמודות.

כעת נעשה זאת עבור כל המשתנים הקטגוריים שבחרנו למעלה.

כל המשתנה שנבחר ב-OneHotEncoding

# עבור כל המשתנים הקטגוריים בחרנו def top_x(df2,variable,top_x_labels): עבור תווית ב-top_x_labels: df2[variable+'_'+label] = np.where(data[variable]==label,1,0) # read the data again data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd']) #encode Neighborhood לתוך 10 הקטגוריות השכיחות ביותר top_x(data, 'שכונה',top_10) # display data data.head()

תְפוּקָה:-

כעת, כאן אנו מיישמים את הקידוד החם אחד על כל המשתנים הרב-קטגוריים.

כעת נראה את היתרונות והחסרונות של One Hot Encoding עבור ריבוי משתנים.

יתרונות

  • פשוט ליישום
  • לא דורש הרבה זמן לחיפוש משתנה
  • אינו מרחיב באופן מסיבי את חלל התכונה.

חסרונות

  • אינו מוסיף שום מידע שעשוי להפוך את המשתנה לחזוי יותר
  • אל תשמור את המידע של המשתנים שהתעלמו מהם.

סוף הערות

אז, הסיכום של זה הוא שאנו לומדים כיצד לטפל במשתנים קטגוריים רבים, אם אתה נתקל בבעיה זו, זו משימה קשה מאוד. אז תודה שקראת את המאמר הזה.

צור איתי קשר בלינקדאין: פּרוֹפִיל

קרא את המאמרים האחרים שלי: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

תודה לך😎

אמצעי התקשורת המוצגים במאמר זה אינם בבעלות Analytics Vidhya ומשמשים את שיקול הדעת של המחבר.

אתה יכול גם לקרוא מאמר זה ב- APP הנייד שלנו קבל את זה ב- Google Play

מאמרים נוספים

מקור: https://www.analyticsvidhya.com/blog/2021/05/how-to-perform-one-hot-encoding-for-multi-categorical-variables/

בול זמן:

עוד מ אנליטיקה וידיה