Menu
CoddyTech

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:

Mười ảnh quét chữ viết tay gọn gàng, xếp thành hai hàng, bình thường nhất trong tập dữ liệu: năm số 0 tròn, ba số 9, một số 8 và một số 2

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.

challenge icon

Thử thách

Trung bình

Phầ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.

  1. 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.
  2. 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 scans

Bộ sưu tập các chữ số 7 bình thường nhất trông như sau:

Mười chữ số 7 viết tay trong một bộ sưu tập gồm 2 hàng và 5 cột, mỗi ảnh có tiêu đề là 7, tất cả đều giống nhau: một nét ngang phía trên, một nét ngang ngắn ở giữa và một nét kéo xuống

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
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