Menu
CoddyTech

Aglomerados de estrelas

Parte da seção Aprendizado não supervisionado do Journey de Machine Learning da Coddy. Lição 50 de 51.

Um clube de astronomia fotografou uma região do céu. Algumas de suas 225 estrelas pertencem ao mesmo grupo, tendo nascido na mesma nuvem; as demais são desconhecidas, à frente ou atrás:

225 estrelas como pontos pretos em uma foto de 60 por 40 minutos de arco: um grupo arredondado à esquerda, um longo fluxo curvo que sobe à direita e estrelas isoladas espalhadas por toda parte

Ambas as posições estão em minutos de arco, uma unidade, então eps é uma distância na foto.

O clube quer cada cluster e seu tamanho, deixando de fora as estrelas que estão sozinhas no campo. Será que o k-means também funcionaria?

challenge icon

Desafio

Difícil

O programa lê eps; o código inicial configura dois mapas, left e right.

  1. Execute o DBSCAN com esse eps e min_samples=5 nas duas posições. Imprima seus clusters e as estrelas de campo (rótulo -1).
  2. Ajuste o k-means com a mesma quantidade de clusters (n_init=10, random_state=0). Imprima o maior e o menor cluster de cada método.
  3. Em left, represente os clusters do DBSCAN, com cluster 1 sendo o maior, e depois as field stars em cinza. Em right, represente os clusters do k-means, numerados da mesma forma. Mostre as legendas.

Para outra 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 seus mapas:

Outra foto, dois mapas lado a lado. À esquerda, DBSCAN: o cluster 1 é um grupo arredondado no alto à esquerda, o cluster 2 é um grupo arredondado no alto à direita, o cluster 3 é uma fileira curta de estrelas na parte inferior, estrelas de campo cinzas espalhadas. À direita, k-means com 3 clusters: os mesmos três grupos, todas as estrelas de campo incorporadas ao grupo mais próximo

Então o Coddy descreve o seu. Em qual método você confiaria para lidar com as estrelas de campo?

Experimente você mesmo

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

# Uma linha por estrela na foto: posição (minutos de arco) e brilho (magnitude)
field = pd.read_csv("field.csv")
eps = float(input())

# Dois mapas lado a lado: DBSCAN à esquerda, k-means à direita
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)")

# Escreva seu código abaixo
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Aprendizado não supervisionado

Pratique por conta própria: Compilador de Python online