⑴ 利用 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类。
⑵ 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)简介
主成分分析实例:一个 平均值 为(1, 3)、标准差在(0.878, 0.478)方向上为3、在其正交方向为1的 高斯分布 。这里以黑色显示的两个向量是这个分布的 协方差矩阵 的 特征向量 ,其长度按对应的 特征值 之平方根为比例,并且移动到以原分布的平均值为原点。
在多元统计分析中, 主成分分析 (英语: Principal components analysis , PCA )是一种分析、简化数据集的技术。主成分分析经常用于减少数据集的 维数 ,同时保持数据集中的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但是,这也不是一定的,要视具体应用而定。由于主成分分析依赖所给数据,所以数据的准确性对分析结果影响很大。
主成分分析由 卡尔·皮尔逊 于1901年发明,用于分析数据及建立数理模型。其方法主要是通过对 协方差矩阵 进行特征分解,以得出数据的主成分(即 特征向量 )与它们的权值(即 特征值 [3] )。PCA是最简单的以特征量分析多元统计分布的方法。其结果可以理解为对原数据中的 方差 做出解释:哪一个方向上的数据值对方差的影响最大?换而言之,PCA提供了一种降低数据 维度 的有效办法;如果分析者在原数据中除掉最小的 特征值 所对应的成分,那么所得的低维度数据必定是最优化的(也即,这样降低维度必定是失去讯息最少的方法)。主成分分析在分析复杂数据时尤为有用,比如 人脸识别 。
PCA是最简单的以特征量分析多元统计分布的方法。通常情况下,这种运算可以被看作是揭露数据的内部结构,从而更好的解释数据的变量的方法。如果一个多元数据集能够在一个高维数据空间坐标系中被显现出来,那么PCA就能够提供一幅比较低维度的图像,这幅图像即为在讯息最多的点上原对象的一个‘投影’。这样就可以利用少量的主成分使得数据的维度降低了。
PCA跟因子分析密切相关,并且已经有很多混合这两种分析的统计包。而真实要素分析则是假定底层结构,求得微小差异矩阵的特征向量。
PCA,Principle Component Analysis,即主成分分析法,是特征降维的最常用手段。顾名思义,PCA 能从冗余特征中提取主要成分,在不太损失模型质量的情况下,提升了模型训练速度。
如上图所示,我们将 样本到红色向量的距离 称作是投影误差(Projection Error)。以二维投影到一维为例,PCA 就是要找寻一条直线,使得各个特征的投影误差足够小,这样才能尽可能的保留原特征具有的信息。
因为PCA仅保留了特征的主成分,所以PCA是一种有损的压缩方式.
从 PCA 的执行流程中,我们知道,需要为 PCA 指定目的维度 k 。如果降维不多,则性能提升不大;如果目标维度太小,则又丢失了许多信息。
由于 PCA 减小了特征维度,因而也有可能带来过拟合的问题。PCA 不是必须的,在机器学习中,一定谨记不要提前优化,只有当算法运行效率不尽如如人意时,再考虑使用 PCA 或者其他特征降维手段来提升训练速度。
降低特征维度不只能加速模型的训练速度,还能帮我们在低维空间分析数据,例如,一个在三维空间完成的聚类问题,我们可以通过 PCA 将特征降低到二维平面进行可视化分析。
根据 13 个特征对葡萄酒分类(推销给不同品味的人),利用 PCA ,可以将数据从 13 维降到 2 维进行可视化。
array([[1.369e+01, 3.260e+00, 2.540e+00, 2.000e+01, 1.070e+02, 1.830e+00,
5.600e-01, 5.000e-01, 8.000e-01, 5.880e+00, 9.600e-01, 1.820e+00,
6.800e+02],
[1.269e+01, 1.530e+00, 2.260e+00, 2.070e+01, 8.000e+01, 1.380e+00,
1.460e+00, 5.800e-01, 1.620e+00, 3.050e+00, 9.600e-01, 2.060e+00,
4.950e+02],
[1.162e+01, 1.990e+00, 2.280e+00, 1.800e+01, 9.800e+01, 3.020e+00,
2.260e+00, 1.700e-01, 1.350e+00, 3.250e+00, 1.160e+00, 2.960e+00,
3.450e+02]])
array([[ 0.87668336, 0.79842885, 0.64412971, 0.12974277, 0.48853231,
-0.70326216, -1.42846826, 1.0724566 , -1.36820277, 0.35193216,
0.0290166 , -1.06412236, -0.2059076 ],
[-0.36659076, -0.7581304 , -0.39779858, 0.33380024, -1.41302392,
-1.44153145, -0.5029981 , 1.70109989, 0.02366802, -0.84114577,
0.0290166 , -0.73083231, -0.81704676],
[-1.69689407, -0.34424759, -0.32337513, -0.45327855, -0.14531976,
1.24904997, 0.31964204, -1.52069698, -0.4346309 , -0.75682931,
0.90197362, 0.51900537, -1.31256499]])
array([0.36884109, 0.19318394, 0.10752862, 0.07421996, 0.06245904,
0.04909 , 0.04117287, 0.02495984, 0.02308855, 0.01864124,
0.01731766, 0.01252785, 0.00696933])
array([[-2.17884511, -1.07218467],
[-1.80819239, 1.57822344],
[ 1.09829474, 2.22124345]])
LogisticRegression(C=1.0, class_weight=None, al=False, fit_intercept=True,
intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
penalty='l2', random_state=0, solver='liblinear', tol=0.0001,
verbose=0, warm_start=False)
array([1, 3, 2, 1, 2])
array([[14, 0, 0],
[ 1, 15, 0],
[ 0, 0, 6]])
准确率(精度)为 : 0.9722222222222222
参考: https://zh.wikipedia.org/wiki/主成分分析
《 斯坦福机器学习》
《机器学习 A-Z》
⑷ 常用降维方法之PCA 和 LDA
PCA本质上是将方差最大的方向作为主要特征,并且在各个正交方向上将数据“离相关”,也就是让它们在不同正交方向上没有相关性。而方差最大的那个维度是主成分。
PCA是比较常见的线性降维方法,通过线性投影将高维数据映射到低维数据中,所期望的是在投影的维度上,新特征自身的方差尽量大,方差越大特征越有效,尽量使产生的新特征间的相关性越小。
PCA算法的具体操作为对所有的样本进行中心化操作,计算样本的协方差矩阵,然后对协方差矩阵做特征值分解,取最大的n个特征值对应的特征向量构造投影矩阵。
再举个栗子:
下面举一个简单的例子,说明PCA的过程。
假设我们的数据集有10个二维数据(2.5,2.4), (0.5,0.7), (2.2,2.9), (1.9,2.2), (3.1,3.0), (2.3, 2.7), (2, 1.6), (1, 1.1), (1.5, 1.6), (1.1, 0.9),需要用PCA降到1维特征。
首先我们对样本中心化,这里样本的均值为(1.81, 1.91),所有的样本减去这个均值向量后,即中心化后的数据集为(0.69, 0.49), (-1.31, -1.21), (0.39, 0.99), (0.09, 0.29), (1.29, 1.09), (0.49, 0.79), (0.19, -0.31), (-0.81, -0.81), (-0.31, -0.31), (-0.71, -1.01)。
现在我们开始求样本的协方差矩阵,由于我们是二维的,则协方差矩阵为:
对于我们的数据,求出协方差矩阵为:
求出特征值为(0.0490833989, 1.28402771),对应的特征向量分别为:
由于最大的k=1个特征值为1.28402771,对于的k=1个特征向量为 则我们的W=
我们对所有的数据集进行投影 得到PCA降维后的10个一维数据集为:(-0.827970186, 1.77758033, -0.992197494, -0.274210416, -1.67580142, -0.912949103, 0.0991094375, 1.14457216, 0.438046137, 1.22382056)
在上面的PCA算法中,我们假设存在一个线性的超平面,可以让我们对数据进行投影。但是有些时候,数据不是线性的,不能直接进行PCA降维。这里就需要用到和支持向量机一样的核函数的思想,先把数据集从n维映射到线性可分的高维N>n,然后再从N维降维到一个低维度n', 这里的维度之间满足n'<n<N。
使用了核函数的主成分分析一般称之为核主成分分析(Kernelized PCA, 以下简称KPCA。假设高维空间的数据是由n维空间的数据通过映射ϕ产生。
则对于n维空间的特征分解:
映射为:
通过在高维空间进行协方差矩阵的特征值分解,然后用和PCA一样的方法进行降维。一般来说,映射ϕ不用显式的计算,而是在需要计算的时候通过核函数完成。由于KPCA需要核函数的运算,因此它的计算量要比PCA大很多。
这里对PCA算法做一个总结。作为一个非监督学习的降维方法,它只需要特征值分解,就可以对数据进行压缩,去噪。因此在实际场景应用很广泛。为了克服PCA的一些缺点,出现了很多PCA的变种,比如第六节的为解决非线性降维的KPCA,还有解决内存限制的增量PCA方法Incremental PCA,以及解决稀疏数据降维的PCA方法Sparse PCA等。
PCA算法的主要优点有:
LDA(线性判别分析,Linear Discriminant Analysis)是另一种常用的降维方法,它是有监督的。LDA在模式识别领域(比如人脸识别,舰艇识别等图形图像识别领域)中有非常广泛的应用,因此我们有必要了解下它的算法原理。这里需要注意的是,此处的LDA与文本主题模型中的LDA(隐含狄利克雷分布,Latent Dirichlet Allocation)并不相同,他是一种处理文档的主题模型。
LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。
LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。
什么意思呢? 我们要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。
可能还是有点抽象,我们先看看最简单的情况。假设我们有两类数据 分别为红色和蓝色,如下图所示,这些数据特征是二维的,我们希望将这些数据投影到一维的一条直线,让每一种类别数据的投影点尽可能的接近,而红色和蓝色数据中心之间的距离尽可能的大。
以上就是使用LDA进行降维的算法流程。实际上LDA除了可以用于降维以外,还可以用于分类。一个常见的LDA分类基本思想是假设各个类别的样本数据符合高斯分布,这样利用LDA进行投影后,可以利用极大似然估计计算各个类别投影数据的均值和方差,进而得到该类别高斯分布的概率密度函数。当一个新的样本到来后,我们可以将它投影,然后将投影后的样本特征分别带入各个类别的高斯分布概率密度函数,计算它属于这个类别的概率,最大的概率对应的类别即为预测类别。
LDA用于降维,和PCA有很多相同,也有很多不同的地方,因此值得好好的比较一下两者的降维异同点。
这点可以从下图形象的看出,在某些数据分布下LDA比PCA降维较优。
当然,某些某些数据分布下PCA比LDA降维较优,如下图所示:
LDA算法既可以用来降维,又可以用来分类,但是目前来说,主要还是用于降维。在我们进行图像识别图像识别相关的数据分析时,LDA是一个有力的工具。下面总结下LDA算法的优缺点。
LDA算法的主要优点有:
参考文章: 刘建平老师的博客园
⑸ pca算法介绍及简单实例
主成分分析(Principal components analysis,PCA)是一种分析、简化数据集的技术。主成分分析经常用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征。
简而言之,PCA就是压缩数据,降低维度,把重要的特征留下来。
目的:
当你有上百上千个特征,它们可能来自不同的部门给的数据,可能这些来自不同的数据是可以互相推导的,或者某个特征是对结果没什么影响的,或者来自不同的部门的数据其实在描述同一个问题,那么这些冗余的特征是没有价值的。
我们可以通过降低维度(用机器学习的话来说就是去掉一些特征)来提高算法效率。
在解决机器学习问题时,如果能把数据可视化,可以大大帮助我们找到解决方案。但是,如果特征太多(即维数太多),你很难画出图,就算画出来了也不容易理解。
我们可以通过降低维度使数据反映在平面或者立体空间中,便于数据分析
对于一组数据,如果它在某一坐标轴上的方差越大,说明坐标点越分散,该属性能够比较好的反映源数据。所以在进行降维的时候,主要目的是找到一个超平面,它能使得数据点的分布方差呈最大,这样数据表现在新的坐标轴上时候已经足够分散了。
我们要对数据样本进行中心化,中心化即是指变量减去它的均值。我们通过坐标轴变换,使得原本属于x轴的数据样本变成w轴样本。我们希望变化后的数据在坐标轴w的呈现的值z的方差最大,则我们会得到图示目标函数,并且由于w是坐标轴,所以我们会得到一个约束条件。根据拉格朗日乘子法可以解决该问题,经过处理后我们把问题变成了x协方差求特征值,求特征向量的问题了。
我们已经在上述过程中知道了问题的数学模型,我们可以解除p个特征值与对应的特征向量。我们可以对特征值进行大到小排序,如果我们要从p维 --> q维(q<p),那么我们只需要取前q个特征值对应的特征向量进行向量相乘。如果问题并没有给出具体q的值,那么我们可以通过计算如下式子便可以知道q的取值。其中t的取值相当于是一个阈值,比如我们需要保留80%,那么t=0.8即可。
(1)假设我们有一个二维数据,我们要通过PCA的方法来将这个二维数据降到一维。
(2)因为数据已经中心化,所以我们就省去了中心化的步骤。我们开始求x协方差。
先来看看协方差的定义和计算方式。
计算结果如下
同样的,了解一下特征值和特征向量的定义以及计算方式
以此题为例,分两步来做
a.由矩阵A的特征方程求特征值
b.把每个特征值代入线性方程组,求出基础解系。(打不出来莱姆达我也很难受)
结果如下
⑥将二维变成一维,选择最大的特征值和对应的特征向量进行降维,结果如下
⑹ 主成分分析(PCA)
在许多领域的研究与应用中,往往需要对反映事物的多个变量进行大量的观测,收集大量数据以便进行分析寻找规律。多变量大样本无疑会为研究和应用提供了丰富的信息,但也在一定程度上增加了数据采集的工作量,更重要的是在多数情况下,许多变量之间可能存在相关性,从而增加了问题分析的复杂性,同时对分析带来不便。如果分别对每个指标进行分析,分析往往是孤立的,而不是综合的。盲目减少指标会损失很多信息,容易产生错误的结论。
因此需要找到一个合理的方法,在减少需要分析的指标同时,尽量减少原指标包含信息的损失,以达到对所收集数据进行全面分析的目的。由于各变量间存在一定的相关关系,因此有可能用较少的综合指标分别综合存在于各变量中的各类信息。
主成分分析(Principal components analysis,以下简称PCA)是最重要的降维方法之一。在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用。
PCA的思想是将n维特征映射到k维上(k<n),这k维是全新的正交特征。这k维特征称为主元,是重新构造出来的k维特征,而不是简单地从n维特征中去除其余n-k维特征。
如图。我们希望找到某一个维度方向,它可以代表这两个维度的数据。图中列了两个向量方向,u1和u2,那么哪个向量可以更好的代表原始数据集呢?从直观上也可以看出,u1比u2好。
为什么u1比u2好呢?可以有两种解释,第一种解释是样本点到这个直线的 距离足够近 ,第二种解释是样本点在这个直线上的 投影能尽可能的分开 。
假设三维空间中有一系列点,这些点分布在一个过原点的斜面上,如果你用自然坐标系x,y,z这三个轴来表示这组数据的话,需要使用三个维度,而事实上,这些点的分布仅仅是在一个二维的平面上,那么,问题出在哪里?如果你再仔细想想,能不能 把x,y,z坐标系旋转一下 ,使数据所在平面与x,y平面重合?这就对了!如果把旋转后的坐标系记为x',y',z',那么这组数据的表示只用x'和y'两个维度表示即可!认为把数据降维后并没有丢弃任何东西,因为这些数据在平面以外的第三个维度的分量都为0,即z'的坐标为0。假设这些数据在z'轴有一个很小的抖动,那么我们仍然用上述的二维表示这些数据,理由是我们可以认为这两个轴x'和y'的信息是数据的主成分,而这些信息对于我们的分析已经足够了,z'轴上的抖动很有可能是噪声。
内积运算:
内积的几何意义:
注意这里我们专门区分了矢量长度和标量长度,标量长度总是大于等于0,值就是线段的长度;而矢量长度可能为负,其绝对值是线段长度,而符号取决于其方向与标准方向相同或相反。
A与B的内积等于A到B的投影长度乘以B的模。再进一步,如果我们假设B的模为1,即让|B|=1|B|=1,那么就变成了:
则内积几何意义:设向量B的模为1,则A与B的内积值等于A向B所在直线投影的矢量长度!
(1)什么是基?
如上图,我们经常用线段终点的点坐标表示向量,例如上面的向量可以表示为(3,2)。但是 只有一个(3,2)本身是不能够精确表示一个向量的 。这里的3实际表示的是向量在x轴上的投影值是3,在y轴上的投影值是2,我们隐式把以x轴和y轴上正方向长度为1的向量为标准,即基为(1,0)和(0,1)。因为它们分别是x和y轴正方向上的单位向量,因此就使得二维平面上点坐标和向量一一对应,非常方便。
所以,要准确描述向量,首先要确定一组基,然后给出基所在的各个直线上的投影值,进而确定坐标值。
(2)什么是基变换?
实际上任何两个线性无关的二维向量都可以成为一组基,所谓线性无关在二维平面内可以直观认为是两个不在一条直线上的向量。例如:(1,1)和(-1,1)也可以成为一组基。
一般来说,我们希望基的模是1,因为从内积的意义可以看到,如果基的模是1,那么就可以方便的用向量点乘基而直接获得其在新基上的坐标了!实际上,对应任何一个向量我们总可以找到其同方向上模为1的向量,只要让两个分量分别除以模就好了。则(1,1)和(-1,1)同方向上模为1的新基为:
(3)用矩阵表示基变换
将(3,2)变换为新基上的坐标,就是用(3,2)与第一个基做内积运算,作为第一个新的坐标分量,然后用(3,2)与第二个基做内积运算,作为第二个新坐标的分量。实际上,我们可以用矩阵相乘的形式简洁的表示这个变换:
其中矩阵的两行分别为两个基,乘以原向量,其结果刚好为新基的坐标。可以稍微推广一下,如果我们有m个二维向量,只要将二维向量按列排成一个两行m列矩阵,然后用“基矩阵”乘以这个矩阵,就得到了所有这些向量在新基下的值。例如(1,1),(2,2),(3,3),想变换到刚才那组基上,则可以这样表示:
一般的,如果我们有M个N维向量,想将其变换为由R个N维向量表示的新空间中,那么首先将R个基按行组成矩阵A,然后将向量按列组成矩阵B,那么两矩阵的乘积AB就是变换结果,其中AB的第m列为A中第m列变换后的结果 。
最后,上述分析同时给矩阵相乘找到了一种物理解释:两个矩阵相乘的意义是将右边矩阵中的每一列列向量变换到左边矩阵中每一行行向量为基所表示的空间中去。更抽象的说,一个矩阵可以表示一种线性变换。
上面我们讨论了选择不同的基可以对同样一组数据给出不同的表示,而且如果基的数量少于向量本身的维数,则可以达到降维的效果。但是我们还没有回答一个最最关键的问题:如何选择基才是最优的。或者说,如果我们有一组N维向量,现在要将其降到K维(K小于N),那么我们应该如何选择K个基才能最大程度保留原有的信息?看下图:
那么如何选择最优基这个问题被形式化为:寻找一个一维基,使得所有数据变换为这个基上的坐标表示后,方差值最大。
至此我们知道一下几点:
对原始数据进行(线性变换)基变换可以对原始样本给出不同的表示;
基的维度小于数据的维度可以起到降维的效果;
对基变换后的新样本求其方差,选取使其方差最大的基作为最优基。
对于上面二维降成一维的问题来说,找到那个使得方差最大的方向就可以了。不过对于更高维,还有一个问题需要解决。考虑三维降到二维问题。与之前相同,首先我们希望找到一个方向使得投影后方差最大,这样就完成了第一个方向的选择,继而我们选择第二个投影方向。如果我们还是单纯只选择方差最大的方向,很明显,这个方向与第一个方向应该是“几乎重合在一起”,显然这样的维度是没有用的,因此,应该有其他约束条件。从直观上说,让两个字段尽可能表示更多的原始信息,我们是不希望它们之间存在(线性)相关性的,因为相关性意味着两个字段不是完全独立,必然存在重复表示的信息。
至此,我们得到了降维问题的优化目标:将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)。
推广到一般情况:
(1)拉格朗日法
(2) 奇异值分解法(SVD)
在PCA降维过程中,当进行协方差矩阵上求解特征值时,如果面对维度高达10000*10000 ,可想而知耗费的计算量程平方级增长。面对这样一个难点,从而引出奇异值分解(SVD),利用SVD不仅可以解出PCA的解,而且无需大的计算量。
PCA算法的主要优点有:
1、仅仅需要以方差衡量信息量,不受数据集以外的因素影响。
2、各主成分之间正交,可消除原始数据成分间的相互影响的因素。
3、计算方法简单,主要运算是特征值分解,易于实现。
PCA算法的主要缺点有:
1、主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。
2、方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。
⑺ PCA降维原理
维基网络介绍:主成分分析(英语:Principal components analysis,PCA)是一种分析、简化数据集的技术。主成分分析经常用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征。
说了和没说一样……我们还是通过一个简单的案例引出PCA的作用吧。
如果我们在6个小鼠样本中检测一个基因 Gene1 的表达
我们很容易看出来,基因 Gene1 在小鼠1-3中表达比较相似,而在小鼠4-6中表达比较相似
如果同时检测两个基因
我们可以将不同小鼠样本标记在二维坐标轴中,并且看出小鼠1-3的整体表达比较相似,而小鼠4-6的整体表达比较相似
将基因数目扩增到3个时候,我们依然可以通过三维坐标轴标记出不同样本的分布
但是如果将基因数目增加到4个或4个以上时候,很难继续增加坐标轴的维度来绘图(思维空间已经超出一般人的认知了)。
所以 我们可以通过PCA的降维方法来处理这种4维或者多维数据,将其绘制为二维图像来比较不同样本之间的关系 。
PCA是如果进行降维的呢?
首先我们只检测6个不同小鼠的2个基因,那么我们可以分别计算出所有小鼠 Gene1 和 Gene2 的平均值(红色叉号)。根据这些均值,可以获得所有数据的中心(蓝色叉号)。
然后我们将数据整体移动,数据的中心于原点重合。虽然所有的数据点都移动了,但是每个数据点的相对距离没有改变,只是数据的中心变为原点 (0,0) 。
接下来,我们会绘制一条通过原点的直线。这条直线可以360°旋转,直至同数据匹配最佳。
那么如何判断 最佳匹配 呢?这个标准是——
PCA将所有的数据点投射到这条直线上,并且计算这些数据点投射到直线上的距离(使这些距离最小)和投射点到原点的距离(使这些距离最大)
实际上计算c会简单一些,所以PCA一般是通过计算所有数据点到原点距离平方和sum( )最大值来寻找最优解。
如下图所示,分别将这6个样本的投射点到原点距离标记为d1,d2,...,d6,然后计算这些点的平方和,这些平方和也被称为SS距离,即 。
获得SS最大值时的这条线,被称为 PC1 。假设PC1这条线的斜率为0.25,这意味着每当我们在 Gene1 前进4个单位时,PC1上的数据点在 Gene2 上就增加1个单位。
这也意味着这几个样本在 Gene1 上更加分散,而在 Gene2 上分散程度较小。
根据鸡尾酒配方来思考PC1,为生成PC1,我们加入了4份 Gene1 和1份 Gene2 ,这也说明在描述数据的分散程度方面, Gene1 更加重要。
在数学上,这种鸡尾酒配方被称为 Gene1 和 Gene2 的线性组合,或也可以说“PC1是几个变量的线性组合”。
在PCA中,将SS称为PC1的 特征值 (Eigenvalue);PC1特征值的平方被称为PC1的 奇异值 (Singular Value)。
根据上面的假设,PC1的斜率为0.25,如果下图的红色箭头是一个长度单位,那么它是有0.97个Gene1和0.242个Gene2构成,所以 被称为 特征向量 (Eigenvector)或奇异向量(Singular vector)。
而每个基因的比例,被称为PC1的 载荷分数 (loading score)
在二维坐标中,PC2是一条通过原点,并且与PC1 垂直 的直线。
很容易计算出PC2的斜率为-4,那么PC2就是由-0.242个Gene1和0.97个Gene2构成了。
同时,我们也可以计算出PC2的特征值。
旋转坐标轴,将PC1水平,PC2垂直。黑色叉表示原始的样本6,那么在新的坐标系中,Sample6的分布如下图所示。
各个主成分的变异度(Variation)计算,方法是SS除以样本减1。
假如上面那个案例中PC1变异度为15,PC2的变异度为3,那么总变异度为18.
因此PC1在总变异中所占的比值为83%,PC2占的总变异为17%。
如果我们有3个基因,根据前面描述的步骤,分别找出PC1、PC2(垂直于PC1)和PC3(同时垂直于PC1和PC2),
同时也可以计算出各个主成分的变异度。
在上面的案例中,只使用PC1和PC2可以解释94%的变异度,所以我们只保留PC1和PC2最终绘图
这样,我们就获得了最终降维之后的结果。
在进行PCA降维之前,需要确保所有数据处于同一标准下。
例如下面这组数据,Math分数是按照百分制统计,而Reading分数是按照十分制统计。
那么我们在计算PC1时可能会得到PC1由0.99个Math和0.1个Reading组成,但是这仅仅是由于Math分数本身就是Reading分数的10倍。
所以我们需要 首先将每一个变量除以其所在组的标准差进行标准化处理 。
上面的那个案例中,我们只有两组观测数据。
绘制完PC1和PC2后,还可以绘制出PC3吗?
根据之前的讲述,PC3是同时垂直于PC1和PC2的。
那么绘制PC3时,基于已有的数据,先去寻找垂直于PC1的直线,只会得到PC2。
寻找垂直于PC2的直线,也只会得到PC1。
所以无法绘制出PC3。
如果上面的案例中,Math和Reading是100%相关的.
绘制完PC1后,绘制一条垂直于PC1的PC2时发现,所有的数据投射在PC2的点都是原点,即特征值为0。
这时,PC1能够100%解释所有的变异。所以此时仅有PC1一个主成分。
如果学生数目减少为2,那么数据的分布在二维平面只有2个点,
2个点仅可以构成一条直线,所以PC2的特征值必然为0。
即使增加一个观测指标Gym,如果只有两个学生的话,最终数据在三维空间只有两个点,所以也只会有一个主成分PC1。
扩展一下,如果数据变为3个学生和3个观测指标,最终会有几个主成分呢?
3个学生会产生3个数据点,3点构成一个平面(平面是二维的),所以PC3的特征值必然为0。
因此会产生2个主成分PC1和PC2。
所以, 一组数据进行降维分析时,主成分数最终等于变量数目或样本数目(二者较小的那个),但是上限是特征值大于0的PC数 。
⑻ (十)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
⑼ 主成分分析(PCA)& 主坐标分析(PCoA)——R包绘图(2D/3D散点图)
主成分分析(Principal Components Analysis,PCA) ,也称主分量分析或主成分回归分析法,是一种无监督的数据降维方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的 降维 。这种降维的思想首先减少数据集的维数,同时还保持数据集的对方差贡献最大的特征,最终使数据直观呈现在二维坐标系。
主坐标分析(Principal Coordinates Analysis,PCoA) ,即经典多维标度(Classical multidimensional scaling),用于研究数据间的相似性。
【二者差异】
PCA与PCoA都是降低数据维度的方法,但是差异在在于 PCA 是基于 原始矩阵 ,而 PCoA 是基于通过原始矩阵计算出的 距离矩阵 。因此,PCA是尽力保留数据中的变异让点的位置不改动,而PCoA是尽力保证原本的距离关系不发生改变,也就是使得原始数据间点的距离与投影中即结果中各点之间的距离尽可能相关。
基因表达量数据通过RSEM软件定量后得到
除转录组研究以外,在16S微生物的研究中我们会根据物种丰度的文件对数据进行PCA或者PCoA分析,也是我们所说的β多样性分析。根据PCA或者PCoA的结果看感染组和对照组能否分开,以了解微生物组的总体变化情况。
具体内容及绘图方法可参考下面这篇文章。
16s—β多样性分析(R画三维PCoA图)
R数据可视化4: PCA和PCoA图
详解主成分分析PCA