Menu
CoddyTech

Cụm sao

Thuộc phần Học không giám sát trong hành trình Machine Learning của Coddy. Bài học 50 trên 51.

Một câu lạc bộ thiên văn đã chụp ảnh một vùng trời. Một số ngôi sao trong số 225 ngôi sao thuộc cùng một nhóm, được sinh ra trong cùng một đám mây; số còn lại là những ngôi sao xa lạ ở phía trước hoặc phía sau:

225 ngôi sao dưới dạng các chấm đen trên ảnh có kích thước 60 x 40 phút cung: một đám đông hình tròn ở bên trái, một dải cong dài vươn lên ở bên phải và các ngôi sao đơn lẻ rải rác khắp nơi

Cả hai vị trí đều tính bằng phút cung, cùng một đơn vị, nên eps là khoảng cách trên ảnh.

Câu lạc bộ muốn biết từng cụm và kích thước của chúng, không tính các ngôi sao đơn lẻ ngoài đồng. Liệu k-means có làm tốt như vậy không?

challenge icon

Thử thách

Khó

Chương trình đọc eps; phần code khởi đầu thiết lập hai bản đồ, left và right.

  1. Chạy DBSCAN với eps đó và min_samples=5 trên hai vị trí. In ra các cụm và các ngôi sao ngoài vùng (nhãn -1).
  2. Khớp k-means với số cụm tương ứng (n_init=10, random_state=0). In ra cụm lớn nhất và nhỏ nhất của mỗi phương pháp.
  3. Trên left, vẽ các cụm DBSCAN, với cluster 1 là cụm lớn nhất, sau đó vẽ các field stars màu xám. Trên right, vẽ các cụm k-means, đánh số theo cùng cách. Hiển thị chú giải.

Với một bức ảnh khác và eps bằng 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

và các bản đồ của ảnh đó:

Một bức ảnh khác, hai bản đồ đặt cạnh nhau. Bên trái, DBSCAN: cụm 1 là một nhóm tròn ở phía trên bên trái, cụm 2 là một nhóm tròn ở phía trên bên phải, cụm 3 là một dải sao ngắn ở phía dưới, các ngôi sao ngoài vùng màu xám nằm rải rác. Bên phải, k-means với 3 cụm: cùng ba nhóm đó, mọi ngôi sao ngoài vùng đều bị gộp vào cụm gần nhất

Sau đó Coddy mô tả kết quả của bạn. Bạn tin tưởng phương pháp nào hơn khi xử lý các ngôi sao ngoài vùng?

Tự làm thử

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

# Mỗi ngôi sao trong ảnh chiếm một hàng: vị trí (phút cung) và độ sáng (cấp sao)
field = pd.read_csv("field.csv")
eps = float(input())

# Hai biểu đồ đặt cạnh nhau: DBSCAN bên trái, k-means bên phải
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)")

# Viết code của bạn bên dưới
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Học không giám sát

Tự luyện tập: Trình biên dịch Python online