深度学习
基础知识和各种网络结构实战 ...PCA算法简述
前言
PCA算法(Principal Component Analysis)即主元分析法,是一种线性降维的算法。一、PCA算法步骤
1.数据集为{x1,x2…xn}的多维向量,设维度为m维的话,考可以将数据集写出m行n列的的矩阵X(mn)
2.如果要将其降维k维则:
3.对数据集的每一个数据,每一位特征(每一行)减去各自特征的平均值,即对数据中的每一个特征维度进行零均值化,得到归一化后的矩阵B
4.求协方差矩阵C=C=1/nB*B.T
5.分解协方差矩阵C的特征值和特征向量
6.将分解后的特征值从大到小排序,选择其中最大的k个,然后将这些特征值对应的k个特征向量作为行向量组成特征向量矩阵P
7.得到降维后的结果:Y=PX
二、python实现PCA算法
import numpy as np
#对数据中心化(零均值化)处理
def Centralization_function(data):
'''
:param data: data为{x1,x2...xn}的多维向量,设维度为m维的话,考可以将数据集写出m行n列的的矩阵A(m*n)
:return: 矩阵data-data中相应向量的平均数
'''
zero_mean_matrix=np.nanmean(data,axis=0)
#print(data-zero_mean_matrix)
#axis=0,那么输出矩阵是1行,求每一列的平均(按照每一行去求平均);axis=1,输出矩阵是1列,求每一行的平均(按照每一列去求平均)。
return data-zero_mean_matrix
def pca_svd(data,k):
new_data=Centralization_function(data)
Cov_mat=1/k*np.dot(new_data.T,new_data)
U,s,V=np.linalg.svd(Cov_mat)
pc=np.dot(new_data,U)
return pc[:,0]
def test():
data=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]]
)
result_eig=pca_svd(data,1)
print(result_eig)
if __name__=='__main__':
test()
总结
期待大家和我交流,留言或者私信,一起学习,一起进步!