pca算法 c语言,降维算法一 : PCA (Principal Component Analysis)

PCA(主成分分析)是一种降维方法,用于减少数据集的复杂性,同时保持数据集中的信息。它通过转换数据到新的坐标系,使数据的方差最大化并减少维度间的相关性。PCA的实现涉及计算协方差矩阵,通过特征值分解找到主要成分,并选择具有最大方差的特征向量作为新坐标轴。通过这个过程,可以将高维数据投影到低维空间,达到数据降维和去除噪声的效果。
摘要由CSDN通过智能技术生成

PCA简介

在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律。多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上增加了数据采集的工作量,更重要的是在多数情况下,许多变量之间可能存在相关性,从而增加了问题分析的复杂性,同时对分析带来不便。如果分别对每个指标进行分析,分析往往是孤立的,而不是综合的。盲目减少指标会损失很多信息,容易产生错误的结论。

因此需要找到一个合理的方法,在减少需要分析的指标同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。由于各变量间存在一定的相关关系,因此有可能用较少的综合指标分别综合存在于各变量中的各类信息。主成分分析与因子分析就属于这类降维的方法。

在PCA中,数据从原来的坐标系转化到新的坐标系中。当然这里新的坐标系也不是随便设定的,而是应该根据数据本身的特征来设计。通常第一个新坐标轴选择的是原始数据方差最大的方向,第二个坐标轴是与第一个坐标轴正交且具有最大方差的方向。这句话的意思就是,第二个选取的方向应该和第一个方向具有很弱的相关性。如果有很强的相关性的话,那么选其中一个就ok了。然后依此类推,选出后面的方向,其数目应该和原始数据的特征数目一致。

通常我们会发现,大部分的方差就集中在前面几个方向中,因此可以忽略后面的方向,达到降维的效果。

然后书上有这么一段话,介绍实现该过程的伪代码。

f9c6b36395f6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

看不懂这里的协方差矩阵是啥,为什么是这样子的?

只好从初中数学的方差开始学习了。。。

基本统计学概念

统计学里有几个基本的概念,有均值,方差,标准差等等。比如有一个含有n个样本的集合:X={x1,...,xn} 那么,

f9c6b36395f6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

根据以前我们所知道的,方差是用来衡量数据的波动程度的,如果大部分数据都在均值附近,那么方差就会是很小的值。

协方差是什么

分析完了方差我们再看看啥是协方差。

方差描述的是其本身数据的情况,如果我们想知道,某2种数据之间的关系,该怎么描述呢,比如,男生帅气程度(or猥琐程度),和受女孩子欢迎程度。假设这里有样本集合f(x,y)=(xi,...,yi),x表示男生帅气指数,y表示相应的受女生欢迎指数,那么2者之间的关联程度可以这么定义:

f9c6b36395f6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

那么从上面可知,如果结果为正值,那么说明2者是正相关,男生越帅,女生越喜欢。。(废话-.-)

协方差矩阵是什么

再看看协方差矩阵,上面提到的协方差是二维数据的情况,那么如果是多维,比如三维,x,y,z.那么两两之间的协方差就有6个,再加上自己与自己的协方差就有9个,可以画成矩阵的形式了。

f9c6b36395f6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

PCA与协方差矩阵

讲完协方差矩阵,再回头看看PCA,PCA和这个矩阵又有啥关系呢。

PCA的理念就是将高维空间的数据映射到低维空间,降低维度之间的相关性,并且使自身维度的方差尽可能的大。那么哪种数据方式可以同时表达维度之间的相关性以及,维度本身的方差呢?就是上面提到的协方差矩阵。协方差矩阵对角线上是维度的方差,其他元素是两两维度之间的协方差(即相关性)。

PCA的目的之一:降低维度之间的相关性,也就说减小协方差矩阵非对角线上的值。如何减小呢?可以使协方差矩阵变成对角矩阵。对角化后的矩阵,其对角线上是协方差矩阵的特征值。这里又提到了特征值,看看它到底有啥潜在的含义。

特征值与特征向量

根据其定义Ax=cx,其中A是矩阵,c是特征值,x是特征向量;

Ax矩阵相乘的含义就是,矩阵A对向量x进行一系列的变换(旋转或者拉伸),其效果等于一个常数c乘以向量x。

通常我们求特征值和特征向量是想知道,矩阵能使哪些向量(当然是特征向量)只发生拉伸,其拉伸程度如何(特征值的大小)。这个真正的意义在于,是为了让我们看清矩阵能在哪个方向(特征向量)产生最大的变化效果。

好比以下来自书本的图片:

f9c6b36395f6?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

回头再看刚才的协方差矩阵对角化之后,得到了协方差矩阵的特征值;那么我们就能明白协方差矩阵在特征值对应的特征向量的方向上有最大的变化效果。当然这里的特征值会有多个,我们只需要取最大的几个就可以了,特征值越大,表示其在特征向量上的变化越大。我们把这几个特征值对应的特征向量的方向作为新的维度,于是,降维的目的达到了。。。

数据降维

为了说明什么是数据的主成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值