מה ההצדקה לשימוש ב-Naive Bayes Classifier בלמידת מכונה

מחבר:
בתאריך:

מה ההיגיון מאחורי הסיווג הבייסיאני הנאיבי?

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

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

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

מה ההצדקה לשימוש ב-Naive Bayes Classifier בלמידת מכונה

בהינתן סט הפיצ'רים:

$$features: X = (X_1, X_2, …, X_n)$$

ברצוננו לסווג לאיזו קטגוריה מובחנת שייכת כל דוגמה. כאשר בנוטציה הבאה Y הוא התגית label שמפיק הסיווג:

$$P(Y = y | X = (x_1, x_2, …, x_n))$$

השאלה היא: עבור קבוצת הפיצ'רים שמעניינת אותנו מהי התגית y הסבירה ביותר?

הבעיה היא שקשה לחשב את ההסתברות המותנה P(Y|X) באופן ישיר.

כדי להשיב לשאלה נשתמש בנוסחת Bayes:

$$P(Y∣X)=\frac{P(X∣Y)⋅P(Y)}{P(X)}$$

  • P(Y∣X): ההסתברות המעודכנת (Posterior) - ההסתברות המותנית שאנחנו מעוניינים לחשב.

  • P(Y): ההסתברות המקדימה (Prior) - הסתברות ההשערה לפני שנחשפנו לראייה.

  • P(X∣Y): הסבירות (Likelihood) - בהנחה שההשערה שלנו נכונה, מה הסיכוי לקבל את הראיה.

  • P(E): הראיה (Evidence) - המכנה מנרמל את ההסתברויות היחסיות כך שסכומן יהיה 1.

כדי להבין איך זה עובד נראה את הדוגמה הבאה.

 

דוגמה לסיווג מבוסס נוסחת בייס

נתונים 3 פיצ'רים המייצגים את תכולת ארוחת 3 מנות במסעדה :

$$dishes: X = (X_1, X_2, X_3)$$

כל אחת מהמנות יכולה להיות מבוססת על אחד משלוש המזונות פיצה (🍕), חציל (🍆) או אבטיח (🍉):

$$X_1, X_2, X_3 ∈ {🍕, 🍆, 🍉}$$ .

כאשר תווית המחלקה Y היא אחת משתי תוצאות אפשרויות מרוצה (😃) או חולה (🤮):

$$Y ∈ {😃, 🤮}$$

 

במסד הנתונים 9 מקרים של ארוחות מסוכמים בטבלה:

X1

X2

X3

Y

1

🍕

🍕

🍆

😃

2

🍆

🍕

🍉

😃

3

🍕

🍆

🍉

😃

4

🍆

🍆

🍆

🤮

5

🍆

🍉

🍆

🤮

6

🍉

🍉

🍉

😃

7

🍕

🍆

🍉

😃

8

🍕

🍆

🍉

🤮

9

🍉

🍕

🍉

😃

והשאלה היא "האם אכילת 3 מנות מבוססות חצילים  (🍆,🍆,🍆) גורמת להקאה (🤮)?"

 

1. חישוב הסיכויים הבסיסיים (Prior)

