K-Means באופן ידני
חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 3 מתוך 51.
K-means חוזר על סבב של שני שלבים כדי למצוא k אשכולות. שיוך: כל נקודה מצטרפת למרכז הקרוב ביותר אליה. הזזה: כל מרכז עובר לממוצע של הנקודות שלו. שלוש עגלות גלידה:
סבב אחד ב-NumPy, שבו dists היא טבלת מרחקים עם עמודה אחת לכל מרכז:
labels = dists.argmin(axis=1) # שיוך
for c in range(k):
centers[c] = X[labels == c].mean(axis=0) # הזזהargmin(axis=1) מחזירה את העמודה הקטנה ביותר בכל שורה: המרכז הקרוב ביותר אליה. מסבב לסבב המרכזים מתייצבים; כשאף אחד מהם לא זז, אלגוריתם k-means הסתיים.
אתגר
קליצרנית חולצות מתאימה מחדש את המידות S, M ו-L ללקוחות של היום. טבלת המידות הישנה שלה קובעת את המרכזים ההתחלתיים, distances(people, centers) מחזירה את טבלת המרחקים, והתוכנית קוראת כמה סבבים להריץ.
- בכל סבב: שייכו כל אדם, ואז הזיזו כל מרכז.
- הדפיסו את המרכז של כל מידה ואת מספר האנשים ששויכו אליה בסבב האחרון, כמו בדוגמה שלהלן.
עבור יצרנית אחרת:
Rounds run: 2
S: chest 87.3 cm, length 65.1 cm, 14 people
M: chest 95.0 cm, length 68.9 cm, 31 people
L: chest 104.8 cm, length 72.6 cm, 45 peopleנסו בעצמכם
import numpy as np
# אין לשנות את השורות שלהלן
rng = np.random.default_rng(12)
chest = np.concatenate([rng.normal(88, 3, 30), rng.normal(98, 3.5, 35), rng.normal(110, 4, 25)])
length = np.concatenate([rng.normal(66, 1.8, 30), rng.normal(70, 2, 35), rng.normal(75, 2.2, 25)])
# 90 לקוחות, שורה אחת לכל לקוח: היקף חזה ואורך בס"מ
people = np.round(np.column_stack([chest, length]), 1)
# טבלת המידות הישנה קובעת את המרכזים ההתחלתיים: S, M, L
sizes = ["S", "M", "L"]
centers = np.array([[85.0, 64.0], [90.0, 67.0], [96.0, 69.0]])
rounds = int(input())
# טבלת מרחקים: שורה אחת לכל אדם, עמודה אחת לכל מרכז
def distances(X, centers):
table = np.zeros((len(X), len(centers)))
for c in range(len(centers)):
table[:, c] = np.sqrt(((X - centers[c]) ** 2).sum(axis=1))
return table
# כתבו את הקוד שלכם למטה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה למידה בלתי מונחית
1מציאת קבוצות
למידה ללא תוויותמדידת דמיוןK-Means באופן ידניK-Means ב-scikit-learnסיכום: חברי חדר הכושרתרגלו בעצמכם: קומפיילר Python אונליין