logo

אלגוריתם סיווג עץ החלטה

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

הערה: עץ החלטות יכול להכיל נתונים קטגוריים (כן/לא) וכן נתונים מספריים.

אלגוריתם סיווג עץ החלטה

למה להשתמש בעצי החלטה?

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

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

טרמינולוגיות עץ החלטה

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

כיצד פועל אלגוריתם עץ ההחלטות?

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

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

    שלב 1:התחל את העץ עם צומת השורש, אומר S, המכיל את מערך הנתונים המלא.שלב 2:מצא את התכונה הטובה ביותר במערך הנתונים באמצעות מדד בחירת תכונות (ASM). שלב 3:חלקו את ה-S לתת-קבוצות המכילות ערכים אפשריים עבור התכונות הטובות ביותר.שלב 4:צור את צומת עץ ההחלטות, המכיל את התכונה הטובה ביותר.שלב-5:קבל עצי החלטות חדשים באופן רקורסיבי באמצעות קבוצות המשנה של מערך הנתונים שנוצר בשלב -3. המשיכו בתהליך זה עד שמגיעים לשלב שבו לא ניתן לסווג עוד את הצמתים ונקרא הצומת הסופי כצומת עלה.

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

אלגוריתם סיווג עץ החלטה

אמצעי בחירת תכונות

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

    רווח מידע מדד ג'יני

