046195
  • «previous
  • next»
  • Open Slides

תרגול 12

Decision Trees & Boosting

עצי החלטה

תקציר התאוריה

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

:דוגמא לשימוש בעץ החלטה לצורך סיווג פירות לפי מספר מאפיינים

Decision_trees_1

דוגמא לשימוש בעץ החלטה כאשר מרחק הקלט הוא רציף:

Decision_trees_2

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

  1. סיווג נכון של מרבית הדוגמאות.
  2. עץ קצר (פשוט) ככל הניתן.

תכונה 2 חשובה משתי סיבות:

  1. פשטות המימוש.
  2. יכולת הכללה: מניעת התאמת-יתר לאוסף הדוגמאות הנתון.

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

השכיחות היחסית (או “הפילוג האמפירי”) של כל אחד מהסיווגים האפשריים בקבוצת הדוגמאות נתונה ע”י:

מדדים אחידות של :

  • שגיאת הסיווג:
  • אינדקס Gini:
  • אנטרופיה:

תכונות של :

  1. עבור פילוג חד-ערכי ( עבור כלשהו).
  2. מקבל את ערכו המכסימלי עבור פילוג אחיד ( ).

info_plot

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

מדד האחידות המשוקלל עבור האוסף יוגדר עתה על ידי:

כאשר הוא מדד לחוסר האחידות של תת-הקבוצה .

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

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


המאפיין שנבחר הוא (כעיקרון) זה שעבורו השיפור הינו מקסימלי כלומר מינימלי.


שאלה 12.1 – בניית עץ החלטה

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

Name Hair Height Weight Lotion Result (Label)
Sarah blonde average light no sunburned (positive)
Dana blonde tall average yes none (negative)
Alex brown short average yes none
Annie blonde short average no sunburned
Emily red average heavy no sunburned
Pete brown tall heavy no none
John brown average heavy no none
Katie blonde short light yes none

פתרון שאלה 12.1

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

כעת נבחן את האנטרופיה שתושרה לאחר פיצול לפי כל אחד מהמאפיינים האפשריים:

Hair:

Feature Distribution
Blonde
Brown
Red

ומדד הטיב של מאפיין Hair יחושב לפי האנטרופיה המשוקללת על פני הפיצולים האפשריים:

Height:

Feature Distribution
Short
Average
Tall

ומדד הטיב של מאפיין Height יחושב לפי האנטרופיה המשוקללת על פני הפיצולים האפשריים:

Weight:

Feature Distribution
Light
Average
Heavy

ומדד הטיב של מאפיין weight יחושב לפי האנטרופיה המשוקללת על פני הפיצולים האפשריים:

Lotion:

Feature Distribution
No
Yes

ומדד הטיב של מאפיין lotion יחושב לפי האנטרופיה המשוקללת על פני הפיצולים האפשריים:

מכאן שהמאפיין האופטימלי לפיצול הראשון (על פי קריטריון האנטרופיה) הוא Hair.

עבור הפיצול של הרמה השנייה נשים לב כי הענפים של Hair=brown ו Hair=red בעלי אנטרופיה מקסימלית. כלומר, ניתן לסווג את הדוגמאות בצורה מושלמת לכן אין צורך בפיצולים נוספים. לגבי הענף Hair=blonde: קבוצת הדוגמאות בענף זה היא:

Name Hair Height Weight Lotion Result (Label)
Sarah blonde average light no sunburned (positive)
Dana blonde tall average yes none (negative)
Annie blonde short average no sunburned
Katie blonde short light yes none

פיצול לפי מאפיין height ייתן:

Feature Distribution
Short
Average
Tall

לפי weight:

Feature Distribution
Light
Average
Heavy

לפי Lotion:

Feature Distribution
No
Yes

לפיכך הקריטריון האופטימלי (זה שממזער את קריטריון הגידול) הוא Lotion.

עץ ההחלטה הסופי יראה כך: Q10_tree

בעיית התאמת היתר (overfitting):

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

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

פתרון אפשרי: נרמול “תוספת המידע” של מאפיין באופן הבא:

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

כאשר, היינו מספר הערכים השונים של הנאפיין , המתקבלים על פני איברי הקבוצה

מאפיינים רציפים:

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

השלב הבא הוא מקסימיזציה על הסף :

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

Boosting - Adaboost

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

נסמן:

  • - גודל ה dataset
  • - המדידות והמחלקות.
  • ערכי המחלקות הם

אלגוריתם:

  • אתחל באופן אחיד את המשקולות עבור כל נקודה ב dataset:
  • המשך באופן איטרטיבי עבור אינדקס עד להגעת תנאי עצירה:
    1. בנה מסווג אופטימלי ביחס ל- dataset הממושקל
    2. חשב את שגיאת הסיווג של עבור ה dataset הממושקל:
    3. חשב את משקל עבור המסווג לפי:
    4. עדכן את המשקולות עבור כל נקודה ב-dataset :
    5. נרמל את המשקולות לפי: according to:

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

תרגיל 12.2: הדגמת האלגוריתם

