Menu
CoddyTech

בחירת k

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

איזה ערך של k מתאים לצ'ילי? נסה כמה ערכים ותן ציון לכל מודל פעמיים: על שורות שהוא למד, דיוק האימון, ועל שורות מוסתרות, דיוק הבדיקה.

דיוק לפי k עבור הצ'ילי, שני קווים. דיוק האימון מתחיל ב-1.0 עבור k = 1 ויורד. דיוק הבדיקה מתחיל ב-0.8, מגיע לשיא של 0.92 עבור k = 13, ושני הקווים יורדים לכ-0.7 מעבר ל-k = 80

כאשר k = 1, כל פלפל צ'ילי הוא השכן הקרוב ביותר של עצמו, ולכן המודל משנן: הוא מושלם בשורות שלו, אך פחות טוב בשורות חדשות. ערך k גדול מאוד מטשטש את הקבוצות.

ks = range(1, 120, 6)
train_acc = []
test_acc = []
for k in ks:
    model = KNeighborsClassifier(n_neighbors=k)
    model.fit(X_train, y_train)
    train_acc.append(model.score(X_train, y_train))
    test_acc.append(model.score(X_test, y_test))

בחרו את k שבו הדיוק במבחן מגיע לשיא, לעת עתה: פרק 7 מציג שופט הוגן יותר.

challenge icon

אתגר

קל

מועדון כדורגל מתעד בעיטות לשער ב־shots.csv: מרחק, זווית, ו־goal או miss. איזה k מנבא בצורה הטובה ביותר? קוד הפתיחה מחלק אותן, מציג את ks ומתייג את התרשים.

  1. עבור כל k, אמנו מודל ושמרו את דיוק האימון והבדיקה שלו.
  2. הדפיסו את k הטוב ביותר לפי דיוק הבדיקה, כמו למטה.
  3. ציירו את שתי הרשימות מול ks, עם התוויות train ו־test, ועם מקרא.

עבור מועדון אחר:

Best k: 9 (test accuracy 0.783)

הבעיטות לשער של מועדון אחר: דיוק לפי k מ־1 עד 41. דיוק האימון יורד מ־0.99 ב־k = 1 לכ־0.71. דיוק הבדיקה עולה מ־0.68 לשיא של 0.78 ב־k = 9, ואז יורד ל־0.7

לאחר מכן Coddy מתאר את התרשים שלך.

נסו בעצמכם

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

# שורה אחת לכל בעיטה: מרחק מהשער (m), זווית ביחס לפתח השער (מעלות), שער או החטאה
shots = pd.read_csv("shots.csv")
X = shots[["distance_m", "angle_deg"]]
y = shots["result"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
ks = range(1, 42, 4)  # k = 1, 5, 9, ..., 41

fig, ax = plt.subplots()
ax.set_title("Shots: Accuracy by k")
ax.set_xlabel("k (neighbors)")
ax.set_ylabel("Accuracy")

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

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

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

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