尝试用python实现主成分分析

PCA目的:

举个例子,一共有两门考试,语文和数学,有大概10名同学参加了考试,这个数据看起来还不是很大,维度也只有两维,也就是说只有语文和数学两个维度,我们一眼看上去分辨并不是很难,同时,如果要传输这个数据,也并没有很大的工程量。
那我们再换个例子,一共有九门考试,信号与系统、数理方程、数字电路、模拟电路、高等数学、复变函数、DSP、单片机、电视原理。有300名同学参加了考试,想象一下一眼望过去,这数据量可不小,那么如果有上千上万个同学都参加了这个考试,传输上也可能也比较费劲了,这是一个九维数据,通过PCA,我们可以将数据降维,换句话说,也许可以仅仅用七个,或者五个维度来表示这九个维度能传输的信息,这大大的降低了传输数据量。
PCA的思想大概是将一个高维数据映射到了相对来说较低的维度上。在映射的过程中也就舍弃了一部分相对来说“无关紧要的数据”,称之为噪声,而剩下的维度数据称为主成分。这就是我理解的PCA的目的。

实现步骤:

在这里插入图片描述
这是我用python函数numpy随机生成的一个4维数据,其实不随机生成更好,但我不太会设置一个有分布特性的数据,就随机生成了一个包含10个对象的4维数据,也就是一个4*10矩阵,语句如下:
在这里插入图片描述
接下来就要根据这个矩阵来对他进行PCA操作了,首先我们要先对数据进行中心化,也就是说对于每个维度的多个数据求平均值然后再与原数据相减,公式如下:
在这里插入图片描述
具体程序实现如下:
在这里插入图片描述
实现起来因为求完的平均值是个一维数据无法转置后直接广播,因此将原数据转置广播相减后再转置回来。输出如下:
在这里插入图片描述
中心化过后,就要计算协方差矩阵了,这里我个人有些疑问,用函数cov求出来的结果与根据原理:
在这里插入图片描述
求出来的结果是不同的,我最终选择了用cov函数,也确实是不知道对不对……
程序如下(另一种实现方法被我注释掉了):
在这里插入图片描述
输出如下:
在这里插入图片描述
接下来,通过协方差矩阵即可求出数据的特征值和对应的特征向量,程序如下:
在这里插入图片描述
输出如下:
在这里插入图片描述
因为程序输出的特征值就是降序排列的,因此我们最终需要做的也就是需要降为几维就保留前面几列,我设置的是在原维度的基础上降两维,因此最后实现结果的二维数据,程序如下:
在这里插入图片描述
结果如下:
在这里插入图片描述
(此时列数变成了维度数)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值