Triển khai pca trong python với scikit learn

Phân tích thành phần chính hay nói ngắn gọn là PCA được biết đến như một kỹ thuật giảm kích thước

Nó đã xuất hiện từ năm 1901 và vẫn được sử dụng như một phương pháp giảm kích thước chủ yếu trong học máy và thống kê. PCA là một phương pháp thống kê không giám sát

Trong bài viết này, chúng ta sẽ có một số trực giác về PCA và sẽ tự triển khai nó từ đầu bằng Python và NumPy

Tại sao lại sử dụng PCA ngay từ đầu?

Để hỗ trợ nguyên nhân sử dụng PCA, hãy xem xét một ví dụ

Giả sử chúng ta có một tập dữ liệu có hai biến và 10 số điểm dữ liệu. Nếu chúng tôi được yêu cầu trực quan hóa các điểm dữ liệu, chúng tôi có thể làm điều đó rất dễ dàng. Kết quả cũng rất dễ hiểu

X128142215252942X236261816202364Example Data points

Vẽ dữ liệu trên hai chiều

Bây giờ, nếu chúng ta cố gắng tăng số lượng biến, chúng ta gần như không thể tưởng tượng được một chiều cao hơn ba chiều.  

Vấn đề mà chúng tôi gặp phải khi phân tích các tập dữ liệu chiều cao hơn thường được gọi là "Lời nguyền của chiều". Thuật ngữ này lần đầu tiên được đặt ra bởi Richard E. người gác chuông

Phân tích thành phần chính làm giảm dữ liệu chiều cao xuống kích thước thấp hơn trong khi nắm bắt được mức độ biến đổi tối đa của tập dữ liệu. Trực quan hóa dữ liệu là ứng dụng phổ biến nhất của PCA. PCA cũng được sử dụng để giúp đào tạo thuật toán nhanh hơn bằng cách giảm số lượng kích thước của dữ liệu

Triển khai PCA với python

Để nắm bắt trực giác tối đa từ nội dung được đưa ra dưới đây, chúng tôi cho rằng bạn phải biết một chút về đại số tuyến tính và ma trận. Nếu không thì chúng tôi rất khuyến khích bạn xem loạt bài về đại số tuyến tính của 3Blue1Brown trên YouTube của Grant Sanderson, để xem lại các khái niệm vì nó sẽ rất có ích trong hành trình Học máy của bạn phía trước

Chúng ta có thể nghĩ về phân tích Thành phần chính giống như lắp một hình elip n chiều vào dữ liệu sao cho mỗi trục của hình elip đại diện cho một thành phần chính. Trục thành phần chính càng lớn thì độ biến thiên của dữ liệu mà nó đại diện càng lớn

Ví dụ. Lắp một hình elip vào dữ liệu

Các bước triển khai PCA trong Python

#Importing required libraries
import numpy as np

1. Trừ đi giá trị trung bình của từng biến

Trừ giá trị trung bình của từng biến khỏi tập dữ liệu để tập dữ liệu phải được căn giữa ở gốc. Làm điều này chứng tỏ là rất hữu ích khi tính toán ma trận hiệp phương sai

#Generate a dummy dataset.
X = np.random.randint[10,50,100].reshape[20,5] 
# mean Centering the data  
X_meaned = X - np.mean[X , axis = 0]

Dữ liệu được tạo bởi đoạn mã trên có kích thước [20,5] i. e. 20 ví dụ và 5 biến cho mỗi ví dụ. chúng tôi đã tính giá trị trung bình của từng biến và trừ giá trị đó khỏi mỗi hàng của cột tương ứng

2. Tính ma trận hiệp phương sai

Tính ma trận hiệp phương sai của dữ liệu trung bình. Bạn có thể biết thêm về ma trận hiệp phương sai trong bài viết Wikipedia thực sự nhiều thông tin này tại đây

Ma trận hiệp phương sai là ma trận vuông biểu thị hiệp phương sai của các phần tử với nhau. Hiệp phương sai của một phần tử với chính nó không là gì khác ngoài Phương sai của nó

Đó là lý do tại sao các phần tử đường chéo của ma trận hiệp phương sai chỉ là phương sai của các phần tử

# calculating the covariance matrix of the mean-centered data.
cov_mat = np.cov[X_meaned , rowvar = False]

Chúng ta có thể dễ dàng tính toán Ma trận hiệp phương sai bằng phương pháp

