별 무리
Coddy Machine Learning 여정의 비지도 학습 섹션에 포함된 레슨. 51개 중 50번째.
한 천문학 동아리가 하늘의 한 구역을 촬영했습니다. 별 225개 중 일부는 같은 구름에서 태어나 서로 한 무리를 이루고, 나머지는 앞이나 뒤에 있는 낯선 별들입니다:
두 위치는 모두 단위가 1인 각분 단위이므로, eps는 사진상의 거리입니다.
동아리는 혼자 있는 필드 스타들을 제외하고 각 클러스터와 그 크기를 알고 싶어 합니다. k-means도 잘 해낼까요?
챌린지
어려움프로그램은 eps를 읽습니다. 시작 코드에서는 두 개의 맵인 left와 right를 설정합니다.
- 두 위치에 해당 eps와
min_samples=5를 사용해 DBSCAN을 실행합니다. 클러스터와 필드 별(label -1)을 출력합니다. - 클러스터 수를 동일하게 하여 k-means를 학습합니다(
n_init=10,random_state=0). 각 방법에서 가장 큰 클러스터와 가장 작은 클러스터를 출력합니다. 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그리고 그 맵은 다음과 같습니다.
이제 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)")
# 아래에 코드를 작성하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
비지도 학습의 모든 레슨
직접 연습해 보세요: 온라인 Python 컴파일러