כמה מקרים של אדם שאכל שלוש מנות חציל ברצף וחלה מתועדים בטבלה? מקרה 1 (#4 בטבלה) מתוך 9 מקרים.

כמה מקרים של אדם שאכל שלוש מנות חציל ברצף ולא חלה מתועדים? 0 מקרים.

נחשב את הסיכוי הפריורי Prior ל"מרוצה" (😃) או "חולה" (🤮) לא משנה מה אוכלים:

$$P(Y=🤮)=\frac{3}{9}=\frac{1}{3}$$

$$P(Y=😃)=\frac{6}{9}=\frac{2}{3}$$

 

2. חישוב ה-likelihood

כדי לחשב את ה-likelihood נמצא את שיעור המקרים בהם התוצאה היא 🤮 בעקבות אכילת 3 מנות 🍆:

$$P(X=(🍆,🍆,🍆)|Y=🤮)=\frac{1}{3}$$

  • שזה מקרה 1 מתוך 3 מקרים בהם חלו.

באופן דומה, ה-likelihood ל-😃 בעקבות אכילת 3 מנות 🍆:

$$P(X=(🍆,🍆,🍆)|Y=😃)=\frac{0}{6}=0$$

  • כי לא מצאנו ולו מקרה 1 בו אכילת 3 מנות חציל גרמה לשביעות רצון.

 

3. חישוב ההסתברות האפוסטריורית

כדי לחשב את ה-posterior עבור כל אחת מהתוצאות נכפול את ה-likelihood ב-prior:

$$P(Y=🤮|X=(🍆,🍆,🍆))=\frac{1}{3}*\frac{1}{3}=\frac{1}{9}≈0.11$$

$$P(Y=😃|X=(🍆,🍆,🍆))=\frac{2}{3}*0=0$$

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

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

 

שימוש בסיווג בייסיאני נאיבי

על הבעיה של מחסור בדוגמאות, שהיא בעיה מאוד נפוצה כי כבר כמה דוגמאות אפשר לאסוף, אפשר להתגבר באמצעות סיווג בייסיאני נאיבי Naive Bayes Classifier אשר מניח שהפיצ'רים הם עצמאיים. מה שמאפשר לוותר על הצורך לאתר צירוף ספציפי ומאפשר במקום לכפול את הפיצ'רים הנפרדים בהם אנו מעוניינים כדי לקבל קירוב של ה-likelihood. ההנחה היא "נאיבית" כי במציאות הפיצ'רים פעמים רבות תלויים זה בזה, אך, למזלנו, ההנחה מפשטת את המודל באופן דרמטי. לרוב, ללא פגיעה בביצועים.

במקרה שלנו, כדי לחשב את ה-likelihood לכך שיחלה אם יאכל חציל (תחת הנחה "נאיבית" של אי תלות) נכפול את שיעור המקרים בהם אכל 🍆 למנה ראשונה וחלה בשיעור המקרים בהם אכל חציל למנה שנייה וחלה בשיעור המקרים בהם אכל 🍆 למנה שלישית וחלה:

$$P(X=(🍆,🍆,🍆)|Y=🤮)=P(X_1=🍆|Y=🤮)*P(X_2=🍆|Y=🤮)*P(X_3=🍆|Y=🤮)=\frac{2}{3}*\frac{2}{3}*\frac{2}{3}=\frac{8}{27}$$

כנ"ל לגבי המצבים בהם אכל חציל אך יצא שמח וטוב לב:

$$P(X=(🍆,🍆,🍆)|Y=😃)=P(X_1=🍆|Y=🤮)*P(X_2=🍆|Y=😃)*P(X_3=🍆|Y=😃)=\frac{1}{6}*\frac{2}{6}*\frac{1}{6}=\frac{2}{216}=\frac{1}{108}$$

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

כדי לחשב את ההסתברות האפוסטריורית עבור כל אחת מהתוצאות נכפול את ה-likelihood ב-prior:

$$P(Y=🤮|X=(🍆,🍆,🍆)) \propto \frac{1}{3} \cdot \frac{8}{27} = \frac{8}{81}$$

$$P(Y=😃|X=(🍆,🍆,🍆)) \propto \frac{2}{3} \cdot \frac{1}{108} = \frac{1}{162}$$

נחשב את ההסתברויות המנורמלות:

$$P(Y=🤮|X) = \frac{8/81}{8/81 + 1/162} \approx 0.94$$

$$P(Y=😃|X) = \frac{1/162}{8/81 + 1/162} \approx 0.06$$

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

 

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

 

מה הלאה?

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

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

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

 

אולי גם זה יעניין אותך

חשיבה בייסיאנית Bayesian: אינטואיציה והבנה בסיסית

סיווג לקבוצות באמצעות למידת מכונה

Confusion matrix ומדדים להערכת המודל

 

לכל המדריכים בנושא של למידת מכונה

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

 

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

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

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

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

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

הוסף תגובה חדשה

 

 

ענה על השאלה הפשוטה הבאה כתנאי להוספת תגובה:

איך קוראים בעברית לצ`ופצ`יק של הקומקום?