1. רווחי מידע:

  • רווח מידע הוא מדידה של שינויים באנטרופיה לאחר פילוח של מערך נתונים המבוסס על תכונה.
  • זה מחשב כמה מידע תכונה מספקת לנו על כיתה.
  • לפי ערך רווח המידע, אנו מפצלים את הצומת ובונים את עץ ההחלטות.
  • אלגוריתם עץ החלטות תמיד מנסה למקסם את הערך של רווח המידע, וצומת/תכונה עם רווח המידע הגבוה ביותר מפוצל ראשון. ניתן לחשב אותו באמצעות הנוסחה הבאה:
 Information Gain= Entropy(S)- [(Weighted Avg) *Entropy(each feature) 

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

Entropy(s)= -P(yes)log2 P(yes)- P(no) log2 P(no)

איפה,

    S= סך הדגימות P(כן)=הסתברות שכן P(no)= הסתברות לא

2. אינדקס ג'יני:

  • אינדקס ג'יני הוא מדד של טומאה או טוהר המשמש בעת יצירת עץ החלטות באלגוריתם CART(Classification and Regression Tree).
  • יש להעדיף תכונה בעלת מדד ג'יני נמוך בהשוואה למדד ג'יני גבוה.
  • זה יוצר רק פיצולים בינאריים, ואלגוריתם CART משתמש באינדקס Gini כדי ליצור פיצולים בינאריים.
  • ניתן לחשב את מדד ג'יני באמצעות הנוסחה הבאה:
 Gini Index= 1- &#x2211;<sub>j</sub>P<sub>j</sub><sup>2</sup> 

גיזום: קבלת עץ החלטות אופטימלי

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

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

    מורכבות עלות גיזום גיזום שגיאות מופחת.

יתרונות עץ ההחלטות

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

החסרונות של עץ ההחלטות

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

יישום פייתון של עץ ההחלטות

כעת ניישם את עץ ההחלטות באמצעות Python. לשם כך, נשתמש במערך הנתונים ' user_data.csv ,' שבו השתמשנו במודלים קודמים של סיווג. על ידי שימוש באותו מערך נתונים, אנו יכולים להשוות את סיווג עץ ההחלטות עם מודלים סיווגים אחרים כגון KNN SVM, רגרסיה לוגיסטית וכו'.

תוכניות java

גם השלבים יישארו זהים, המפורטים להלן:

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

1. שלב עיבוד נתונים מראש:

להלן הקוד לשלב העיבוד המקדים:

 # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd #importing datasets data_set= pd.read_csv(&apos;user_data.csv&apos;) #Extracting Independent and dependent Variable x= data_set.iloc[:, [2,3]].values y= data_set.iloc[:, 4].values # Splitting the dataset into training and test set. from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test= train_test_split(x, y, test_size= 0.25, random_state=0) #feature Scaling from sklearn.preprocessing import StandardScaler st_x= StandardScaler() x_train= st_x.fit_transform(x_train) x_test= st_x.transform(x_test) 

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

אלגוריתם סיווג עץ החלטה

2. התאמת אלגוריתם עץ החלטה לסט האימון

כעת נתאים את הדגם לסט האימונים. לשם כך, נייבא את DecisionTreeClassifier כיתה מ sklearn.tree סִפְרִיָה. להלן הקוד עבורו:

 #Fitting Decision Tree classifier to the training set From sklearn.tree import DecisionTreeClassifier classifier= DecisionTreeClassifier(criterion=&apos;entropy&apos;, random_state=0) classifier.fit(x_train, y_train) 

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

    'criterion='entropy':קריטריון משמש למדידת איכות הפיצול, אשר מחושב על ידי רווח מידע שניתן על ידי אנטרופיה.random_state=0':להפקת המצבים האקראיים.

להלן הפלט עבור זה:

 Out[8]: DecisionTreeClassifier(class_weight=None, criterion=&apos;entropy&apos;, max_depth=None, max_features=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, presort=False, random_state=0, splitter=&apos;best&apos;) 

3. חיזוי תוצאת הבדיקה

כעת נחזה את תוצאת ערכת הבדיקה. ניצור וקטור חיזוי חדש y_pred. להלן הקוד עבורו:

 #Predicting the test set result y_pred= classifier.predict(x_test) 

תְפוּקָה:

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

אלגוריתם סיווג עץ החלטה

4. בדיקת דיוק התוצאה (יצירת מטריצת בלבול)

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

 #Creating the Confusion matrix from sklearn.metrics import confusion_matrix cm= confusion_matrix(y_test, y_pred) 

תְפוּקָה:

אלגוריתם סיווג עץ החלטה

בתמונת הפלט לעיל, אנו יכולים לראות את מטריצת הבלבול, אשר יש 6+3= 9 תחזיות שגויות ו 62+29=91 תחזיות נכונות. לכן, אנו יכולים לומר שבהשוואה למודלים של סיווג אחרים, סיווג עץ ההחלטה עשה תחזית טובה.

5. הדמיית תוצאת מערך האימון:

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

 #Visulaizing the trianing set result from matplotlib.colors import ListedColormap x_set, y_set = x_train, y_train x1, x2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step =0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(x1, x2, classifier.predict(nm.array([x1.ravel(), x2.ravel()]).T).reshape(x1.shape), alpha = 0.75, cmap = ListedColormap((&apos;purple&apos;,&apos;green&apos; ))) mtp.xlim(x1.min(), x1.max()) mtp.ylim(x2.min(), x2.max()) fori, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap((&apos;purple&apos;, &apos;green&apos;))(i), label = j) mtp.title(&apos;Decision Tree Algorithm (Training set)&apos;) mtp.xlabel(&apos;Age&apos;) mtp.ylabel(&apos;Estimated Salary&apos;) mtp.legend() mtp.show() 

תְפוּקָה:

אלגוריתם סיווג עץ החלטה

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

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

6. הצגת תוצאת ערכת הבדיקה:

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

 #Visulaizing the test set result from matplotlib.colors import ListedColormap x_set, y_set = x_test, y_test x1, x2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step =0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(x1, x2, classifier.predict(nm.array([x1.ravel(), x2.ravel()]).T).reshape(x1.shape), alpha = 0.75, cmap = ListedColormap((&apos;purple&apos;,&apos;green&apos; ))) mtp.xlim(x1.min(), x1.max()) mtp.ylim(x2.min(), x2.max()) fori, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap((&apos;purple&apos;, &apos;green&apos;))(i), label = j) mtp.title(&apos;Decision Tree Algorithm(Test set)&apos;) mtp.xlabel(&apos;Age&apos;) mtp.ylabel(&apos;Estimated Salary&apos;) mtp.legend() mtp.show() 

תְפוּקָה:

אלגוריתם סיווג עץ החלטה

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