יום שני, 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 לצורך סיווג?

יום שלישי, 1 בינואר 2013

אז מה היה לנו ?

הבלוג MATLAB with Fun יחגוג בחודש הבא 3 שנים להיווסדו, וזה זמן טוב לעשות כמה סיכומים.

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

בין היתר, יכלתם לקרוא ב-2012 על החידושים בכלי MATLAB ו-Simulink בשתי הגרסאות שיצאו במהלכה (R2012a, R2012b), על יכולות של כלים שונים (כלי אופטימיזציה, כלים לשוק הפיננסי, Wavelet ,SimEvents וכו'...) ועל דרכים ליעל את שיטות העבודה, הקוד והסימולציות שלכם
(System Objects, Simulation Data Inspector, Model Referencing, האצת ביצועים באמצעות FPGA וכו'...). ואפילו יכלתם להוריד קוד MATLAB המסמלץ את פעולת מערכת כיפת ברזל !

העלאת מספר הפוסטים בחודש הביאה לעלייה מרשימה בנתוני הגלישה בבלוג, על פי אתר Google Analytics. בהשוואה ל-2011, חלה ב-2012 עליה במספר הביקורים
בבלוג (31%), במספר המבקרים הייחודיים בו (37%), במספר הדפים הנצפים
בו (33%), בזמן הביקור הממוצע באתר (17%) ובמספר התגובות (88%, הפוסט הכי מטוקבק, אגב, הוא "גילוי פנים בעזרת MATLAB" – קיבל 11 תגובות בחצי שנה).

לפני כשלושה חודשים, הבלוג אפילו הוזכר במסגרת הבלוג "MATLAB Spoken Here" של חברת MathWorks, בפוסט שעסק בקהילות MATLAB ברחבי העולם !

לסיום, הנה רשימת חמשת הפוסטים הנקראים ביותר מאז השקת הבלוג, מהפופולרי ביותר והלאה, אתם מוזמנים לקרוא את אלה שפספסתם:

1. כנגד ארבעה System Toolboxes דיברה תורה (פורסם לפני 20 חודשים)

2. כל המוסיף גורע מזמן הריצה (פורסם לפני 18 חודשים)

3. כיפת ברזל (פוסט של אריאל רובננקו שפורסם לפני 12 חודשים)

4. מה חדש ב-MATLAB ו-Simulink בגרסת R2012a ? (פורסם לפני 10 חודשים)

5. MATLAB 8 ו-Simulink 8 כבר כאן ! (פורסם רק לפני 4 חודשים וכבר במקום החמישי, מסתמן כלהיט היסטרי...)

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