יום שני, 14 בינואר 2013

שימוש בעצים לצורך סיווג פרחים | על עצי רגרסיה-קלסיפיקציה

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


קלסיפיקציה (סיווג) היא שיוך של דגימה לקבוצה מסויימת. אלגוריתם המבצע קלסיפיקציה נקרא מסווג (classifier). מסווגים מהווים חלק מאפליקציות בתחומים שונים, כמו ראיה ממוחשבת (זיהוי אנשים, אותיות וכו'), הערכת הסיכון במתן הלוואה (credit scoring) וקביעת דירוג אשראי (credit rating), מנועי חיפוש באינטרנט וכו'. אחד מהמסווגים הנפוצים ביותר הוא עץ רגרסיה-קלסיפיקציה. עצי רגרסיה וקלסיפיקציה הם עצים בינארים, וככאלה הם נהנים ממספר יתרונות מובנים – הם קלים להבנה ושימוש, זמני הבניה שלהם מהירים וזמני השאילתות מהירים אפילו יותר.

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

ניתן לבנות עצי רגרסיה-קלסיפיקציה בסביבת MATLAB באמצעות פקודת classregtree, ולהציגם באמצעות פקודת view. לשם סיווג דגימה חדשה יש להשתמש בפונקציה predict. שלוש הפקודות משתייכות ל- Statistics Toolbox, ולהלן דוגמה לשימוש בשתי הראשונות מבניהן, לשם סיווג הנתונים במאגר המידע של פישר על פרחי האירוס (ניתן ללחוץ על התמונה להגדלה):

לצד היתרונות הרבים של עצי רגרסיה–קלסיפיקציה, ישנם גם מספר חסרונות, המרכזיים שבהם הינם יכולת פרדיקציה נמוכה בהשוואה למסווגים אחרים, ובעית overfitting. במילים אחרות, העץ לומד לעשות פרדיקציה טובה על המידע אשר שימש לצורך בנייתו, אך לא מסוגל לסווג נכונה דגימות חדשות (בדומה לתלמיד חלש המשנן בעל פה חומר מסוים, אבל לא יודע לענות נכונה על אף שאלה המנוסחת באופן קצת שונה). אחת הדרכים להתגבר על הבעיה הנ"ל היא לבצע גיזום (pruning) לעץ, כלומר להקטין את כמות הצמתים והרמות בעץ, ובסביבת MATLAB הדבר ניתן לביצוע באמצעות פונקצית prune (נחשו לאיזה כלי היא משתייכת). דרך אחרת להתגבר על הבעיה היא לא להסתפק בעץ אחד, אלא לבנות אוסף של עצים, דוגמת מסווג מסוג Bagged trees, אבל על כך ארחיב בהזדמנות אחרת.

לאילו יישומים אתם משתמשים במסווגים? האם אתם עושים שימוש ב-Statistics Toolbox לצורך סיווג?

אין תגובות:

הוסף רשומת תגובה