Menu
CoddyTech

Đặt tên cho các cụm

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

Các cụm được đánh số, không được đặt tên. Giờ bạn có thể dùng nhãn: bảng chéo đếm số lần mỗi chữ số xuất hiện trong từng cụm, như các chữ số 1, 7 và 9 trong 3 cụm này:

Bảng 3 nhân 3 gồm số lượng, các cụm nằm ở hàng và các chữ số 1, 7, 9 nằm ở cột. Số lượng lớn nhất của mỗi hàng được đóng khung: cụm 0 có 166 chữ số 9, cụm 1 có 176 chữ số 7, cụm 2 có 154 chữ số 1

Đặt tên mỗi cụm theo chữ số xuất hiện nhiều nhất trong cụm đó. Số lần quét của chữ số ấy được tính là phân loại đúng:

ct = pd.crosstab(km.labels_, y)
names = ct.idxmax(axis=1)      # cột có giá trị lớn nhất trong mỗi hàng
right = ct.max(axis=1).sum()
print(names.tolist(), right)

Lệnh này in ra [9, 7, 1] 496: 496 trong số 541 lượt quét được phân loại đúng nhờ các nhóm tìm thấy mà không cần nhãn nào.

challenge icon

Thử thách

Trung bình

Đặt tên cho 10 cụm của bạn. Phần khởi đầu có km, được khớp mà không cần nhãn; giờ bạn có thể dùng các chữ số trong y.

  1. Lập bảng chéo các cụm với y và đặt tên mỗi cụm theo chữ số phổ biến nhất trong cụm đó.
  2. Theo thứ tự tên, in ra số ảnh quét được đặt tên đúng, kích thước và tỷ lệ đặt tên đúng của mỗi cụm, dưới dạng phần trăm nguyên.
  3. In ra tổng số ảnh quét được đặt tên đúng, với tỷ lệ phần trăm lấy đến 1 chữ số thập phân.

Với 5 cụm:

Cluster named 0: 175 of 177 scans (99%)
Cluster named 2: 160 of 367 scans (44%)
Cluster named 3: 168 of 531 scans (32%)
Cluster named 6: 179 of 359 scans (50%)
Cluster named 7: 176 of 363 scans (48%)
Named right without labels: 858 of 1797 scans (47.7%)

Cụm nào của bạn yếu nhất, và có gì ẩn trong đó?

Tự làm thử

import pandas as pd
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans

# Từ bài «Quan sát các chữ số»: 1,797 ảnh quét, mỗi ảnh có 64 pixel, độ đậm nét từ 0 đến 16
digits = load_digits()
X = digits.data
y = digits.target

# Từ bài «Giảm kích thước bằng PCA»: 13 số cho mỗi ảnh quét giữ lại 80% phương sai
pca = PCA(n_components=0.8)
X_small = pca.fit_transform(X)

# Từ bài «Phân cụm các chữ số»: tìm 10 cụm mà không cần nhãn
km = KMeans(n_clusters=10, n_init=10, random_state=0).fit(X_small)

# Viết code 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