如何使用 Python Scikit-learn 進行降維?
降維是一種無監督機器學習方法,用於透過選擇一組主要特徵來減少每個資料樣本的特徵變數數量。主成分分析 (PCA) 是 Sklearn 中可用的流行降維演算法之一。
在本教程中,我們將使用 Python Scikit-learn (Sklearn) 中的主成分分析和增量主成分分析進行降維。
使用主成分分析 (PCA)
PCA 是一種統計方法,它透過分析原始資料集的特徵將資料線性投影到新的特徵空間。PCA 背後的主要概念是選擇資料的“主要”特徵並基於這些特徵構建特徵。它將為我們提供一個新的資料集,該資料集規模較小,但包含與原始資料集相同的資訊。
示例
在下面的示例中,我們將使用 PCA(初始化為 2 個元件)擬合 Iris 植物資料集,該資料集預設隨 scikit-learn 包提供。
# Importing the necessary packages from sklearn import datasets from sklearn import decomposition # Load iris plant dataset iris = datasets.load_iris() # Print details about the datset print('Features names : '+str(iris.feature_names)) print('\n') print('Features size : '+str(iris.data.shape)) print('\n') print('Target names : '+str(iris.target_names)) print('\n') print('Target size : '+str(iris.target.shape)) X_iris, Y_iris = iris.data, iris.target # Intialize PCA and fit the data pca_2 = decomposition.PCA(n_components=2) pca_2.fit(X_iris) # Transforming iris data to new dimensions(with 2 features) X_iris_pca2 = pca_2.transform(X_iris) # Printing new dataset print('New Dataset size after transformations : ', X_iris_pca2.shape) print('\n') # Getting the direction of maximum variance in data print("Components : ", pca_2.components_) print('\n') # Getting the amount of variance explained by each component print("Explained Variance:",pca_2.explained_variance_) print('\n') # Getting the percentage of variance explained by each component print("Explained Variance Ratio:",pca_2.explained_variance_ratio_) print('\n') # Getting the singular values for each component print("Singular Values :",pca_2.singular_values_) print('\n') # Getting estimated noise covariance print("Noise Variance :",pca_2.noise_variance_)
輸出
它將產生以下輸出:
Features names : ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'] Features size : (150, 4) Target names : ['setosa' 'versicolor' 'virginica'] Target size : (150,) New Dataset size after transformations : (150, 2) Components : [[ 0.36138659 -0.08452251 0.85667061 0.3582892 ] [ 0.65658877 0.73016143 -0.17337266 -0.07548102]] Explained Variance: [4.22824171 0.24267075] Explained Variance Ratio: [0.92461872 0.05306648] Singular Values : [25.09996044 6.01314738] Noise Variance : 0.051022296508184406
使用增量主成分分析 (IPCA)
增量主成分分析 (IPCA) 用於解決主成分分析 (PCA) 的最大限制,即 PCA 僅支援批處理,這意味著要處理的所有輸入資料都應適合記憶體。
Scikit-learn ML 庫提供了 sklearn.decomposition.IPCA 模組,該模組可以透過在其上依次獲取的資料塊上使用其 partial_fit 方法或透過啟用使用 np.memmap(記憶體對映檔案)來實現 Out-of-Core PCA,而無需將整個檔案載入到記憶體中。
與 PCA 相同,在使用 IPCA 進行分解時,在應用 SVD 之前,輸入資料針對每個特徵進行居中,但不進行縮放。
示例
在下面的示例中,我們將使用 IPCA(初始化為 2 個元件,批大小 = 20)擬合 Iris 植物資料集,該資料集預設隨 scikit-learn 包提供。
# Importing the necessary packages from sklearn import datasets from sklearn import decomposition # Load iris plant dataset iris = datasets.load_iris() # Print details about the datset print('Features names : '+str(iris.feature_names)) print('\n') print('Features size : '+str(iris.data.shape)) print('\n') print('Target names : '+str(iris.target_names)) print('\n') print('Target size : '+str(iris.target.shape)) X_iris, Y_iris = iris.data, iris.target # Initialize PCA and fit the data ipca_2 = decomposition.IncrementalPCA(n_components=2, batch_size=20) ipca_2.fit(X_iris) # Transforming iris data to new dimensions(with 2 features) X_iris_ipca2 = ipca_2.transform(X_iris) # Printing new dataset print('New Dataset size after transformations : ', X_iris_ipca2.shape) print('\n') # Getting the direction of maximum variance in data print("Components : ", ipca_2.components_) print('\n') # Getting the amount of variance explained by each component print("Explained Variance:",ipca_2.explained_variance_) print('\n') # Getting the percentage of variance explained by each component print("Explained Variance Ratio:",ipca_2.explained_variance_ratio_) print('\n') # Getting the singular values for each component print("Singular Values :",ipca_2.singular_values_) print('\n') # Getting estimated noise covariance print("Noise Variance :",ipca_2.noise_variance_)
輸出
它將產生以下輸出:
Features names : ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'] Features size : (150, 4) Target names : ['setosa' 'versicolor' 'virginica'] Target size : (150,) New Dataset size after transformations : (150, 2) Components : [[ 0.3622612 -0.0850586 0.85634557 0.35805603] [ 0.64678214 0.73999163 -0.17069766 -0.07033882]] Explained Variance: [4.22535552 0.24227125] Explained Variance Ratio: [0.92398758 0.05297912] Singular Values : [25.09139241 6.0081958 ] Noise Va riance : 0.00713274779746683
廣告