צבירי כוכבים
חלק מהיחידה למידה בלתי מונחית במסלול ה-Machine Learning של Coddy. שיעור 50 מתוך 51.
מועדון אסטרונומיה צילם אזור אחד בשמיים. חלק מ־225 הכוכבים שלו שייכים יחד, ונולדו באותו ענן; השאר הם זרים מלפנים או מאחור:
שני המיקומים הם בדקות קשת, יחידת מידה אחת, ולכן eps הוא מרחק בתמונה.
המועדון רוצה לקבל כל אשכול ואת גודלו, בלי כוכבי השדה הבודדים. האם k-means יתאים באותה מידה?
אתגר
קשההתוכנית קוראת את eps; קוד הפתיחה מכין שתי מפות, left ו-right.
- הריצו את DBSCAN עם ערך eps הזה ועם
min_samples=5על שני המיקומים. הדפיסו את האשכולות שלו ואת כוכבי השדה (תווית -1). - התאימו k-means עם מספר אשכולות זהה (
n_init=10,random_state=0). הדפיסו את האשכול הגדול ביותר ואת האשכול הקטן ביותר של כל שיטה. - ב-
left, הציגו את אשכולות DBSCAN, כאשרcluster 1הוא הגדול ביותר, ואז אתfield starsבאפור. ב-right, הציגו את אשכולות k-means, ממוספרים באותו אופן. הציגו את המקרא.
עבור תמונה אחרת ו-eps בערך 2.5:
DBSCAN: 3 clusters and 29 field stars
Biggest cluster: 63 stars by DBSCAN, 77 by k-means
Smallest cluster: 41 stars by DBSCAN, 48 by k-meansוהמפות שלה:
לאחר מכן Coddy מתאר את התוצאה שלך. על איזו שיטה הייתם סומכים כשמדובר בכוכבי השדה?
נסו בעצמכם
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN, KMeans
# שורה אחת לכל כוכב בתמונה: מיקום (דקות קשת) ובהירות (מגניטודה)
field = pd.read_csv("field.csv")
eps = float(input())
# שתי מפות זו לצד זו: DBSCAN משמאל, k-means מימין
fig, axs = plt.subplots(1, 2, figsize=(10, 4))
left = axs[0]
right = axs[1]
left.set_title("DBSCAN")
right.set_title("k-means")
for ax in axs:
ax.set_xlabel("x (arcmin)")
ax.set_ylabel("y (arcmin)")
# כתבו את הקוד שלכם למטה
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה למידה בלתי מונחית
תרגלו בעצמכם: קומפיילר Python אונליין