PCA算法以及代码实现

您所在的位置:网站首页 高差高程计算公式 PCA算法以及代码实现

PCA算法以及代码实现

2023-03-13 14:40| 来源: 网络整理| 查看: 265

完整的实验代码在我的github上 QYHcrossover/ML-numpy: 机器学习算法numpy实现 (github.com) 欢迎star⭐

PCA(Principal Component Analysis)算法是一种常用的数据降维方法,主要用于高维数据的可视化、噪声过滤、特征提取等方面。

PCA算法原理

PCA算法的原理如下:

首先,对原始数据进行中心化,即将每一维的数据减去该维的均值。然后,计算数据的协方差矩阵。接着,对协方差矩阵进行特征值分解,得到特征值和特征向量。选取前k个最大的特征值对应的特征向量,构成新的矩阵。最后,将原始数据投影到新的矩阵上,得到降维后的数据。

其公式如下:

\begin{aligned} X &= [x_1, x_2, ..., x_n] \\ Cov(X) &= \frac{1}{n}XX^T \\ \lambda_i &= eig(Cov(X)) \\ V &= [v_1, v_2, ..., v_k] \\ Y &= V^TX \end{aligned}

其中,X 是原始数据矩阵,Cov(X) 是协方差矩阵,eig(Cov(X)) 表示协方差矩阵的特征值,V 是特征向量矩阵,Y 表示降维后的数据矩阵。

PCA代码实现import numpy as np from sklearn import datasets from sklearn.decomposition import PCA def my_pca(x,k): #step1 所有样本区中心化 avg = np.average(x,axis=0) x = x - avg #step2 计算x的协方差矩阵 mat = np.cov(x.T) print(mat.shape) #step3 计算协方差矩阵的特征值和特征向量,并选取前k个特征向量 a,b = np.linalg.eig(mat) np.linalg.eig(b) index = np.argsort(-a) #降序排序 p = b[index][:,:k] #step4 Y=PX得到降维后的数据 return x@p if __name__ == "__main__": data = datasets.load_boston()["data"] print(data.shape) pca = PCA(n_components=2) pca.fit(data) print(pca.transform(data)) print(my_pca(data,2))

这份代码实现了PCA算法的过程。

在 my_pca 函数中,首先进行了样本中心化,然后计算出协方差矩阵,进行特征值和特征向量分解,选取前k个最大的特征值对应的特征向量,构成新的矩阵。最后将原始数据投影到新的矩阵上,得到降维后的数据。

在 if __name__ == "__main__": 中,我们首先使用 datasets.load_boston() 函数加载了一个波士顿房价数据集,并打印出原始数据的形状。接着,我们使用 PCA 函数进行了同样的降维操作,并打印了结果。最后,我们使用自己实现的 my_pca 函数,同样对原始数据进行了降维操作,并打印了结果。将sklearn调用结果与自己的实现结果做对比。

总结

本文介绍了PCA(Principal Component Analysis)算法的原理及其代码实现。PCA算法是一种常用的数据降维方法,可以用于高维数据的可视化、噪声过滤、特征提取等方面。本文提供了PCA算法的公式和Python代码,同时还通过一个实例演示了如何使用PCA算法进行降维操作,并将sklearn调用结果与自己的实现结果做了对比。

完整的实验代码在我的github上 QYHcrossover/ML-numpy: 机器学习算法numpy实现 (github.com) 欢迎star⭐

本文使用 Zhihu On VSCode 创作并发布



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3