如何使用 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
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP