כש־K-Means נכשל
חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 14 מתוך 51.
K-means מדמיין כל אשכול ככתם עגול סביב המרכז שלו. חיצים יוצרים לוח מטרה עם טבעת מסביבו, ו-k-means חוצה אותו לשניים:
כל נקודה מצטרפת למרכז הקרוב ביותר אליה, ולכן הגבול בין שני אשכולות הוא קו ישר באמצע הדרך בין המרכזים. שום קו ישר אינו מפריד בין טבעת לבין המרכז שלה.
קבוצות ארוכות, מעוקלות או לא אחידות במיוחד משבשות את k-means באותו אופן. הוא עדיין מחזיר אשכולות, לכן תמיד התבוננו בתרשים.
אתגר
בינונירחפן זיהה 200 כלבי ים על שתי רצועות חול מעוקלות. קוד הפתיחה מצייר את האמת בחלונית left.
- קבצו את כלבי הים באמצעות k-means, כאשר k = 2.
- בחלונית
right, הציגו כל אשכול בתרשים פיזור, עם התוויתcluster 0אוcluster 1. - סמנו את המרכזים בסמני
"X"שחורים, עם התוויתcenters. הוסיפו מקרא, ואז הציגו את התרשים.
Coddy מתאר את התרשים שלכם וסופר כמה כלבי ים נשארו עם רצועת החול שלהם. כך זה נראה עבור שני נחילים:
נסו בעצמכם
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.cluster import KMeans
# 200 כלבי ים נחים על שני שרטוני חול מעוקלים, כפי שהם נראים מרחפן (מיקומים ביחידות של 100 m)
X, sandbar = make_moons(n_samples=200, noise=0.07, random_state=4)
# מצייר את שרטוני החול האמיתיים על ax
def draw_truth(ax):
ax.scatter(X[sandbar == 0, 0], X[sandbar == 0, 1], s=12, label="north bar")
ax.scatter(X[sandbar == 1, 0], X[sandbar == 1, 1], s=12, label="south bar")
ax.set_title("The truth")
ax.legend()
fig, (left, right) = plt.subplots(1, 2, figsize=(9, 4))
draw_truth(left)
right.set_title("K-means, k = 2")
# כתבו את הקוד שלכם למטה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה למידה בלתי מונחית
3הבנת אשכולות
אפיון אשכולותמרכזים ביחידות ממשיותאשכולות לעומת תוויות ידועותכש־K-Means נכשלסיכום: טעימת תהתרגלו בעצמכם: קומפיילר Python אונליין