Support Vector Machines (SVM) הם מחלקה רבת עוצמה ורב-תכליתית של אלגוריתמים של למידת מכונה בפיקוח יעילים במיוחד עבור משימות סיווג. ספריות כמו scikit-learn ב-Python מספקות יישומים חזקים של SVM, מה שהופך אותו לנגיש עבור מתרגלים וחוקרים כאחד. תגובה זו תבהיר כיצד ניתן להשתמש ב-skit-learn כדי ליישם סיווג SVM, תוך פירוט הפונקציות המרכזיות המעורבות ומתן דוגמאות להמחשה.
מבוא ל-SVM
תמיכה במכונות וקטור פועלות על ידי מציאת המישור המפריד בצורה הטובה ביותר את הנתונים למחלקות שונות. במרחב דו-ממדי, המישור הזה הוא פשוט קו, אבל בממדים גבוהים יותר, הוא הופך למישור או להיפר-מישור. ההיפר-מישור האופטימלי הוא זה שממקסם את השוליים בין שתי המחלקות, כאשר השוליים מוגדרים כמרחק בין המישור לנקודות הנתונים הקרובות ביותר מכל אחת מהמחלקות, המכונים וקטורי תמיכה.
Scikit-learn ו-SVM
Scikit-learn היא ספריית Python רבת עוצמה ללמידת מכונה המספקת כלים פשוטים ויעילים לכריית נתונים וניתוח נתונים. הוא בנוי על NumPy, SciPy ו-matplotlib. מודול `svm` בתוך scikit-learn מספק יישום של אלגוריתמי SVM.
פונקציות מפתח
1. `svm.SVC`: זוהי המחלקה הראשית לביצוע סיווג באמצעות SVM. SVC ראשי תיבות של Support Vector Classification.
2. 'מתאים': שיטה זו משמשת לאימון המודל על הנתונים הנתונים.
3. `לחזות`: לאחר הכשרה של המודל, נעשה שימוש בשיטה זו כדי לחזות את תוויות המחלקות עבור נתוני הבדיקה הנתונים.
4. `ציון`: שיטה זו משמשת להערכת הדיוק של המודל על נתוני הבדיקה.
5. `GridSearchCV`: זה משמש לכוונון היפרפרמטרים כדי למצוא את הפרמטרים הטובים ביותר עבור מודל SVM.
יישום SVM Classification עם sikit-learn
הבה נבחן את השלבים הכרוכים ביישום סיווג SVM באמצעות scikit-learn.
שלב 1: ייבוא ספריות
ראשית, ייבא את הספריות הדרושות:
python import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC from sklearn.metrics import classification_report, confusion_matrix
שלב 2: טעינת מערך הנתונים
למטרות הדגמה, נשתמש במערך הנתונים של Iris, מערך נתונים ידוע בקהילת למידת מכונה:
python # Load the Iris dataset iris = datasets.load_iris() X = iris.data y = iris.target
שלב 3: פיצול מערך הנתונים
פצל את מערך הנתונים לקבוצות הדרכה ובדיקות:
python # Split the data into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
שלב 4: קנה מידה של תכונות
קנה המידה של תכונות חשוב עבור SVM מכיוון שהוא רגיש לקנה המידה של תכונות הקלט:
python # Standardize features by removing the mean and scaling to unit variance scaler = StandardScaler() X_train = scaler.fit_transform(X_train) X_test = scaler.transform(X_test)
שלב 5: הכשרת מודל SVM
הצג את מסווג SVM ואמן אותו על פי נתוני האימון:
python # Create an instance of SVC and fit the data svc = SVC(kernel='linear', C=1.0) svc.fit(X_train, y_train)
כאן, השתמשנו בליבה ליניארית והגדרנו את פרמטר הרגוליזציה 'C' ל-1.0. פרמטר הקרנל מציין את סוג היפר-מישור המשמש להפרדת הנתונים. הגרעינים הנפוצים כוללים 'ליניארי', 'פולי' (פולינום), 'rbf' (פונקציית בסיס רדיאלית) ו-'sigmoid'.
שלב 6: ביצוע תחזיות
השתמש במודל המאומן כדי ליצור תחזיות על נתוני הבדיקה:
python # Predict the class labels for the test set y_pred = svc.predict(X_test)
שלב 7: הערכת המודל
הערך את ביצועי המודל באמצעות מדדים כגון מטריצת בלבול ודוח סיווג:
python # Evaluate the model print(confusion_matrix(y_test, y_pred)) print(classification_report(y_test, y_pred))
מטריצת הבלבול מספקת סיכום של תוצאות החיזוי, בעוד שדוח הסיווג כולל דיוק, ריקול, ציון F1 ותמיכה עבור כל מחלקה.
כוונון היפרפרמטרים עם GridSearchCV
כוונון היפרפרמטר חיוני למיטוב הביצועים של דגם SVM. ניתן להשתמש ב-`GridSearchCV` של Scikit-learn לביצוע חיפוש ממצה על רשת פרמטרים שצוינה:
python from sklearn.model_selection import GridSearchCV # Define the parameter grid param_grid = { 'C': [0.1, 1, 10, 100], 'gamma': [1, 0.1, 0.01, 0.001], 'kernel': ['rbf'] } # Create a GridSearchCV instance grid = GridSearchCV(SVC(), param_grid, refit=True, verbose=2) grid.fit(X_train, y_train) # Print the best parameters and the corresponding score print("Best parameters found: ", grid.best_params_) print("Best score: ", grid.best_score_) # Use the best estimator to make predictions grid_predictions = grid.predict(X_test) # Evaluate the model with the best parameters print(confusion_matrix(y_test, grid_predictions)) print(classification_report(y_test, grid_predictions))
בדוגמה זו, חיפשנו רשת של ערכים עבור 'C' ו-'gamma' באמצעות ליבת RBF. מופע `GridSearchCV` מחזיר את המודל עם הפרמטרים הטובים ביותר שנמצאו במהלך החיפוש.
הדמיית גבול ההחלטה
להבנה טובה יותר של אופן הפעולה של מסווג SVM, לעתים קרובות כדאי לדמיין את גבול ההחלטה. זה יותר פשוט בחלל תכונה דו מימדי. להלן דוגמה לשימוש במערך נתונים סינתטי:
python from sklearn.datasets import make_blobs # Generate a synthetic dataset X, y = make_blobs(n_samples=100, centers=2, random_state=6) # Fit the SVM model svc = SVC(kernel='linear', C=1.0) svc.fit(X, y) # Create a mesh to plot the decision boundary h = .02 x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) # Predict the class for each point in the mesh Z = svc.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) # Plot the decision boundary plt.contourf(xx, yy, Z, alpha=0.8) plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o') plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.title('SVM Decision Boundary') plt.show()
הקוד לעיל יוצר מערך נתונים סינתטי עם שתי מחלקות, מתאים למודל SVM עם ליבה ליניארית ומדמיין את גבול ההחלטה. הפונקציה `contourf` משמשת כדי לשרטט את גבול ההחלטה, וחלקת הפיזור מציגה את נקודות הנתונים.Scikit-learn מספקת ממשק מקיף וידידותי ליישום סיווג SVM ב-Python. פונקציות המפתח כגון `svm.SVC`, `התאמה`, `חזוי` ו-`ציון` חיוניות לבנייה והערכת מודלים של SVM. כוונון היפרפרמטרים עם `GridSearchCV` משפר עוד יותר את ביצועי המודל על ידי מציאת הפרמטרים האופטימליים. הדמיה של גבול ההחלטה יכולה לספק תובנות חשובות לגבי התנהגותו של המסווגן. על ידי ביצוע שלבים אלה, ניתן ליישם ולמטב ביעילות את סיווג SVM באמצעות scikit-learn.
שאלות ותשובות אחרונות אחרות בנושא לימוד מכונה EITC/AI/MLP עם פיתון:
- כיצד מחושב הפרמטר b ברגרסיה ליניארית (חיזור ה-y של הקו המתאים ביותר)?
- איזה תפקיד ממלאים וקטורי תמיכה בהגדרת גבול ההחלטה של SVM, וכיצד הם מזוהים במהלך תהליך האימון?
- בהקשר של אופטימיזציה של SVM, מהי המשמעות של וקטור המשקל `w` והטיה `b` וכיצד הם נקבעים?
- מהי המטרה של שיטת ה-'visualize' ביישום SVM, וכיצד היא עוזרת בהבנת ביצועי המודל?
- כיצד שיטת ה'ניבוי' ביישום SVM קובעת את הסיווג של נקודת נתונים חדשה?
- מהי המטרה העיקרית של Support Vector Machine (SVM) בהקשר של למידת מכונה?
- הסבר את המשמעות של האילוץ (y_i (mathbf{x}_i cdot mathbf{w} + b) geq 1) באופטימיזציה של SVM.
- מהי המטרה של בעיית האופטימיזציה של SVM וכיצד היא מנוסחת מתמטית?
- כיצד הסיווג של קבוצת תכונות ב-SVM תלוי בסימן של פונקציית ההחלטה (טקסט{סימן}(mathbf{x}_i cdot mathbf{w} + b))?
- מה תפקידה של משוואת ההיפר-מישור (mathbf{x} cdot mathbf{w} + b = 0) בהקשר של Support Vector Machines (SVM)?
הצג שאלות ותשובות נוספות ב-EITC/AI/MLP Machine Learning עם Python