Python实现PCA降维的示例详解
什么是PCA?
PCA(Principal Component Analysis,主成分分析)是一种常用的数据降维方法,它可以将高维度数据映射到一个低维度空间中。在数据处理和数据挖掘领域中,PCA已被广泛应用于数据的预处理,可视化和分类等方面。
PCA通过线性变换将高维度数据映射到低维度空间中,并保留尽量多的数据方差。因此,PCA常被用来减少数据的特征数量,保留数据主要信息并减少噪音。
PCA的实现步骤
实现PCA,我们可以采用以下方法:
- 从原始数据中标准化特征信息
- 计算协方差矩阵
- 计算协方差矩阵的特征值和特征向量
- 将特征向量按照对应的特征值大小降序排列
- 根据保留的特征向量构建投影矩阵
- 将原始数据映射到新的低维度空间中
PCA的代码实现
下面提供两个示例来说明如何在Python中实现PCA的过程。
示例1:PCA对数据降维
from sklearn.decomposition import PCA
import numpy as np
# 生成模拟数据,包含20个样本,每个样本5维特征
np.random.seed(42)
X = np.random.randn(20,5)
# 使用PCA对数据进行降维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
print(X_pca.shape)
该示例生成了20个样本,每个样本有5个维度的特征, 然后利用PCA进行降维,保留2个主成分。
运行后,我们可以输出降维后的数据,结果为:
(20, 2)
降维后的数据仅包含2个主成分,而不是原始数据5个特征了。我们可以在可视化上更加方便地观察数据。
示例2:使用手写代码实现PCA
import numpy as np
def PCA(X, k):
# 标准化数据
X_meanized = X - np.mean(X, axis=0)
# 计算协方差矩阵
cov_matrix = np.cov(X_meanized.T)
# 计算特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)
# 将特征向量按照对应的特征值大小降序排列
eigenvalue_indices = np.argsort(eigenvalues)[::-1]
selected_eigenvectors = eigenvectors[:,eigenvalue_indices[:k]]
returns = np.dot(selected_eigenvectors.T, X_meanized.T)
return returns.T
# 生成模拟数据,包含20个样本,每个样本5维特征
np.random.seed(42)
X = np.random.randn(20,5)
# 使用手写代码实现PCA进行降维
X_pca = PCA(X, 2)
print(X_pca.shape)
上述代码中,我们定义了一个手写的PCA函数PCA(X,k), 其中X为原始数据,k为保留的主成分数量。
运行代码后,我们可以输出降维后的数据,结果为:
(20, 2)
两个示例的结果都是一样的。第一个示例使用了Python的sklearn库学习并实现PCA。而第二个示例定义了手写的PCA函数,我们可以通过手写PCA函数了解PCA方法的细节和原理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现PCA降维的示例详解 - Python技术站