Tự thực hiện K-Means
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 3 trên 51.
K-means lặp lại một vòng gồm hai bước để tìm k cụm. Gán: mỗi điểm thuộc về tâm gần nhất. Di chuyển: mỗi tâm chuyển đến vị trí trung bình của các điểm thuộc về nó. Ba xe bán kem:
Một lượt trong NumPy, trong đó dists là bảng khoảng cách với một cột cho mỗi tâm:
labels = dists.argmin(axis=1) # Gán nhãn
for c in range(k):
centers[c] = X[labels == c].mean(axis=0) # Di chuyển tâm cụmargmin(axis=1) cho biết cột có giá trị nhỏ nhất trong mỗi hàng: tâm gần nhất của hàng đó. Qua từng vòng, các tâm dần ổn định; khi không tâm nào di chuyển, thuật toán k-means hoàn tất.
Thử thách
DễMột nhà sản xuất áo phông điều chỉnh lại các cỡ S, M và L cho khách hàng hiện nay. Bảng cỡ cũ dùng để khởi tạo các tâm, distances(people, centers) trả về bảng khoảng cách, và chương trình đọc số vòng lặp cần chạy.
- Mỗi vòng lặp: gán cỡ cho từng người, sau đó di chuyển từng tâm.
- In tâm của từng cỡ và số người được gán vào cỡ đó ở vòng lặp cuối, như bên dưới.
Với một nhà sản xuất khác:
Rounds run: 2
S: chest 87.3 cm, length 65.1 cm, 14 people
M: chest 95.0 cm, length 68.9 cm, 31 people
L: chest 104.8 cm, length 72.6 cm, 45 peopleTự làm thử
import numpy as np
# Đừng thay đổi các dòng bên dưới
rng = np.random.default_rng(12)
chest = np.concatenate([rng.normal(88, 3, 30), rng.normal(98, 3.5, 35), rng.normal(110, 4, 25)])
length = np.concatenate([rng.normal(66, 1.8, 30), rng.normal(70, 2, 35), rng.normal(75, 2.2, 25)])
# 90 khách hàng, mỗi người một hàng: số đo vòng ngực và chiều dài tính bằng cm
people = np.round(np.column_stack([chest, length]), 1)
# Bảng kích cỡ cũ xác định các tâm ban đầu: S, M, L
sizes = ["S", "M", "L"]
centers = np.array([[85.0, 64.0], [90.0, 67.0], [96.0, 69.0]])
rounds = int(input())
# Bảng khoảng cách: mỗi người một hàng, mỗi tâm một cột
def distances(X, centers):
table = np.zeros((len(X), len(centers)))
for c in range(len(centers)):
table[:, c] = np.sqrt(((X - centers[c]) ** 2).sum(axis=1))
return table
# Viết code bên dưới
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
1Tìm các nhóm
Học không cần nhãnĐo độ tương đồngTự thực hiện K-MeansK-Means trong scikit-learnÔn tập: thành viên phòng gym7PCA trong thực tế
Quan sát 64 chiềuCác thành phần như mẫu hìnhNén và dựng lạiPCA trước khi xây dựng mô hìnhÔn tập: máy quét khuôn mặt10Dự án: Khám phá chữ số
Quan sát các chữ sốThu gọn bằng PCAPhân cụm chữ sốĐặt tên cho các cụmTìm những chữ số khác biệt2Chọn k
Quán tínhPhương pháp khuỷu tayĐiểm số SilhouetteChuẩn hóa thang đo trước khi phân cụmÔn tập: Các vùng giao hàngTự luyện tập: Trình biên dịch Python online