PRINCIPAL COMPONENT ANALYSIS LÀ GÌ

     

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.

Bạn đang xem: Principal component analysis là gì

Đó 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ánDễ 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).

Xem thêm: Code Refactoring Là Gì ? Định Nghĩa Và Giải Thích Ý Nghĩa Code Refactoring Là Gì


*

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: Ánh Sáng Truyền Đi Trong Không Khí Với Vận Tốc Gần Bằng, Bao Nhiêu

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: JavaScript (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 DataFramecancer_data = pd.DataFrame(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