CÂU CHUYỆN ĐẰNG SAU KHÁI NIỆM
Đại số tuyến tính / Trung cấp / 25 PHÚT ĐỌC
Bạn sẽ tìm những hướng mà dữ liệu thay đổi nhiều nhất. PCA giúp giảm số chiều để quan sát và nén dữ liệu, nhưng cũng có thể bỏ mất thông tin hữu ích.
Biên soạn: LearnDo · Ngày hiển thị theo lộ trình
Elliott & Fry. Wikimedia Commons. Public domain. Ảnh đã thu nhỏ và chuyển sang WebP.
Karl Pearson nghiên cứu đường thẳng và mặt phẳng khớp gần nhất với một đám điểm vào năm 1901. Đây là một cột mốc của phương pháp thành phần chính, thường gọi là PCA.
Karl Pearson (1901): nền tảng hình học của PCAMột đám điểm kéo dài theo một hướng giống như một chiếc lá hẹp. Ta có thể xoay hệ trục để trục đầu bám theo hướng dài nhất. Giữ vài trục đầu giúp vẽ hoặc nén dữ liệu, nhưng hướng dao động mạnh chưa chắc là hướng phân biệt các lớp tốt nhất.
Thử nghĩ một chút Một đặc trưng thay đổi ít có thể vẫn quyết định nhãn của mẫu không?
BƯỚC 01
Học sau bình phương tối thiểu và bài kỳ vọng, hiệp phương sai trong chuỗi xác suất.
Bạn sẽ tìm những hướng mà dữ liệu thay đổi nhiều nhất. PCA giúp giảm số chiều để quan sát và nén dữ liệu, nhưng cũng có thể bỏ mất thông tin hữu ích.
py -m venv .venv
.\.venv\Scripts\python.exe -m pip install numpy matplotlibTạo môi trường riêng rồi gọi đúng Python trong môi trường. Không cần kích hoạt bằng một lệnh khác.
BƯỚC 02
PCA tìm hướng biến thiên quanh trung bình. Quên center sẽ làm hướng kết quả chịu ảnh hưởng của vị trí gốc tọa độ. Ví dụ tạo một đám mây kéo dài và dịch khỏi gốc.
X_c là dữ liệu đã trừ trung bình theo cột. Vector riêng của hiệp phương sai chỉ hướng, trị riêng cho phương sai trên hướng đó. Các cột của V_k là k hướng được giữ.
from pathlib import Path
import json
import numpy as np
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
OUTPUT = Path(__file__).resolve().parent / "results"
OUTPUT.mkdir(exist_ok=True)
plt.rcParams.update({"font.size": 12, "axes.spines.top": False,
"axes.spines.right": False, "figure.facecolor": "#f3f7f6",
"axes.facecolor": "white", "axes.titleweight": "bold"})
FIGURE = OUTPUT / "linear-pca.png"
rng=np.random.default_rng(71)
base=rng.normal(size=(300,2))
X=base@np.array([[2.,1.2],[0.2,0.6]])+np.array([4.,-2.])
mean=X.mean(axis=0)
centered=X-mean
cov=centered.T@centered/(len(X)-1)
values,vectors=np.linalg.eigh(cov)
order=np.argsort(values)[::-1]
values,vectors=values[order],vectors[:,order]
assert np.allclose(cov@vectors,vectors*values)
assert np.all(values>=-1e-12)Hiệp phương sai đối xứng nên dùng eigh. Hàm trả trị riêng tăng dần, ta sắp giảm dần để lấy hướng phương sai lớn nhất.
Center và lựa chọn thang đo là một phần của định nghĩa PCA.
BƯỚC 03
Giữ hướng đầu tiên rồi cộng lại trung bình để tái tạo. Dấu của vector riêng có thể đổi mà không đổi không gian con hay kết quả tái tạo.
direction=vectors[:,:1]
scores=centered@direction
reconstructed=scores@direction.T+mean
ratio=values/values.sum()
error=np.mean(np.sum((X-reconstructed)**2,axis=1))
expected_error=values[1]*(len(X)-1)/len(X)
assert np.isclose(error,expected_error)
assert np.allclose(scores@direction.T,(-scores)@(-direction).T)
print("Explained variance ratios:",ratio)Hệ số n-1 so với n xuất hiện vì hiệp phương sai mẫu dùng n-1 còn MSE tái tạo dùng n. Đây là khác biệt quy ước, không phải lỗi thuật toán.
So sánh không gian con hoặc tái tạo khi dấu vector riêng khác nhau.
BƯỚC 04
PCA có thể nén hoặc trực quan hóa biểu diễn vector. Hướng có phương sai lớn nhất chưa chắc phân biệt nhãn tốt nhất. Khi dùng PCA trong pipeline học máy, chỉ fit trung bình và hướng trên train.
fig,axs=plt.subplots(1,2,figsize=(12,8),layout="constrained")
axs[0].scatter(X[:,0],X[:,1],s=10,alpha=0.35,color="#387a55",label="Original")
axs[0].scatter(reconstructed[:,0],reconstructed[:,1],s=10,color="#bb9457",label="Rank-one reconstruction")
axs[0].set(aspect="equal",title="PCA projection",xlabel="Feature 1",ylabel="Feature 2")
axs[0].legend()
axs[1].bar(["PC1","PC2"],ratio,color=["#387a55","#bb9457"])
axs[1].set(ylim=(0,1),ylabel="Explained variance ratio",title="Variance is not class information")
fig.savefig(FIGURE, dpi=100)
plt.close(fig)
print("Saved:", FIGURE.name)Dùng các tham số fit trên train để transform tập chọn mô hình. Fit lại trên toàn bộ dữ liệu sẽ làm rò rỉ thông tin.
Đánh giá lại tác vụ cuối sau khi giảm chiều.
BƯỚC 05
Vector riêng thỏa phương trình hiệp phương sai. Sai số tái tạo một thành phần khớp phương sai của hướng bị bỏ sau hiệu chỉnh mẫu số.

.\.venv\Scripts\python.exe linear_pca.pyLệnh chạy toàn bộ tệp vừa tải. Nếu một assert không đúng, dừng lại và kiểm tra dữ liệu cùng bước tương ứng trước khi diễn giải hình.
Kiểm tra số liệu in ra trước, sau đó mới dùng hình để giải thích.
ĐẾN LƯỢT BẠN