Menu
CoddyTech

השוואה הוגנת בין מודלים

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

השוואת מודלים בחלוקה אחת היא הטלת מטבע: אחד מהם עשוי לקבל קבוצת בדיקה מוצלחת במקרה. במקום זאת, תנו לכל מודל את אותם חמישה קיפולים. עבור 150 שטרות, אמיתיים או מזויפים:

ציוני חמשת הקיפולים לכל מודל מוצגים כנקודות, עם קו שחור בכל ממוצע. הנקודות של k-NN קרובות זו לזו סביב 0.867; הציונים של logistic פרוסים מ-0.73 עד 0.93 סביב 0.873; tree משתרך מאחור עם 0.807

k-NN ורגרסיה לוגיסטית נמצאים בתיקו במסגרת טווח התנודתיות שלהם, ו-k-NN יציב יותר. העץ מפגר.

מפצל KFold מערבב את השורות פעם אחת ומעביר לכל מודל קיפולים זהים:

from sklearn.model_selection import KFold

folds = KFold(n_splits=5, shuffle=True, random_state=0)
for model in [knn, logistic, tree]:
    scores = cross_val_score(model, X, y, cv=folds)
    print(f"{scores.mean():.3f} {scores.std():.3f}")

הוא מדפיס את המספרים בתרשים:

0.867 0.042
0.873 0.074
0.807 0.077

בחרו בממוצע הגבוה ביותר; כשהממוצעים קרובים, בחרו בסטיית התקן הקטנה יותר.

challenge icon

אתגר

בינוני

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

  1. צרו KFold עם מספר החלוקות הזה, shuffle=True ו-random_state=0.
  2. בצעו אימות צולב לכל מודל על הקפלים האלה; הדפיסו את הממוצע ואת סטיית התקן שלו, עם 3 ספרות עשרוניות.
  3. הדפיסו את המודל עם הממוצע הגבוה ביותר.

עבור מבקרים אחרים ו-5:

One split picks: k-NN
k-NN: mean 0.833, std 0.045
logistic: mean 0.860, std 0.044
tree: mean 0.787, std 0.029
Cross-validation picks: logistic

נסו בעצמכם

import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split, cross_val_score, KFold
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier

n_folds = int(input())

# אין לשנות את השורות שלהלן: 300 מבקרים, 6 הרגלי גלישה; תווית 1 פירושה שהם הכינו את המתכון
X, y = make_classification(n_samples=300, n_features=6, n_informative=4, n_redundant=0,
                           flip_y=0.06, class_sep=0.8, random_state=0)
names = ["k-NN", "logistic", "tree"]
models = [KNeighborsClassifier(), LogisticRegression(max_iter=1000),
          DecisionTreeClassifier(max_depth=4, random_state=0)]

# חלוקה אחת מכתירה מנצח
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
single = []
for model in models:
    model.fit(X_train, y_train)
    single.append(model.score(X_test, y_test))
print(f"One split picks: {names[np.argmax(single)]}")

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

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

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

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