Phân tích thành phần chính PCA Phân tích thành phần chính PCA Phân tích thành phần chính PCA Phân tích thành phần chính PCA Phân tích thành phần chính PCA Phân tích thành phần chính PCA Phân tích thành phần chính PCA
Trang 1Đ ẠI HỌC QUỐC GIA TPHCM TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA QUẢN LÝ CÔNG NGHIỆP BÀI BÁO CÁO BÀI TẬP LỚN ĐẠI SỐ TUYẾN TÍNH
Giáo viên hướng dẫn: Bùi Anh Tuấn
Nhóm: L08
Trang 2I CƠ SỞ LÝ THUYẾT
PCA chính là phương pháp đi tìm một hệ cơ sở mới sao cho thông tin của dữ liệu chủ yếutập trung ở một vài toạ độ, phần còn lại chỉ mang một lượng nhỏ thông tin Và để cho đơngiản trong tính toán, PCA sẽ tìm một hệ trực chuẩn để làm cơ sở mới
Hình 1: Phân tích thành phần chính (PCA) của khoảng cách di truyền theo cặp
Giả sử hệ cơ sở trực chuẩn mới là U và chúng ta muốn giữ lại K toạ độ trong hệ cơ sởmới này Không mất tính tổng quát, giả sử đó là K thành phần đầu tiên Quan sát Hình 2:
Hình 2: Ý tưởng chính của PCA: Tìm một hệ trực chuẩn mới sao cho trong hệ này, các thành phần quan
trọng nhất nằm trong K thành phần đầu tiên
Trang 3Các bước phân tích PCA:
Bước 1: Tính giá trị trung bình của ´
X của X
Bước 2: Tính véctơ ^X =X− ´X
Tính ma trận hiệp phương sai: S= N −11 ^X T^X .
Bước 3: Tìm trị riêng của S và sắp xếp theo giá trị giảm dần λ1 > λ2> λ m và tìm các véctơ riêng đơn vị ứng với các trị riêng
Bước 4: Chọn k trị riêng ban đầu và k véctơ riêng đơn vị ứng với các trị riêng này Lập
ma trận A có các cột là các véctơ riêng đã chọn Ma trận A là phép biến đổi cần tìm.Bước 5: Tính ảnh A T^X T c a véctủ ơ ^X
Dữ liệu X ban đầu được xấp xỉ bởi X≈ A ^X + X´
3/ Trên đường chéo của S là phương sai của các véctơ x1; x2; ; x N
Phần tử s ij là hiệp phương sai của x i và x j
Tổng các phần tử trên đường chéo của S là phương sai của bảng dữ liệu
Giả sử S=PD P T Trên đường chéo của D là các giá trị riêng của S Tổng các giá trị riêng của S bằng tổng các phần tử của S ( bằng vết của S )
4/ Ma trận P là ma trận trực giao Mỗi ma trận trực giao tương ứng với một phép quay.Các cột của ma trận P tạo nên hệ trực chuẩn Nếu ta chọn cơ sở trực chuẩn là họ véctơ cộtcủa ma trận P, thì ta xây dựng được một hệ trục tọa độ mới dựa trên các véctơ này và có một phép quay từ hệ trục tọa độ ban đầu sang hệ trục tọa độ mới
5/ Nếu dữ liệu mẫu (sample data), thì S= 1
N−1
^
X T^X .Nếu dữ liệu dân số (population data), thì S=1^X T^X
Trang 4II ỨNG DỤNG
2.1 Eigenface
Eigenface là một trong các phương pháp phổ biến nhất trong bài toán nhận dạng khuônmặt Ý tưởng của Eigenface là đi tìm một không gian có số chiều nhỏ hơn để mô tả mỗikhuôn mặt, từ đó sử dụng vector trong không gian thấp này như là feature vector cho việcthực hiện classification Điều đáng nói là một bức ảnh khuôn mặt có kích thước khoảng
200 × 200 sẽ có số chiều là 40k - là một số cực lớn, trong khi đó, feature vector thườngchỉ có số chiều bằng vài trăm
Eigenface thực ra chính là PCA Các Eigenfaces chính là các eigenvectors ứng với các trịriêng lớn nhất của ma trận hiệp phương sai
Trong phần này, chúng ta cùng làm một thí nghiệm nhỏ trên cơ sở dữ liệu Yale facedatabase Các bức ảnh trong thí nghiệm này đã được căn chỉnh cho cùng với kích thước
và khuôn mặt nằm trọn vẹn trong một hình chữ nhật có kích thước 116 × 98 pixel Có tất
cả 15 người khác nhau, mỗi người có 11 bức ảnh được chụp ở các điều kiện ánh sáng vàcảm xúc khác nhau, bao gồm: ‘centerlight’, ‘glasses’, ‘happy’, ‘leftlight’, ‘noglasses’,
‘normal’, ‘rightlight’,’sad’, ‘sleepy’, ‘surprised’, và ‘wink’
Hình 3 dưới đây là ví dụ về các bức ảnh của người có id là 10
Hình 3: Ví dụ về ảnh của một người trong Yale Face Database
Trang 5Ta có thể thấy rằng số chiều dữ liệu là 116×98=11368 là một số khá lớn Tuy nhiên, vì chỉ
có tổng cộng 15×11=165 bức ảnh nên ta có thể nén các bức ảnh này về dữ liệu mới cóchiều nhỏ hơn 165 Trong ví dụ này, tôi chọn K=100
Dưới đây là đoạn code thực hiện PCA cho toàn bộ dữ liệu Chú ý rằng tôi sử dụng thưviện sklearn
import numpy as np
from scipy import misc # for loading image
np.random.seed( ) 1
# filename structure
path ='unpadded/'# path to the database
ids range( , = 1 16 ) # 15 persons
states [= 'centerlight' 'glasses' 'happy' 'leftlight' , , , ,
'noglasses' , 'normal' 'rightlight' 'sad' , , ,
'sleepy' , 'surprised' 'wink' , ]
for person_id in range( , 1 16 ):
for state in states:
Trang 6cnt +=1
# Doing PCA, note that each row is a datapoint
from sklearn.decomposition import PCA
Trong dòng pca = PCA(n_components=K), nếu n_components là một số thực trongkhoảng (0,1) PCA sẽ thực hiện việc tìm K dựa trên biểu thức (6)
Hình 4 dưới đây biểu diễn 18 vector riêng đầu tiên tìm được bằng PCA Các vector tìmđược ở dạng vector cột, ta cần phải reshape chúng để có thể minh hoạ như các bức ảnh
Trang 7Hình 4: Các eigenfaces tìm được bằng PCA.
Có một điều dễ nhận ra là các ảnh minh hoạ các vector thu được ít nhiều mang thông tincủa mặt người Thực tế, một khuôn mặt gốc sẽ được xấp xỉ như tổng có trọng số của
với ít chiều hơn, chúng còn được gọi là khuôn mặt riêng, tức eigenfaces
Để xem mức độ hiệu quả của Eigenfaces như thế nào, chúng ta thử minh hoạ các bức ảnhgốc và các bức ảnh được xấp xỉ bằng PCA, kết quả được cho như Hình 5 dưới đây:
Trang 8Hình 5: Hàng trên: các ảnh gốc Hàng dưới: các ảnh được suy ra từ eigenfaces Ảnh ở hàng dưới có nhiềunhiễu nhưng vẫn mang những đặc điểm riêng mà mắt người có thể phân biệt được.
Như vậy, vector với số chiều K=100 trong không gian mới mang khá đầy đủ thông tincủa vector có số chiều D=11368 trong không gian ban đầu
2.2 Unsupervised Abnormal Detection
Ngoài các ứng dụng về nén và classification, PCA còn được sử dụng trong nhiều lĩnh vựckhác nhau Abnormal Detection (dò tìm các hiện tượng không bình thường) là một trong
số đó Thêm nữa, giả sử chúng ta không biết nhãn của các sự kiện này, tức ta đang làmviệc với một bài toán Unsupervised
Ý tưởng cơ bản là các sự kiện ‘normal’ thường nằm gần một không gian con nào đó,trong khi các sự kiện ‘abnormal’ thường khác biệt với các sự kiện ‘normal’, tức nằm xakhông gian con đó Hơn nữa, vì là ‘abnormal’ nên số lượng các sự kiện thuộc loại này làrất nhỏ so với ‘normal’
Như vậy, chúng ta có thể làm PCA trên toàn bộ dữ liệu để tìm ra các thành phần chínhcủa dữ liệu, từ đó suy ra không gian con mà các điểm ‘normal’ nằm gần Việc xác địnhmột điểm là ‘normal’ hay ‘abnoral’ được xác định bằng cách đo khoảng cách từ điểm đótới không gian con tìm được
Hình 6 dưới đây minh hoạ cho việc xác định các sự kiện không bình thường
Trang 9Hình 6: PCA cho việc xác địnhcác sự kiện 'abnormal' với giả
sử rằng các sự kiện 'normal'chiếm đa số và nằm gần trongmột không gian con nào đó Khi
đó, nếu làm PCA trên toàn bộ
dữ liệu, không gian con thuđược gần với không gian concủa tập các sự kiện 'normal'.Lúc này, các điểm quá xa khônggian con này, trong trường hợpnày là các điểm màu cam, cóthể được coi là các sự kiện'abnormal'
Trang 10III CODE MATLAB
Input:
% tập dữ liệu về hoa Iris
% xem ví dụ tại: wikipedia.org/wiki/Iris_flower_data_set
%
% bảng dữ liệu này có kích thước 150 hàng x 5cột
% số đo của 150 bông hoa iris
% cột 1: chiều dài đài hoa
% cột 2: chiều rộng đài hoa
% cột 3: chiều dài cánh hoa
Trang 115.4 3.9 1.3 0.4 05.1 3.5 1.4 0.3 05.7 3.8 1.7 0.3 05.1 3.8 1.5 0.3 05.4 3.4 1.7 0.2 05.1 3.7 1.5 0.4 04.6 3.6 1.0 0.2 05.1 3.3 1.7 0.5 04.8 3.4 1.9 0.2 05.0 3.0 1.6 0.2 05.0 3.4 1.6 0.4 05.2 3.5 1.5 0.2 05.2 3.4 1.4 0.2 04.7 3.2 1.6 0.2 04.8 3.1 1.6 0.2 05.4 3.4 1.5 0.4 05.2 4.1 1.5 0.1 05.5 4.2 1.4 0.2 04.9 3.1 1.5 0.1 05.0 3.2 1.2 0.2 05.5 3.5 1.3 0.2 04.9 3.1 1.5 0.1 04.4 3.0 1.3 0.2 05.1 3.4 1.5 0.2 05.0 3.5 1.3 0.3 04.5 2.3 1.3 0.3 04.4 3.2 1.3 0.2 05.0 3.5 1.6 0.6 0
Trang 125.1 3.8 1.9 0.4 04.8 3.0 1.4 0.3 05.1 3.8 1.6 0.2 04.6 3.2 1.4 0.2 05.3 3.7 1.5 0.2 05.0 3.3 1.4 0.2 07.0 3.2 4.7 1.4 16.4 3.2 4.5 1.5 16.9 3.1 4.9 1.5 15.5 2.3 4.0 1.3 16.5 2.8 4.6 1.5 15.7 2.8 4.5 1.3 16.3 3.3 4.7 1.6 14.9 2.4 3.3 1.0 16.6 2.9 4.6 1.3 15.2 2.7 3.9 1.4 15.0 2.0 3.5 1.0 15.9 3.0 4.2 1.5 16.0 2.2 4.0 1.0 16.1 2.9 4.7 1.4 15.6 2.9 3.6 1.3 16.7 3.1 4.4 1.4 15.6 3.0 4.5 1.5 15.8 2.7 4.1 1.0 16.2 2.2 4.5 1.5 15.6 2.5 3.9 1.1 15.9 3.2 4.8 1.8 16.1 2.8 4.0 1.3 1
Trang 136.3 2.5 4.9 1.5 16.1 2.8 4.7 1.2 16.4 2.9 4.3 1.3 16.6 3.0 4.4 1.4 16.8 2.8 4.8 1.4 16.7 3.0 5.0 1.7 16.0 2.9 4.5 1.5 15.7 2.6 3.5 1.0 15.5 2.4 3.8 1.1 15.5 2.4 3.7 1.0 15.8 2.7 3.9 1.2 16.0 2.7 5.1 1.6 15.4 3.0 4.5 1.5 16.0 3.4 4.5 1.6 16.7 3.1 4.7 1.5 16.3 2.3 4.4 1.3 15.6 3.0 4.1 1.3 15.5 2.5 4.0 1.3 15.5 2.6 4.4 1.2 16.1 3.0 4.6 1.4 15.8 2.6 4.0 1.2 15.0 2.3 3.3 1.0 15.6 2.7 4.2 1.3 15.7 3.0 4.2 1.2 15.7 2.9 4.2 1.3 16.2 2.9 4.3 1.3 15.1 2.5 3.0 1.1 15.7 2.8 4.1 1.3 1
Trang 146.3 3.3 6.0 2.5 25.8 2.7 5.1 1.9 27.1 3.0 5.9 2.1 26.3 2.9 5.6 1.8 26.5 3.0 5.8 2.2 27.6 3.0 6.6 2.1 24.9 2.5 4.5 1.7 27.3 2.9 6.3 1.8 26.7 2.5 5.8 1.8 27.2 3.6 6.1 2.5 26.5 3.2 5.1 2.0 26.4 2.7 5.3 1.9 26.8 3.0 5.5 2.1 25.7 2.5 5.0 2.0 25.8 2.8 5.1 2.4 26.4 3.2 5.3 2.3 26.5 3.0 5.5 1.8 27.7 3.8 6.7 2.2 27.7 2.6 6.9 2.3 26.0 2.2 5.0 1.5 26.9 3.2 5.7 2.3 25.6 2.8 4.9 2.0 27.7 2.8 6.7 2.0 26.3 2.7 4.9 1.8 26.7 3.3 5.7 2.1 27.2 3.2 6.0 1.8 26.2 2.8 4.8 1.8 26.1 3.0 4.9 1.8 2
Trang 16% Loai versicolor => type_Hoa=1 (cot thu 5 trong file) => do thi la cham mau XANH LA;
% Loai virginica => type_Hoa=2 (cot thu 5 trong file) => do thi la cham mau VANG;
%
=====================================================================
====================================
% MO FILE & DOC DU LIEU;
load input.txt; % load file input.txt (file nay co kich thuoc 150hang x 5 cot);
X = input(:,1:4)'; % khi nhap vao, X l ma tran co co [4,150];�
%(tuc la co 150 cot, moi cot co 4 hang, moi cot dai dien cho mot bong hoa);
type_Hoa = input(:,5)'; % type_Hoa[1,150]={0;1;2} la ma tran the hien giong hoa;
soCot_X = size(X,2); % size(X) la co cua ma tran X, size(X,1) la so hang, size(X,2) la so cot;
%
=====================================================================
====================================
figure(1) % ve do thi thu 1;
for i=1:4 % cho bien i chay tu 1 den 4;
for j=1:i-1 % cho bien j chay tu 1 den i-1=3;
subplot(3,3,(i-1)+3*(j-1)) % chia khung, vi tri cua do thi;
scatter(X(i,:),X(j,:),4,type_Hoa,'filled') % scatter(x,y,sz,c): la ham bieu dien su phan tan bangcac vong tron,
% x,y: la cac toa do cua vong tron,
% sz: la kich thuoc cua vong tron,
% c: la mau sac cua vong tron,
%'filled': la dang vong tron, xem them: https://goo.su/3ojh;
Trang 17xlabel(sprintf('x%g',i)); % dat ten cho truc hoanh;
ylabel(sprintf('x%g',j)); % dat ten cho truc tung;
% THUC HIEN PHAN TICH THANH PHAN CHINH (PCA);
trungbinhcong_X = mean(X,2); % mean(X,2): la vector cot chua gia tri trung binh cua moi hang cua X, xem them: https://goo.su/3oji;
A = X - trungbinhcong_X*ones(1,soCot_X); % A= x(1) - x(tb);
% ones(1,soCot_X): tao ma tran co 1hang x (soCot_X)cot, ones(i,j)=1;
phuongsai = norm(A,'fro')^2; % norm(A,'fro')=sqrt(sum(diag(A'*A))): la do lon cua vector
A, 'fro': la chuan Frobenius;
[U,S,V] = svd(A,'econ'); % phan tich tri ki di, xem them: file "FUNCTION SVD.png";duongcheochinh_S = diag(S); % tao ra vector cot tu duong cheo chinh cua ma tran S, xem them: file "FUNCTION DIAG png";
phuongsai = norm(duongcheochinh_S)^2;
%
=====================================================================
====================================
% BIEU DIEN DU LIEU TREN HE TRUC TOA DO OXY;
C = S(1:3,1:3)*V(:,1:3)'; %3 he so dau tien cho moi diem, giong nhu U (:, 1: 3) '* A;
Trang 18q2 = norm(duongcheochinh_S(1:2))^2/phuongsai; % donvi: phan tram
Trang 19Ảnh 2:
Trang 20Ảnh 3:
Trang 21TÀI LIỆU THAM KHẢO
Tiệp, V.H (2017) Bài 27: Principal Component Analysis (phần 1/2) Truy cập ngày 4
tháng 1 năm 2020, từ principal-component-analysis
https://machinelearningcoban.com/2017/06/15/pca/#3-Tiệp, V.H (2017) Bài 28: Principal Component Analysis (phần 2/2) Truy cập ngày 4 tháng 1 năm 2020, từ https://machinelearningcoban.com/2017/06/21/pca2/
Vinh, Đ.V (2020) GIÁO TRÌNH ĐẠI SỐ TUYẾN TÍNH Nhà xuất bản: Đại học Quốc gia
TP.HCM