Mở đầu.

Đang xem: Phép phân tích thành phần chính

Đây là thuật toán sinh ra để giải quyết vấn đề dữ liệu có quá nhiều chiều dữ liệu, cần giảm bớt chiều dữ liệu nhằm tăng tốc độ xử lí, nhưng vẫn giữ lại thông tin nhiều nhất có thể (high variance).

Chúng ta cần tìm ra chiều dữ liệu có độ quan trọng cao, nhằm giảm bớt việc tính toán, cũng như tăng tốc độ xử lí.

*

PCA chuyển dữ liệu từ linear thành các thuộc tính mới không liên quan lẫn nhau.

Dữ liệu.

Chúng ta cần phân biệt 2 loại dữ liệu:

Dữ liệu liên quan (correlated):

*

Dữ liệu không liên quan (uncorrelated):

*

PCA tìm ra mean và principal components.

*
*

Làm thế nào để implement PCA:

Biến đổi X về dạng đồng nhất.Tính toán covariance matrix ΣTìm eigenvectors của ΣLấy K dimensions có giá trị variance cao nhất

eigenvectors (vector màu đỏ)

là vector không thay đổi hướng khi apply linear transformation.

Xem thêm: “ ooc là gì trong role và tất tần tật ý nghĩa liên quan khác

*

eigenvalue cho PC1

*

eigenvalue cho PC2

*

eigenvector

*

Sự phân bổ độ quan trọng của chiều dữ liệu

*
*

Algorithm

from numpy import arrayfrom numpy import meanfrom numpy import covfrom numpy.linalg import eig# define a matrix
A = array(<<1, 2>, <3, 4>, <5, 6>>)print(A)# calculate the mean of each column
M = mean(A.T, axis=1)print(M)# center columns by subtracting column means
C = A – Mprint(C)# calculate covariance matrix of centered matrix
V = cov(C.T)print(V)# eigendecomposition of covariance matrixvalues, vectors = eig(V)print(vectors)print(values)# project data
P = vectors.T.dot(C.T)print(P.T)Output:

*
*

Reference:

Hello anh em, hôm nay chúng ta sẽ cùng tìm hiểu và code thử món Principal Component Analysis (PCA) – tuyệt chiêu giảm chiều dữ liệu nhé!

Khi học lý thuyết thì anh em sẽ thấy các bài toán có vài đặc trưng (features) và vector input thường chỉ có độ dài 1,2 phần tử. Nhưng khi làm việc thực tế thì chúng ta sẽ thường xuyên phải deal với các input có số đặc trưng lớn, dài dằng dặc và chúng ta chả biết bỏ cái nào, dùng cái nào cho vừa hiệu quả vừa đỡ được chi phí tính toán.

Đó là lúc chúng ta nghĩ đến PCA để giảm chiều dữ liệu mà vẫn giữ lại được các đặc trưng tốt để phục vụ cho bài toán của chúng ta!

Trước khi bắt đầu mình xin phép được bỏ qua toàn bộ phần toán phức tạp, chỉ giải thích ở level cơ bản để chúng ta – những người newbie thích ăn mì – có thể hiểu và triển khai được thôi nhé!

Let’s go!

Phần 1 – Vậy PCA là gì?

PCA là viết tắt của Principal Component Analysis. Ta dịch thô sang tiếng Việt là “Phân tích thành phần chính”, tạm hiểu theo cách “nông dân” của mình là ta sẽ phân tích dữ liệu và sau đó tìm ra các thành phần chính của dữ liệu để giữ lại các thành phần đó. Ví dụ dữ liệu của chính ta có N features thì sau khi áp dụng PCA sẽ còn K features chính mà thôi (KGiảm chiều dữ liệu mà vẫn giữ được đặc trưng chính, chỉ mất đi “chút ít” đặc trưng.Tiết kiệm thời gian, chi phí tính toán
Dễ dàng visualize dữ liệu hơn để giúp ta có cái nhìn trực quan hơn.

Okie. Và tất nhiên K features này tất nhiên không được chọn ngẫu nhiên, chúng ta đi tiếp nhé!

Các components ở đây ta nói thực chất là các vectors độc lập tuyến tính được chọn sao cho khi chiếu các điểm dữ liệu lên vector đó thì các điểm dữ liệu có sự variance lớn nhất ( biến động nhiều nhất, phương sai lớn nhất).

*

Ví dụ như hình trên, chúng ta chọn 2 vector component theo thứ tự: 1st Comp sẽ có mức độ variance lớn nhất, ta chọn trước, sau đó đến 2nd Comp…. và cứ thế. Khi làm thực tế chúng ta sẽ cần xác định hoặc thử sai xem sẽ chọn bao nhiêu components là hợp lý và mang lại kết quả tốt nhất.

Xét một cách nhìn khác thì PCA cũng là một bài toán chuyển hệ tọa độ như hình dưới:

*

Okie, bây giờ chắc các bạn sẽ thắc mắc tại sao phải chọn comp với mức độ dữ liệu biến thiên variance lớn nhất làm gì nhỉ? Chọn bừa cái nào chả được :D. Haha.

Lý do đây! Ví dụ xét bài toán phân loại classification, ví dụ : Ung thư/ Không ung thư, Spam/Normal…. Bây giờ nếu chúng ta chọn 1 comp mà chiếu lên đó các điểm dữ liệu không high variance, nó đè lên nhau và co cụm lại một chỗ thì làm sao mà phân loại nổi. Nói cách khác là làm sao tìm được đường hay mặt phẳng chia tách các dữ liệu đó thành 2 phần khác nhau cho 2 class khác nhau. Do đó, ta phải chọn comp sao cho khi chiếu data lên comp đó thì nó high variance.

Okie rồi, tạm hiểu như vậy nhé các bạn. Bây giờ chúng ta sẽ thử triển khai với Python xem PCA nó mần răng.

Xem thêm: Netizen Là Gì? Hiểu Như Thế Nào Cho Đúng Về Netizen? Netizen Là Gì

Phần 2 – Triển khai Principal Component Analysis với Python

Để demo cách chúng ta triển khai PCA với Python, mình sẽ dùng một bộ dữ liệu khá phổ biến và tích hợp sẵn trong Sklearn đó là Breast_Cancer – Ung thư vú. Dữ liệu này có rất nhiều features khác nhau và khá lằng nhằng (do mình không có kiến thức y khoa haha) và dùng nó để minh họa PCA là chuẩn bài rồi.

Đầu tiên là cứ phải import đầy đủ các thư viện cái đã. Phần này là thói quen của mình khi làm việc với data, mình cứ import hết đề phòng thiếu

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as sns%matplotlib inline
Code language: Java
Script (javascript)Okie, xong rồi! Bây giờ ta sẽ load dữ liệu in ra xem data của chúng ta như nào:

from sklearn.datasets import load_breast_cancer# Đọc dữ liệu từ sklearncancer_set = load_breast_cancer()# Chuyển thành Data
Framecancer_data = pd.Data
Frame(data=cancer_set <"data">, columns=cancer_set<"feature_names">)cancer_data.head()
Code language: PHP (php)Và ta thấy dữ liệu có cả mớ cột

Leave a Reply

Your email address will not be published. Required fields are marked *