Menu
CoddyTech

Nén và dựng lại

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

Điểm thành phần của một bản quét là một công thức: bắt đầu từ bản quét trung bình, rồi cộng từng mẫu nhân với điểm số tương ứng. inverse_transform làm ngược lại theo công thức để khôi phục 64 điểm ảnh:

pca = PCA(n_components=10).fit(X)
codes = pca.transform(X)                # 10 số cho mỗi ảnh quét
rebuilt = pca.inverse_transform(codes)  # Trở lại 64 pixel

Đây là ba ảnh quét được dựng lại từ ngày càng nhiều số hơn:

Số 0, số 3 và số 5, mỗi số được dựng lại từ 2, 5, 10 và 20 số, sau đó là ảnh quét thật. Với 2 số, cả ba đều là những hình mờ tương tự nhau; với 20 số, mỗi số đều hiện rõ

Một vài con số tạo ra hình ảnh mờ gần với chữ số trung bình; mỗi thành phần được thêm vào sẽ khôi phục chi tiết. Chỉ với 20 con số thay vì 64, hình ảnh đã rõ nét.

challenge icon

Thử thách

Trung bình

Một chiếc bút thông minh truyền từng chữ số dưới dạng k số PCA để chương trình đọc. Những gì bị mất?

  1. Khớp PCA với k thành phần trên X. Nén tất cả bản quét, rồi dựng lại chúng vào rebuilt.
  2. In các dòng bên dưới; lỗi là độ chênh lệch tuyệt đối trung bình so với X.
  3. Vẽ bản quét mới nhất, X[-1], trên axs[0] và bản dựng lại trên axs[1], cả hai đều dùng gray_r. Hiển thị.

Với 7:

Sent: 7 numbers per scan instead of 64
Average pixel error: 1.739

và vẽ hình này. Sau đó, Coddy mô tả các khung hình của bạn:

Hai hình 8 x 8 đặt cạnh nhau: bản quét mới nhất của bút, hình số 8, và bản dựng lại từ 7 số, hình số 8 mờ hơn

Tự làm thử

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA

# 1,797 bản quét, mỗi bản gồm 64 pixel; bản quét mới nhất của bút nằm ở hàng cuối
digits = load_digits()
X = digits.data
k = int(input())

# Đừng thay đổi các dòng bên dưới
fig, axs = plt.subplots(1, 2)
axs[0].set_title("Scan")
axs[1].set_title(f"Rebuilt from {k} numbers")

# 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