Skip to content

Latest commit

 

History

History
242 lines (163 loc) · 12 KB

File metadata and controls

242 lines (163 loc) · 12 KB

מסווגי מטבחים 2

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

דרישות מקדימות

אנחנו מניחים שסיימת את השיעורים הקודמים ויש לך מערך נתונים נקי בתיקיית data בשם cleaned_cuisines.csv בשורש תיקיית 4 השיעורים הזו.

הכנה

טענו את קובץ ה-notebook.ipynb שלך עם מערך הנתונים הנקי וחילקנו אותו למסגרות נתונים X ו-y, מוכנות לתהליך בניית המודל.

מפת סיווג

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

ML Map from Scikit-learn

טיפ: בקר במפה זו אונליין ולחץ לאורך המסלול כדי לקרוא תיעוד.

התוכנית

מפה זו מאוד מועילה ברגע שיש לך הבנה ברורה של הנתונים שלך, כי תוכל 'ללכת' לאורך הנתיבים שלה אל ההחלטה:

  • יש לנו >50 דגימות
  • אנו רוצים לחזות קטגוריה
  • יש לנו נתונים מתויגים
  • יש לנו פחות מ-100K דגימות
  • ✨ ניתן לבחור ב-Linear SVC
  • אם זה לא עובד, כיוון שיש לנו נתונים מספריים
    • נוכל לנסות ✨ KNeighbors Classifier
      • אם זה לא עזר, נסה ✨ SVC ו-✨ Ensemble Classifiers

זה מסלול מאוד מועיל למעקב.

תרגיל - פצל את הנתונים

בהמשך למסלול זה, כדאי להתחיל בייבוא ספריות לשימוש.

  1. ייבא את הספריות הנדרשות:

    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
  2. חלק את נתוני האימון והבדיקה שלך:

    X_train, X_test, y_train, y_test = train_test_split(cuisines_features_df, cuisines_label_df, test_size=0.3)

מסווג Linear SVC

Support-Vector clustering (SVC) הוא בן למשפחת Support-Vector machines של טכניקות למידת מכונה (למידע נוסף על אלה בהמשך). בשיטה הזו, ניתן לבחור 'kernel' להחליט איך לארגן את התוויות. הפרמטר 'C' מתייחס ל'רגולריזציה' שמווסת את ההשפעה של הפרמטרים. ה-kernel יכול להיות אחד מכמה; כאן הגדרנו אותו כ'linear' כדי לוודא שנעשה שימוש ב-Linear SVC. פרמטר ההסתברות (probability) ברירת המחדל הוא 'false'; כאן הגדרנו אותו ל-'true' כדי לאסוף הערכות הסתברות. קבענו את מצב האקראיות ל-'0' כדי לערבב את הנתונים ולקבל הסתברויות.

תרגיל - השתמש ב-Linear SVC

התחל ביצירת מערך מסווגים. תוסיף למערך זה בהדרגה ככל שנבדוק.

  1. התחל עם Linear SVC:

    C = 10
    # צור מסווגים שונים.
    classifiers = {
        'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0)
    }
  2. אימן את המודל באמצעות 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 הוא חלק ממשפחת "הקהלים" של שיטות למידת המכונה, שיכולות לשמש ללמידה מפוקחת ולא מפוקחת. בשיטה זו, נוצר מספר מוגדר מראש של נקודות ואוספים סביבן נתונים כך שניתן לחזות תוויות כלליות עבור הנתונים.

תרגיל - השתמש במסווג K-Neighbors

המסווג הקודם היה טוב ועבד היטב עם הנתונים, אבל אולי ניתן להשיג דיוק טוב יותר. נסה מסווג K-Neighbors.

  1. הוסף שורה למערך המסווגים שלך (הוסף פסיק אחרי פריט ה-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 הם חלק ממשפחת שיטות למידת מכונה בשם Support-Vector Machine המשמשות למשימות סיווג ורגרסיה. SVMs "ממפים דוגמאות אימון לנקודות במרחב" כדי למקסם את המרחק בין שתי קטגוריות. נתונים הבאים ממופים למרחב זה כך שניתן לחזות את הקטגוריה שלהם.

תרגיל - השתמש במסווג Support Vector

בוא ננסה להשיג דיוק מעט טוב יותר עם מסווג Support Vector.

  1. הוסף פסיק אחרי פריט 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

בוא נלך לאורך המסלול עד הסוף, למרות שהבדיקה הקודמת הייתה די טובה. ננסה כמה '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. אף שאנו שואפים לדייק, יש לקחת בחשבון כי תרגומים אוטומטיים עלולים להכיל טעויות או אי-דיוקים. המסמך המקורי בשפת המקור שלו צריך להיחשב כמקור הסמכות. למידע קריטי מומלץ להשתמש בתרגום מקצועי על ידי אדם. איננו אחראים לכל אי הבנה או פרשנות שגויה הנובעים משימוש בתרגום זה.