Python PCA主成分分析

一、PCA算法流程

输入:n维样本集

输出:降维后的样本集DD′

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

posted on 2019-08-29 12:43  LiErRui  阅读(767)  评论(0)    收藏  举报

导航