Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Triển khai PCA bằng Python
Trong bài hướng dẫn này, mình sẽ triển khai thuật toán PCA (Principal Component Analysis) chỉ sử dụng các module Python cơ bản và thư viện numpy. Bài viết này không chỉ giúp bạn biết cách viết mã mà còn giải thích chi tiết khái niệm và toán học đứng sau thuật toán, từ đó tăng cường hiểu biết về cách thức hoạt động của PCA.
Thuật toán PCA được sử dụng phổ biến trong phân tích dữ liệu, giảm chiều dữ liệu mà vẫn giữ được nhiều thông tin quan trọng. Điều này rất hữu ích khi xử lý các tập dữ liệu lớn hoặc giảm nhiễu để cải thiện hiệu quả mô hình.
Cách sử dụng thuật toán PCA trong Python
Dưới đây là đoạn mã nguồn đầy đủ, kèm theo giải thích dễ hiểu:
import numpy as np class PCA: def __init__(self, n_components): """ Khởi tạo thuật toán PCA với số thành phần chính cần giữ lại. - n_components: Số lượng thành phần chính (principal components) mong muốn. """ self.n_components = n_components self.components = None # Ma trận vector riêng (eigenvectors) self.mean = None # Giá trị trung bình của dữ liệu def fit(self, X): """ Huấn luyện mô hình PCA trên tập dữ liệu X. - Tính toán ma trận hiệp phương sai, vector riêng và giá trị riêng. - Lưu giữ các vector riêng tương ứng với các giá trị riêng lớn nhất. """ # Tính giá trị trung bình và thực hiện mean centering self.mean = np.mean(X, axis=0) X = X - self.mean # Tính ma trận hiệp phương sai (covariance matrix) cov = np.cov(X.T) # Tính giá trị riêng (eigenvalues) và vector riêng (eigenvectors) eigenvalues, eigenvectors = np.linalg.eig(cov) # Sắp xếp vector riêng theo giá trị riêng giảm dần eigenvectors = eigenvectors.T # Chuyển vị vector riêng để dễ xử lý idxs = np.argsort(eigenvalues)[::-1] # Lấy chỉ số sắp xếp eigenvalues = eigenvalues[idxs] eigenvectors = eigenvectors[idxs] # Lưu các vector riêng tương ứng với n_components giá trị riêng lớn nhất self.components = eigenvectors[:self.n_components] def transform(self, X): """ Biến đổi dữ liệu X theo các thành phần chính được lưu trữ. - Giảm chiều dữ liệu bằng cách chiếu dữ liệu lên các vector riêng. """ # Thực hiện mean centering X = X - self.mean # Chiếu dữ liệu lên các thành phần chính return np.dot(X, self.components.T)
Giải thích chi tiết từng phần
Khởi tạo lớp PCA:
Bài viết này được đăng tại [free tuts .net]
n_components
xác định số lượng thành phần chính mà chúng ta muốn giữ lại sau khi giảm chiều dữ liệu.components
sẽ lưu các vector riêng tương ứng với các trục chính.mean
lưu giá trị trung bình của từng đặc trưng trong dữ liệu để thực hiện việc chuẩn hóa (mean centering).
Huấn luyện mô hình (fit
):
- Mean Centering: Chuẩn hóa dữ liệu bằng cách trừ đi giá trị trung bình để đưa dữ liệu về tâm tọa độ gốc.
- Ma trận Hiệp Phương Sai: Ma trận này đo lường mối quan hệ tuyến tính giữa các đặc trưng.
- Giá trị riêng và Vector riêng: Giá trị riêng cho biết mức độ phân tán thông tin trên các trục, vector riêng xác định hướng của các trục này.
- Sắp xếp: Lấy các vector riêng tương ứng với các giá trị riêng lớn nhất để giữ lại phần lớn thông tin của dữ liệu.
Biến đổi dữ liệu (transform
):
- Thực hiện chuẩn hóa dữ liệu đầu vào.
- Sử dụng các vector riêng (trục chính) để chiếu dữ liệu sang không gian mới giảm chiều.
Ví dụ sử dụng
# Tạo dữ liệu mẫu from sklearn.datasets import make_blobs X, _ = make_blobs(n_samples=100, n_features=3, centers=3, random_state=42) # Giảm chiều xuống 2 bằng PCA pca = PCA(n_components=2) pca.fit(X) X_transformed = pca.transform(X) print("Dữ liệu sau khi giảm chiều:\n", X_transformed)
Kết bài
Thuật toán PCA là công cụ mạnh mẽ để xử lý dữ liệu đa chiều, giúp giảm nhiễu và cải thiện hiệu suất mô hình. Với việc xây dựng từ đầu như trên, bạn có thể hiểu rõ hơn về cơ chế hoạt động của PCA và cách áp dụng trong thực tế. Hy vọng bài hướng dẫn này sẽ giúp bạn có một nền tảng vững chắc để triển khai các thuật toán phân tích dữ liệu phức tạp hơn trong tương lai!