Menu
CoddyTech

Cúmulos de estrellas

Parte de la sección Aprendizaje no supervisado del Journey de Machine Learning de Coddy. Lección 50 de 51.

Un club de astronomía fotografió una zona del cielo. Algunas de sus 225 estrellas pertenecen al mismo grupo, nacidas en la misma nube; las demás son desconocidas que están delante o detrás:

225 estrellas como puntos negros en una foto de 60 por 40 minutos de arco: una multitud redonda a la izquierda, una corriente larga y curva que asciende a la derecha y estrellas solitarias dispersas por todas partes

Ambas posiciones están en minutos de arco, una unidad, así que eps es una distancia en la foto.

El club quiere cada grupo y su tamaño, dejando fuera a las estrellas solitarias del campo. ¿Le iría igual de bien a k-means?

challenge icon

Desafío

Difícil

El programa lee eps; el código inicial configura dos mapas, left y right.

  1. Ejecuta DBSCAN con ese eps y min_samples=5 en las dos posiciones. Imprime sus clústeres y las estrellas de campo (etiqueta -1).
  2. Ajusta k-means con tantos clústeres (n_init=10, random_state=0). Imprime el clúster más grande y el más pequeño de cada método.
  3. En left, representa los clústeres de DBSCAN, con cluster 1 como el más grande, después las field stars en gris. En right, representa los clústeres de k-means, numerados de la misma manera. Muestra las leyendas.

Para otra foto y 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

y sus mapas:

Otra foto, dos mapas uno al lado del otro. A la izquierda, DBSCAN: el clúster 1 es un grupo redondo en la parte superior izquierda, el clúster 2 es un grupo redondo en la parte superior derecha, el clúster 3 es una barra corta de estrellas en la parte inferior, estrellas de campo grises dispersas. A la derecha, k-means con 3 clústeres: los mismos tres grupos, todas las estrellas de campo agrupadas en el más cercano

Después, Coddy describe el tuyo. ¿En qué método confiarías para identificar las estrellas de campo?

Pruébalo tú mismo

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

# Una fila por cada estrella de la foto: posición (minutos de arco) y brillo (magnitud)
field = pd.read_csv("field.csv")
eps = float(input())

# Dos mapas uno al lado del otro: DBSCAN a la izquierda, k-means a la derecha
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)")

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje no supervisado

Practica por tu cuenta: Compilador de Python online