Menu
CoddyTech

Amas d’étoiles

Fait partie de la section Apprentissage non supervisé du Journey Machine Learning de Coddy. Leçon 50 sur 51.

Un club d’astronomie a photographié une partie du ciel. Certaines de ses 225 étoiles sont liées, nées dans le même nuage ; les autres sont des inconnues, devant ou derrière :

225 étoiles représentées par des points noirs sur une photo de 60 sur 40 minutes d’arc : un groupe arrondi à gauche, un long courant courbe qui s’élève à droite, et des étoiles isolées éparpillées partout

Les deux positions sont en minutes d’arc, une unité, donc eps est une distance sur la photo.

Le club veut connaître chaque cluster et sa taille, en laissant de côté les étoiles isolées du champ. Est-ce que k-means ferait aussi bien ?

challenge icon

Défi

Difficile

Le programme lit eps ; le code de départ configure deux cartes, left et right.

  1. Lance DBSCAN avec cet eps et min_samples=5 sur les deux positions. Affiche ses amas et les étoiles du champ (étiquette -1).
  2. Ajuste k-means avec autant d’amas (n_init=10, random_state=0). Affiche l’amas le plus grand et le plus petit de chaque méthode.
  3. Sur left, représente les amas de DBSCAN, cluster 1 étant le plus grand, puis les field stars en gris. Sur right, représente les amas de k-means, numérotés de la même façon. Affiche les légendes.

Pour une autre photo et 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

et ses cartes :

Une autre photo, deux cartes côte à côte. À gauche, DBSCAN : l’amas 1 est un groupe rond en haut à gauche, l’amas 2 un groupe rond en haut à droite, l’amas 3 une courte barre d’étoiles en bas, et les étoiles du champ grises sont éparpillées. À droite, k-means avec 3 amas : les trois mêmes groupes, toutes les étoiles du champ étant absorbées par le groupe le plus proche

Ensuite, Coddy décrit le tien. À quelle méthode ferais-tu confiance pour traiter les étoiles du champ ?

Essayez vous-même

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

# Une ligne par étoile sur la photo : position (minutes d’arc) et luminosité (magnitude)
field = pd.read_csv("field.csv")
eps = float(input())

# Deux cartes côte à côte : DBSCAN à gauche, k-means à droite
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)")

# Écrivez votre code ci-dessous
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Apprentissage non supervisé

Entraînez-vous par vous-même : Compilateur Python en ligne