Menu
CoddyTech

מדד F1

חלק מהיחידה למידה מונחית במסלול ה-Machine Learning של Coddy. שיעור 23 מתוך 58.

מודל יכול להגיע לדיוק או להיזכרות המרביים על חשבון האחר. ציון F1 משלב בין השניים, ונשאר נמוך אלא אם שניהם גבוהים:

עמודות עבור שני מודלים. לא מאוזן: דיוק 1, היזכרות 0.1, ממוצע פשוט 0.55, ציון F1 רק 0.18. מאוזן: דיוק 0.8, היזכרות 0.7, ממוצע פשוט 0.75, ציון F1 0.75

כאשר P הוא דיוק ו-R הוא כיסוי, ‏F1 הוא 2 * P * R / (P + R). עבור מודל מזג אוויר:

from sklearn.metrics import f1_score, classification_report

y_test = ["sun", "sun", "rain", "rain", "snow", "sun", "rain", "snow"]
pred   = ["sun", "rain", "rain", "rain", "snow", "sun", "sun", "rain"]
print(f1_score(y_test, pred, average=None))  # אחד לכל מחלקה, לפי סדר מיון
print(classification_report(y_test, pred))

זה מדפיס:

[0.57142857 0.66666667 0.66666667]
              precision    recall  f1-score   support

        rain       0.50      0.67      0.57         3
        snow       1.00      0.50      0.67         2
         sun       0.67      0.67      0.67         3

    accuracy                           0.62         8
   macro avg       0.72      0.61      0.63         8
weighted avg       0.69      0.62      0.63         8

הדוח report נותן ציון לכל מחלקה; support סופר את שורות הבדיקה שלה. השורה החלשה ביותר שלו מראה לך מה לתקן קודם.

challenge icon

אתגר

בינוני

המצלמה של מפעל מיחזור ממיינת פריטים למכלים של זכוכית, מתכת, נייר ופלסטיק. התוכנית קוראת את k, וקוד הפתיחה מאמן את מצלמת ה-k-NN, ממלא את pred ומציג את bins.

  1. הדפיסו את דוח הסיווג.
  2. מצאו את המכל עם ערך F1 הנמוך ביותר והדפיסו אותו, ולאחר מכן את הצד החלש יותר שלו, precision או recall, כמו בדוגמה למטה (3 ספרות אחרי הנקודה העשרונית).

אחרי הדוח, עבור מפעל אחר:

Weakest bin: metal, F1 0.667
Its weaker side: recall 0.571

נסו בעצמכם

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import classification_report, f1_score, precision_score, recall_score

k = int(input())

# שורה אחת לכל פריט על המסוע, ולמכל שאליו הוא שייך
items = pd.read_csv("recycling.csv")
features = ["weight_g", "shine", "see_through", "bend"]
X_train, X_test, y_train, y_test = train_test_split(items[features], items["material"], test_size=0.25, random_state=0)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# המודל של המצלמה
model = KNeighborsClassifier(n_neighbors=k)
model.fit(X_train, y_train)
pred = model.predict(X_test)
# המכלים, לפי סדר הציונים של כל מחלקה
bins = model.classes_

# כתבו את הקוד שלכם למטה
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה למידה מונחית

תרגלו בעצמכם: קומפיילר Python אונליין