Menu
CoddyTech

Ammassi stellari

Fa parte della sezione Apprendimento non supervisionato del percorso Machine Learning di Coddy. Lezione 50 di 51.

Un club di astronomia ha fotografato una porzione di cielo. Alcune delle sue 225 stelle appartengono allo stesso gruppo, nate nella stessa nube; le altre sono estranee, davanti o dietro:

225 stelle come punti neri in una foto di 60 per 40 minuti d’arco: un gruppo rotondo a sinistra, un lungo flusso curvo che sale a destra e stelle isolate sparse ovunque

Entrambe le posizioni sono in minuti d’arco, un’unità di misura, quindi eps è una distanza nella foto.

Il club vuole conoscere ogni cluster e le sue dimensioni, lasciando fuori le stelle solitarie del campo. K-means funzionerebbe altrettanto bene?

challenge icon

Sfida

Difficile

Il programma legge eps; il codice iniziale prepara due mappe, left e right.

  1. Esegui DBSCAN con quel valore di eps e min_samples=5 sulle due posizioni. Stampa i cluster e le stelle di campo (etichetta -1).
  2. Adatta k-means con altrettanti cluster (n_init=10, random_state=0). Stampa il cluster più grande e quello più piccolo di ciascun metodo.
  3. Su left, rappresenta i cluster DBSCAN, con cluster 1 come il più grande, poi le field stars in grigio. Su right, rappresenta i cluster k-means, numerati allo stesso modo. Mostra le legende.

Per un'altra foto e 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

e le relative mappe:

Un'altra foto, due mappe affiancate. A sinistra, DBSCAN: cluster 1 è un gruppo rotondo in alto a sinistra, cluster 2 è un gruppo rotondo in alto a destra, cluster 3 è una breve fila di stelle in basso, stelle di campo grigie sparse. A destra, k-means con 3 cluster: gli stessi tre gruppi, tutte le stelle di campo inglobate nel gruppo più vicino

Quindi Coddy descrive il tuo risultato. Di quale metodo ti fideresti per le stelle di campo?

Provalo tu

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

# Una riga per ogni stella nella foto: posizione (minuti d'arco) e luminosità (magnitudine)
field = pd.read_csv("field.csv")
eps = float(input())

# Due mappe affiancate: DBSCAN a sinistra, k-means a destra
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)")

# Scrivi il tuo codice qui sotto
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento non supervisionato

Esercitati da solo: Compilatore Python online