בשיעור הסיווג השני הזה, תחקור דרכים נוספות לסווג נתונים נומריים. תלמד גם על ההשלכות של בחירת מסווג אחד על פני אחר.
אנחנו מניחים שסיימת את השיעורים הקודמים ויש לך מערך נתונים נקי בתיקיית data בשם cleaned_cuisines.csv בשורש תיקיית 4 השיעורים הזו.
טענו את קובץ ה-notebook.ipynb שלך עם מערך הנתונים הנקי וחילקנו אותו למסגרות נתונים X ו-y, מוכנות לתהליך בניית המודל.
קודם לכן, למדת על האפשרויות השונות שיש לך כאשר אתה מסווג נתונים באמצעות גיליון העזר של מיקרוסופט. Scikit-learn מציעה גיליון עזר דומה, אך מפורט יותר, שיכול לעזור לצמצם עוד יותר את האמדנים שלך (מונח נוסף למסווגים):
טיפ: בקר במפה זו אונליין ולחץ לאורך המסלול כדי לקרוא תיעוד.
מפה זו מאוד מועילה ברגע שיש לך הבנה ברורה של הנתונים שלך, כי תוכל 'ללכת' לאורך הנתיבים שלה אל ההחלטה:
- יש לנו >50 דגימות
- אנו רוצים לחזות קטגוריה
- יש לנו נתונים מתויגים
- יש לנו פחות מ-100K דגימות
- ✨ ניתן לבחור ב-Linear SVC
- אם זה לא עובד, כיוון שיש לנו נתונים מספריים
- נוכל לנסות ✨ KNeighbors Classifier
- אם זה לא עזר, נסה ✨ SVC ו-✨ Ensemble Classifiers
- נוכל לנסות ✨ KNeighbors Classifier
זה מסלול מאוד מועיל למעקב.
בהמשך למסלול זה, כדאי להתחיל בייבוא ספריות לשימוש.
-
ייבא את הספריות הנדרשות:
from sklearn.neighbors import KNeighborsClassifier from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier from sklearn.model_selection import train_test_split, cross_val_score from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve import numpy as np
-
חלק את נתוני האימון והבדיקה שלך:
X_train, X_test, y_train, y_test = train_test_split(cuisines_features_df, cuisines_label_df, test_size=0.3)
Support-Vector clustering (SVC) הוא בן למשפחת Support-Vector machines של טכניקות למידת מכונה (למידע נוסף על אלה בהמשך). בשיטה הזו, ניתן לבחור 'kernel' להחליט איך לארגן את התוויות. הפרמטר 'C' מתייחס ל'רגולריזציה' שמווסת את ההשפעה של הפרמטרים. ה-kernel יכול להיות אחד מכמה; כאן הגדרנו אותו כ'linear' כדי לוודא שנעשה שימוש ב-Linear SVC. פרמטר ההסתברות (probability) ברירת המחדל הוא 'false'; כאן הגדרנו אותו ל-'true' כדי לאסוף הערכות הסתברות. קבענו את מצב האקראיות ל-'0' כדי לערבב את הנתונים ולקבל הסתברויות.
התחל ביצירת מערך מסווגים. תוסיף למערך זה בהדרגה ככל שנבדוק.
-
התחל עם Linear SVC:
C = 10 # צור מסווגים שונים. classifiers = { 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) }
-
אימן את המודל באמצעות Linear SVC והדפס דוח:
n_classifiers = len(classifiers) for index, (name, classifier) in enumerate(classifiers.items()): classifier.fit(X_train, np.ravel(y_train)) y_pred = classifier.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100)) print(classification_report(y_test,y_pred))
התוצאה די טובה:
Accuracy (train) for Linear SVC: 78.6% precision recall f1-score support chinese 0.71 0.67 0.69 242 indian 0.88 0.86 0.87 234 japanese 0.79 0.74 0.76 254 korean 0.85 0.81 0.83 242 thai 0.71 0.86 0.78 227 accuracy 0.79 1199 macro avg 0.79 0.79 0.79 1199 weighted avg 0.79 0.79 0.79 1199
K-Neighbors הוא חלק ממשפחת "הקהלים" של שיטות למידת המכונה, שיכולות לשמש ללמידה מפוקחת ולא מפוקחת. בשיטה זו, נוצר מספר מוגדר מראש של נקודות ואוספים סביבן נתונים כך שניתן לחזות תוויות כלליות עבור הנתונים.
המסווג הקודם היה טוב ועבד היטב עם הנתונים, אבל אולי ניתן להשיג דיוק טוב יותר. נסה מסווג K-Neighbors.
-
הוסף שורה למערך המסווגים שלך (הוסף פסיק אחרי פריט ה-Linear SVC):
'KNN classifier': KNeighborsClassifier(C),
התוצאה מעט גרועה יותר:
Accuracy (train) for KNN classifier: 73.8% precision recall f1-score support chinese 0.64 0.67 0.66 242 indian 0.86 0.78 0.82 234 japanese 0.66 0.83 0.74 254 korean 0.94 0.58 0.72 242 thai 0.71 0.82 0.76 227 accuracy 0.74 1199 macro avg 0.76 0.74 0.74 1199 weighted avg 0.76 0.74 0.74 1199✅ למד על K-Neighbors
מסווגי Support-Vector הם חלק ממשפחת שיטות למידת מכונה בשם Support-Vector Machine המשמשות למשימות סיווג ורגרסיה. SVMs "ממפים דוגמאות אימון לנקודות במרחב" כדי למקסם את המרחק בין שתי קטגוריות. נתונים הבאים ממופים למרחב זה כך שניתן לחזות את הקטגוריה שלהם.
בוא ננסה להשיג דיוק מעט טוב יותר עם מסווג Support Vector.
-
הוסף פסיק אחרי פריט K-Neighbors, ואז הוסף את השורה הזאת:
'SVC': SVC(),
התוצאה די טובה!
Accuracy (train) for SVC: 83.2% precision recall f1-score support chinese 0.79 0.74 0.76 242 indian 0.88 0.90 0.89 234 japanese 0.87 0.81 0.84 254 korean 0.91 0.82 0.86 242 thai 0.74 0.90 0.81 227 accuracy 0.83 1199 macro avg 0.84 0.83 0.83 1199 weighted avg 0.84 0.83 0.83 1199✅ למד על Support-Vectors
בוא נלך לאורך המסלול עד הסוף, למרות שהבדיקה הקודמת הייתה די טובה. ננסה כמה 'Ensemble Classifiers', במיוחד Random Forest ו-AdaBoost:
'RFST': RandomForestClassifier(n_estimators=100),
'ADA': AdaBoostClassifier(n_estimators=100)התוצאה מאוד טובה, במיוחד עבור Random Forest:
Accuracy (train) for RFST: 84.5%
precision recall f1-score support
chinese 0.80 0.77 0.78 242
indian 0.89 0.92 0.90 234
japanese 0.86 0.84 0.85 254
korean 0.88 0.83 0.85 242
thai 0.80 0.87 0.83 227
accuracy 0.84 1199
macro avg 0.85 0.85 0.84 1199
weighted avg 0.85 0.84 0.84 1199
Accuracy (train) for ADA: 72.4%
precision recall f1-score support
chinese 0.64 0.49 0.56 242
indian 0.91 0.83 0.87 234
japanese 0.68 0.69 0.69 254
korean 0.73 0.79 0.76 242
thai 0.67 0.83 0.74 227
accuracy 0.72 1199
macro avg 0.73 0.73 0.72 1199
weighted avg 0.73 0.72 0.72 1199
✅ למד על Ensemble Classifiers
שיטה זו בלמידת מכונה "משלבת את הערכות הבסיס של מספר אומדנים" כדי לשפר את איכות המודל. בדוגמה שלנו השתמשנו ב-Random Trees ו-AdaBoost.
-
Random Forest, שיטה ממוצעת, בונה 'יער' של 'עצים החלטיים' עם אלמנטים אקראיים כדי למנוע התאמת יתר. הפרמטר n_estimators מוגדר כמספר העצים.
-
AdaBoost מתאים מסווג למערך נתונים ואז מתאים עותקים של המסווג לאותו מערך נתונים. הוא מתמקד במשקלות של פריטים שסווגו שגוי ומעדכן את ההתאמה למסווג הבא כדי לתקן זאת.
לכל אחת מהטכניקות הללו יש מספר רב של פרמטרים שניתן לכוונן. מחקר את ברירות המחדל של הפרמטרים של כל אחת וחשוב מה פירוש כוונון הפרמטרים הללו עבור איכות המודל.
יש הרבה מונחים בשיעורים אלו, אז הקדש רגע לסקור רשימה זו של מונחים שימושיים!
כתב ויתור:
מסמך זה תורגם באמצעות שירות תרגום מבוסס בינה מלאכותית Co-op Translator. אף שאנו שואפים לדייק, יש לקחת בחשבון כי תרגומים אוטומטיים עלולים להכיל טעויות או אי-דיוקים. המסמך המקורי בשפת המקור שלו צריך להיחשב כמקור הסמכות. למידע קריטי מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו אחראים לכל אי הבנה או פרשנות שגויה הנובעים משימוש בתרגום זה.
