Ⅰ PCA降维算法
降维是机器学习中很重要的一种思想。在机器学习中经常会碰到一些高维的数据集,它们会占用计算机的内存和硬盘空间,而且在运算时会减缓速度。
降维能够使得数据量被压缩,加快运算速度,减小储存空间,以及方便可视化的观察数据特点。
PS:在降维中,我们减少的是特征种类而不是样本数量,样本数量m不变,特征值数量n会减少。
一种常用的降维算法是主成分分析算法(Principal Component Analysis),简称 PCA 。
PCA是通过找到一个低维的线或面,然后将数据投影到线或面上去,然后通过减少投影误差(即每个特征到投影的距离的平均值)来实现降维。
上图是一个包含二维特征值的样本集。黑色的叉代表样本,红色的线表示找到的低维的线,绿色的叉则是样本投影在线上的位置。而它们的投影距离就是PCA算法所需要考虑的。
通过上图可以看出PCA算法就是找出一个线,在数学上就是一个向量,使得其他样本投影到该向量上的距离最小。
推而广之:
一般情况下,将特征值的维度从n降到k,就是找到k个向量 ,使得样本在这些向量上的投影最小。
例如,2维降到1维,就是找到1个向量,即一条线;3维降到2维,就是找到2向量,即一个平面。
数据处理
假设有m个样本集:
下面需要对数据做一下特征值缩放或者均值归一化。
先计算出平均值,然后用样本值减去平均值。
然后用 替换 , 可以是数据最大值最小值的范围或者标准差。
算法部分
我们需要的就是矩阵U,他是一个n维方阵 ,它的每一列就是我们需要的向量:
使用 矩阵可以降维:
那么要回到原来的维度上去就需要:
这里我们只能得到原来的近似值
与 近似相等,两者之间的差就是投影误差,或平均平方映射误差:
数据的总变差(total variation),即样本的长度平方的均值:
选择维度k的最小值的方法:
表示平方投影误差除以总变差的值小于0.01,用PCA的语言称之为 保留了99%的差异性 。
PS:这个值是可以变化的,可以是95%,90%,85%等等。
使用循环验证的办法:
初始化 ,然后计算出 ,通过 计算出 和 ,然后通过上方的公式计算出值是不是小于0.01。
如果不是,增加k值,直到获得最小的k值满足条件。
快捷办法
通过奇异值分解的到的矩阵 是一个n维的对角矩阵:
通过这个矩阵可以来计算:
也可以用下面的式子:
这种方法就非常快捷高效。
我们在训练集上通过PCA获得矩阵 ,在交叉验证集和测试集上就不能再使用PCA来计算矩阵了,而是直接用训练集里的矩阵来映射交叉验证集和测试集上的数据。
PCA最常用的就是压缩数据,加速算法的学习,或者可视化数据。
PCA的错误用法,用来防止算法过拟合
算法过拟合的原因之一是算法过于复杂,特征值的维度过高,使用PCA可以降低维度,看起来会有效,但是实际上效果很差。防止算法过拟合还是使用正则化的方法来实现。
还有一个注意点。就是在设计一个机器学习算法时,不用一开始就考虑降维,先在不使用PCA的条件下设计算法,当算法出现问题,例如,算法计算过慢,占用大量内存...,之后当确定需要使用PCA的时候再继续使用。
Ⅱ pca算法指的是什么
PCA(principle component analysis),即主成分分析法,是一个非监督的机器学习算法,是一种用于探索高维数据结构的技术,主要用于对数据的降维,通过降维可以发现更便于人理解的特征,加快对样本有价值信息的处理速度,此外还可以应用于可视化(降到二维)和去噪。
PCA与LDA算法的基本思想
数据从原陆竖慎来的坐标系转换到新的坐标系,新坐标系的选择是由数据本身决定的。第一个新坐标轴选择的是原始数据中方差最大的方向,第二个新坐标轴选择和第一个坐标轴正交且具有最大方差的方向。该过程一直重复,重复次数为原始数据早敬中特征的数目。我们会发现,大部分方差都包含在最前面的几个新坐标轴中。因此,我们可以忽略余下的坐标轴,纤颂即对数据进行降维处理。
Ⅲ (十)PCA降维算法
主成分分析(Principal components analysis,以下简称PCA) 是最重要的降维方法之一。在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用。它可以通过 线性变换 将原始数据变换为一组 各维度线性无关 的表示,以此来提取数据的主要线性分量。需要注意的是,PCA一般只用于线性数据降维,对于非线性数据一般采用KPCA。
降维就是找出数据里最主要的方面,用数据里最主要的方面来代替原始数据,并且希望损失尽可能的小。首先看几张图,有一个直观的认识。
这里面,把椭圆看成是数据:
基于这个知识,如果我们想对数据进行降维的话,比如图1的两个维度的数据降成一维,我们可以选择保留X1这个维度的数据,因为在这个维度上蕴含的信息量更多。同理,图2就可以保留x2这个维度的数据。但是,问题来了,图3应该保留哪个维度的数据呢?答案是保留哪个维度都不好,都会丢失较大的信息量。但是,如果我们把图3的坐标轴旋转一下
比较容易看出,图3在新的坐标轴下就能进行降维了。
所以,第一,变换正确的坐标轴(基);第二,保留方差最大的几个轴作为主成分,这样的做法就是PCA的核心思想。
从前文可以看出,理想的坐标轴是要求数据投在新坐标轴后,尽可能的分散,也就是数据的方差最大。然后每次选择方差最大的轴作为主成分。
将前文2维降1维的例子扩展到更高维度,还有一个问题需要解决,考虑三维降到二维问题。与之前相同,首先我们希望找到一个方向使得投影后方差最大,这样就完成了第一个方向的选择,继而我们选择第二个投影方向。如果我们还是单纯只选择方差最大的方向,很明显,这个方向与第一个方向应该是“几乎重合在一起”,显然这样的维度是没有用的,因为发生了大量的信息重复,起不到降维的作用,因此,应该有其他约束条件——就是正交。 PCA要求轴与轴之间是正交的,也就是不同维度的信息相关性为0。
在表示相关性中,相关系数与协方差是等价的,这里为了方便计算,使用协方差。下面是协方差公式,当协方差为0时,表示两个特征a,b线性不相关。
可以发现,当a=b时,协方差公式就变成了方差公式,方差是特殊的协方差。如果运气更好,特征a与b的平均数都为0,那么公式会进一步简化,得到:
所以说,为了计算方便,PCA降维前,一般都要求将所有特征属性中心化,即平均数为0。
因为PCA要求,同一轴内方差最大,不同轴协方差为0,如何把它们放在一块呢?这里就引入了协方差矩阵的概念:
假设有m个样本,每个样本特征维度是2,每个特征都经过中心化处理:
我们发现协方差矩阵的对角线是方差,而且是对称矩阵。方差和协方差都放在了一个矩阵里面,只需对这个矩阵优化,使它除了对角线的其余元素都为0,就可以了,美滋滋。
我们知道矩阵乘法,本质上就是一种线性变换的过程。而正交基矩阵的乘法,则是坐标系变换的过程。设原空间的数据为X,协方差矩阵为C,经过正交基矩阵P,得到了新坐标系下的数据Y,即Y=PX。那么新坐标系下的协方差矩阵D是怎样的呢?
我们发现,新旧空间的协方差矩阵是有关系的,而且都和变换矩阵P有关系。问题就转化成了,能不能找到一个矩阵P,使得新空间下的协方差矩阵的非对角线元素都为0.
首先,原始数据矩阵X的协方差矩阵C是一个实对称矩阵,它有特殊的数学性质:
也就是说,P就是是协方差矩阵的特征向量单位化后按行排列出的矩阵,其中每一行都是C的一个特征向量。 如果设P按照中特征值的从大到小,将特征向量从上到下排列,则用P的前K行组成的矩阵乘以原始数据矩阵X,就得到了我们需要的降维后的数据矩阵Y 。
其实,经过数学上的推导的,我们就可以知道,特征值对应的特征向量就是理想中想取得正确的坐标轴,而特征值就等于数据在旋转之后的坐标上对应维度上的方差。
由于协方差矩阵的维度和特征相同,所以在进行特征值分解时,得到的特征值数目不会超过特征的数目。
在学习线性代数时,我们都会学矩阵的特征值分解,我们知道一个方阵A经过 特征值分解 后就得到 特征向量 和 特征值 了。那么,这个所谓的特征值和特征向量到底是什么东西呢?
很多人都会说是那个经典的式子:
首先给出概念上的一种解释。所谓的特征值和特征向量,最重要的是理解“特征”这两个字,特征向量翻译为eigen vector, eigen这个单词来自德语,本义是在“本身固有的,本质的”。纯数学的定义下,并不能很明白地理解到底为什么叫做特征值和特征向量。但是举一个应用例子,可能就容易理解多了。
在图像处理中,有一种方法就是特征值分解。我们都知道图像其实就是一个像素值组成的矩阵,假设有一个100x100的图像, 对这个图像矩阵做特征值分解,其实是在提取这个图像中的特征,这些提取出来的特征是一个个的向量,即对应着特征向量。而这些特征在图像中到底有多重要,这个重要性则通过特征值来表示。 比如这个100x100的图像矩阵A分解之后,会得到一个100x100的特征向量组成的矩阵Q,以及一个100x100的只有对角线上的元素不为0的矩阵E,这个矩阵E对角线上的元素就是特征值,而且还是按照从大到小排列的(取模,对于单个数来说,其实就是取绝对值),也就是说这个图像A提取出来了100个特征,这100个特征的重要性由100个数字来表示,这100个数字存放在对角矩阵E中。 在实际中我们发现,提取出来的这100个特征从他们的特征值大小来看,大部分只有前20(这个20不一定,有的是10,有的是30或者更多)个特征对应的特征值很大,后面的就都是接近0了,也就是说后面的那些特征对图像的贡献几乎可以忽略不计。
我们知道,图像矩阵 A 特征值分解后可以得到矩阵 P 和矩阵 E (特征值对角矩阵):
我们可以看到,在只取前20个特征值和特征向量对图像进行恢复的时候,基本上已经可以看到图像的大体轮廓了,而取到前50的时候,几乎已经和原图像无异了。明白了吧,这就是所谓的矩阵的特征向量和特征值的作用。
所以归根结底,特征向量其实反应的是矩阵A本身固有的一些特征,本来一个矩阵就是一个线性变换,当把这个矩阵作用于一个向量的时候,通常情况绝大部分向量都会被这个矩阵A变换得“面目全非”,但是偏偏刚好存在这么一些向量,被矩阵A变换之后居然还能保持原来的样子,于是这些向量就可以作为矩阵的核心代表了。于是我们可以说:一个变换(即一个矩阵)可以由其特征值和特征向量完全表述,这是因为从数学上看,这个矩阵所有的特征向量组成了这个向量空间的一组基底。而矩阵作为变换的本质其实不就把一个基底下的东西变换到另一个基底表示的空间中么?
参考:
https://blog.csdn.net/hjq376247328/article/details/80640544
https://blog.csdn.net/hustqb/article/details/78394058
https://blog.csdn.net/woainishifu/article/details/76418176
Ⅳ R数据可视化: PCA和PCoA图, 2D和3D
主成分分析(Principal Components Analysis,PCA) ,也称主分量分析或主成分回归分析法,是一种无监督的数据降维方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的 降维 。这种降维的思想首先减少数据集的维数,同时还保持数据集的对方差贡献最大的特征,最终使数据直观呈现在二维坐标系。
直观上,第一主成分轴 优于 第二主成分轴,具有最大可分性。
主坐标分析(Principal Coordinates Analysis,PCoA),即经典多维标度(Classical multidimensional scaling),用于研究数据间的相似性。
主成分分析(Principal components analysis,PCA)是一种统计分析、简化数据集的方法。它利用正交变换来对一系列可能相关的变量的观测值进行线性变换,从而投影为一系列线性不相关变量的值,这些不相关变量称为主成分(Principal Components)。具体地,主成分可以看做一个线性方程,其包含一系列线性系数来指示投影方向(如图)。PCA对原始数据的正则化或预处理敏感(相对缩放)。PCA是最简单的以特征量分析多元统计分布的方法。通常情况下,这种运算可以被看作是揭露数据的内部结构,从而更好的解释数据的变量的方法。
主坐标分析(Principal Coordinates Analysis,PCoA),即经典多维标度(Classical multidimensional scaling),用于研究数据间的相似性。PCoA与PCA都是降低数据维度的方法,但是差异在在于PCA是基于原始矩阵,而PCoA是基于通过原始矩阵计算出的距离矩阵。因此,PCA是尽力保留数据中的变异让点的位置不改动,而PCoA是尽力保证原本的距离关系不发生改变,也就是使得原始数据间点的距离与投影中即结果中各点之间的距离尽可能相关(如图)。
R中有很多包都提供了PCA和PCoA,比如常用的ade4包。本文将基于该包进行PCA和PCoA的分析,数据是自带的deug,该数据提供了104个学生9门课程的成绩(见截图)和综合评定。综合评定有以下几个等级:A+,A,B,B-,C-,D。
让我们通过PCA和PCoA来看一看这样的综合评定是否合理,是否确实依据这9门课把这104个学生合理分配到不同组(每个等级一个组)。
前文已经介绍了PCA是基于原始数据,所以直接进行PCA分析即可。相信大家都比较熟悉散点图的绘制方法,这里不再细讲,PCA分析完毕后我们直接作图展示结果。
整体看起来还不错,就是B-和C-的学生似乎难以区分。
有时候PCA和PCoA的结果差不多,有时候某种方法能够把样本有效分开而另一种可能效果不佳,这些都要看样本数据的特性。
除转录组研究以外,在16S微生物的研究中我们会根据物种丰度的文件对数据进行PCA或者PCoA分析,也是我们所说的β多样性分析。根据PCA或者PCoA的结果看感染组和对照组能否分开,以了解微生物组的总体变化情况。
β多样性分析的概念
Beta多样性指的是样本间多样性。在肠道菌群分析中,Beta多样性是衡量个体间微生物组成相似性的一个指标。通过计算样本间距离可以获得β多样性计算矩阵,后续一般会利用PCoA、进化树聚类等分析对此数值关系进行图形展示。主要基于OTU的群落比较方法,有欧式距离、bray curtis距离、Jaccard 距离,这些方法优势在于算法简单,考虑物种丰度(有无)和均度(相对丰度),但其没有考虑OTUs之间的进化关系,认为OTU之间不存在进化上的联系,每个OTU间的关系平等。另一种算法Unifrac距离法,是根据系统发生树进行比较,并根据16s的序列信息对OTU进行进化树分类, 一般有加权和非加权分析。
QIIME2中重要的Beta多样性指数:
Jaccard距离:群落差异的定性度量,即只考虑种类,不考虑丰度。
Bray-Curtis距离:群落差异的定量度量,较常用。
Unweighted UniFrac距离:包含特征之间的系统发育关系的群落差异定性度量。
Weighted UniFrac距离:包含特征之间的系统发育关系的群落差异定量度量。
解压缩通过qiime2输出的 .qza文件,获得绘图的matrix和pcoa结果文件
将pcoa结果整理成下表,保存为 ***_site.txt
注意没有legend,需要AI加入。
后期需要继续摸索,其实可以加legend的,只是目前自己的技术做不到。。。
PCA思想解析:
https://www.jianshu.com/p/09bae5cbdc53
Ⅳ 利用 PCA 来对数据降维
降维往往作为预处理步骤,其中独立成分分析、因子分析和主成分分析比较流行,主成分分析(PCA)最为广泛。
主成分分析会通过线性组合将多个原始变量合并成若干个主成分,这样每个主成分都变成了原始变量的线性组合。这种转变的目的,一方面是可以大幅降低原始数据的维度,同时也在此过程中发现原始数据属性之间的关系。
主成分分析的主要步骤如下:
1)通常要先进行各变量的标准化工作,标准化的目的是将数据按照比例进行缩放,使之落入一个小的区间范围之内,从而让不同的变量经过标准化处理后可以有平等的分析和比较基础。
2)选择协方差阵或者相关阵计算特征根及对应的特征向量。
3)计算方差贡献率,并根据方差贡献率的阀值选取合适的主成分个数。
4)根据主成分载荷的大小对选择的主成分进行命名。
5)根据主成分载荷计算各个主成分的得分。
将主成分进行推广和延伸即成为因子分析(Factor Analysis),因子分析在综合原始变量信息的基础上将会力图构筑若干个意义较为明确的公因子;也就是说,采用少数几个因子描述多个指标之间的联系,将比较密切的变量归为同一类中,每类变量即是一个因子。之所以称其为因子,是因为它们实际上是不可测量的,只能解释。
主成分分析是因子分析的一个特例,两者的区别和联系主要表现在以下方面:
❑ 主成分分析会把主成分表示成各个原始变量的线性组合,而因子分析则把原始变量表示成各个因子的线性组合。这个区别最直观也最容易记住。
❑ 主成分分析的重点在于解释原始变量的总方差,而因子分析的重点在于解释原始变量的协方差。
❑ 在主成分分析中,有几个原始变量就有几个主成分,而在因子分析中,因子个数可以根据业务场景的需要人为指定,并且指定的因子数量不同,则分析结果也会有差异。
❑ 在主成分分析中,给定的协方差矩阵或者相关矩阵的特征值是唯一时,主成分也是唯一的,但是在因子分析中,因子不是唯一的,并且通过旋转可以得到不同的因子。
主成分分析和因子分析在数据化运营实践中主要用于数据处理、降维、变量间关系的探索等方面,同时作为统计学里的基本而重要的分析工具和分析方法,它们在一些专题分析中也有着广泛的应用。
PCA借助于一个正交变换,将其分量相关的原随机变量转化成其分量不相关的新随机变量。主要作用是对高维数据进行降维。PCA把原先的n个特征用数目更少的k个特征取代,新特征是旧特征的线性组合,这些线性组合最大化样本方差,尽量使新的k个特征互不相关。
PCA 可以从数据中识别其主要特征,它是通过沿着数据最大方差方向旋转坐标轴来实现的。选择方差最大的方向作为第一条坐标轴,后续坐标轴则与前面坐标轴正交。协方差矩阵上的特征值分析可以用一系列的正交坐标轴来获取。
优点: 降低数据的复杂性,识别最重要的多个特征。
缺点: 不一定需要,且可能损失有用信息。
PCA的主要算法如下:
组织数据形式,以便于模型使用;
计算样本每个特征的平均值;
每个样本数据减去该特征的平均值(归一化处理);
求协方差矩阵;
找到协方差矩阵的特征值和特征向量;
对特征值和特征向量重新排列(特征值从大到小排列);
对特征值求取累计贡献率;
对累计贡献率按照某个特定比例选取特征向量集的子集合;
对原始数据(第三步后)进行转换。
其中协方差矩阵的分解可以通过按对称矩阵的特征向量来,也可以通过分解矩阵的SVD来实现,而在Scikit-learn中,也是采用SVD来实现PCA算法的。这里给出带SVD的原始算法和Scikit-learn模块实现的PCA类。