1.1 题目的主要研究内容
PCA算法讨论:1.算法的原理介绍;
2.利用具体数据给出手动推演过程和上机实现过程
1.2 题目研究的工作基础或实验条件
(1)硬件环境(Intel(R) Core(TM) i7-6500UCPU@2.50GHz2.59 GHz)
(2)软件环境(python 语言)
1.3 设计思想
通过pca公式利用python语言进行编程推演,然后手算推导过程,与编程演算结果作对比,如果一致,则完成运行,否则重新推演。并且使用图形结合的方式展现出来。
1.4 流程图
PCA算法流程图:
1.5 主要程序代码(要求必须有注释)
import numpy as np
#设置一下np的输出格式
np.set_printoptions(threshold=100,precision= 4,suppress=True)
# 计算以下数据的协方差矩阵
# np.random.seed(0)
# # data = np.random.uniform(1,10,(10,2))
# data = np.random.randint(1,10,(5,2)) #整数
# data[:,1:] = 0.5*data[:,0:1]+np.random.randint(-2,2,(5,1))
data = np.array([[1, 1],
[1, 3],
[2, 3],
[4, 4],
[2, 4]])
#去中心化
data_norm = data-data.mean(axis = 0)
X = data_norm[:,0]
Y = data_norm[:,1]
# 定义协方差函数,输入X,Y能得到X,Y之间的协方差
def getcov(X,Y):
covxy = ((X-X.mean())*(Y-Y.mean())).sum()/(len(X)-1)
return covxy
C = np.cov(data_norm.T)
#计算特征值和特征向量
vals, vecs = np.linalg.eig(C)
#重新排序,从大到小
vecs = vecs[:,np.argsort(-vals)]
vals = vals[np.argsort(-vals)]
k=1
Q = vecs[:,:k]
Y = np.matmul(data_norm,Q)
Print(Y)#二维降到一维结果
1.6 运行结果及分析
(可以抓取界面)
三维降二维结果