logo

אלגוריתם מסווג של Bayes נאיבי

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

למה זה נקרא Naive Bayes?

האלגוריתם Naive Bayes מורכב משתי מילים Naive ו-Bayes, אשר ניתן לתאר כך:

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

משפט בייס:

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

איפה,

P(A|B) היא הסתברות אחורית : הסתברות להשערה א' על האירוע שנצפה ב'.

P(B|A) הוא הסתברות סביר : הסתברות הראיות בהינתן שההסתברות של השערה נכונה.

שחקן קולנוע ויג'יי

P(A) הוא הסתברות מוקדמת : הסתברות להשערה לפני התבוננות בראיות.

P(B) הוא הסתברות שולית : הסתברות לראיות.

העבודה של המסווג של Naive Bayes:

ניתן להבין את פעולתו של המסווג של Naive Bayes בעזרת הדוגמה הבאה:

נניח שיש לנו מערך נתונים של תנאי מזג אוויר ומשתנה יעד מתאים ' לְשַׂחֵק '. אז באמצעות מערך הנתונים הזה אנחנו צריכים להחליט אם אנחנו צריכים לשחק או לא ביום מסוים בהתאם לתנאי מזג האוויר. אז כדי לפתור בעיה זו, עלינו לבצע את השלבים הבאים:

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

בְּעָיָה : אם מזג האוויר שטוף שמש, אז השחקן צריך לשחק או לא?

פִּתָרוֹן : כדי לפתור זאת, תחילה שקול את מערך הנתונים שלהלן:

הַשׁקָפָה לְשַׂחֵק
0 גָשׁוּם כן
1 שִׁמשִׁי כן
2 מְעוּנָן כן
3 מְעוּנָן כן
4 שִׁמשִׁי לא
5 גָשׁוּם כן
6 שִׁמשִׁי כן
7 מְעוּנָן כן
8 גָשׁוּם לא
9 שִׁמשִׁי לא
10 שִׁמשִׁי כן
אחד עשר גָשׁוּם לא
12 מְעוּנָן כן
13 מְעוּנָן כן

טבלת תדירות עבור תנאי מזג האוויר:

מזג אוויר כן לא
מְעוּנָן 5 0
גָשׁוּם 2 2
שִׁמשִׁי 3 2
סה'כ 10 5

מצב מזג האוויר בטבלת הסבירות:

מזג אוויר לא כן
מְעוּנָן 0 5 5/14= 0.35
גָשׁוּם 2 2 4/14=0.29
שִׁמשִׁי 2 3 5/14=0.35
את כל 4/14=0.29 10/14=0.71

יישום משפט בייס:

P(Yes|Sunny)= P(Sunny|Yes)*P(Yes)/P(Sunny)

P(Sunny|Yes)= 3/10= 0.3

P(שמש)= 0.35

P(כן)=0.71

אז P(כן|שמש) = 0.3*0.71/0.35= 0.60

מעלה

P(No|Sunny)= P(Sunny|No)*P(No)/P(Sunny)

P(Sunny|NO)= 2/4=0.5

P(No)= 0.29

P(שמש)= 0.35

אז P(No|Sunny)= 0.5*0.29/0.35 = 0.41

אז כפי שאנו יכולים לראות מהחישוב לעיל כי P(Yes|Sunny)>P(No|Sunny)

מכאן שביום שמש, שחקן יכול לשחק את המשחק.

היתרונות של מסווג Bayes Naive:

  • Naive Bayes הוא אחד מאלגוריתמי ה-ML המהירים והקלים לניבוי מחלקה של מערכי נתונים.
  • זה יכול לשמש עבור סיווגים בינאריים כמו גם רב-מעמדות.
  • הוא מתפקד היטב בתחזיות מרובות מחלקות בהשוואה לאלגוריתםים אחרים.
  • זוהי הבחירה הפופולרית ביותר עבור בעיות בסיווג טקסט .

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

  • Naive Bayes מניח שכל התכונות אינן תלויות או לא קשורות, ולכן היא לא יכולה ללמוד את הקשר בין תכונות.

יישומים של Naive Bayes Classifier:

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

סוגי מודל בייס נאיבי:

ישנם שלושה סוגים של מודל בייס נאיבי, המובאים להלן:

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

יישום Python של האלגוריתם Naive Bayes:

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

שלבים ליישום:

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

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

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

 Importing the libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd # Importing the dataset dataset = pd.read_csv('user_data.csv') x = dataset.iloc[:, [2, 3]].values y = dataset.iloc[:, 4].values # Splitting the dataset into the Training set 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 sc = StandardScaler() x_train = sc.fit_transform(x_train) x_test = sc.transform(x_test) 

בקוד לעיל, טענו את מערך הנתונים לתוכנית שלנו באמצעות ' מערך נתונים = pd.read_csv('user_data.csv') . מערך הנתונים הנטען מחולק לאימון ולערכת מבחנים, ולאחר מכן שידרגנו את משתנה התכונות.

הפלט עבור מערך הנתונים ניתן כ:

אלגוריתם סיווג נאיבי של Bayes 1

2) התאמת בייס נאיבי לסט האימונים:

לאחר שלב העיבוד המקדים, כעת נתאים את המודל Naive Bayes לסט ה-Training. להלן הקוד עבורו:

 # Fitting Naive Bayes to the Training set from sklearn.naive_bayes import GaussianNB classifier = GaussianNB() classifier.fit(x_train, y_train) 

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

תְפוּקָה:

מערכת קבצים לינוקס
 Out[6]: GaussianNB(priors=None, var_smoothing=1e-09) 

3) חיזוי של תוצאת מערך הבדיקה:

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

 # Predicting the Test set results y_pred = classifier.predict(x_test) 

תְפוּקָה:

אלגוריתם מסווגים נאיבי בייס 2

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

4) יצירת מטריצת בלבול:

כעת נבדוק את הדיוק של המסווגן Naive Bayes באמצעות מטריצת הבלבול. להלן הקוד עבורו:

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

תְפוּקָה:

אלגוריתם מסווגים נאיבי של Bayes 3

כפי שאנו יכולים לראות בפלט מטריצת הבלבול לעיל, יש 7+3=10 תחזיות שגויות, ו-65+25=90 תחזיות נכונות.

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

בשלב הבא נדמיין את תוצאת מערך האימון באמצעות Nave Bayes Classifier. להלן הקוד עבורו:

 # Visualising the Training set results 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(('purple', 'green'))) mtp.xlim(X1.min(), X1.max()) mtp.ylim(X2.min(), X2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('purple', 'green'))(i), label = j) mtp.title('Naive Bayes (Training set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show() 

תְפוּקָה:

אלגוריתם סיווג נאיבי בייס 4

בפלט לעיל אנו יכולים לראות שהסווג Nave Bayes הפריד את נקודות הנתונים עם הגבול העדין. זוהי עקומה גאוסית כפי שהשתמשנו בה GaussianNB מסווג בקוד שלנו.

6) הדמיית תוצאת ערכת הבדיקה:

 # Visualising the Test set results 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(('purple', 'green'))) mtp.xlim(X1.min(), X1.max()) mtp.ylim(X2.min(), X2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('purple', 'green'))(i), label = j) mtp.title('Naive Bayes (test set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show() 

תְפוּקָה:

אלגוריתם סיווג נאיבי בייס 5

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