Menu
CoddyTech

כש־K-Means נכשל

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

K-means מדמיין כל אשכול ככתם עגול סביב המרכז שלו. חיצים יוצרים לוח מטרה עם טבעת מסביבו, ו-k-means חוצה אותו לשניים:

שני תרשימים של 140 חיצים. משמאל, המציאות: קבוצת בולזאיי צפופה בתוך טבעת רחבה. מימין, k-means עם k = 2: גבול ישר ומקווקו חוצה את הלוח, הטבעת והבולזאיי לשני חצאים, שמאלי וימני, ובכל אחד מהם צלב במרכז

כל נקודה מצטרפת למרכז הקרוב ביותר אליה, ולכן הגבול בין שני אשכולות הוא קו ישר באמצע הדרך בין המרכזים. שום קו ישר אינו מפריד בין טבעת לבין המרכז שלה.

קבוצות ארוכות, מעוקלות או לא אחידות במיוחד משבשות את k-means באותו אופן. הוא עדיין מחזיר אשכולות, לכן תמיד התבוננו בתרשים.

challenge icon

אתגר

בינוני

רחפן זיהה 200 כלבי ים על שתי רצועות חול מעוקלות. קוד הפתיחה מצייר את האמת בחלונית left.

  1. קבצו את כלבי הים באמצעות k-means, כאשר k = 2.
  2. בחלונית right, הציגו כל אשכול בתרשים פיזור, עם התווית cluster 0 או cluster 1.
  3. סמנו את המרכזים בסמני "X" שחורים, עם התווית centers. הוסיפו מקרא, ואז הציגו את התרשים.

Coddy מתאר את התרשים שלכם וסופר כמה כלבי ים נשארו עם רצועת החול שלהם. כך זה נראה עבור שני נחילים:

שני תרשימים. משמאל, האמת: נחיל גדול ומפוזר ונחיל קטן וצפוף מימינו. מימין, k-means עם k = 2: האשכול של הנחיל הקטן כולל גם את הקצה הימני של הנחיל הגדול, ושני צלבים שחורים מסמנים את המרכזים

נסו בעצמכם

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")

# כתבו את הקוד שלכם למטה
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה למידה בלתי מונחית

תרגלו בעצמכם: קומפיילר Python אונליין