You are on page 1of 8

Phân tích thành phần chính (PCA) bằng Python

1. Giới thiệu
Phân tích thành phần chính (PCA) là một kỹ thuật giảm kích thước cho phép bạn xác định các mối tương
quan và các mẫu trong trong tập dữ liệu để nó có thể được chuyển đổi thành tập dữ liệu có thứ nguyên
thấp hơn đáng kể mà không làm mất bất kỳ thông tin quan trọng nào.
Khi tìm thấy mối tương quan chặt chẽ giữa các biến khác nhau, ý tưởng chính của PCA giảm kích thước
của dữ liệu sao cho dữ liệu quan trọng vẫn được giữ lại. Kích thước không là gì ngoài tính năng đại diện.
Một yếu tố quan trọng cần lưu ý về PCA là một kỹ thuật giảm kích thước không giám sát, có thể phân
cụm các điểm dữ liệu tương tự dựa trên mối tương quan giữa chúng mà không cần bất kỳ sự giám sát
nào. Dưới đây sẽ nêu ra điều này trên thực tế bằng Python.
Ứng dụng của PCA
- Tăng tốc độ thuật toán Machine Learning (ML): ý tưởng chính của PCA là giảm kích thước, dựa
vào những điều đó có thể tăng tốc độ phù hợp của thuật toán Machine learning bằng cách thay
đổi thuật toán tối ưu hoá. Nếu thuật toán học ban đầu chậm do kích thước đầu vào cao, thì việc
sử dụng PCA để tăng tốc là một trong những lựa chọn cần thiết.
- Trực quan hoá dữ liệu: để giải quyết một vấn đề mà giữ liệu là chìa khoá, cần phải khám phá dữ
liệu sâu rộng như tìm hiểu mối tương quan của các biến. Một số lượng lớn các biến mà dữ liệu
được phân phối, việc trực quan hoá thể là một thách thức và hầu như không thể. PCA có thể làm
điều đó để giảm dữ liệu 4 chiều đó thành 2 hoặc 3 chiều để trực quan hoá và hy vọng hiểu dữ
liệu tốt hơn.
Các thành phần chính là chìa khoá quan trọng của PCA, khi dữ liệu được chiếu vào một chiều thấp hơn
(giả sử là ba chiều) từ một không gian cao hơn, thì ba chiều ở đây chính là ba thành phần chính lưu giữ
hầu hết phương sai (thông tin) của dữ liệu.
Các thành phần chính đều có hướng và độ lớn. Thành phần chính là cấu trúc cơ bản trong dữ liệu, những
hướng có nhiều phương sai nhất, những hướng mà dữ liệu được trải ra nhiều nhất. Các thành phần
chính là một đường thẳng và thành phần chính đầu tiên có nhiều phương sai nhất trong dữ liệu. Mỗi
thành phần chính tiếp theo trực giao với thành phần cuối cùng ở trước và có phương sai nhỏ dần.
2. Phân tích thành phần chính (PCA) để trực quan hoá dữ liệu
Tải tập dữ liệu Iris
Bộ dữ liệu Iris là một trong những bộ dữ liệu scikit-learning đi kèm với nó không yêu cầu tải xuống bất kỳ
tệp nào từ các trang web. Đoạn code dưới đây sẽ tải tập dữ liệu xuống.
Chuẩn hoá dữ liệu
Vì PCA mang lại một không gian con tối đa hoá phương sai dọc theo các trục, nên việc chuẩn hoá dữ liệu
là việc rất cần thiết, đặc biệt nếu nó được đo trên các thang đo khác nhau. PCA được thực hiện theo quy
mô, vì vậy cần chia tỷ lệ các tính năng trong dữ liệu trước khi áp dụng PCA. Sử dụng StandardScaler
chuyển đổi dữ liệu sang thang đo đơn vị (giá trị trung bằng=0, phương sai=1), đây là yêu cầu hiệu suất
tối ưu đối với thuật toán Machine-Learning.

Phép chiếu PCA sang 2D