#Generate a dummy dataset.
X = np.random.randint[10,50,100].reshape[20,5] 
# mean Centering the data  
X_meaned = X - np.mean[X , axis = 0]
0. Giá trị mặc định cho
#Generate a dummy dataset.
X = np.random.randint[10,50,100].reshape[20,5] 
# mean Centering the data  
X_meaned = X - np.mean[X , axis = 0]
1 được đặt thành
#Generate a dummy dataset.
X = np.random.randint[10,50,100].reshape[20,5] 
# mean Centering the data  
X_meaned = X - np.mean[X , axis = 0]
2, hãy nhớ đặt thành
#Generate a dummy dataset.
X = np.random.randint[10,50,100].reshape[20,5] 
# mean Centering the data  
X_meaned = X - np.mean[X , axis = 0]
3 để có được ma trận hiệp phương sai theo thứ nguyên yêu cầu

3. Tính toán các giá trị riêng và vectơ riêng

Bây giờ, hãy tính toán Giá trị riêng và vectơ riêng cho ma trận Hiệp phương sai đã tính toán. Các vectơ riêng của ma trận Hiệp phương sai mà chúng ta nhận được là Trực giao với nhau và mỗi vectơ đại diện cho một trục chính

Giá trị riêng cao hơn tương ứng với độ biến thiên cao hơn. Do đó, trục chính có Giá trị riêng cao hơn sẽ là trục ghi lại độ biến thiên cao hơn trong dữ liệu

Trực giao có nghĩa là các vectơ vuông góc với nhau. Giá trị riêng và vectơ dường như rất đáng sợ cho đến khi chúng ta có được ý tưởng và khái niệm đằng sau nó

#Calculating Eigenvalues and Eigenvectors of the covariance matrix
eigen_values , eigen_vectors = np.linalg.eigh[cov_mat]

Phương thức NumPy

#Generate a dummy dataset.
X = np.random.randint[10,50,100].reshape[20,5] 
# mean Centering the data  
X_meaned = X - np.mean[X , axis = 0]
4 trả về các giá trị riêng và vectơ riêng của một Hermitian phức tạp hoặc một ma trận đối xứng thực

4. Sắp xếp các giá trị riêng theo thứ tự giảm dần

Sắp xếp các giá trị riêng theo thứ tự giảm dần cùng với vectơ riêng tương ứng của chúng

Hãy nhớ rằng mỗi cột trong ma trận véc tơ riêng tương ứng với một thành phần chính, vì vậy việc sắp xếp chúng theo thứ tự giảm dần của Giá trị riêng sẽ tự động sắp xếp thành phần chính theo thứ tự giảm dần của độ biến thiên của chúng

Do đó, cột đầu tiên trong ma trận vectơ Eigen được sắp xếp lại của chúng tôi sẽ là thành phần chính nắm bắt được độ biến thiên cao nhất

#sort the eigenvalues in descending order
sorted_index = np.argsort[eigen_values][::-1]

sorted_eigenvalue = eigen_values[sorted_index]
#similarly sort the eigenvectors 
sorted_eigenvectors = eigen_vectors[:,sorted_index]

#Generate a dummy dataset.
X = np.random.randint[10,50,100].reshape[20,5] 
# mean Centering the data  
X_meaned = X - np.mean[X , axis = 0]
5 trả về một mảng các chỉ số có cùng hình dạng

5. Chọn một tập hợp con từ ma trận Eigenvalue được sắp xếp lại

Chọn một tập hợp con từ ma trận Eigenvalue được sắp xếp lại theo nhu cầu của chúng tôi. e. số_comp = 2. Điều này có nghĩa là chúng tôi đã chọn hai thành phần chính đầu tiên

# select the first n eigenvectors, n is desired dimension
# of our final reduced data.

n_components = 2 #you can select any number of components.
eigenvector_subset = sorted_eigenvectors[:,0:n_components]

n_components = 2 có nghĩa là dữ liệu cuối cùng của chúng tôi sẽ được giảm xuống chỉ còn 2 biến. nếu chúng ta thay đổi nó thành 3 thì dữ liệu của chúng ta sẽ giảm xuống còn 3 biến

6. Chuyển đổi dữ liệu

Cuối cùng, chuyển đổi dữ liệu bằng cách có một tích vô hướng giữa Chuyển vị của tập hợp con vectơ riêng và Chuyển vị của dữ liệu trung bình. Bằng cách chuyển đổi kết quả của sản phẩm chấm, kết quả chúng tôi nhận được là dữ liệu được giảm xuống các kích thước thấp hơn từ các kích thước cao hơn

#Transform the data 
X_reduced = np.dot[eigenvector_subset.transpose[],X_meaned.transpose[]].transpose[]

Kích thước cuối cùng của X_reduced sẽ là [ 20, 2 ] và ban đầu dữ liệu có kích thước cao hơn [ 20, 5 ]

Giờ đây, chúng tôi có thể trực quan hóa dữ liệu của mình bằng các công cụ có sẵn mà chúng tôi có. tiếng hoan hô. nhiệm vụ hoàn thành

Mã hoàn chỉnh để phân tích thành phần chính trong Python

