Menu
CoddyTech

K-Means ב-scikit-learn

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

scikit-learn מריץ עבורך את כל לולאת k-means, כאן על 180 תפוחים שקיבלו ציונים לפי מתיקות ופריכות:

180 תפוחים, מתיקות על הציר האופקי ופריכות על הציר האנכי, בשלוש קבוצות עם כוכב שחור בכל מרכז: מתוקים ופריכים בפינה הימנית העליונה, רכים בתחתית, חמוצים ופריכים בפינה השמאלית העליונה. תפוח חדש בפינה הימנית העליונה מצטרף לאשכול 0

התאמה באמצעות X בלבד, ללא y:

from sklearn.cluster import KMeans
km = KMeans(n_clusters=3, n_init=10, random_state=0)
km.fit(X)
print(km.labels_[:8])
print(km.cluster_centers_.round(1))

הדבר מדפיס את מספרי האשכולות של 8 שורות, ולאחר מכן שורה אחת לכל מרכז:

[2 0 0 1 2 0 1 1]
[[7.  7.5]
 [6.  3. ]
 [2.9 8.1]]

n_init=10 מנסה 10 אתחולים ושומר את האשכול ההדוק ביותר. km.predict([[8.6, 9.2]]) משייך את התפוח החדש למרכז הקרוב ביותר, [0].

labels = km.fit_predict(X) עושה את שני הדברים בבת אחת: מתאימה, ואז מחזירה את labels_.

המספרים הם רק שמות: בנתונים אחרים, אשכול 0 יכול להיות כל קבוצה.

challenge icon

אתגר

קל

ביולוג תיעד 150 צלילות של לווייתן גדול־סנפיר אחד: משך הצלילה והמנוחה על פני המים שאחריה. האם יש סוגים שונים של צלילות? קוד הפתיחה מכין את התרשים.

  1. התאם את KMeans ל־X: 3 אשכולות, n_init=10, random_state=0.
  2. הצג כל אשכול כקבוצה נפרדת בתרשים פיזור, עם תוויות מ־cluster 0 עד cluster 2.
  3. סמן את המרכזים בכוכבים שחורים, עם התווית centers. הוסף מקרא והצג את התרשים.

כך זה נראה, אצל לווייתן אחר:

תרשים פיזור שכותרתו Whale Dives, דקות הצלילה מוצגות לרוחב והמנוחה על פני המים לגובה: שלושה אשכולות, צלילות קצרות עם מנוחות ארוכות בפינה השמאלית העליונה, צלילות קצרות עם מנוחות קצרות בתחתית, צלילות ארוכות מימין, כוכב שחור בכל אשכול ומקרא

Coddy מתאר את התרשים שלך.

נסו בעצמכם

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# אין לשנות את השורות שלהלן
rng = np.random.default_rng(14)
dive = np.concatenate([rng.normal(4, 1.0, 60), rng.normal(12, 2.0, 50), rng.normal(2.5, 0.7, 40)])
rest = np.concatenate([rng.normal(1.5, 0.5, 60), rng.normal(4, 1.0, 50), rng.normal(8, 1.5, 40)])
# 150 צלילות של לווייתן גדול־סנפיר אחד: משך הצלילה ומשך המנוחה על פני המים אחריה, בדקות
X = np.round(np.clip(np.column_stack([dive, rest]), 0.5, None), 1)

fig, ax = plt.subplots()
ax.set_title("Whale Dives")
ax.set_xlabel("Dive (min)")
ax.set_ylabel("Surface rest (min)")

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

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

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

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