Menu
CoddyTech
flag Ar iconالعربيةdown icon

اختيار 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 عبر الإنترنت