Menu
CoddyTech
flag Ar iconالعربيةdown icon

عناقيد النجوم

جزء من قسم التعلّم غير الخاضع للإشراف في رحلة 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: cluster 1 حشد دائري في أعلى اليسار، وcluster 2 حشد دائري في أعلى اليمين، وcluster 3 صف قصير من النجوم في الأسفل، مع نجوم الحقل الرمادية متناثرة. على اليمين، 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)")

# اكتب الكود الخاص بك أدناه
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس التعلّم غير الخاضع للإشراف

تدرّب بنفسك: مترجم Python عبر الإنترنت