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

طريقة الكوع

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

ارسم inertia مقابل k. عندما يقسم كل مركز جديد مجموعةً حقيقية، تهوي inertia؛ ثم يصبح المنحنى أكثر استواءً. ويُعدّ الانحناء، أي الكوع، قيمة جيدة لـ k:

منحنيان لـ inertia مقابل k from 1 to 8. على اليسار، التفاح: هبوط حاد حتى k = 3، ثم يصبح المنحنى شبه مسطح، مع خط متقطع عند 3. على اليمين، نقاط بلا مجموعات: منحنى سلس بلا انحناء

قاعدة عامة: توقّف عندما يؤدي مركز إضافي إلى خفض inertia_ بنسبة أقل من الربع. تخفيضات مجموعة التفاح: 56%، ثم 69%، ثم 15% فقط. إذن k = 3:

ax.plot(ks, inertias, marker="o")
ax.axvline(3, linestyle="--")

المنحنى اللطيف الذي لا يتضمن أي انحناء لا يشير إلى مجموعات واضحة. يقدّم الدرس التالي حكمًا ثانيًا.

challenge icon

التحدي

سهل

يصنّف تطبيق للنباتات المنزلية النباتاتَ إلى خطط رعاية وفق احتياجاتها من الضوء والماء. يحتوي القالب على قيم القصور الذاتي لـ k from 1 to 8، ومخطط، وcutoff.

  1. بدءًا من k = 1 وتصاعديًا، توقّف عند قيمة k التي يخفض فيها الانتقال إلى قيمة k التالية القصورَ الذاتي بأقل من cutoff. اطبع قيمة k هذه.
  2. ارسم القصور الذاتي مقابل k باستخدام نقاط، وأضف خطًا عموديًا متقطعًا عند قيمة k التي اخترتها، ثم اعرض المخطط.

في تطبيق آخر، قيمة cutoff هي 0.25:

Care plans: 3

منحنى القصور الذاتي بعنوان Elbow: Care Plans لـ k from 1 to 8، مع نقطة عند كل قيمة k: انخفاض حاد حتى k = 3، ثم يصبح المنحنى شبه مسطح، وخط عمودي متقطع عند 3

بعد ذلك، يصف Coddy مخططك.

جرّب بنفسك

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# لا تغيّر الأسطر أدناه
rng = np.random.default_rng(17)
# أربعة أنواع من النباتات: احتياج كل نوع المعتاد إلى الضوء والماء، وعدد النباتات منه
kinds = [(8.5, 2, 35), (2.5, 7.5, 30), (5, 5, 30), (8, 8, 25)]
parts = []
for l, w, n in kinds:
    parts.append(np.column_stack([rng.normal(l, 0.8, n), rng.normal(w, 0.8, n)]))
# 120 نبتة منزلية، صف واحد لكل منها: احتياجها إلى الضوء والماء، بتقييم من 1 إلى 10
plants = np.clip(np.round(np.concatenate(parts), 1), 1, 10)

# قيمة Inertia لكل k من 1 إلى 8، مأخوذة من Inertia
ks = list(range(1, 9))
inertias = []
for k in ks:
    km = KMeans(n_clusters=k, n_init=10, random_state=0)
    km.fit(plants)
    inertias.append(km.inertia_)

cutoff = float(input())
fig, ax = plt.subplots()
ax.set_title("Elbow: Care Plans")
ax.set_xlabel("k")
ax.set_ylabel("Inertia")

# اكتب شيفرتك أدناه
quiz iconاختبر نفسك

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

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

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