一. 概念介绍
1.1 简介
在对数据进行处理计算时,往往会因为数据的特征值过多而导致计算量大、训练时间长、性能消耗大等问题,这是因为数据维度高导致的计算困难,而主成分分析法(PCA)就是一种数据降维的方法,它通过将原始高维数据映射到一个新的低维空间,从而减少数据的维度,同时尽可能保留原始数据的主要信息。
1.2 流程
- 标准化数据:将数据标准化,使得每个特征的均值为0,方差为1。这是为了消除不同量纲的影响。
- 计算协方差矩阵:计算标准化数据的协方差矩阵,反映不同特征之间的线性相关性。
- 计算特征值和特征向量:对协方差矩阵进行特征值分解,得到特征值和特征向量。特征向量表示主成分的方向,特征值表示沿着该主成分方向的数据变异性。
- 选择主成分:根据特征值的大小选择前k个主成分,这些主成分对应的数据变异性最大。
- 转换数据:将原始数据投影到选定的主成分上,从而得到降维后的数据。
1.3 效果
- 降维:减少数据的维度,降低数据的复杂性,便于后续处理和分析。
- 去噪:通过保留主要的变异性,去除噪声和冗余信息,提高数据的质量。
- 可视化:将高维数据投影到2D或3D空间,便于可视化和理解数据结构。
二. 代码实现
import numpy as np
def pca(X, num_components):
# 标准化数据
X_meaned = X - np.mean(X, axis=0)
# 计算协方差矩阵
cov_matrix = np.cov(X_meaned, rowvar=False)
# 计算特征值和特征向量
eigen_values, eigen_vectors = np.linalg.eigh(cov_matrix)
# 按特征值降序排列特征向量
sorted_index = np.argsort(eigen_values)[::-1]
sorted_eigenvalue = eigen_values[sorted_index]
sorted_eigenvectors = eigen_vectors[:, sorted_index]
# 选择前k个特征向量
eigenvector_subset = sorted_eigenvectors[:, 0:num_components]
# 转换数据
X_reduced = np.dot(eigenvector_subset.transpose(), X_meaned.transpose()).transpose()
return X_reduced
# 示例数据
X = np.array([[2.5, 2.4], [0.5, 0.7], [2.2, 2.9], [1.9, 2.2], [3.1, 3.0], [2.3, 2.7], [2, 1.6], [1, 1.1], [1.5, 1.6], [1.1, 0.9]])
# 应用PCA,降到1维
X_reduced = pca(X, 1)
print("降维后的数据:\n", X_reduced)
3889

被折叠的 条评论
为什么被折叠?



