PCA 原理及 Python 实现

原文发于个人博客

前言

说好的要做个有逼格的技术博客,虽然这篇依然没什么水平,但总算走出了第一步,希望以后每天都能进步一点点吧!

接触机器学习也一年多了,也学了很多算法,而PCA数据预处理中一个很重要的算法,当时学习的时候也在网上看了很多资料,没想到一个简单的PCA也有着严密的数学推导,终于知道当年研究生考试为什么数学要考这么难了。

这篇文章主要是对PCA算法的一个总结,数学原理部分主要来自PCA的数学原理,并对其进行了总结(其实人家已经总结的很棒了),然后通过Scikit-learn中的一个例子讲解PCA的使用,最后用Python编写一个简单的PCA算法。


正文

数学概念介绍

方差:用来衡量随机变量与其数学期望(均值)之间的偏离程度。统计中的方差(样本方差)是各个数据分别与其平均数之差的平方的和的平均数。

协方差:度量两个随机变量关系的统计量,协方差为0的两个随机变量是不相关的。

协方差矩阵:在统计学与概率论中,协方差矩阵的每个元素是各个向量元素之间的协方差。特殊的,矩阵对角线上的元素分别是向量的方差。

—— 摘自百度百科

特别是协方差矩阵的概念非常重要。

PCA介绍

主成分分析(Principal Component Analysis),是一种用于探索高维数据的技术。PCA通常用于高维数据集的探索与可视化。还可以用于数据压缩,数据预处理等。PCA可以把可能具有线性相关性的高维变量合成为线性无关的低维变量,称为主成分(principal components),新的低维数据集会尽可能的保留原始数据的变量,可以将高维数据集映射到低维空间的同时,尽可能的保留更多变量。

注意:降维就意味着信息的丢失,这一点一定要明确,如果用原始数据在模型上没有效果,期望通过降维来进行改善这是不现实的,不过鉴于实际数据本身常常存在的相关性,我们可以想办法在降维的同时将信息的损失尽量降低。当你在原数据上跑了一个比较好的结果,又嫌它太慢模型太复杂时候才可以采取PCA降维。

PCA数学理论

二维空间默认(1,0)和(0,1)为一组基。
其实任何两个线性无关的二维向量都可以成为一组基。因为正交基有较好的性质,所以一般使用的基都是正交的。

例如:只有一个(3,2)本身是不能够精确表示一个向量的。这里的3实际表示的是向量在x轴上的投影值是3,在y轴上的投影值是2。也就是说我们其实隐式引入了一个定义:以x轴和y轴上正方向长度为1的向量为标准,默认选择(1,0)和(0,1)为基。

内积

向量A和B的内积公式为:

AB=|A||B|cos(a)

我们希望基的模是1,因为从内积的意义可以看到,如果基的模是1,那么就可以方便的用向量点乘基而直接获得其在新基上的坐标了,即 向量在基上的投影=向量与基的内积=坐标

基变换的矩阵表示

将一组向量的基变换表示为矩阵的相乘。一般的,如果我们有M个N维向量,想将其变换为由R个N维向量(R个基)表示的新空间中,那么首先将R个基按行组成矩阵P,然后将待变换向量按列组成矩阵X,那么两矩阵的乘积就是变换结果。R可以小于N,而R决定了变换后数据的维数。也就是说,我们可以将一N维数据变换到更低维度的空间中去,变换后的维度取决于基的数量。
因此这种矩阵相乘可以表示降维变换:

  • 18
    点赞
  • 120
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值