נתבונן בבעיית סיווג חד מימדית עבור סט דוגמאות האימון:

יהי המודל:

  1. האם קיימים מסווגים ליניאריים ופרמטרים כך שהשגיאה של היפותזה היא אפס על כל סט האימון? אם כן, מה ה-T המינימאלי לקבל שגיאה אפס?

  2. רשום את שלבי אלגוריתם AdaBoost עבור הדוגמא.

פתרון

  1. ראשית נסתכל בבעיה: Q10_2

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

2. נאתחל את הפילוג:

נקח את המסווג הבא:

עבורו נקבל:

וכרגע ניתן לעדכן את התפלגות הדוגמאות:

באיטרציה הבאה נבחר את המסווג הבא:

עבורו נקבל:

נעדכן את הפילוג לפי המסווג הנוסף:

עבור הבעיה בדוגמה, מספיק עוד מסווג חלש אחד אותו נבחר כך:

עבורו נקבל:

נעדכן את הפילוג לפי המסווג הנוסף:

לבסוף המסווג עם שגיאה אפס המתקבל היינו:

AdaBoost חלק מעשי

האתגר: בחזרה לטיטניק

titanic_img

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

Dataset: The Titanic Manifest

ניתן להוריד את הdataset מהקישור הזה

🕵️ Data Inspection

התרשמות ראשונית ממאגר המידע, עשר שורות ראשונות מהרשומות:

pclass survived name sex age sibsp parch ticket fare cabin embarked boat body home.dest numeric_sex
0 1 1 Allen, Miss. Elisabeth Walton female 29 0 0 24160 211.3375 B5 S 2 NaN St Louis, MO 1
1 1 0 Allison, Miss. Helen Loraine female 2 1 2 113781 151.5500 C22 C26 S NaN NaN Montreal, PQ / Chesterville, ON 1
2 1 0 Allison, Mr. Hudson Joshua Creighton male 30 1 2 113781 151.5500 C22 C26 S NaN 135.0 Montreal, PQ / Chesterville, ON 0
3 1 0 Allison, Mrs. Hudson J C (Bessie Waldo Daniels) female 25 1 2 113781 151.5500 C22 C26 S NaN NaN Montreal, PQ / Chesterville, ON 1
4 1 1 Anderson, Mr. Harry male 48 0 0 19952 26.5500 E12 S 3 NaN New York, NY 0
5 1 1 Andrews, Miss. Kornelia Theodosia female 63 1 0 13502 77.9583 D7 S 10 NaN Hudson, NY 1
6 1 0 Andrews, Mr. Thomas Jr male 39 0 0 112050 0.0000 A36 S NaN NaN Belfast, NI 0
7 1 1 Appleton, Mrs. Edward Dale (Charlotte Lamson) female 53 2 0 11769 51.4792 C101 S D NaN Bayside, Queens, NY 1
8 1 0 Artagaveytia, Mr. Ramon male 71 0 0 PC 17609 49.5042 NaN C NaN 22.0 Montevideo, Uruguay 0
9 1 0 Astor, Col. John Jacob male 47 1 0 PC 17757 227.5250 C62 C64 C NaN 124.0 New York, NY 0

סה”כ ישנם רשומות במאגר מידע.

The Data Fields and Types

נעשה שימוש בשדות (מאפיינים) הבאים:

  • pclass: מחלקת הנוסע: 1, 2 או 3
  • sex: מין הנוסע
  • age: גיל הנוסע
  • sibsp: מס’ של אחים ובני זוג של כל נוסע על האוניה
  • parch: מס’ של ילדים או הורים של כל נוסע על האונייה
  • fare: המחיר שהנוסע שילם על הכרטיס
  • embarked: הנמל בו עלה הנוסע על האונייה (C = Cherbourg; Q = Queenstown; S = Southampton)
  • survived: התיוג, האם הנוסע שרד או לא

📉 התרשמות ראשונית בעזרת גרפים

נציג את היחס בין המחלקות (שורדים ונספים) עבור המאפיינים:

plots

📜 הגדרת הבעיה :#

  • משתנים אקראיים:
    • : מאפייני הנוסע
    • : תיוג הנוסע, שרד או נספה

נמצא מסווג אשר מביא למינימום את ה- miscalssification rate:

💡 Model & Learning Method Suggestion: Stumps + AdaBoost

.נשתמש בעץ בינארי בעל עומק אחד (נקרא Stump), שבעצם מסווג על פי מאפיין בודד בשילוב של אלגוריתם AdaBoost

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

עבור קריטריון בניית עץ נשתמש בGini אינדקס ממושקל הנובע מה-data הממושקל. עבור חלוקה של ה-data לשני סטים and , וסט המשקולות של הדגימות נקבל את Gini אינדקס ממושקל:

פרמטרים נלמדים:

  • החלוקה המתבצעת על ידי כל עץ.
  • משקול כל עץ: .

Hyper-parameters

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

📚 חלוקת ה-dataset

נחלק ל 80% סט אימון ו 20% סט בוחן.

⚙️ אימון

