Scikit Learn - Giảm kích thước bằng PCA

Giảm kích thước, một phương pháp học máy không giám sát được sử dụng để giảm số lượng biến tính năng cho mỗi tập hợp lựa chọn mẫu dữ liệu của các tính năng chính. Phân tích thành phần chính (PCA) là một trong những thuật toán phổ biến để giảm kích thước.

PCA chính xác

Principal Component Analysis (PCA) được sử dụng để giảm kích thước tuyến tính bằng cách sử dụng Singular Value Decomposition(SVD) của dữ liệu để chiếu nó vào không gian có chiều thấp hơn. Trong khi phân rã bằng PCA, dữ liệu đầu vào được căn giữa nhưng không được chia tỷ lệ cho từng tính năng trước khi áp dụng SVD.

Thư viện Scikit-learning ML cung cấp sklearn.decomposition.PCAmô-đun được triển khai dưới dạng một đối tượng biến áp học n thành phần trong phương thức fit () của nó. Nó cũng có thể được sử dụng trên dữ liệu mới để chiếu nó lên các thành phần này.

Thí dụ

Ví dụ dưới đây sẽ sử dụng mô-đun sklearn.decomposition.PCA để tìm 5 thành phần chính tốt nhất từ ​​bộ dữ liệu bệnh tiểu đường của người da đỏ Pima.

