题目链接:Deep-ML
主成分分析(PCA)是一种统计方法,用于将高维数据集映射到一个低维空间,同时保留尽可能多的原始数据方差。PCA的目标是通过找到一组新的未相关的变量(称为主成分),这些变量可以用来解释数据中的大部分变异性。
- 降维:在数据集中包含许多特征时,PCA可以通过提取主要特征来减少数据的维度,从而简化分析和可视化。
- 去噪:通过保留具有最大方差的特征,PCA可以去除不重要或噪声的特征。
- 数据压缩:PCA通过减少数据的维度,可以在不显著损失信息的情况下实现数据压缩。
- 提高模型性能:在一些情况下,使用PCA降维后的数据可以提高机器学习模型的性能。
PCA的流程
PCA的流程可以分为以下几个步骤:
1. 数据标准化
首先,我们需要标准化数据集以确保所有特征具有相同的量纲。标准化的过程通常包括减去每个特征的均值,然后除以其标准差:
2. 计算协方差矩阵
标准化后,我们计算数据的协方差矩阵,以了解特征之间的相关性:
3. 计算特征值和特征向量
接下来,计算协方差矩阵的特征值和特征向量。特征向量表示新的坐标轴(主成分),而特征值表示每个主成分所解释的方差:
4. 排序特征向量
根据特征值的大小对特征向量进行排序。特征值越大,对应的主成分所解释的方差就越多。我们只选择特征值最大的前k个特征向量作为主成分:
5. 转换数据
最后,我们用选定的主成分矩阵将原始数据集转换到低维空间:
import numpy as np
def pca(data, k):
'''
1. standardize the data
2. compute the covariance matrix
3. find the eigenvalues and eigenvectors
4. select the principal components
:param data:
:param k:
:return:
'''
# standardize the data
data_standardized = (data - np.mean(data, axis=0)) / np.std(data, axis=0)
# compute the covariance matrix
covariance_matrix = np.cov(data_standardized, rowvar=False)
# find the eigenvalues and eigenvectors
eigenvalues, eigenvectors = np.linalg.eig(covariance_matrix)
# select the principal components
index = np.argsort(eigenvalues)[::-1] # Sort in descending order
eigenvalues_sorted = eigenvalues[index]
eigenvectors_sorted = eigenvectors[:, index] # 对列按照index数组进行排序
principal_components = eigenvectors_sorted[:, :k]
return principal_components
if __name__ == '__main__':
data = np.array([[1, 2], [3, 4], [5, 6]])
k = 1
print(pca(data, k))