Menu
CoddyTech

Tâm cụm theo đơn vị thực tế

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

Tâm cụm là thành viên tiêu biểu của cụm. K-means tìm tâm của các cụm trong dữ liệu đã chuẩn hóa, nên các giá trị được biểu thị dưới dạng điểm z. Các tâm giống nhau trước và sau khi chuyển đổi:

Hai biểu đồ về khách tham quan công viên giải trí, với 3 tâm cụm được đánh dấu bằng dấu chéo. Bên trái, các trục đã chuẩn hóa: tâm cụm nằm ở các giá trị như 0.8, 1.3. Bên phải, đơn vị thực: các tâm giống nhau ở mức 6.8 giờ và 13.9 lượt chơi, 6.0 và 6.2, 2.4 và 3.0

Giữ lại bộ chuẩn hóa: nó ghi nhớ giá trị trung bình và độ phân tán của từng đặc trưng, còn inverse_transform đảo ngược việc chuẩn hóa:

scaler = StandardScaler()
km.fit(scaler.fit_transform(park))
centers = scaler.inverse_transform(km.cluster_centers_)
print(centers.round(1))

Lệnh này in ra số giờ, số chuyến đi và độ tuổi, mỗi cụm một hàng:

[[ 6.   6.2 38.4]
 [ 2.4  3.  45.8]
 [ 6.8 13.9 20.7]]

Tâm của cụm 2 là 0.8 và 1.3. Giờ đây, nó biểu thị 6.8 giờ và 13.9 chuyến đi: cùng một điểm, nhưng dùng đơn vị mà mọi người có thể hiểu.

challenge icon

Thử thách

Trung bình

Người làm găng tay chia các cụm bàn tay thành 4 cỡ găng tay. Code khởi đầu chuẩn hóa 150 bàn tay, phân cụm chúng và đọc dữ liệu bàn tay của khách hàng vào new_hand.

  1. Tìm cụm mà bàn tay mới thuộc về: chuẩn hóa bàn tay đó trước.
  2. Chuyển các tâm cụm về lại đơn vị cm.
  3. In tâm của cụm đó với 1 chữ số thập phân như bên dưới.

Với một người làm găng tay khác:

Your glove size: hand 20.3 cm, palm 8.9 cm, finger 8.6 cm

Tự làm thử

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans

# Người làm găng tay đo 150 bàn tay, tính bằng cm: chiều dài bàn tay, chiều rộng lòng bàn tay và chiều dài ngón giữa
hands = pd.read_csv("hands.csv")
scaler = StandardScaler()
scaled = scaler.fit_transform(hands)
# Mỗi cỡ găng tay tương ứng với một cụm
km = KMeans(n_clusters=4, n_init=10, random_state=0)
km.fit(scaled)

# Bàn tay của khách hàng mới, dưới dạng bảng một hàng với các cột giống nhau
new_hand = pd.DataFrame({
    "hand_cm": [float(input())],
    "palm_cm": [float(input())],
    "finger_cm": [float(input())],
})

# 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