שיטת המרפק
חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 7 מתוך 51.
שרטטו את האינרציה כפונקציה של k. כל עוד כל מרכז חדש מפצל קבוצה אמיתית, האינרציה צונחת; אחר כך היא מתיישרת. נקודת הכיפוף, המרפק, היא ערך k טוב:
כלל אצבע: עוצרים כשהוספת מרכז נוסף מפחיתה את inertia_ בפחות מרבע. החיתוכים של התפוחים: 56%, אחר כך 69%, ואז רק 15%. לכן k = 3:
ax.plot(ks, inertias, marker="o")
ax.axvline(3, linestyle="--")עקומה מתונה ללא כיפוף פירושה שאין קבוצות ברורות. בשיעור הבא מצטרף שופט שני.
אתגר
קלאפליקציה לצמחים ממיינת צמחי בית לתוכניות טיפול לפי הצורך שלהם באור ובמים. קוד הפתיחה כולל ערכי אינרציה עבור k from 1 to 8, תרשים ו-cutoff.
- מתחילים ב-k = 1 ומתקדמים כלפי מעלה; עוצרים במקום שבו ה-k הבא מפחית את האינרציה בפחות מ-
cutoff. מדפיסים את אותו k. - מציגים בגרף את האינרציה לפי k עם נקודות, קו אנכי מקווקו ב-k שבחרתם, ומציגים את הגרף.
עבור אפליקציה אחרת, cutoff 0.25:
Care plans: 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")
# כתבו את הקוד שלכם למטה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה למידה בלתי מונחית
תרגלו בעצמכם: קומפיילר Python אונליין