from pandas import read_csv
from sklearn.decomposition import PCA
path = r'C:\Users\Leekha\Desktop\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', ‘class']
dataframe = read_csv(path, names = names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
pca = PCA(n_components = 5)
fit = pca.fit(X)
print(("Explained Variance: %s") % (fit.explained_variance_ratio_))
print(fit.components_)

Đầu ra

Explained Variance: [0.88854663 0.06159078 0.02579012 0.01308614 0.00744094]
[
   [-2.02176587e-03 9.78115765e-02 1.60930503e-02 6.07566861e-029.93110844e-01 1.40108085e-02 5.37167919e-04 -3.56474430e-03]
   [-2.26488861e-02 -9.72210040e-01 -1.41909330e-01 5.78614699e-029.46266913e-02 -4.69729766e-02 -8.16804621e-04 -1.40168181e-01]
   [-2.24649003e-02 1.43428710e-01 -9.22467192e-01 -3.07013055e-012.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01]
   [-4.90459604e-02 1.19830016e-01 -2.62742788e-01 8.84369380e-01-6.55503615e-02 1.92801728e-01 2.69908637e-03 -3.01024330e-01]
   [ 1.51612874e-01 -8.79407680e-02 -2.32165009e-01 2.59973487e-01-1.72312241e-04 2.14744823e-02 1.64080684e-03 9.20504903e-01]
]

PCA gia tăng

Incremental Principal Component Analysis (IPCA) được sử dụng để giải quyết hạn chế lớn nhất của Phân tích thành phần chính (PCA) và đó là PCA chỉ hỗ trợ xử lý hàng loạt, có nghĩa là tất cả dữ liệu đầu vào được xử lý phải nằm trong bộ nhớ.

Thư viện Scikit-learning ML cung cấp sklearn.decomposition.IPCA mô-đun giúp có thể triển khai PCA ngoài lõi bằng cách sử dụng partial_fit phương pháp dựa trên các phần dữ liệu được tìm nạp liên tục hoặc bằng cách cho phép sử dụng np.memmap, một tệp được ánh xạ bộ nhớ, mà không cần tải toàn bộ tệp vào bộ nhớ.

Tương tự như PCA, trong khi phân rã bằng IPCA, dữ liệu đầu vào được căn giữa nhưng không được chia tỷ lệ cho từng tính năng trước khi áp dụng SVD.

Thí dụ

Ví dụ dưới đây sẽ sử dụng sklearn.decomposition.IPCA mô-đun trên bộ dữ liệu số Sklearn.

from sklearn.datasets import load_digits
from sklearn.decomposition import IncrementalPCA
X, _ = load_digits(return_X_y = True)
transformer = IncrementalPCA(n_components = 10, batch_size = 100)
transformer.partial_fit(X[:100, :])
X_transformed = transformer.fit_transform(X)
X_transformed.shape

Đầu ra

(1797, 10)

Ở đây, chúng tôi có thể điều chỉnh một phần trên các lô dữ liệu nhỏ hơn (như chúng tôi đã làm trên 100 mỗi lô) hoặc bạn có thể để fit() chức năng chia dữ liệu thành nhiều lô.

Kernel PCA

Phân tích thành phần chính của nhân, một phần mở rộng của PCA, đạt được việc giảm kích thước phi tuyến tính bằng cách sử dụng nhân. Nó hỗ trợ cả haitransform and inverse_transform.

Thư viện Scikit-learning ML cung cấp sklearn.decomposition.KernelPCA mô-đun.

Thí dụ

Ví dụ dưới đây sẽ sử dụng sklearn.decomposition.KernelPCAmô-đun trên bộ dữ liệu số Sklearn. Chúng tôi đang sử dụng hạt nhân sigmoid.

from sklearn.datasets import load_digits
from sklearn.decomposition import KernelPCA
X, _ = load_digits(return_X_y = True)
transformer = KernelPCA(n_components = 10, kernel = 'sigmoid')
X_transformed = transformer.fit_transform(X)
X_transformed.shape

Đầu ra

(1797, 10)

PCA sử dụng SVD ngẫu nhiên

Phân tích thành phần chính (PCA) sử dụng SVD ngẫu nhiên được sử dụng để chiếu dữ liệu vào không gian chiều thấp hơn bảo toàn phần lớn phương sai bằng cách loại bỏ vectơ kỳ dị của các thành phần được liên kết với các giá trị kỳ dị thấp hơn. Đây,sklearn.decomposition.PCA mô-đun với tham số tùy chọn svd_solver=’randomized’ sẽ rất hữu ích.

Thí dụ

Ví dụ dưới đây sẽ sử dụng sklearn.decomposition.PCA mô-đun với tham số tùy chọn svd_solver = 'randomized' để tìm ra 7 thành phần chính tốt nhất từ ​​tập dữ liệu bệnh tiểu đường của người da đỏ Pima.

from pandas import read_csv
from sklearn.decomposition import PCA
path = r'C:\Users\Leekha\Desktop\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names = names)
array = dataframe.values
X = array[:,0:8]
Y = array[:,8]
pca = PCA(n_components = 7,svd_solver = 'randomized')
fit = pca.fit(X)
print(("Explained Variance: %s") % (fit.explained_variance_ratio_))
print(fit.components_)

Đầu ra

Explained Variance: [8.88546635e-01 6.15907837e-02 2.57901189e-02 1.30861374e-027.44093864e-03 3.02614919e-03 5.12444875e-04]
[
   [-2.02176587e-03 9.78115765e-02 1.60930503e-02 6.07566861e-029.93110844e-01 1.40108085e-02 5.37167919e-04 -3.56474430e-03]
   [-2.26488861e-02 -9.72210040e-01 -1.41909330e-01 5.78614699e-029.46266913e-02 -4.69729766e-02 -8.16804621e-04 -1.40168181e-01]
   [-2.24649003e-02 1.43428710e-01 -9.22467192e-01 -3.07013055e-012.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01]
   [-4.90459604e-02 1.19830016e-01 -2.62742788e-01 8.84369380e-01-6.55503615e-02 1.92801728e-01 2.69908637e-03 -3.01024330e-01]
   [ 1.51612874e-01 -8.79407680e-02 -2.32165009e-01 2.59973487e-01-1.72312241e-04 2.14744823e-02 1.64080684e-03 9.20504903e-01]
   [-5.04730888e-03 5.07391813e-02 7.56365525e-02 2.21363068e-01-6.13326472e-03 -9.70776708e-01 -2.02903702e-03 -1.51133239e-02]
   [ 9.86672995e-01 8.83426114e-04 -1.22975947e-03 -3.76444746e-041.42307394e-03 -2.73046214e-03 -6.34402965e-03 -1.62555343e-01]
]