נאתחל את המודל ונציג את עשר השורות הראשונות של הdataset הממושקל וההתפלגות לפי המאפיינים:

age embarked fare parch pclass sex sibsp survived weights
724 11 2 46.9000 2 2 0 5 0 0.001252
77 27 2 30.5000 0 0 0 0 1 0.001252
879 6 2 21.0750 1 2 0 3 0 0.001252
615 22 2 7.2500 0 2 0 1 0 0.001252
905 24 2 8.6625 0 2 0 0 0 0.001252
533 42 2 7.5500 0 2 0 0 0 0.001252
401 50 2 13.0000 0 1 0 0 0 0.001252
454 39 2 26.0000 0 1 0 0 0 0.001252
31 58 2 26.5500 0 0 1 0 1 0.001252
358 18 2 13.0000 0 1 0 0 0 0.001252

png

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

Iteration:

לאחר איטרציה בודדת של סיווג לפי מין קיבלנו:

  • שגיאה: 0.22
  • : 0.6320312618746508
  • Classifing sex according to: {0: [0], 1: [1]}

נציג את המשוקל של ה-data מחדש, וההתפלגויות החדשות:

age embarked fare parch pclass sex sibsp survived weights
724 11 2 46.9000 2 2 0 5 0 0.000803
77 27 2 30.5000 0 0 0 0 1 0.002841
879 6 2 21.0750 1 2 0 3 0 0.000803
615 22 2 7.2500 0 2 0 1 0 0.000803
905 24 2 8.6625 0 2 0 0 0 0.000803
533 42 2 7.5500 0 2 0 0 0 0.000803
401 50 2 13.0000 0 1 0 0 0 0.000803
454 39 2 26.0000 0 1 0 0 0 0.000803
31 58 2 26.5500 0 0 1 0 1 0.000803
358 18 2 13.0000 0 1 0 0 0 0.000803

png

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

כתוצאה מכך, הסיווג על פי מאפיין בודד יהיה קשה יותר והשגיאה למסווג בודד תתקרב ל-0.5, ובאופן ישיר המשקל של כל מסווג ידעך.

בשלב הבא נסווג לפי pclass:

Iteration

לאחר איטרציה נוספת של סיווג לפי מחלקת נוסע קיבלנו:

  • שגיאה: 0.66
  • : -0.34
  • Classifing pclass according to: {1: [0], 0: [1, 2]}
age embarked fare parch pclass sex sibsp survived weights
724 11 2 46.9000 2 2 0 5 0 0.000601
77 27 2 30.5000 0 0 0 0 1 0.002127
879 6 2 21.0750 1 2 0 3 0 0.000601
615 22 2 7.2500 0 2 0 1 0 0.000601
905 24 2 8.6625 0 2 0 0 0 0.000601
533 42 2 7.5500 0 2 0 0 0 0.000601
401 50 2 13.0000 0 1 0 0 0 0.000601
454 39 2 26.0000 0 1 0 0 0 0.000601
31 58 2 26.5500 0 0 1 0 1 0.000601
358 18 2 13.0000 0 1 0 0 0 0.000601

png

באיטרציה השלישית נסווג לפי embarked:

Iteration

  • שגיאה: 0.53
  • : -0.06
  • Classifing embarked according to: {1: [0], 0: [1, 2]}
age embarked fare parch pclass sex sibsp survived weights
724 11 2 46.9000 2 2 0 5 0 0.000564
77 27 2 30.5000 0 0 0 0 1 0.002274
879 6 2 21.0750 1 2 0 3 0 0.000564
615 22 2 7.2500 0 2 0 1 0 0.000564
905 24 2 8.6625 0 2 0 0 0 0.000564
533 42 2 7.5500 0 2 0 0 0 0.000564
401 50 2 13.0000 0 1 0 0 0 0.000564
454 39 2 26.0000 0 1 0 0 0 0.000564
31 58 2 26.5500 0 0 1 0 1 0.000643
358 18 2 13.0000 0 1 0 0 0 0.000564

png

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

Iteration

  • שגיאה : 0.5000000000000001
  • : -2.2204460492503136e-16
  • Classifing embarked according to: {1: [0], 0: [1, 2]}
age embarked fare parch pclass sex sibsp survived weights
724 11 2 46.9000 2 2 0 5 0 0.000564
77 27 2 30.5000 0 0 0 0 1 0.002274
879 6 2 21.0750 1 2 0 3 0 0.000564
615 22 2 7.2500 0 2 0 1 0 0.000564
905 24 2 8.6625 0 2 0 0 0 0.000564
533 42 2 7.5500 0 2 0 0 0 0.000564
401 50 2 13.0000 0 1 0 0 0 0.000564
454 39 2 26.0000 0 1 0 0 0 0.000564
31 58 2 26.5500 0 0 1 0 1 0.000643
358 18 2 13.0000 0 1 0 0 0 0.000564

png

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

⏱️ ביצועים:

נריץ את האלגוריתם המאומן על סט המבחן ונקבל שהסיכון היינו:

Attributions