אינרציה
חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 6 מתוך 51.
הפרק הזה עוסק בבחירת k. בסופו תבחרו אותו עבור המשלוחים של מאפייה ותמפו את האזורים:
ראשית, ציון. אינרציה מחברת את המרחקים בריבוע של כל נקודה מהמרכז שלה: הערך קטן כשהנקודות צמודות למרכזים שלהן.
KMeans שומר את הערך ב-inertia_. עבור 180 התפוחים:
for k in [1, 2, 3, 4]:
km = KMeans(n_clusters=k, n_init=10, random_state=0)
km.fit(X)
print(k, round(km.inertia_))זה מדפיס:
1 1718
2 752
3 230
4 196יותר מרכזים, חישוקים קצרים יותר: inertia תמיד קטנה ככל ש-k גדל. כשיש מרכז אחד לכל נקודה, היא שווה ל-0, לכן הערך הקטן ביותר אינו הטוב ביותר.
אתגר
קלבית מלאכה לקרמיקה אורז אגרטלים בקופסאות בכמה גדלים. לכל אגרטל נבחר הגודל הקרוב ביותר; אינרציה מודדת עד כמה ההתאמה גרועה. התוכנית קוראת את budget, כלומר את מידת אי־ההתאמה המרבית שבית המלאכה לקרמיקה מקבל.
- נסו k = 1, 2, 3 וכן הלאה: התאימו את KMeans ל־
vasesוהדפיסו את האינרציה של כל k, לאחר עיגול. - עצרו ב־k הראשון שהאינרציה שלו עומדת בתקציב, והדפיסו אותו.
עבור בית מלאכה אחר לקרמיקה:
k = 1, inertia 15120
k = 2, inertia 4811
k = 3, inertia 1290
Box sizes needed: 3נסו בעצמכם
import numpy as np
from sklearn.cluster import KMeans
# אל תשנו את השורות שלהלן
rng = np.random.default_rng(8)
# ארבעה סוגי אגרטלים: גובה ורוחב אופייניים בס"מ, וכמה יש מכל סוג
kinds = [(15, 8, 25), (38, 13, 25), (22, 22, 20), (58, 26, 10)]
parts = []
for h, w, n in kinds:
parts.append(np.column_stack([rng.normal(h, 2.5, n), rng.normal(w, 2, n)]))
# 80 אגרטלים, שורה אחת לכל אגרטל: גובה ורוחב בס"מ
vases = np.round(np.concatenate(parts), 1)
# מידת אי-ההתאמה המרבית, במונחי אינרציה, שבית המלאכה לקדרות מוכן לקבל
budget = int(input())
# כתבו את הקוד שלכם למטה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה למידה בלתי מונחית
תרגלו בעצמכם: קומפיילר Python אונליין