Cụm làm đặc trưng
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 40 trên 51.
Mô hình đường thẳng không thể uốn cong. Tín hiệu điện thoại ở ba ngôi làng yếu dần theo khoảng cách từ trạm phát sóng của mỗi làng, tạo thành một hình dạng mà chỉ riêng vị trí không thể hiện được:
k-means tìm các ngôi làng. km.transform cho biết khoảng cách từ mỗi hàng đến mọi tâm, còn .min(axis=1) giữ lại khoảng cách gần nhất:
km = KMeans(n_clusters=3, n_init=10, random_state=0).fit(X_train)
near_train = km.transform(X_train).min(axis=1)
near_test = km.transform(X_test).min(axis=1)
X_train2 = np.column_stack([X_train, near_train])
X_test2 = np.column_stack([X_test, near_test])Chỉ với một cột bổ sung đó, R bình phương trên tập kiểm tra của mô hình tuyến tính tăng từ 0.000 lên 0.886.
Huấn luyện k-means chỉ trên các hàng huấn luyện, giống như với bộ chuẩn hóa (scaler), rồi biến đổi cả hai tập.
Thử thách
Trung bìnhĐội ngũ âm thanh của lễ hội muốn biết âm thanh lớn đến mức nào ở nơi mọi người đứng. Phần code khởi đầu chia dữ liệu trong crowd.csv, đọc k và in ra điểm số chỉ dựa trên vị trí.
- Khớp mô hình k-means với
kcụm trên các vị trí trong tập huấn luyện. - Thêm khoảng cách từ mỗi hàng đến tâm gần nhất của nó làm cột thứ ba, trong cả hai tập.
- In ra R bình phương mới trên tập kiểm tra và mức tăng, với 3 chữ số thập phân.
Với một lễ hội khác và k = 4:
Position only: R squared 0.097
With the nearest of 4 centers: R squared 0.734
Gain: 0.637Tự làm thử
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.cluster import KMeans
# 250 người tham dự lễ hội: vị trí họ đứng (m) và mức âm thanh tại đó (dB)
crowd = pd.read_csv("crowd.csv")
X = crowd[["x_m", "y_m"]].to_numpy()
y = crowd["sound_db"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
k = int(input())
# Khớp mô hình hồi quy tuyến tính trên các cột huấn luyện, trả về R bình phương trên các cột kiểm tra
def test_r2(A_train, A_test):
model = LinearRegression().fit(A_train, y_train)
return model.score(A_test, y_test)
before = test_r2(X_train, X_test)
print(f"Position only: R squared {before:.3f}")
# Viết code của bạn 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àng3Đọc hiểu các cụm
Phân tích đặc điểm các cụmTâm cụm theo đơn vị thực tếCụm và nhãn đã biếtKhi K-Means thất bạiÔn tập: Nếm trà9Cụm trong thực tế
Phân khúc khách hàngCụm làm đặc trưngMàu sắc hình ảnhÔn tập: sắc thái danh sách phátTự luyện tập: Trình biên dịch Python online