Menu
CoddyTech

Sternhaufen

Teil des Abschnitts Unüberwachtes Lernen der Machine Learning-Journey von Coddy. Lektion 50 von 51.

Ein Astronomieclub fotografierte einen Himmelsausschnitt. Einige der 225 Sterne gehören zusammen und sind in derselben Wolke entstanden; die übrigen sind Fremde davor oder dahinter:

225 Sterne als schwarze Punkte auf einem 60 mal 40 Bogenminuten großen Foto: eine runde Gruppe links, ein langer gebogener Strom, der rechts ansteigt, und überall verstreute einzelne Sterne

Beide Positionen sind in Bogenminuten angegeben, also in derselben Einheit, daher ist eps eine Entfernung auf dem Foto.

Der Verein möchte jeden Cluster und seine Größe kennen, wobei die einzelnen Feldstars ausgeschlossen werden. Würde k-Means genauso gut funktionieren?

challenge icon

Aufgabe

Schwer

Das Programm liest eps; die Vorlage richtet zwei Karten ein: left und right.

  1. Führe DBSCAN mit diesem eps und min_samples=5 auf den beiden Positionen aus. Gib seine Cluster und die Feldsterne (Label -1) aus.
  2. Führe k-means mit derselben Anzahl an Clustern aus (n_init=10, random_state=0). Gib das größte und das kleinste Cluster jeder Methode aus.
  3. Zeige auf left die DBSCAN-Cluster, wobei cluster 1 das größte ist, und danach die field stars in Grau. Zeige auf right die k-means-Cluster, in derselben Reihenfolge nummeriert. Zeige die Legenden an.

Für ein anderes Foto und 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

und seine Karten:

Ein anderes Foto, zwei Karten nebeneinander. Links, DBSCAN: Cluster 1 eine runde Gruppe oben links, Cluster 2 eine runde Gruppe oben rechts, Cluster 3 ein kurzer Balken aus Sternen unten, verstreute graue Feldsterne. Rechts, k-means mit 3 Clustern: dieselben drei Gruppen, wobei jeder Feldstern dem nächstgelegenen Cluster zugeordnet ist

Dann beschreibt Coddy deine Ergebnisse. Welcher Methode würdest du die Feldsterne anvertrauen?

Probier es selbst

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

# Eine Zeile pro Stern auf dem Foto: Position (Bogenminuten) und Helligkeit (Magnitude)
field = pd.read_csv("field.csv")
eps = float(input())

# Zwei Karten nebeneinander: DBSCAN links, k-means rechts
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)")

# Schreibe deinen Code unten
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Unüberwachtes Lernen

Übe selbstständig: Online-Python-Compiler