Menu
CoddyTech

K-Means trong scikit-learn

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 4 trên 51.

scikit-learn chạy toàn bộ vòng lặp k-means giúp bạn, ở đây là trên 180 quả táo được chấm điểm về độ ngọt và độ giòn:

180 quả táo, độ ngọt theo trục ngang và độ giòn theo trục dọc, chia thành ba nhóm với một ngôi sao màu đen ở mỗi tâm: ngọt và giòn ở góc trên bên phải, mềm ở phía dưới, chua và giòn ở góc trên bên trái. Một quả táo mới ở phía trên bên phải được xếp vào cụm 0

Huấn luyện chỉ với X, không có y:

from sklearn.cluster import KMeans
km = KMeans(n_clusters=3, n_init=10, random_state=0)
km.fit(X)
print(km.labels_[:8])
print(km.cluster_centers_.round(1))

Lệnh này in ra số cụm của 8 hàng, sau đó in ra một hàng cho mỗi tâm cụm:

[2 0 0 1 2 0 1 1]
[[7.  7.5]
 [6.  3. ]
 [2.9 8.1]]

n_init=10 thử 10 điểm khởi tạo và giữ lại điểm khớp nhất. km.predict([[8.6, 9.2]]) gán quả táo mới cho tâm gần nhất, [0].

labels = km.fit_predict(X) thực hiện cả hai việc cùng lúc: khớp mô hình, sau đó trả về labels_.

Các con số chỉ là tên gọi: với dữ liệu khác, cụm 0 có thể là bất kỳ nhóm nào.

challenge icon

Thử thách

Dễ

Một nhà sinh vật học đã ghi lại 150 lần lặn của một con cá voi lưng gù: thời gian lặn và thời gian nghỉ trên mặt nước sau mỗi lần lặn. Có những kiểu lặn nào? Phần khởi đầu đã thiết lập biểu đồ.

  1. Huấn luyện KMeans trên X: 3 cụm, n_init=10, random_state=0.
  2. Vẽ từng cụm thành một nhóm riêng, gắn nhãn từ cluster 0 đến cluster 2.
  3. Đánh dấu tâm cụm bằng các ngôi sao màu đen, gắn nhãn centers. Thêm chú giải rồi hiển thị biểu đồ.

Ví dụ như biểu đồ này, từ một con cá voi khác:

Biểu đồ phân tán có tiêu đề Whale Dives, số phút lặn trên trục ngang và thời gian nghỉ trên mặt nước trên trục dọc: ba cụm, những lần lặn ngắn với thời gian nghỉ dài ở phía trên bên trái, những lần lặn ngắn với thời gian nghỉ ngắn ở phía dưới, những lần lặn dài ở bên phải, mỗi cụm có một ngôi sao màu đen và có chú giải

Coddy sẽ mô tả biểu đồ của bạn.

Tự làm thử

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# Đừng thay đổi các dòng bên dưới
rng = np.random.default_rng(14)
dive = np.concatenate([rng.normal(4, 1.0, 60), rng.normal(12, 2.0, 50), rng.normal(2.5, 0.7, 40)])
rest = np.concatenate([rng.normal(1.5, 0.5, 60), rng.normal(4, 1.0, 50), rng.normal(8, 1.5, 40)])
# 150 lần lặn của một con cá voi lưng gù: thời gian lặn và thời gian nghỉ trên mặt nước sau mỗi lần lặn, tính bằng phút
X = np.round(np.clip(np.column_stack([dive, rest]), 0.5, None), 1)

fig, ax = plt.subplots()
ax.set_title("Whale Dives")
ax.set_xlabel("Dive (min)")
ax.set_ylabel("Surface rest (min)")

# 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