Tìm những chữ số khác biệ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 47 trên 51.
Một câu hỏi cuối: những ảnh quét nào là khác thường? Thuật toán rừng cô lập (isolation forest) chấm điểm từng ảnh quét, điểm càng thấp thì ảnh càng lạ. Trước tiên là những ảnh có điểm cao nhất, bình thường nhất:
iso = IsolationForest(contamination=0.02, random_state=0)
flags = iso.fit_predict(X_small)
scores = iso.score_samples(X_small)
typical = np.argsort(scores)[::-1][:10]np.argsort liệt kê số hàng từ điểm thấp nhất trở lên, nên khi đảo ngược, những hàng bình thường nhất sẽ đứng đầu. Hiển thị chúng từ X: đủ 64 pixel.
Thử thách
Trung bìnhPhần cuối. Phần khởi đầu đã có mọi thứ cho đến nay, cùng với guess, tên cụm của mỗi ảnh quét.
- Huấn luyện một rừng cô lập trên
X_small(contamination=0.02,random_state=0). In ra số ảnh được đánh dấu, chữ số được đánh dấu thường xuyên nhất và số ảnh trong đó được cụm đặt tên đúng. - Vẽ 10 ảnh quét kỳ lạ nhất, theo thứ tự từ kỳ lạ nhất: một bộ sưu tập gồm 2 hàng và 5 cột trong
gray_r, với tiêu đề là chữ số tương ứng.
Với contamination=0.01:
Flagged as odd: 18 of 1797 scans
Most often odd: 7 (10 scans)
Named right by their cluster: 11 of 18 odd scansBộ sưu tập các chữ số 7 bình thường nhất trông như sau:
Bộ sưu tập của bạn sẽ hiển thị những ảnh kỳ lạ nhất. Các cụm đặt tên đúng cho 79.2% tổng số ảnh quét: những ảnh kỳ lạ thì sao? Bạn đã khám phá 1,797 ảnh quét mà không hề huấn luyện mô hình bằng nhãn.
Tự làm thử
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from sklearn.ensemble import IsolationForest
# Từ bài Nhìn vào các chữ số: 1,797 ảnh quét, mỗi ảnh có 64 pixel, mức mực từ 0 đến 16
digits = load_digits()
X = digits.data
y = digits.target
# Từ bài Giảm chiều bằng PCA: 80% phương sai nằm trong 13 số cho mỗi ảnh quét
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 ra 10 cụm mà không cần nhãn
km = KMeans(n_clusters=10, n_init=10, random_state=0).fit(X_small)
# Từ bài Đặt tên các cụm: mỗi cụm mang tên chữ số tương ứng với các ảnh quét trong cụm (79.2% khớp với y)
names = pd.crosstab(km.labels_, y).idxmax(axis=1)
guess = names.to_numpy()[km.labels_]
# 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àngTự luyện tập: Trình biên dịch Python online