Tóm tắt nội dung
- PCA (Principal Component Analysis) tìm các trục mới trong không gian dữ liệu sao cho phương sai (variance) được giữ lại nhiều nhất khi giảm số chiều.
- Về bản chất toán học, PCA là bài toán trị riêng (eigenvalue) của ma trận hiệp phương sai (covariance matrix).
- Các thành phần chính (principal component) luôn trực giao (orthogonal) với nhau, đảm bảo không dư thừa thông tin giữa các trục.
- PCA chỉ nắm bắt được cấu trúc tuyến tính của dữ liệu — không phù hợp với dữ liệu có cấu trúc phi tuyến phức tạp.
Khi dữ liệu có hàng trăm hoặc hàng nghìn chiều, phần lớn các chiều đó thường mang thông tin trùng lặp hoặc nhiễu. PCA giải quyết vấn đề này bằng cách tìm ra một hệ trục tọa độ mới, trong đó chỉ vài trục đầu tiên đã nắm giữ phần lớn thông tin quan trọng của toàn bộ dữ liệu.
PCA là gì và mục tiêu của phép giảm chiều
PCA là một kỹ thuật giảm chiều dữ liệu (dimensionality reduction) không giám sát (unsupervised), hoạt động bằng cách chiếu (project) dữ liệu từ không gian gốc nhiều chiều sang một không gian mới có số chiều nhỏ hơn, sao cho lượng thông tin bị mất là ít nhất.
"Thông tin" ở đây được định lượng bằng phương sai (variance) — mức độ phân tán của dữ liệu. Trục đầu tiên mà PCA tìm ra, gọi là thành phần chính thứ nhất (first principal component - PC1), là hướng mà dữ liệu phân tán nhiều nhất. Trục thứ hai (PC2) là hướng phân tán nhiều thứ nhì, với điều kiện bắt buộc phải vuông góc (trực giao) với PC1.
Cơ sở đại số tuyến tính: từ hiệp phương sai đến trị riêng
Giả sử dữ liệu X đã được chuẩn hóa (mean-centered, tức trừ đi giá trị trung bình của từng cột), ma trận hiệp phương sai (covariance matrix) được tính:
Ma trận Σ có kích thước d×d (với d là số chiều dữ liệu), mỗi phần tử Σᵢⱼ thể hiện mức độ biến thiên cùng nhau (covariance) giữa chiều i và chiều j. PCA tìm các vector riêng (eigenvector) v và trị riêng (eigenvalue) λ tương ứng của Σ, thỏa phương trình đặc trưng:
Mỗi vector riêng v chính là hướng của một thành phần chính, còn trị riêng λ tương ứng thể hiện chính xác lượng phương sai mà thành phần đó nắm giữ. Các vector riêng của ma trận đối xứng Σ luôn trực giao với nhau — đây là lý do toán học vì sao các thành phần chính của PCA không bao giờ tương quan (correlated) với nhau.
Sắp xếp các trị riêng theo thứ tự giảm dần λ₁ ≥ λ₂ ≥ ... ≥ λd, thành phần ứng với λ₁ chính là PC1, ứng với λ₂ là PC2, và cứ thế tiếp tục.
Tỷ lệ phương sai giải thích (Explained Variance Ratio)
Để biết nên giữ lại bao nhiêu thành phần chính, người ta tính tỷ lệ phương sai mà mỗi thành phần giải thích được so với tổng phương sai:
Trong thực hành, người ta thường chọn số lượng thành phần chính nhỏ nhất sao cho tổng tỷ lệ phương sai tích lũy (cumulative explained variance) đạt một ngưỡng đủ lớn, ví dụ 90% hoặc 95%, tùy vào yêu cầu bài toán và mức độ đánh đổi giữa nén dữ liệu và giữ thông tin.
Quy trình PCA: input → xử lý → output
- Input: ma trận dữ liệu X kích thước n×d (n mẫu, d đặc trưng/feature).
- Bước 1 — Chuẩn hóa: trừ trung bình từng cột (mean-centering), và thường chia thêm cho độ lệch chuẩn (standardization) nếu các đặc trưng có đơn vị đo khác nhau.
- Bước 2 — Tính ma trận hiệp phương sai: Σ = XᵀX/(n−1).
- Bước 3 — Phân rã trị riêng: tìm eigenvector và eigenvalue của Σ (hoặc dùng Singular Value Decomposition - SVD để ổn định số học hơn).
- Bước 4 — Chọn k thành phần chính có trị riêng lớn nhất, ghép thành ma trận chiếu W kích thước d×k.
- Output: dữ liệu mới Z = X·W, kích thước n×k, với k < d.
Minh họa trực quan: PCA trên dữ liệu 2 chiều
Ví dụ dễ hình dung nhất: một tập dữ liệu 2 chiều có dạng elip kéo dài theo một hướng chéo. PCA sẽ tìm ra trục PC1 trùng với hướng kéo dài đó (phương sai lớn nhất), còn PC2 vuông góc với PC1 (phương sai nhỏ hơn nhiều). Nếu chỉ giữ lại PC1, dữ liệu 2 chiều được nén thành 1 chiều nhưng vẫn giữ được phần lớn cấu trúc quan trọng.
Cài đặt PCA bằng Python
Đoạn code dưới đây thực hiện PCA trên bộ dữ liệu Iris kinh điển, giảm từ 4 chiều xuống 2 chiều để trực quan hóa:
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
# Tải dữ liệu, X có 4 đặc trưng (chiều dài/rộng đài hoa, cánh hoa)
data = load_iris()
X = data.data
# Chuẩn hóa dữ liệu về cùng thang đo trước khi áp dụng PCA
X_scaled = StandardScaler().fit_transform(X)
# Giảm từ 4 chiều xuống 2 thành phần chính
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
print("Tỷ lệ phương sai giải thích:", pca.explained_variance_ratio_)
print("Tổng phương sai giữ lại:", sum(pca.explained_variance_ratio_))
Với bộ dữ liệu Iris, hai thành phần chính đầu tiên thường giữ lại phần lớn tổng phương sai của toàn bộ 4 đặc trưng gốc — nghĩa là có thể trực quan hóa dữ liệu 4 chiều lên biểu đồ 2 chiều mà vẫn phản ánh trung thực cấu trúc phân cụm giữa các loài hoa.
Để hiểu rõ hơn cơ chế bên trong, đoạn code sau cài đặt PCA thủ công bằng phân rã trị riêng, không dùng thư viện sklearn:
import numpy as np
# Chuẩn hóa dữ liệu: trừ trung bình từng cột
X_centered = X_scaled - np.mean(X_scaled, axis=0)
# Tính ma trận hiệp phương sai
cov_matrix = np.cov(X_centered, rowvar=False)
# Phân rã trị riêng - eigenvector và eigenvalue
eigenvalues, eigenvectors = np.linalg.eigh(cov_matrix)
# Sắp xếp giảm dần theo trị riêng
order = np.argsort(eigenvalues)[::-1]
eigenvalues = eigenvalues[order]
eigenvectors = eigenvectors[:, order]
# Chiếu dữ liệu lên 2 thành phần chính đầu tiên
W = eigenvectors[:, :2]
X_manual_pca = X_centered @ W
print("Trị riêng:", eigenvalues[:2])
Kết quả từ cách cài đặt thủ công này sẽ khớp với kết quả của sklearn.decomposition.PCA (có thể lệch dấu do hướng vector riêng không duy nhất), qua đó chứng minh trực tiếp rằng PCA về bản chất chỉ là bài toán phân rã trị riêng của ma trận hiệp phương sai.
Ứng dụng thực tế của PCA
- Trực quan hóa dữ liệu nhiều chiều: giảm xuống 2–3 chiều để vẽ biểu đồ scatter, quan sát cấu trúc phân cụm.
- Nén dữ liệu và giảm nhiễu: loại bỏ các thành phần có phương sai thấp thường tương ứng với nhiễu ngẫu nhiên.
- Tiền xử lý trước khi huấn luyện mô hình: giảm số chiều đầu vào giúp giảm nguy cơ overfitting và tăng tốc độ huấn luyện, đặc biệt với dữ liệu có nhiều đặc trưng tương quan cao.
- Nén ảnh (image compression): áp dụng PCA lên ma trận điểm ảnh để giữ lại phần lớn thông tin thị giác với dung lượng nhỏ hơn.
Ưu điểm, hạn chế và khi nào không nên dùng PCA
Ưu điểm cốt lõi của PCA là loại bỏ tương quan (decorrelation) giữa các đặc trưng và giảm chiều dữ liệu một cách có cơ sở toán học chặt chẽ, không cần thông tin nhãn (label). Thuật toán cũng có độ phức tạp tính toán rõ ràng và ổn định nhờ các phương pháp phân rã ma trận đã được tối ưu hóa cao (như SVD).
Hạn chế lớn nhất: PCA chỉ tìm được các mối quan hệ tuyến tính giữa các đặc trưng. Nếu cấu trúc thực sự của dữ liệu là phi tuyến (ví dụ dữ liệu phân bố theo hình xoắn ốc), PCA sẽ không nắm bắt được cấu trúc đó và có thể làm mất thông tin quan trọng. Trong các trường hợp này, các kỹ thuật phi tuyến như t-SNE hoặc UMAP thường cho kết quả trực quan hóa tốt hơn, dù đánh đổi bằng việc mất đi ý nghĩa toán học tường minh của PCA.
Ngoài ra, các thành phần chính sau khi biến đổi thường khó diễn giải (interpret) trực tiếp bằng ngôn ngữ nghiệp vụ, vì mỗi PC là tổ hợp tuyến tính của tất cả đặc trưng gốc chứ không phải một đặc trưng đơn lẻ có ý nghĩa rõ ràng.
So sánh PCA với các kỹ thuật giảm chiều dễ nhầm lẫn
| Kỹ thuật | Loại quan hệ nắm bắt | Có giám sát? | Mục tiêu chính |
|---|---|---|---|
| PCA | Tuyến tính | Không | Giữ phương sai tối đa |
| LDA (Linear Discriminant Analysis) | Tuyến tính | Có | Tối đa phân tách giữa các lớp |
| t-SNE | Phi tuyến | Không | Giữ cấu trúc cục bộ để trực quan hóa |
Khác biệt quan trọng nhất cần ghi nhớ: PCA tối ưu để giữ phương sai tổng thể, hoàn toàn không quan tâm đến nhãn lớp, trong khi LDA tối ưu để giữ khả năng phân biệt giữa các lớp — đây là lý do PCA được xếp vào nhóm không giám sát còn LDA thuộc nhóm có giám sát.
Kết luận
PCA là công cụ giảm chiều nền tảng trong Data Science, dựa trên cơ sở toán học vững chắc là phân rã trị riêng của ma trận hiệp phương sai. Bằng cách tìm các hướng phương sai lớn nhất và đảm bảo tính trực giao giữa chúng, PCA giúp nén dữ liệu nhiều chiều mà vẫn giữ lại phần lớn thông tin quan trọng. Tuy nhiên, giới hạn tuyến tính của phương pháp này cần được cân nhắc kỹ khi dữ liệu có cấu trúc phi tuyến phức tạp.
Tài liệu tham khảo
[1] I. T. Jolliffe, Principal Component Analysis, 2nd ed. New York, NY, USA: Springer, 2002.
[2] K. Pearson, "On Lines and Planes of Closest Fit to Systems of Points in Space," Philosophical Magazine, vol. 2, no. 11, pp. 559–572, 1901.
[3] H. Hotelling, "Analysis of a Complex of Statistical Variables into Principal Components," Journal of Educational Psychology, vol. 24, no. 6, pp. 417–441, 1933.
[4] L. van der Maaten and G. Hinton, "Visualizing Data using t-SNE," Journal of Machine Learning Research, vol. 9, pp. 2579–2605, 2008.
Nội dung gốc thuộc tác giả. Vui lòng không đăng lại toàn văn khi chưa được phép, trừ trường hợp pháp luật hoặc giấy phép áp dụng cho phép. Nội dung của bên thứ ba tuân theo quyền và giấy phép tương ứng.
Nguồn gốc: PCA Trong Data Science: Giảm Chiều Dữ Liệu Hiệu Quả
