Menu
CoddyTech

שיטת המרפק

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

שרטטו את האינרציה כפונקציה של k. כל עוד כל מרכז חדש מפצל קבוצה אמיתית, האינרציה צונחת; אחר כך היא מתיישרת. נקודת הכיפוף, המרפק, היא ערך k טוב:

שתי עקומות אינרציה עבור 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 הבא מפחית את האינרציה בפחות מ-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 אונליין