Menu
CoddyTech

Gromady gwiazd

Część sekcji Uczenie nienadzorowane ścieżki Machine Learning w Coddy. Lekcja 50 z 51.

Klub astronomiczny sfotografował jeden fragment nieba. Niektóre z jego 225 gwiazd należą do siebie — powstały w tym samym obłoku; pozostałe to obce gwiazdy znajdujące się przed nim lub za nim:

225 gwiazd w postaci czarnych kropek na zdjęciu o wymiarach 60 na 40 minut kątowych: okrągłe skupisko po lewej, długi, zakrzywiony strumień wznoszący się po prawej i pojedyncze gwiazdy rozproszone wszędzie

Obie pozycje są wyrażone w minutach kątowych, czyli w tej samej jednostce, więc eps jest odległością na zdjęciu.

Klub chce poznać każdy klaster i jego rozmiar, pomijając samotne gwiazdy na boisku. Czy k-means sprawdziłby się równie dobrze?

challenge icon

Wyzwanie

Trudny

Program odczytuje eps; kod początkowy przygotowuje dwie mapy: left i right.

  1. Uruchom DBSCAN z tym eps i min_samples=5 dla dwóch pozycji. Wypisz jego klastry i gwiazdy pola (etykieta -1).
  2. Dopasuj k-means z taką samą liczbą klastrów (n_init=10, random_state=0). Wypisz największy i najmniejszy klaster każdej metody.
  3. Na left nanieś klastry DBSCAN, przy czym cluster 1 ma być największy, a następnie nanieś field stars na szaro. Na right nanieś klastry k-means, ponumerowane w ten sam sposób. Pokaż legendy.

Dla innego zdjęcia i 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

i jego mapy:

Inne zdjęcie, dwie mapy obok siebie. Po lewej DBSCAN: klaster 1 to okrągłe skupisko w lewym górnym rogu, klaster 2 to okrągłe skupisko w prawym górnym rogu, klaster 3 to krótki pas gwiazd na dole, rozproszone szare gwiazdy pola. Po prawej k-means z 3 klastrami: te same trzy grupy, każda gwiazda pola przypisana do najbliższej z nich

Następnie Coddy opisuje twoje wyniki. Której metodzie zaufasz w przypadku gwiazd pola?

Spróbuj swoich sił

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN, KMeans

# Jeden wiersz na każdą gwiazdę na zdjęciu: pozycja (w minutach kątowych) i jasność (w wielkościach gwiazdowych)
field = pd.read_csv("field.csv")
eps = float(input())

# Dwie mapy obok siebie: DBSCAN po lewej, k-means po prawej
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)")

# Napisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nienadzorowane

Poćwicz samodzielnie: Kompilator Python online