Đối với tập dữ liệu Iris, ban đầu có 4 cột (chiều dài đài hoa, chiều rộng đài hoa, chiều dài cánh hoa, chiều
rộng cánh hoa). Trong đoạn code dưới đây, mã chiếu dữ liệu gốc 4 chiều thành 2 chiều.
Nối các khung dữ liệu dọc theo các cột để tạo ra finalDf trước khi vẽ đồ thị.

Trực quan hoá phép chiếu 2D


Vẽ biểu đồ dữ liệu 2 chiều.
Phương sai được hiểu là sẽ cho ta biết bao nhiêu thông tin được mã hoá thành mỗi thành phần chính.
Khi ta đổi từ không gian bốn chiều sang không gian hai chiều thì điều này là quan trọng, nếu sử dụng các
thuộc tính ta sẽ nhìn ra điều này làm mất một số thông tin (phương sai) nhỏ lẻ.

Thành phần chính chủ yếu đầu tiên chứa 72.77% phương sai và các thành phần chính tiếp theo chứa
23.03%, tổng của hai thành phần chứa 95.8% phương sai.
3. Phân tích thành phần chính (PCA) để tăng tốc thuật toán Machine-Learning
Đây cũng là một trong những ứng dụng quan trọng nhất của PCA. Ta phải sử dụng tập dữ liệu có số liệu
rất lớn để áp dụng PCA. Ta tham khảo Dự án Python – nhận dạng chữ số viết tay với bộ dữ liệu có sẵn
trên các trang web là Cơ sở dữ liệu MNIST. Bộ dữ liệu chứa 784 cột tính năng (784 kích thước), 60.000
hình ảnh huấn luyện các chữ số viết tay từ 0 đến 9 và 10.000 hình ảnh để thử nghiệm.
Thông số Số liệu
Lớp 10
Mẫu của mỗi lớp ~7000
Tổng mẫu 70000
Kích thước 784
Nhãn Giá trị số nguyên từ 0 đến 255
Tải dữ liệu xuống
Sử dụng các hàm có sẵn trong python để tải dữ liệu về và đọc ra kết quả.

Các tính năng có kích thước 784 chiều gồm mỗi hình ảnh là 28 x 28, và nhãn chỉ đơn giản là các số từ 0
đến 9.

Tách dữ liệu thành các tập huấn luyện và kiểm tra


Giả sử dụng dữ liệu gốc cho tập hợp thử nghiệm là 1/7 và 6/7 dữ liệu còn lại là được huấn luyện.
Chuẩn hoá dữ liệu
Tương tự như chuẩn hoá dữ liệu của PCA để trực quan hoá dữ liệu, ta có thể chuyển đổi dữ liệu sang
quy mô đơn vị (giá trị trung bình=0 và phương sai=1). StandardScaler giúp chuẩn hoá các tính năng của
tập dữ liệu. Áp dụng biến đổi cho cả tập huấn luyện và tập kiểm tra.

Các bước sử dụng PCA mà để tăng tốc thuật toán Machine Learning (hồi quy Logistic).
Sử dụng thư viện Sklearn, áp dụng một thuật toán Machine Learning mà bạn chọn cho dữ liệu đã chuyển
đổi. Tạo một phiên bản của mô hình. Áp dụng biến đổi cho cả tập huấn luyện và tập kiểm tra.

Bước 1: Nhập mô hình muốn sử dụng. Trong sklearn, tất cả các mô hình machine learning được triển
khai dưới dạng các lớp python.
Bước 2: Tạo một phiên bản của mô hình.
Bước 3: Huấn luyện mô hình trên dữ liệu, lưu trữ thông tin học được từ dữ liệu. Mô hình này đang tìm
hiểu mối quan hệ giữa chữ số (X) và nhãn (Y).
Bước 4: Dự đoán nhãn của dữ liệu mới. Sử dụng thông tin mà mô hình đọc được trong quá trình huấn
luyện mô hình. Đoạn code dưới đây dự đoán cho một lần quan sát.

Số thành phần, phương sai, bảng thời gian

You might also like