Menu
CoddyTech

별 무리

Coddy Machine Learning 여정의 비지도 학습 섹션에 포함된 레슨. 51개 중 50번째.

한 천문학 동아리가 하늘의 한 구역을 촬영했습니다. 별 225개 중 일부는 같은 구름에서 태어나 서로 한 무리를 이루고, 나머지는 앞이나 뒤에 있는 낯선 별들입니다:

60×40각분 사진에 검은 점으로 표시된 별 225개: 왼쪽에는 둥근 별 무리가 있고, 오른쪽에는 위로 휘어 올라가는 긴 별의 흐름이 있으며, 외로운 별들이 사방에 흩어져 있음

두 위치는 모두 단위가 1인 각분 단위이므로, eps는 사진상의 거리입니다.

동아리는 혼자 있는 필드 스타들을 제외하고 각 클러스터와 그 크기를 알고 싶어 합니다. k-means도 잘 해낼까요?

challenge icon

챌린지

어려움

프로그램은 eps를 읽습니다. 시작 코드에서는 두 개의 맵인 left와 right를 설정합니다.

  1. 두 위치에 해당 eps와 min_samples=5를 사용해 DBSCAN을 실행합니다. 클러스터와 필드 별(label -1)을 출력합니다.
  2. 클러스터 수를 동일하게 하여 k-means를 학습합니다(n_init=10, random_state=0). 각 방법에서 가장 큰 클러스터와 가장 작은 클러스터를 출력합니다.
  3. left에는 DBSCAN 클러스터를 그립니다. 가장 큰 클러스터를 cluster 1로 하고, 이어서 field stars를 회색으로 표시합니다. right에는 같은 방식으로 번호를 매긴 k-means 클러스터를 그립니다. 범례도 표시합니다.

다른 사진과 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

그리고 그 맵은 다음과 같습니다.

다른 사진, 나란히 놓인 두 개의 맵. 왼쪽 DBSCAN: cluster 1은 왼쪽 위의 둥근 별 무리, cluster 2는 오른쪽 위의 둥근 별 무리, cluster 3은 아래쪽의 짧은 별 막대이며, 회색 필드 별은 흩어져 있음. 오른쪽 k-means는 3개의 클러스터: 같은 세 무리이며, 모든 필드 별이 가장 가까운 클러스터에 포함됨

이제 Coddy가 여러분의 결과를 설명합니다. 필드 별을 고려할 때 어느 방법을 더 신뢰하시겠어요?

직접 해보기

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

# 사진 속 별 하나당 한 행: 위치(각분)와 밝기(등급)
field = pd.read_csv("field.csv")
eps = float(input())

# 나란히 놓인 두 지도: 왼쪽은 DBSCAN, 오른쪽은 k-means
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)")

# 아래에 코드를 작성하세요
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

비지도 학습의 모든 레슨

직접 연습해 보세요: 온라인 Python 컴파일러