מכונות וקטור תמיכה (SVMs) הן אלגוריתם למידה בפיקוח רב עוצמה המשמש למשימות סיווג ורגרסיה. המטרה העיקרית של SVM היא למצוא את המישור האופטימלי המפריד בצורה הטובה ביותר בין נקודות הנתונים של מחלקות שונות במרחב בעל ממדים גבוהים. הסיווג של קבוצת תכונות ב-SVM קשור עמוקות לפונקציית ההחלטה, במיוחד לסימן שלה, אשר ממלא תפקיד חשוב בקביעה באיזה צד של המישור נופלת נקודת נתונים נתונה.
פונקציית החלטה ב-SVM
פונקציית ההחלטה עבור SVM יכולה להתבטא כך:
שם:
- הוא וקטור המשקל המגדיר את כיוון המישור.
- הוא וקטור התכונה של נקודת הנתונים המסווגת.
- הוא מונח ההטיה שמסיט את המישור.
כדי לסווג נקודת נתונים , נעשה שימוש בסימן של פונקציית ההחלטה:
סימן זה קובע את הצד של המישור שבו נקודת הנתונים נמצאת.
תפקיד סיווג הכניסה
הסימן של פונקציית ההחלטה () קובע ישירות את תווית הכיתה המוקצית לנקודת הנתונים
. ככה זה עובד:
1. סימן חיובי: אם , הסימן של פונקציית ההחלטה הוא חיובי. זה אומר שנקודת הנתונים
שוכב בצד המישור שבו נמצאת המחלקה החיובית. לָכֵן,
מסווג כשייך למחלקה החיובית (מסומן בדרך כלל כ-+1).
2. סימן שלילי: אם , הסימן של פונקציית ההחלטה הוא שלילי. זה מצביע על כך שנקודת הנתונים
שוכב בצד המישור שבו נמצאת המחלקה השלילית. לָכֵן,
מסווג כשייך למחלקה השלילית (מסומן בדרך כלל כ-1).
3. אפס: במקרה הנדיר שבו , נקודת הנתונים
שוכב בדיוק על המישור. תרחיש זה אפשרי תיאורטית אך נדיר כמעט בשל האופי הרציף של נתונים בעלי ערך אמיתי.
פרשנות גיאומטרית
הפרשנות הגיאומטרית של פונקציית ההחלטה חיונית להבנת האופן שבו SVM מסווגים נקודות נתונים. המישור המוגדר על ידי משמש כגבול ההחלטה בין שני המעמדות. הכיוון והמיקום של היפר-מישור זה נקבעים על ידי וקטור המשקל
ומונח ההטיה
.
1. שולים: השוליים הם המרחק בין היפר-מישור לנקודות הנתונים הקרובות ביותר מכל מחלקה. SVM שואפת למקסם את המרווח הזה כדי להבטיח שהמישור לא רק יפריד בין המחלקות אלא יעשה זאת עם המרחק הגדול ביותר האפשרי מנקודות הנתונים הקרובות ביותר. נקודות הנתונים הקרובות ביותר אלו ידועות בתור וקטורי תמיכה.
2. תמיכה בוקטורים: וקטורי תמיכה הם נקודות הנתונים הקרובות ביותר למישור ההיפר. הם קריטיים בהגדרת המיקום והכיוון של המישור. כל שינוי במיקום של וקטורי התמיכה הללו ישנה את מישור ההיפר.
דוגמה
שקול דוגמה פשוטה שבה יש לנו מרחב תכונה דו מימדי עם נקודות נתונים משתי מחלקות. נסמן את המחלקה החיובית ב-+1 ואת המחלקה השלילית ב-1. נניח וקטור המשקל ומונח ההטיה
.
עבור נקודת נתונים , נוכל לחשב את פונקציית ההחלטה באופן הבא:
השאלה היא איך? , הסימן של פונקציית ההחלטה הוא חיובי, ולפיכך, נקודת הנתונים
מסווג כשייך למחלקה החיובית (+1).
לנקודת מידע נוספת , אנו מחשבים את פונקציית ההחלטה כ:
שוב, , אז הסימן חיובי, ו
מסווג כשייך למחלקה החיובית (+1).
עכשיו, שקול נקודת נתונים :
במקרה הזה, , אז הסימן שלילי, ו
מסווג כשייך למחלקה השלילית (-1).
ניסוח מתמטי
הניסוח המתמטי של SVM כולל פתרון בעיית אופטימיזציה כדי למצוא את האופטימלי ו
שממקסמים את המרווח תוך סיווג נכון של נתוני האימון. בעיית האופטימיזציה יכולה להתבטא כך:
איפה היא תווית המחלקה של נקודת הנתונים
, והאילוץ מבטיח שכל נקודות הנתונים מסווגות בצורה נכונה עם מרווח של לפחות 1.
טריק גרעין
ביישומים מעשיים רבים, ייתכן שלא ניתן להפריד נתונים לינארית במרחב התכונות המקורי. כדי לטפל בזה, ניתן להרחיב את ה-SVM לסיווג לא ליניארי באמצעות טריק הליבה. פונקציית ליבה ממפה באופן מרומז את הנתונים לתוך מרחב ממדי גבוה יותר שבו הפרדה ליניארית אפשרית. פונקציות ליבה נפוצות כוללות את הגרעין הפולינומי, ליבת פונקציית הבסיס הרדיאלית (RBF) וקרנל הסיגמואיד.
פונקציית ההחלטה ב-SVM בעל הגרעין הופכת:
איפה הם מכפילי לגראנז' המתקבלים מהצורה הכפולה של בעיית האופטימיזציה.
יישום פייתון
ב-Python, ספריית `scikit-learn` מספקת הטמעה פשוטה של SVM דרך המחלקה `SVC`. להלן דוגמה כיצד להשתמש ב-'SVC' כדי לסווג מערך נתונים:
python from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import accuracy_score # Load the dataset iris = datasets.load_iris() X = iris.data y = iris.target # Select only two classes for binary classification X = X[y != 2] y = y[y != 2] # Split the dataset into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # Create an SVM classifier with a linear kernel clf = SVC(kernel='linear') # Train the classifier clf.fit(X_train, y_train) # Predict the class labels for the test set y_pred = clf.predict(X_test) # Calculate the accuracy of the classifier accuracy = accuracy_score(y_test, y_pred) print(f'Accuracy: {accuracy * 100:.2f}%')
בדוגמה זו, המחלקה 'SVC' משמשת ליצירת מסווג SVM עם ליבה ליניארית. המסווגן מאומן על ערכת האימונים, והדיוק מוערך על ערכת הבדיקה. הסיווג של ערכת תכונות ב-SVM תלוי ביסודו בסימן של פונקציית ההחלטה . הסימן קובע באיזה צד של המישור שוכנת נקודת נתונים, ובכך מקצה אותה למחלקה המתאימה. פונקציית ההחלטה, תהליך האופטימיזציה למציאת המישור האופטימלי והשימוש הפוטנציאלי בפונקציות ליבה לטיפול בהפרדה לא ליניארית הם כולם מרכיבים חשובים של SVMs. הבנת היבטים אלה מספקת מבט מקיף על אופן הפעולה של מערכות SVM והיישום שלהן במשימות שונות של למידת מכונה.
שאלות ותשובות אחרונות אחרות בנושא לימוד מכונה EITC/AI/MLP עם פיתון:
- כיצד מחושב הפרמטר b ברגרסיה ליניארית (חיזור ה-y של הקו המתאים ביותר)?
- איזה תפקיד ממלאים וקטורי תמיכה בהגדרת גבול ההחלטה של SVM, וכיצד הם מזוהים במהלך תהליך האימון?
- בהקשר של אופטימיזציה של SVM, מהי המשמעות של וקטור המשקל `w` והטיה `b` וכיצד הם נקבעים?
- מהי המטרה של שיטת ה-'visualize' ביישום SVM, וכיצד היא עוזרת בהבנת ביצועי המודל?
- כיצד שיטת ה'ניבוי' ביישום SVM קובעת את הסיווג של נקודת נתונים חדשה?
- מהי המטרה העיקרית של Support Vector Machine (SVM) בהקשר של למידת מכונה?
- כיצד ניתן להשתמש בספריות כגון sikit-learn כדי ליישם סיווג SVM ב-Python, ומהן פונקציות המפתח הכרוכות בהן?
- הסבר את המשמעות של האילוץ (y_i (mathbf{x}_i cdot mathbf{w} + b) geq 1) באופטימיזציה של SVM.
- מהי המטרה של בעיית האופטימיזציה של SVM וכיצד היא מנוסחת מתמטית?
- מה תפקידה של משוואת ההיפר-מישור (mathbf{x} cdot mathbf{w} + b = 0) בהקשר של Support Vector Machines (SVM)?
הצג שאלות ותשובות נוספות ב-EITC/AI/MLP Machine Learning עם Python