Scikit Learn - การลดขนาดโดยใช้ PCA

การลดขนาดซึ่งเป็นวิธีการเรียนรู้ของเครื่องที่ไม่ได้รับการดูแลถูกนำมาใช้เพื่อลดจำนวนตัวแปรคุณลักษณะสำหรับชุดข้อมูลหลักในการเลือกตัวอย่างข้อมูลแต่ละชุด Principal Component Analysis (PCA) เป็นหนึ่งในอัลกอริทึมยอดนิยมสำหรับการลดขนาด

PCA ที่แน่นอน

Principal Component Analysis (PCA) ใช้สำหรับการลดขนาดเชิงเส้นโดยใช้ Singular Value Decomposition(SVD) ของข้อมูลเพื่อฉายไปยังพื้นที่มิติที่ต่ำกว่า ในขณะที่การย่อยสลายโดยใช้ PCA ข้อมูลอินพุตจะอยู่กึ่งกลาง แต่ไม่มีการปรับขนาดสำหรับแต่ละคุณสมบัติก่อนที่จะใช้ SVD

ห้องสมุด Scikit-learn ML มีให้ sklearn.decomposition.PCAโมดูลที่ใช้เป็นอ็อบเจ็กต์หม้อแปลงซึ่งเรียนรู้ส่วนประกอบ n ในวิธี fit () นอกจากนี้ยังสามารถใช้กับข้อมูลใหม่เพื่อฉายในส่วนประกอบเหล่านี้

ตัวอย่าง

ตัวอย่างด้านล่างจะใช้โมดูล sklearn.decomposition.PCA เพื่อค้นหาส่วนประกอบหลัก 5 ประการที่ดีที่สุดจากชุดข้อมูล Pima Indians Diabetes

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_)

เอาต์พุต

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 ที่เพิ่มขึ้น

Incremental Principal Component Analysis (IPCA) ใช้เพื่อระบุข้อ จำกัด ที่ใหญ่ที่สุดของ Principal Component Analysis (PCA) และนั่นคือ PCA รองรับการประมวลผลแบบแบทช์เท่านั้นหมายความว่าข้อมูลอินพุตทั้งหมดที่จะประมวลผลควรพอดีกับหน่วยความจำ

ห้องสมุด Scikit-learn ML มีให้ sklearn.decomposition.IPCA โมดูลที่ทำให้สามารถใช้งาน Out-of-Core PCA ได้โดยใช้ไฟล์ partial_fit วิธีการในการดึงข้อมูลตามลำดับหรือโดยการเปิดใช้งานการใช้ np.memmapไฟล์ที่แมปหน่วยความจำโดยไม่ต้องโหลดไฟล์ทั้งหมดลงในหน่วยความจำ

เช่นเดียวกับ PCA ในขณะที่การสลายโดยใช้ IPCA ข้อมูลอินพุตจะอยู่กึ่งกลาง แต่ไม่ได้ปรับขนาดสำหรับแต่ละคุณสมบัติก่อนที่จะใช้ SVD

ตัวอย่าง

ตัวอย่างด้านล่างจะใช้ sklearn.decomposition.IPCA โมดูลบนชุดข้อมูลหลักของ 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

เอาต์พุต

(1797, 10)

ที่นี่เราสามารถปรับให้พอดีกับชุดข้อมูลขนาดเล็กบางส่วน (เช่นเดียวกับที่เราทำใน 100 ต่อชุด) หรือคุณสามารถปล่อยให้ fit() เพื่อแบ่งข้อมูลออกเป็นแบทช์

เคอร์เนล PCA

การวิเคราะห์องค์ประกอบหลักของเคอร์เนลซึ่งเป็นส่วนขยายของ PCA ทำให้เกิดการลดขนาดแบบไม่เป็นเชิงเส้นโดยใช้เมล็ด รองรับทั้งสองอย่างtransform and inverse_transform.

ห้องสมุด Scikit-learn ML มีให้ sklearn.decomposition.KernelPCA โมดูล.

ตัวอย่าง

ตัวอย่างด้านล่างจะใช้ sklearn.decomposition.KernelPCAโมดูลบนชุดข้อมูลหลักของ Sklearn เรากำลังใช้เคอร์เนล 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

เอาต์พุต

(1797, 10)

PCA โดยใช้ SVD แบบสุ่ม

การวิเคราะห์องค์ประกอบหลัก (PCA) โดยใช้ SVD แบบสุ่มจะใช้เพื่อฉายข้อมูลไปยังพื้นที่มิติที่ต่ำกว่าซึ่งรักษาความแปรปรวนส่วนใหญ่ไว้โดยการทิ้งเวกเตอร์เอกพจน์ของส่วนประกอบที่เกี่ยวข้องกับค่าเอกพจน์ที่ต่ำกว่า ที่นี่sklearn.decomposition.PCA โมดูลที่มีพารามิเตอร์ทางเลือก svd_solver=’randomized’ จะมีประโยชน์มาก

ตัวอย่าง

ตัวอย่างด้านล่างจะใช้ sklearn.decomposition.PCA โมดูลที่มีพารามิเตอร์เสริม svd_solver = 'randomized' เพื่อค้นหาส่วนประกอบหลัก 7 อย่างที่ดีที่สุดจากชุดข้อมูล Pima Indians Diabetes

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_)

เอาต์พุต

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]
]