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
ĐẠ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 ⸸ ĐỀ TÀI 11: PHÂN TÍCH PCA ⸸ Giáo viên hướng dẫn: Bùi Anh Tuấn Nhóm: L08 Tên thành viên Mã số sinh viên Huỳnh Quốc Anh 2012586 Ngô Xuân Bách 2012649 Vương Gia Bảo 2012678 Thái Chí Hiếu 2013162 Huỳnh Phước Huy 2013291 Lại Minh Khoa 2013494 Trần Đăng Khoa 2013516 Nguyễn Ngọc Lan 2013593 Tống Thị Khánh Linh 2013643 Nguyễn Hồng Phúc 2014174 I CƠ SỞ LÝ THUYẾT PCA phương pháp tìm hệ sở cho thông tin liệu chủ yếu tập trung vài toạ độ, phần lại mang lượng nhỏ thông tin Và đơn giản tính tốn, PCA tìm hệ trực chuẩn để làm sở Hình 1: Phân tích thành phần (PCA) khoảng cách di truyền theo cặp Giả sử hệ sở trực chuẩn U muốn giữ lại K toạ độ hệ sở Khơng tính tổng qt, giả sử K thành phần Quan sát Hình 2: Hình 2: Ý tưởng PCA: Tìm hệ trực chuẩn cho hệ này, thành phần quan trọng nằm K thành phần Các bước phân tích PCA: Bước 1: Tính giá trị trung bình X´ X ´ X =X− X Bước 2: Tính véctơ ^ T ^ X X Tính ma trận hiệp phương sai: S= N −1 ^ Bước 3: Tìm trị riêng S xếp theo giá trị giảm dần véctơ riêng đơn vị ứng với trị riêng λ1 >λ 2> λ m tìm Bước 4: Chọn k trị riêng ban đầu k véctơ riêng đơn vị ứng với trị riêng Lập ma trận A có cột véctơ riêng chọn Ma trận A phép biến đổi cần tìm T X Bước 5: Tính ảnh A T ^ X véctơ ^ Dữ liệu X ban đầu xấp xỉ X≈ A ^ X + X´ Mỗi cột A ^ XT ma trận P chứa tọa độ hàng ma trận ^ X sở từ cột Lưu ý: 1/ Ma trận S ma trận đối xứng thực trị riêng S số thực không âm 2/ Ma trận S ln chéo hóa trực giao 3/ Trên đường chéo S phương sai véctơ x ; x ; ; x N Phần tử s ij hiệp phương sai x i x j Tổng phần tử đường chéo S phương sai bảng liệu Giả sử S=PD P T Trên đường chéo D giá trị riêng S Tổng giá trị riêng S tổng phần tử S ( vết S ) 4/ Ma trận P ma trận trực giao Mỗi ma trận trực giao tương ứng với phép quay Các cột ma trận P tạo nên hệ trực chuẩn Nếu ta chọn sở trực chuẩn họ véctơ cột ma trận P, ta xây dựng hệ trục tọa độ dựa véctơ có phép quay từ hệ trục tọa độ ban đầu sang hệ trục tọa độ XT ^ X 5/ Nếu liệu mẫu (sample data), S= N−1 ^ Nếu liệu dân số (population data), S= ^T ^ X X N II ỨNG DỤNG 2.1 Eigenface Eigenface phương pháp phổ biến toán nhận dạng khuôn mặt Ý tưởng Eigenface tìm khơng gian có số chiều nhỏ để mơ tả khn mặt, từ sử dụng vector không gian thấp feature vector cho việc thực classification Điều đáng nói ảnh khn mặt có kích thước khoảng 200 × 200 có số chiều 40k - số cực lớn, đó, feature vector thường có số chiều vài trăm Eigenface thực PCA Các Eigenfaces eigenvectors ứng với trị riêng lớn ma trận hiệp phương sai Trong phần này, làm thí nghiệm nhỏ sở liệu Yale face database Các ảnh thí nghiệm chỉnh cho với kích thước khn mặt nằm trọn vẹn hình chữ nhật có kích thước 116 × 98 pixel Có tất 15 người khác nhau, người có 11 ảnh chụp điều kiện ánh sáng cảm xúc khác nhau, bao gồm: ‘centerlight’, ‘glasses’, ‘happy’, ‘leftlight’, ‘noglasses’, ‘normal’, ‘rightlight’,’sad’, ‘sleepy’, ‘surprised’, ‘wink’ Hình ví dụ ảnh người có id 10 Hình 3: Ví dụ ảnh người Yale Face Database Ta thấy số chiều liệu 116×98=11368 số lớn Tuy nhiên, có tổng cộng 15×11=165 ảnh nên ta nén ảnh liệu có chiều nhỏ 165 Trong ví dụ này, chọn K=100 Dưới đoạn code thực PCA cho tồn liệu Chú ý 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' ] prefix = 'subject' surfix = '.pgm' # data dimension h = 116 # hight w = 98 # width D=h*w N = len(states)*15 K = 100 # collect all data X = np.zeros((D, N)) cnt = for person_id in range(1, 16): for state in states: fn = path + prefix + str(person_id).zfill(2) + '.' + state + surfix X[:, cnt] = misc.imread(fn).reshape(D) cnt += # Doing PCA, note that each row is a datapoint from sklearn.decomposition import PCA pca = PCA(n_components=K) # K = 100 pca.fit(X.T) # projection matrix U = pca.components_.T Chú ý hàm sklearn chọn liệu dạng hàng Cịn tơi thường chọn liệu dạng cột cho thuận tiện biểu diễn toán học Trước sử dụng sklearn, bạn đọc ý chuyển vị ma trận liệu Trong dòng pca = PCA(n_components=K), n_components số thực khoảng (0,1) PCA thực việc tìm K dựa biểu thức (6) Hình biểu diễn 18 vector riêng tìm PCA Các vector tìm dạng vector cột, ta cần phải reshape chúng để minh hoạ ảnh Hình 4: Các eigenfaces tìm PCA Có điều dễ nhận ảnh minh hoạ vector thu nhiều mang thơng tin mặt người Thực tế, khuôn mặt gốc xấp xỉ tổng có trọng số khn mặt Vì vector riêng đóng vai trị sở khơng gian với chiều hơn, chúng cịn gọi khn mặt riêng, tức eigenfaces Để xem mức độ hiệu Eigenfaces nào, thử minh hoạ ảnh gốc ảnh xấp xỉ PCA, kết cho Hình đây: Hình 5: Hàng trên: ảnh gốc Hàng dưới: ảnh suy từ eigenfaces Ảnh hàng có nhiều nhiễu mang đặc điểm riêng mà mắt người phân biệt Như vậy, vector với số chiều K=100 không gian mang đầy đủ thơng tin vector có số chiều D=11368 không gian ban đầu 2.2 Unsupervised Abnormal Detection Ngồi ứng dụng nén classification, PCA cịn sử dụng nhiều lĩnh vực khác Abnormal Detection (dị tìm tượng khơng bình thường) số Thêm nữa, giả sử nhãn kiện này, tức ta làm việc với toán Unsupervised Ý tưởng kiện ‘normal’ thường nằm gần khơng gian đó, kiện ‘abnormal’ thường khác biệt với kiện ‘normal’, tức nằm xa khơng gian Hơn nữa, ‘abnormal’ nên số lượng kiện thuộc loại nhỏ so với ‘normal’ Như vậy, làm PCA tồn liệu để tìm thành phần liệu, từ suy khơng gian mà điểm ‘normal’ nằm gần Việc xác định điểm ‘normal’ hay ‘abnoral’ xác định cách đo khoảng cách từ điểm tới khơng gian tìm Hình minh hoạ cho việc xác định kiện khơng bình thường Hình 6: PCA cho việc xác định kiện 'abnormal' với giả sử kiện 'normal' chiếm đa số nằm gần khơng gian Khi đó, làm PCA tồn liệu, khơng gian thu gần với không gian tập kiện 'normal' Lúc này, điểm xa không gian này, trường hợp điểm màu cam, coi kiện 'abnormal' III CODE MATLAB Input: % tập liệu hoa Iris % xem ví dụ tại: wikipedia.org/wiki/Iris_flower_data_set % % bảng liệu có kích thước 150 hàng x 5cột % số đo 150 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 % cột 4: chiều rộng cánh hoa % cột 5: giống hoa (0: setosa, 1: versicolor, 2: virginica) 5.1 3.5 1.4 0.2 4.9 3.0 1.4 0.2 4.7 3.2 1.3 0.2 4.6 3.1 1.5 0.2 5.0 3.6 1.4 0.2 5.4 3.9 1.7 0.4 4.6 3.4 1.4 0.3 5.0 3.4 1.5 0.2 4.4 2.9 1.4 0.2 4.9 3.1 1.5 0.1 5.4 3.7 1.5 0.2 4.8 3.4 1.6 0.2 4.8 3.0 1.4 0.1 4.3 3.0 1.1 0.1 5.8 4.0 1.2 0.2 5.7 4.4 1.5 0.4 5.4 3.9 1.3 0.4 5.1 3.5 1.4 0.3 5.7 3.8 1.7 0.3 5.1 3.8 1.5 0.3 5.4 3.4 1.7 0.2 5.1 3.7 1.5 0.4 4.6 3.6 1.0 0.2 5.1 3.3 1.7 0.5 4.8 3.4 1.9 0.2 5.0 3.0 1.6 0.2 5.0 3.4 1.6 0.4 5.2 3.5 1.5 0.2 5.2 3.4 1.4 0.2 4.7 3.2 1.6 0.2 4.8 3.1 1.6 0.2 5.4 3.4 1.5 0.4 5.2 4.1 1.5 0.1 5.5 4.2 1.4 0.2 4.9 3.1 1.5 0.1 5.0 3.2 1.2 0.2 5.5 3.5 1.3 0.2 4.9 3.1 1.5 0.1 4.4 3.0 1.3 0.2 5.1 3.4 1.5 0.2 5.0 3.5 1.3 0.3 4.5 2.3 1.3 0.3 4.4 3.2 1.3 0.2 5.0 3.5 1.6 0.6 5.1 3.8 1.9 0.4 4.8 3.0 1.4 0.3 5.1 3.8 1.6 0.2 4.6 3.2 1.4 0.2 5.3 3.7 1.5 0.2 5.0 3.3 1.4 0.2 7.0 3.2 4.7 1.4 6.4 3.2 4.5 1.5 6.9 3.1 4.9 1.5 5.5 2.3 4.0 1.3 6.5 2.8 4.6 1.5 5.7 2.8 4.5 1.3 6.3 3.3 4.7 1.6 4.9 2.4 3.3 1.0 6.6 2.9 4.6 1.3 5.2 2.7 3.9 1.4 5.0 2.0 3.5 1.0 5.9 3.0 4.2 1.5 6.0 2.2 4.0 1.0 6.1 2.9 4.7 1.4 5.6 2.9 3.6 1.3 6.7 3.1 4.4 1.4 5.6 3.0 4.5 1.5 5.8 2.7 4.1 1.0 6.2 2.2 4.5 1.5 5.6 2.5 3.9 1.1 5.9 3.2 4.8 1.8 6.1 2.8 4.0 1.3 6.3 2.5 4.9 1.5 6.1 2.8 4.7 1.2 6.4 2.9 4.3 1.3 6.6 3.0 4.4 1.4 6.8 2.8 4.8 1.4 6.7 3.0 5.0 1.7 6.0 2.9 4.5 1.5 5.7 2.6 3.5 1.0 5.5 2.4 3.8 1.1 5.5 2.4 3.7 1.0 5.8 2.7 3.9 1.2 6.0 2.7 5.1 1.6 5.4 3.0 4.5 1.5 6.0 3.4 4.5 1.6 6.7 3.1 4.7 1.5 6.3 2.3 4.4 1.3 5.6 3.0 4.1 1.3 5.5 2.5 4.0 1.3 5.5 2.6 4.4 1.2 6.1 3.0 4.6 1.4 5.8 2.6 4.0 1.2 5.0 2.3 3.3 1.0 5.6 2.7 4.2 1.3 5.7 3.0 4.2 1.2 5.7 2.9 4.2 1.3 6.2 2.9 4.3 1.3 5.1 2.5 3.0 1.1 5.7 2.8 4.1 1.3 6.3 3.3 6.0 2.5 5.8 2.7 5.1 1.9 7.1 3.0 5.9 2.1 6.3 2.9 5.6 1.8 6.5 3.0 5.8 2.2 7.6 3.0 6.6 2.1 4.9 2.5 4.5 1.7 7.3 2.9 6.3 1.8 6.7 2.5 5.8 1.8 7.2 3.6 6.1 2.5 6.5 3.2 5.1 2.0 6.4 2.7 5.3 1.9 6.8 3.0 5.5 2.1 5.7 2.5 5.0 2.0 5.8 2.8 5.1 2.4 6.4 3.2 5.3 2.3 6.5 3.0 5.5 1.8 7.7 3.8 6.7 2.2 7.7 2.6 6.9 2.3 6.0 2.2 5.0 1.5 6.9 3.2 5.7 2.3 5.6 2.8 4.9 2.0 7.7 2.8 6.7 2.0 6.3 2.7 4.9 1.8 6.7 3.3 5.7 2.1 7.2 3.2 6.0 1.8 6.2 2.8 4.8 1.8 6.1 3.0 4.9 1.8 6.4 2.8 5.6 2.1 7.2 3.0 5.8 1.6 7.4 2.8 6.1 1.9 7.9 3.8 6.4 2.0 6.4 2.8 5.6 2.2 6.3 2.8 5.1 1.5 6.1 2.6 5.6 1.4 7.7 3.0 6.1 2.3 6.3 3.4 5.6 2.4 6.4 3.1 5.5 1.8 6.0 3.0 4.8 1.8 6.9 3.1 5.4 2.1 6.7 3.1 5.6 2.4 6.9 3.1 5.1 2.3 5.8 2.7 5.1 1.9 6.8 3.2 5.9 2.3 6.7 3.3 5.7 2.5 6.7 3.0 5.2 2.3 6.3 2.5 5.0 1.9 6.5 3.0 5.2 2.0 6.2 3.4 5.4 2.3 5.9 3.0 5.1 1.8 Code PCA: % LUU Y: DOC FILE "input.txt" TRUOC KHI DOC CODE; % % QUY UOC: Loai Setosa XANH DUONG; => type_Hoa=0 (cot thu file) => thi la cham mau % Loai versicolor => type_Hoa=1 (cot thu file) => thi la cham mau XANH LA; % Loai virginica => type_Hoa=2 (cot thu file) => thi la cham mau VANG; % ===================================================================== ==================================== % MO FILE & DOC DU LIEU; load input.txt; % load file input.txt (file co kich thuoc 150hang x cot); % nhap vao, X l� ma tran co co [4,150]; X = input(:,1:4)'; %(tuc la co 150 cot, moi cot co 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); cot; % size(X) la co cua ma tran X, size(X,1) la so hang, size(X,2) la so % ===================================================================== ==================================== figure(1) % ve thi thu 1; for i=1:4 % cho bien i chay tu den 4; for j=1:i-1 % cho bien j chay tu den i-1=3; subplot(3,3,(i-1)+3*(j-1)) % chia khung, vi tri cua thi; scatter(X(i,:),X(j,:),4,type_Hoa,'filled') % scatter(x,y,sz,c): la ham bieu dien su phan tan bang cac vong tron, % x,y: la cac toa 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; xlabel(sprintf('x%g',i)); % dat ten cho truc hoanh; ylabel(sprintf('x%g',j)); % dat ten cho truc tung; end end % ===================================================================== ==================================== % 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; A, 'fro': la chuan Frobenius; [U,S,V] = svd(A,'econ'); % norm(A,'fro')=sqrt(sum(diag(A'*A))): la lon cua vector % phan tich tri ki di, xem them: file "FUNCTION SVD.png"; duongcheochinh_S = diag(S); % tao 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; q2 = norm(duongcheochinh_S(1:2))^2/phuongsai; % donvi: phan tram figure(2); scatter(C(1,:),C(2,:),17,type_Hoa,'filled') xlabel('PC1'); ylabel('PC2'); title(sprintf('2 phan, nam bat% 4g %% cua tong bien the',100*q2)); % ===================================================================== ==================================== % BIEU DIEN DU LIEU TREN HE TRUC TOA DO OXYZ q3 = norm(duongcheochinh_S(1:3))^2/phuongsai; figure(3); scatter3(C(1,:),C(2,:),C(3,:),27,type_Hoa,'filled') nice3dn(); xlabel('PC1'); å ylabel('PC2'); zlabel('PC3'); title(sprintf('3 phan, nam bat %.4g%% cua tong bien the',100*q3)); % HET ! Ảnh 1: Ảnh 2: Ảnh 3: TÀ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 tháng năm 2020, từ https://machinelearningcoban.com/2017/06/15/pca/#3principal-component-analysis Tiệp, V.H (2017) Bài 28: Principal Component Analysis (phần 2/2) Truy cập ngày tháng 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 ... THUYẾT PCA phương pháp tìm hệ sở cho thơng tin liệu chủ yếu tập trung vài toạ độ, phần lại mang lượng nhỏ thơng tin Và đơn giản tính tốn, PCA tìm hệ trực chuẩn để làm sở Hình 1: Phân tích thành phần. .. Quan sát Hình 2: Hình 2: Ý tưởng PCA: Tìm hệ trực chuẩn cho hệ này, thành phần quan trọng nằm K thành phần Các bước phân tích PCA: Bước 1: Tính giá trị trung bình X´ X ´ X =X− X Bước 2: Tính véctơ... misc.imread(fn).reshape(D) cnt += # Doing PCA, note that each row is a datapoint from sklearn.decomposition import PCA pca = PCA( n_components=K) # K = 100 pca. fit(X.T) # projection matrix U = pca. components_.T Chú