PCA分析及实现

一、数学概念

参考:方差、标准差和协方差三者之间的定义与计算

1. 方差

方差是各个数据与平均数之差的平方的平均数。在概率论和数理统计中,方差(英文Variance)用来度量随机变量和其数学期望(即均值)之间的偏离程度。在许多实际问题中,研究随机变量和均值之间的偏离程度有着很重要的意义。

2. 标准差

方差开根号。

3. 协方差

在概率论和统计学中,协方差用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。

可以通俗的理解为:两个变量在变化过程中是否同向变化?还是反方向变化?同向或反向程度如何?

你变大,同时我也变大,说明两个变量是同向变化的,这是协方差就是正的。

你变大,同时我变小,说明两个变量是反向变化的,这时协方差就是负的。

如果我是自然人,而你是太阳,那么两者没有相关关系,这时协方差是0。

从数值来看,协方差的数值越大,两个变量同向程度也就越大,反之亦然。

可以看出来,协方差代表了两个变量之间的是否同时偏离均值,和偏离的方向是相同还是相反。

4. 方差,标准差与协方差之间的联系与区别
  • 方差和标准差都是对一组(一维)数据进行统计的,反映的是一维数组的离散程度;而协方差是对2组数据进行统计的,反映的是2组数据之间的相关性。
  • 标准差和均值的量纲(单位)是一致的,在描述一个波动范围时标准差比方差更方便。比如一个班男生的平均身高是170cm,标准差是10cm,那么方差就是10cm^2。可以进行的比较简便的描述是本班男生身高分布是170±10cm,方差就无法做到这点。
  • 方差可以看成是协方差的一种特殊情况,即2组数据完全相同。
  • 协方差只表示线性相关的方向,取值正无穷到负无穷。
5. 协方差矩阵

https://blog.csdn.net/GoodShot/article/details/79940438
对角线上分别是x和y的方差,非对角线上是协方差。协方差大于0表示x和y若有一个增,另一个也增;小于0表示一个增,一个减;协方差为0时,两者独立。协方差绝对值越大,两者对彼此的影响越大,反之越小。
协方差矩阵计算方法

6. 线性代数矩阵相关

特征值 特征向量 矩阵对角化 待补充 啊啊啊啊啊想死

二、研究背景

参考:主成分分析(PCA)原理详解

1. 相关背景

在许多领域的研究与应用中,通常需要对含有多个变量的数据进行观测,收集大量数据后进行分析寻找规律。多变量大数据集无疑会为研究和应用提供丰富的信息,但是也在一定程度上增加了数据采集的工作量。更重要的是在很多情形下,许多变量之间可能存在相关性,从而增加了问题分析的复杂性。如果分别对每个指标进行分析,分析往往是孤立的,不能完全利用数据中的信息,因此盲目减少指标会损失很多有用的信息,从而产生错误的结论。

因此需要找到一种合理的方法,在减少需要分析的指标同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。由于各变量之间存在一定的相关关系,因此可以考虑将关系紧密的变量变成尽可能少的新变量,使这些新变量是两两不相关的,那么就可以用较少的综合指标分别代表存在于各个变量中的各类信息。主成分分析与因子分析就属于这类降维算法。

2. 数据降维

降维就是一种对高维度特征数据预处理方法。降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。在实际的生产和应用中,降维在一定的信息损失范围内,可以为我们节省大量的时间和成本。降维也成为应用非常广泛的数据预处理方法。

降维具有如下一些优点:

  1. 使得数据集更易使用。
  2. 降低算法的计算开销。
  3. 去除噪声。
  4. 使得结果容易理解。

降维的算法有很多,比如奇异值分解(SVD)、主成分分析(PCA)、因子分析(FA)、独立成分分析(ICA)。

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

三、PCA原理

参考:https://blog.csdn.net/program_developer/article/details/80632779
以及一个很好的讲解:https://blog.csdn.net/zhongkelee/article/details/44064401

1. PCA的概念

PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。PCA的工作就是从原始的空间中顺序地找一组相互正交的座标轴,新的座标轴的选择与数据本身是密切相关的。其中,第一个新座标轴选择是原始数据中方差最大的方向,第二个新座标轴选取是与第一个座标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到n个这样的座标轴。通过这种方式获得的新的座标轴,我们发现,大部分方差都包含在前面k个座标轴中,后面的座标轴所含的方差几乎为0。于是,我们可以忽略余下的座标轴,只保留前面k个含有绝大部分方差的座标轴。事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理。

思考:我们如何得到这些包含最大差异性的主成分方向呢?

答案:事实上,通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值特征向量,选择特征值最大(即方差最大)的k个特征所对应的特征向量组成的矩阵。这样就可以将数据矩阵转换到新的空间当中,实现数据特征的降维。

由于得到协方差矩阵的特征值特征向量有两种方法:特征值分解协方差矩阵、奇异值分解协方差矩阵,所以PCA算法有两种实现方法:基于特征值分解协方差矩阵实现PCA算法、基于SVD分解协方差矩阵实现PCA算法。

2. 基本步骤
  • 对数据进行归一化处理(代码中并不是这么做的,而是直接减去均值)
  • 计算归一化后的数据集的协方差矩阵
  • 计算协方差矩阵的特征值和特征向量
  • 保留最重要的k个特征(通常k要小于n)。也能够自己制定。也能够选择一个阈值,然后通过前k个特征值之和减去后面n-k个特征值之和大于这个阈值,则选择这个k
  • 找出k个特征值相应的特征向量
  • 将m * n的数据集乘以k个n维的特征向量的特征向量(n * k),得到最后降维的数据。
3. python实现

https://github.com/csuldw/MachineLearning/tree/master/PCA
https://github.com/lguduy/Machine-Learning/tree/master/PCA

其他参考:
Python 实现 PCA
PCA主成分分析Python实现

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章