Bây giờ, hãy kết hợp mọi thứ ở trên bằng cách tạo một hàm và thử phân tích Thành phần chính của chúng ta từ đầu trên một ví dụ

import numpy as np

def PCA[X , num_components]:
    
    #Step-1
    X_meaned = X - np.mean[X , axis = 0]
    
    #Step-2
    cov_mat = np.cov[X_meaned , rowvar = False]
    
    #Step-3
    eigen_values , eigen_vectors = np.linalg.eigh[cov_mat]
    
    #Step-4
    sorted_index = np.argsort[eigen_values][::-1]
    sorted_eigenvalue = eigen_values[sorted_index]
    sorted_eigenvectors = eigen_vectors[:,sorted_index]
    
    #Step-5
    eigenvector_subset = sorted_eigenvectors[:,0:num_components]
    
    #Step-6
    X_reduced = np.dot[eigenvector_subset.transpose[] , X_meaned.transpose[] ].transpose[]
    
    return X_reduced

Chúng tôi đã định nghĩa một hàm có tên PCA chấp nhận ma trận dữ liệu và số lượng thành phần làm đối số đầu vào

Chúng tôi sẽ sử dụng bộ dữ liệu IRIS và áp dụng chức năng PCA của chúng tôi cho nó

import pandas as pd

#Get the IRIS dataset
url = "//archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
data = pd.read_csv[url, names=['sepal length','sepal width','petal length','petal width','target']]

#prepare the data
x = data.iloc[:,0:4]

#prepare the target
target = data.iloc[:,4]

#Applying it to PCA function
mat_reduced = PCA[x , 2]

#Creating a Pandas DataFrame of reduced Dataset
principal_df = pd.DataFrame[mat_reduced , columns = ['PC1','PC2']]

#Concat it with target variable to create a complete Dataset
principal_df = pd.concat[[principal_df , pd.DataFrame[target]] , axis = 1]

Mẹo quan trọng. chúng ta nên chuẩn hóa dữ liệu bất cứ khi nào cần thiết trước khi áp dụng bất kỳ thuật toán ML nào cho dữ liệu đó. Trong đoạn mã trên, chúng tôi đã không chuẩn hóa dữ liệu của mình, nhưng chúng tôi đã làm như vậy khi triển khai PCA

Hãy vẽ kết quả của chúng tôi bằng cách sử dụng thư viện seaborn và matplotlib

import seaborn as sb
import matplotlib.pyplot as plt

plt.figure[figsize = [6,6]]
sb.scatterplot[data = principal_df , x = 'PC1',y = 'PC2' , hue = 'target' , s = 60 , palette= 'icefire']

Sơ đồ kích thước giảm

Đó là nó. Nó hoạt động hoàn hảo

Phần kết luận

Trong bài viết này, chúng ta đã tìm hiểu về PCA, cách PCA hoạt động và triển khai PCA bằng NumPy. học tập vui vẻ

Làm cách nào để áp dụng PCA bằng sklearn?

Thực hiện PCA bằng Scikit-Learn là quy trình gồm hai bước. .
Khởi tạo lớp PCA bằng cách chuyển số lượng thành phần cho hàm tạo
Gọi các phương thức phù hợp và sau đó chuyển đổi bằng cách chuyển bộ tính năng cho các phương thức này. Phương thức biến đổi trả về số lượng thành phần chính được chỉ định

Làm cách nào để triển khai PCA trong Python?

PCA để tăng tốc thuật toán máy học .
Bước 1. Tải xuống và tải dữ liệu. .
Bước 2. Chia dữ liệu thành các tập huấn luyện và kiểm tra. .
Bước 3. Chuẩn hóa dữ liệu. .
Bước 4. Nhập khẩu và áp dụng PCA. .
Bước 5. Áp dụng Ánh xạ [biến đổi] cho Tập huấn luyện và Tập kiểm tra. .
Bước 6. Áp dụng hồi quy logistic cho dữ liệu đã chuyển đổi

PCA phân tích thành phần chính trong Python với Scikit tìm hiểu là gì?

Phân tích thành phần chính [PCA] là gì? . Thuật toán này xác định và loại bỏ các tính năng ít hữu ích hơn để thực hiện phép tính gần đúng hợp lệ trên tập dữ liệu. the main linear algorithm for dimension reduction often used in unsupervised learning. This algorithm identifies and discards features that are less useful to make a valid approximation on a dataset.

Nhiệm vụ nào sau đây là quan trọng khi triển khai PCA bằng Python?

Triển khai Python. Để triển khai PCA trong Scikit learn, điều cần thiết là phải chuẩn hóa/chuẩn hóa dữ liệu trước khi áp dụng PCA. PCA được nhập từ sklearn. phân hủy. Chúng ta cần chọn số lượng thành phần chính cần thiết.

Chủ Đề