一、算法介绍
主成分分析:用较少的综合变量尽可能多地反映原来信息地统计方法
原理:
PCA的主要目标是将特征维度变小,同时尽量减少信息损失。就是对一个样本矩阵,一是换特征,找一组新的特征重新标识;二是减少特征,新特征的数目要远少于原特征的数目
通过PCA将n维原始特征映射到k维(k<n),称这k维特征为主要成分
注意:样本方差是除以n-1的
特征值和特征向量通过软件辅助函数计算
特征值与特征向量是一一对应的
二、样例
第(6)步的样例如下:
说明:此方法一般用于降维,再结合其他方法进行评价。
三、代码展示
import pandas as pd
import numpy as np
from scipy import linalg
#scipy是python的科学计算库
#linalg涉及线性方程、线性函数以及它们通过矩阵和向量空间的表示
#读取excel文件的B:G列,除去第一行(标题)
df=pd.read_excel('棉花产量论文作业的数据.xlsx',usecols='C:G')
#df.to_numpy将数据转化为Numpy数组
x=df.to_numpy()
#标准化数据
#np.mean(x, axis=0):计算矩阵 x 的每一列的均值。
#np.std(x, ddof=1, axis=0):计算矩阵 x 的每一列的标准差。其中,ddof=1 表示使用样本标准差(即除以 𝑛−1而不是 n)。
X=(x-np.mean(x,axis=0))/np.std(x,ddof=1,axis=0)
#计算协方差矩阵
R=np.cov(X.T)
#计算特征值和特征向量
eig_val,eig_vec=linalg.eigh(R)
#将特征值数组按降序排列
eig_val=eig_val[::-1]
#将特征向量矩阵的列按降序排列
eig_vec=eig_vec[:,::-1]
#计算主成分的贡献率和累计贡献率
cti_rate=eig_val/sum(eig_val)
#计算累计和
cum_cti=np.cumsum(cti_rate)
#打印结果
print(eig_val)
print(eig_vec)
print(cti_rate)
print(cum_cti)