Python PCA主成分分析
一、PCA算法流程
输入:n维样本集
输出:降维后的样本集D′D′
1) 对所有的样本进行中心化
2) 计算样本的协方差矩阵
3) 对协方差矩阵进行特征值分解
4)取出最大的n'个特征值对应的特征向量(w1,w2,...,wn′)(w1,w2,...,wn′), 将所有的特征向量标准化后,组成特征向量矩阵W。
5)对样本集中的每一个样本转成新的样本集
6) 得到输出样本集
二、代码实现
1 n_a = ((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)) 2 n_a = [[i,j] for i ,j in n_a] 3 aa = mat(n_a) #转化成矩阵10*2 4 a_m = mean(aa,axis=0) 5 6 print("原值\n{}\n".format(a_m)) 7 8 a_ = aa-a_m 9 print("中心化后的值\n{}\n".format(a_)) 10 11 cov_a = cov(a_, rowvar=0) 12 print("协方差矩阵\n{}\n".format(cov_a)) 13 14 eig_val,eig_vec = linalg.eig(cov_a) 15 16 eig_vec = eig_vec.T 17 print("特征向量\n{}\n".format(eig_vec)) 18 19 20 # eig_vec = (eig_vec-eig_vec.min())/eig_vec.std() 21 22 print("特征值\n{}\n".format(eig_val)) 23 24 eig_val_ind = argsort(eig_val) 25 print("特征值排序\n{}\n".format(eig_val_ind)) 26 27 eigValInd = eig_val_ind[:-2 :-1] #控制降维个数 28 29 print("取出特征值的排序\n{}\n".format(eigValInd)) 30 31 eig_vecmax = eig_vec[eigValInd] 32 print("特征向量最大值\n{}\n".format(eig_vecmax)) 33 34 #降维后的值 35 print(a_*eig_vecmax.T)

三、Python自带的PCA函数算法
1 import numpy as np 2 from sklearn.decomposition import PCA 3 n_a = ((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)) 4 n_a = [[i,j] for i ,j in n_a] 5 6 X = np.array(n_a) 7 # print(X.shape) 8 pca = PCA(n_components=2) 9 x = pca.fit(X) 10 11 # print(pca.explained_variance_ratio_) #贡献率 12 # print(pca.singular_values_) 13 14 print("协方差矩阵\n{}\n".format(x.get_covariance())) #协方差 15 16 print("特征向量\n{}\n".format(x.components_ )) #特征向量 17 18 low_d = pca.transform(n_a) #降低维度 19 print("降低维度后的向量\n{}\n".format(low_d ))
结果:

详细了解函数运用访问 官方链接:https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html
本文参考刘建平老师的博客:https://www.cnblogs.com/pinard/p/6239403.html
浙公网安备 33010602011771号