اختيار k
جزء من قسم التعلّم الخاضع للإشراف في رحلة Machine Learning على Coddy. الدرس 7 من 58.
ما قيمة k المناسبة للفلفل الحار؟ جرّب عدة قيم وقيّم كل نموذج مرتين: على الصفوف التي تدرب عليها، دقة التدريب، وعلى الصفوف المخفية، دقة الاختبار.
عند 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 حكمًا أكثر إنصافًا.
التحدي
سهليسجّل نادٍ لكرة القدم التسديدات في shots.csv: المسافة والزاوية وgoal أو miss. أي قيمة لـ k تتنبأ على أفضل نحو؟ يقسم البرنامج المبدئي البيانات، ويسرد قيم ks، ويضع تسميات على المخطط.
- لكل قيمة k، درّب نموذجًا واحتفظ بدقتيه على بيانات التدريب والاختبار.
- اطبع أفضل قيمة k بحسب دقة الاختبار، كما في المثال أدناه.
- ارسم القائمتين مقابل
ks، مع تسميتهماtrainوtest، وأضف وسيلة إيضاح.
لنادٍ آخر:
Best k: 9 (test accuracy 0.783)بعد ذلك، يصف 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")
# اكتب الكود الخاص بك أدناه
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس التعلّم الخاضع للإشراف
تدرّب بنفسك: مترجم Python عبر الإنترنت