Menu
CoddyTech

צבירי כוכבים

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

מועדון אסטרונומיה צילם אזור אחד בשמיים. חלק מ־225 הכוכבים שלו שייכים יחד, ונולדו באותו ענן; השאר הם זרים מלפנים או מאחור:

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

שני המיקומים הם בדקות קשת, יחידת מידה אחת, ולכן eps הוא מרחק בתמונה.

המועדון רוצה לקבל כל אשכול ואת גודלו, בלי כוכבי השדה הבודדים. האם k-means יתאים באותה מידה?

challenge icon

אתגר

קשה

התוכנית קוראת את eps; קוד הפתיחה מכין שתי מפות, left ו-right.

  1. הריצו את DBSCAN עם ערך eps הזה ועם min_samples=5 על שני המיקומים. הדפיסו את האשכולות שלו ואת כוכבי השדה (תווית ‎-1).
  2. התאימו k-means עם מספר אשכולות זהה (n_init=10, random_state=0). הדפיסו את האשכול הגדול ביותר ואת האשכול הקטן ביותר של כל שיטה.
  3. ב-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

והמפות שלה:

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

לאחר מכן 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)")

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

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

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

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