PCA主成分分析实例

PCA的思想是将n维特征映射到k维上(k<n),这k维是全新的正交特征。这k维特征称为主成分,是重新构造出来的k维特征,而不是简单地从n维特征中去除其余n-k维特征。

简单来说就是:
降维

该算法具有的意义
将n个特征降维到k个,可以用来进行数据压缩,例如100维的向量最后可以用10维来表示,那么压缩率为90%。

#主成分分析
import numpy as np
import matplotlib.pyplot as plt

ave_x=1.81
ave_y=1.91
dataAdjust_x=np.array([0.69,-1.31,0.39,0.09,1.29,0.49,0.19,-0.81,-0.31,-0.71])
dataAdjust_y=np.array([0.49,-1.21,0.99,0.29,1.09,0.79,-0.31,-0.81,-0.31,-1.01])
dataAdjust=np.vstack((dataAdjust_x,dataAdjust_y))
cov_data=np.cov(dataAdjust)
print("协方差矩阵:\n",cov_data)

在这里插入图片描述

求协方差矩阵的特征值和特征向量:

eigenvalues, eigenvectors = np.linalg.eig(cov_data)
print("特征值\n",eigenvalues)
print("特征向量\n",eigenvectors)

所求结果:
在这里插入图片描述

编写if else语句选出最大的特征值,并选出最大特征值的特征向量:

if(eigenvalues[0]>eigenvalues[1]):
    max_eivector=np.array([[eigenvectors[0,0],eigenvectors[1,0]]])
else:
    max_eivector=np.array([[eigenvectors[0,1],eigenvectors[1,1]]])
print("最大特征值对应的特征向量:\n",max_eivector)

所求结果:
在这里插入图片描述

将矩阵转置相乘,得出最终数据:

finaldata=np.dot(dataAdjust.transpose(),max_eivector.transpose())
print("最终数据:\n",finaldata)

所求结果:
在这里插入图片描述

完整代码:

#主成分分析
import numpy as np
import matplotlib.pyplot as plt

ave_x=1.81
ave_y=1.91
dataAdjust_x=np.array([0.69,-1.31,0.39,0.09,1.29,0.49,0.19,-0.81,-0.31,-0.71])
dataAdjust_y=np.array([0.49,-1.21,0.99,0.29,1.09,0.79,-0.31,-0.81,-0.31,-1.01])
dataAdjust=np.vstack((dataAdjust_x,dataAdjust_y))
cov_data=np.cov(dataAdjust)
print("协方差矩阵:\n",cov_data)

eigenvalues, eigenvectors = np.linalg.eig(cov_data)
print("特征值\n",eigenvalues)
print("特征向量\n",eigenvectors)

if(eigenvalues[0]>eigenvalues[1]):
    max_eivector=np.array([[eigenvectors[0,0],eigenvectors[1,0]]])
else:
    max_eivector=np.array([[eigenvectors[0,1],eigenvectors[1,1]]])
print("最大特征值对应的特征向量:\n",max_eivector)

finaldata=np.dot(dataAdjust.transpose(),max_eivector.transpose())
print("最终数据:\n",finaldata)

figure=plt.figure()
plt.scatter(finaldata,dataAdjust_y)
plt.show()

绘制散点图如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值