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

حدود القرار

جزء من قسم التعلّم الخاضع للإشراف في رحلة Machine Learning على Coddy. الدرس 8 من 58.

الحدّ الفاصل للقرار هو الموضع الذي تتغير فيه إجابة النموذج. لرؤيته، اسأل النموذج عند كل نقطة في المخطط، المرتب على شكل شبكة:

٨٠ حبة فلفل حار فوق شبكة من النقاط الصغيرة. تُلوَّن كل نقطة بحسب إجابة النموذج عندها: برتقالي للحار على اليسار، وأزرق للمعتدل على اليمين، ويلتقي اللونان على امتداد خط متدرج

تُزاوج np.meshgrid كل قيمة x مع كل قيمة y. حوِّل الأزواج إلى صفوف، وتنبأ بها كلها، ثم أعد تشكيل الإجابات لتطابق شكل الشبكة:

xx, yy = np.meshgrid(np.linspace(2, 16, 100), np.linspace(0.5, 6.5, 100))
grid = np.column_stack([xx.flatten(), yy.flatten()])
zz = model.predict(grid).reshape(xx.shape)
ax.contourf(xx, yy, zz, levels=[-0.5, 0.5, 1.5], colors=["C0", "C1"], alpha=0.3)

تملأ contourf مساحة كل رمز فئة: تضع levels الحدود في منتصف المسافة بين الرموز، وتطابق colors ألوان النقاط. ارسم النقاط بعدها، فوقها.

challenge icon

التحدي

سهل

تفرز آلة بيع العملات حسب الحجم والوزن. يدرّب الكود المبدئي نموذج k-NN على coins.csv (رموز الفئات من 0 إلى 2)؛ وترسم الدالة draw_coins(ax) العملات.

  1. أنشئ شبكة من 100 في 100 نقطة، xx وyy: من 18 إلى 26 مم أفقيًا، ومن 3 إلى 9 غ عموديًا.
  2. تنبّأ بفئة كل نقطة وخزّن النتائج في zz، بحيث يكون شكلها مثل شكل الشبكة.
  3. لوّن الخريطة بالألوان من C0 إلى C2، ثم ارسم العملات واعرض الشكل.

مثل هذا الشكل:

خريطة لفرز العملات: ثلاث مناطق بألوان هادئة، زرقاء لفئة 10c في أسفل اليسار، وبرتقالية لفئة 5c في الوسط، وخضراء لفئة 25c على اليمين، مع العملات فوق كل منطقة ووسيلة إيضاح

عملات بلد آخر، لذا ستكون المناطق مختلفة.

يصف Coddy خريطتك.

جرّب بنفسك

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

# صف واحد لكل عملة قاسها الجهاز: القطر (mm)، الوزن (g)، القيمة بالسنتات
coins = pd.read_csv("coins.csv")
X = np.column_stack([coins["diameter_mm"], coins["weight_g"]])
# رموز الفئات: 0 لـ 10c، و1 لـ 20c، و2 لـ 50c
y = coins["value_c"].map({10: 0, 20: 1, 50: 2})
names = ["10c", "20c", "50c"]
model = KNeighborsClassifier(n_neighbors=5)
model.fit(X, y)


# يرسم العملات على ax، بلون واحد لكل فئة: C0، C1، C2
def draw_coins(ax):
    for code in range(3):
        ax.scatter(X[y == code, 0], X[y == code, 1], s=20, label=names[code])
    ax.legend()


fig, ax = plt.subplots()
ax.set_title("Coin Sorter Map")
ax.set_xlabel("Diameter (mm)")
ax.set_ylabel("Weight (g)")

# اكتب الكود الخاص بك أدناه
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس التعلّم الخاضع للإشراف

تدرّب بنفسك: مترجم Python عبر الإنترنت