השוואה הוגנת בין מודלים
חלק מהיחידה למידה מונחית במסלול ה-Machine Learning של Coddy. שיעור 38 מתוך 58.
השוואת מודלים בחלוקה אחת היא הטלת מטבע: אחד מהם עשוי לקבל קבוצת בדיקה מוצלחת במקרה. במקום זאת, תנו לכל מודל את אותם חמישה קיפולים. עבור 150 שטרות, אמיתיים או מזויפים:
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בחרו בממוצע הגבוה ביותר; כשהממוצעים קרובים, בחרו בסטיית התקן הקטנה יותר.
אתגר
בינוניאתר בישול חוזה אילו מבקרים מכינים מתכון שהם פותחים. קוד הפתיחה מדרג שלושה מודלים בחלוקה אחת, והעץ מנצח. בדקו זאת בהגינות; התוכנית קוראת את מספר הקפלים.
- צרו
KFoldעם מספר החלוקות הזה,shuffle=Trueו-random_state=0. - בצעו אימות צולב לכל מודל על הקפלים האלה; הדפיסו את הממוצע ואת סטיית התקן שלו, עם 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)]}")
# כתבו את הקוד שלכם למטה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה למידה מונחית
תרגלו בעצמכם: קומפיילר Python אונליין