㈠ 常用降维方法之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算法的主要优点有:
参考文章: 刘建平老师的博客园
㈡ 降维算法之LDA(线性判别降维算法)--有监督
LDA在模式识别领域( 比如人脸识别,舰艇识别等图形图像识别领域 )中有非常广泛的应用,因此我们有必要了解下它的算法原理。
不同于PCA方差最大化理论, LDA算法的思想是将数据投影到低维空间之后,使得同一类数据尽可能的紧凑,不同类的数据尽可能的分散 。因此,LDA算法是一种有监督的机器学习算法。同时,LDA有如下两个假设:(1)原始数据根据样本均值进行分类。(2)不同类的数据拥有相同的协方差矩阵。当然,在实际情况中,不可能满足以上两个假设。但是 当数据主要是由均值来区分的时候,LDA一般都可以取得很好的效果 。
(1)计算类内散度矩阵
(2)计算类间散度矩阵
(3)计算矩阵
(4)对矩阵 进行特征分解,计算最大的d个最大的特征值对应的特征向量组成W。
(5)计算投影后的数据点
以上就是使用LDA进行降维的算法流程。实际上LDA除了可以用于降维以外,还可以用于分类。 一个常见的LDA分类基本思想是假设各个类别的样本数据符合高斯分布 , 这样利用LDA进行投影后,可以利用极大似然估计计算各个累呗投影数据的均值和方差,进而得到该类别高斯分布的概率密度函数 。当一个新的样本到来后,我们可以将它投影,然后将投影后的样本特征分别带入各个类别的高斯分布概率密度函数,计算它属于这个类别的概率,最大的概率对应的类别即为预测类别。LDA应用于分类现在似乎也不是那么流行。
class sklearn.discriminant_analysis.LinearDiscriminantAnalysis(solver='svd', shrinkage=None, priors=None, n_components=None, store_covariance=False, tol=0.0001)
参数:
(1)solver: str类型,默认值为"svd",
svd:使用奇异值分解求解,不用计算协方差矩阵,适用于特征数量很大的情形,无法使用参数收缩(shrinkage)。
lsqr:最小平方QR分解,可以结合shrinkage使用。
eigen:特征值分解,可以结合shrinkage使用。
(2)shrinkage: str or float类型,默认值为None
是否使用参数收缩
None:不使用参数收缩
auto:str,使用Ledoit-Wolf lemma
浮点数:自定义收缩比例。
(3)components:int类型,需要保留的特征个数,小于等于n-1
属性:
(1)covariances_:每个类的协方差矩阵,shape = [n_features, n_features]
(2)means_:类均值,shape = [n_features, n_feateures]
(3)priors_:归一化的先验概率。
(4)rotations_:LDA分析得到的主轴,shape = [n_features, n_component]
(5)scalings_:数组列表,每个高斯分布的方差σ
特点:
降维之后的维数最多为类别数-1。所以当数据维度很高,但是类别数少的时候,算法并不适用 。LDA算法既可以用来降维,又可以用来分类。但是目前来说,主要还是用于降维。在我们 进行图像识别相关的数据分析时,LDA是一个有力的工具 。
优点:
(1) LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优 。
(2)在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识。
缺点:
(1)LDA不适合非高斯分布样本进行降维,PCA也存在这个问题。
(2)LDA降维最多降到类别数K-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。 当然目前有一些LDA的进化版算法可以绕过这个问题 。
(3) LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好 。
(4)LDA可能过度拟合数据。
二者都有 降维 的作用。
1.左 边是PCA,属于无监督方法 ,当数据没有标签时可以用它。 右边是LDA,属于监督学习方法 。考虑了数据的分类信息,这样数据在低维空间上就可以分类了,减少了很多的运算量。
2. PCA主要是从特征的协方差角度考虑,追求的是在降维之后能够最大化保持数据的内在信息 。它不考虑分类信息,因此降低维度后,信息损失降到最低,但分类上可能会变得更加困难。 LDA追求的是降维后的数据点尽可能容易被区分 。降维后的样本数据在新的维度空间有最大的类间距离和最小的类内方差,数据在低维空间有最佳的可分离性。
3. PCA降维后的维度数目是和数据维度相关的 ,原始数据是n维,那么PCA后维度为1、2~n维。 LDA后的维度数目是和类别的个数相关的 ,原始数据是n维,一共有C个类别,那么LDA后维度为1、2~C-1维。
4. PCA投影的坐标系都是正交的 。 LDA关注分类能力,不保证投影到的坐标系是正交的 。
㈢ 第十五章 降维
第二种类型的无监督学习问题,叫做降维。
这里有一些,你想要使用降维的原因:
① 数据压缩
数据压缩不仅能对数据进行压缩,使得数据占用较小的内存或硬盘空间。它还能对学习算法进行加速
② 可视化数据
但首先,让我们谈论降维是什么。举个例子,假设我们收集了一个数据集,它有很多很多的特征,我只在这里绘制两个特征。
假如,对我们来说,这两个特征,x_1 是某物体的厘米长度,另一个特征x_2 是同一物体的英寸长度。这实际上是一种高度冗余的表示。
对于这两个单独的特征 x_1 和 x_2,它们表示的都是基本长度。或许我们想做的是,把数据减少到一维。只有一个数字来测量某物体的长度。
这个例子可能有点牵强,这与我在行业中所见的完全是两回事。
如果你有几百个或成千上万的特征,你很容易就会迷失,自己到底有哪些特征。有时可能有几个不同的工程团队,也许一个工程队给你二百个特征,第二工程队给你另外三百个的特征,第三工程队给你五百个特征。最后加起来你就有一千多个特征,这时就很难去了解某个特征是从哪个小组得到的,这时就比较容易产生这与高度冗余的特征。
并且,如果这里的 厘米 和 英寸 长度都被四舍五入了,这就是这个例子为什么不是完美地落在一条直线上。
👆另一个例子:如果你想要调查或做这些不同飞行员的测试——你可能有两个特征:x_1 是他们的技能(直升机飞行员);x_2 表示他们是否喜欢飞行。也许这两个特征将高度相关。你真正关心的可能是这条红线的方向。它是一个不同的特征,用来真正测量飞行员能力的特征。
还是那句话,如果特征高度冗余,那么你可能真的需要降低维数
如果我们将数据从二维(2D)降到一维(1D),究竟意味着什么?
现在我把不同的样本,用不同的颜色标出。在这时,通过降维,我的意思是我想找出这条看起来大多数样本所在的直线(绿色)。所有数据都投影到这条直线上,通过这种做法,我能够测量出每个样本在线上的位置,现在我能做的是建立新特征 z_1。我们只需要一个数,就能确定z_1所在的位置,也就是说z_1是一个全新的特征。它能够指定绿线上每一个点位置。
之前的样本 x_1,它是一个二维向量。在降维后,我们可用一维向量(即,实数)z_1表示第一个样本。
总结一下:
如果我们允许一个近似于原始数据集的数据集, 该数据集通过投射原始样本数据到这个绿色线上而得到。那么,我们只需要一个实数,就能指定点在直线上的位置。所以,我能够只用一个数字表示样本的位置,通过把这些原始样本都投射到绿线上(这是对原始数据集的一种近似,因为我将这些样本都投射到了同一条直线上)。这样(样本从用二维表示,变为用一个实数表示)就能把内存/数据空间的需求减半。
另外,更有趣也更重要的是。在之前的视频中,我们将能够了解到,这么做能够让学习算法运行得更快。
另一个例子,将数据从 3D 降到 2D。
降维的第二个应用:可视化数据
在许多及其学习问题中,如果我们能将数据可视化,我们便能寻找到一个更好的解决方案,降维可以帮助我们。
假使我们有关于许多不同国家的数据,每一个特征向量都有50个特征(如GDP,人均GDP,平均寿命等)。如果要将这个50维的数据可视化是不可能的。使用降维的方法将其降至2维,我们便可以将其可视化了。
比如,你可能发现,横轴(z_1)大致相当于国家的总体规模或者国家的总体经济活跃程度,所以横轴代表的是GDP、一个国家的经济规模。而纵轴大致对应于人均GDP。你可能会发现,这50个 特征,实际上只偏离为两个主要维度。(这样做的问题在于,降维的算法只负责减少维数,新产生的特征的意义就必须由我们自己去发现了)
一个特殊的算法:PAC,也叫做“主成分分析”。它可以用来做降维操作,可以用来实现我们之前所提到的压缩数据。
主成分分析(PCA)是最常见的降维算法。
在PCA中,我们要做的是找到一个方向向量(Vector direction),当我们把所有的数据都投射到该向量上时,我们希望投射平均均方误差能尽可能地小。方向向量是一个经过原点的向量,而投射误差是从特征向量向该方向向量作垂线的长度。
PCA 问题的公式描述。换句话说,我们会试着用公式准确地表述PCA的用途。
所以,正式的说,PCA做的就是,它会找到一个低维平面(该例子中,是条直线),然后将数据投影在上面,使这些蓝色小线段(即,点到平面的距离)长度平方最小。这个蓝色小线段的距离,有时也称投影误差。
所以,PCA 所做的就是,它会试图寻找一个投影平面对数据进行投影,使得能最小化这个距离。
另外在应用PCA 之前,常规的做法是,先进行 均值归一化,使得特征量 x_1 和 x_2 其均值为0。并且其数值在可比较的范围之内。(本例中,我们已经处理过了)
后面会详细讲,PCA背景下的均值归一化问题的细节。
PCA做的就是,如果想将数据从二维降到一维。我们要试着找一个方向向量,使得向量 u^(i) ∈ R^n (本例中, n = 2,即,u^(i) ∈ R^2)投影到这个方向向量上的投影误差最小。
更通常的情况是:我们会有N维数据,并且我们想其降到K维,这种情况下,我们不只是想找单个向量来对数据进行投影,而是想寻找K个方向来对数据进行投影,来最小化投影误差。(我们要做的是,将数据投影到这 k 个向量展开的线性子空间上)
u^(1) 和 u^(2) 两个向量一起定义了一个二维平面。我们将我们的数据投影到上面。
因此,PCA做的是其视图找出一条直线,或一个平面,或其他维的空间,然后对数据进行投影,以最小化平方投影。90度投影,或正交投影的误差。
事实上,PCA不是线性回归,尽管看上去有一些相似,但是它们确实是两种不同的算法。
上图中,左边的是线性回归的误差(垂直于横轴投影),右边则是主要成分分析的误差(垂直于红线投影)。
主成分分析最小化的是投射误差(Projected Error),而线性回归尝试的是最小化预测误差。线性回归的目的是预测结果,而主成分分析不作任何预测。
PCA将n个特征降维到k个,可以用来进行数据压缩,如果100维的向量最后可以用10维来表示,那么压缩率为90%。同样图像处理领域的KL变换使用PCA做图像压缩。但PCA 要保证降维后数据的特性损失最小。
PCA技术的一大好处是对数据进行降维的处理。我们可以对新求出的“主元”向量的重要性进行排序,根据需要取前面最重要的部分,将后面的维数省去,可以达到降维从而简化模型或是对数据进行压缩的效果。同时最大程度的保持了原有数据的信息。
PCA技术的一个很大的优点是,它是完全无参数限制的。在PCA的计算过程中完全不需要人为的设定参数或是根据任何经验模型对计算进行干预,最后的结果只与数据相关,与用户是独立的。
但是,这一点同时也可以看作是缺点。如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高。
主成分分析算法
在使用PCA之前,首先要做的是,进行数据的预处理。
给定一个交易例子的集合,
预处理:
① 一定要做的一个事情是:执行均值归一化。
② 依据于你的数据,可能也要进行特征缩放。
这两个过程,即在我们有监督学习中,均值标准化过程 与 特征缩放的过程 是相似的。实际上,确实是相同的过程,除了我们现在是对未标记数据 x^(1) 到 x^(m) 做 均值标准化过程 与 特征缩放过程。
接下来,如果不同的特征有非常不相同的缩放,例如 x_1 是房子的尺寸, x_2 是卧室的数量。我们缩放每一个特征,一个相对的价值范围。
相对于之前的监督学习:x_j^(i) = ( (x_j^(i) - u_j) / s_j )。 s_j = x_j 预测的最大值 - 最小值。更普遍的,s_j 是特征 j 的标准偏差。
做完这一系列的数据预处理之后,我们来看PCA算法
我们能从先前的视频看到,PCA所做的就是,它尝试着找到一个 低维 子空间,对数据进行投影,我们希望找到一个向量 u^(k) (比如,从 N 维将到 K 维),是的数据到这个向量的投影误差平方和最小。
给个提示,是什么减少了数据平均值的维度??
对于左边的例子,我们给定的样本 x^(i) 在 R^2 中(即,两个维度,x_1^(i), x_2^(i))。我们要做的就是在 R 中(一维)找到一个数据集 z^(i) 来代表我们原始的样本数据。所以,我们的均值从 2维 降到 1维。
所以,PCA要做的就是,要想出一个方法计算两个东西:
① 计算向量 u^(k)
② 计算 z^(i)
1,首先,我们要做的是计算这个“协方差(covariance matrix)”,通常用希腊字母 Σ。
① 希腊字母 Σ ,表示矩阵
② 累加和标记
‘ [U, S, V] = svd(Sigma); ’:计算 矩阵U = S 和 V 协方差矩阵sigma。
再补充一些细节:这个 协方差矩阵sigma,将会是一个 n*n 的矩阵。
矩阵U 的每一列就是 u^(i) ,即,u ∈ R^(n*n) 。所以,我们想减少数据的维度从 n 维 到 k 维,我们需要做的是提取前 k 个向量。u^1, … , u^k ,这给了我们 k 个方向(构成了一个 k维度的 子空间),即,我们想要投影数据的方向。
有了 u^k 后,我们要做的就是:x ∈ R^n ——> z ∈R^k
我们称 矩阵U 为 U_rece(n*k 矩阵)。这是 矩阵U 被降维的版本,我们将用它来对我们的数据进行降维。
z = (U_rece)^T * x
(U_rece)^T : k * n 矩阵
x 是 “n 维度向量(即,n * 1)”
所以,z 是 “k 维度向量”
在PCA算法中,我们将N维特征减少为K维特征。这个数字 K 是PCA算法的一个参数。这个数 K 也被称为 主成分的数字。或者,我们保留的主成分的数字。
在一般情况下,如何考虑选取这个参数 K ?
我们希望在平均均方误差与训练集方差的比例尽可能小的情况下选择尽可能小的k值。
如果我们希望这个比例小于1%,就意味着原本数据的方差有99%都保留下来了,如果我们选择保留95%的方差,便能非常显着地降低模型中特征的维度了。
99%、95%、90% 都是一些具有代表性的范围。
对于许多数据集,你会惊讶,为了保留99%的方差,你可以减少维度,但仍然保留大部分的方差。因为对于真实世界的数据来说,许多特征都是高度相关的。因此,结果证明:对数据进行很多压缩,仍然可以保留99%的方差。
那么该如何实现了?
但是,👆这个方法非常低效。
在以前的视频中,我谈论PCA作为压缩算法。在那里你可能需要把1000维的数据压缩100维特征,或具有三维数据压缩到一二维表示。所以,如果这是一个压缩算法,应该能回到这个压缩表示,回到你原有的高维数据的一种近似。
所以,给定的z (i),这可能100维,怎么回到你原来的表示x (i),这可能是1000维的数组?
我们可以把👆这个过程叫做:原始数据的重构。
我们常常使用PCA算法对监督学习算法进行加速。
假使我们正在针对一张 100×100像素的图片进行某个计算机视觉的机器学习,即总共有10000 个特征。
最后要注意的一点是,PCA所做的是定义一个从 x 到 z 的映射。这个从 x 到 z 的映射只能通过在训练集上运行PCA来得到。这个映射(注意,这里说的是映射,而不是PCA算法)也能够被应用在 交叉校验 和 测试集 上的其他样本中。(即,如果我们有交叉验证集合测试集,也采用对训练集学习而来的U_rece。 )
总结一下:当在运行PCA时,仅仅在训练集中的数据上运行,不能用在交叉验证和测试集上。但,当你定义了 x 到 z 的映射后,你可以应用这个映射到你的交叉验证集和你的测试集。
顺便说一下,实际上,在许多问题中我们确实能减少数据的维度,大概可以减少到 1/5 或者 1/10,而且仍然保留大部分的方差,几乎不影响性能。而且使用较低的维度数据,我们的学习算法通常可以运行的更快。
错误的主要成分分析情况:一个常见错误使用主要成分分析的情况是,将其用于减少过拟合(减少了特征的数量)。这样做非常不好,不如尝试正则化处理。原因在于PCA不需要使用标签y,它仅仅使用输入的 x^(i) ,使用它去寻找低纬数据,来近似你的数据。因此PCA会舍掉一些信息,它扔掉或减少数据的维度,不关心 y 值是什么。所以如果99%的方差信息被保留,你保留了大部分的方差,那么这样使用PCA是可以的。但是它也可能会丢掉一些有价值的信息。
事实证明,只使用正则化来防止过拟合常常会给你带来更好的结果。因为,当你应用 线性回归 或者 logistic回归 或其他的一些方法,进行正则化时,这个最小化问题,实际上是知道 y 的值的,所以不太可能损失掉一些有价值的信息。而PCA不使用标签,更有可能丢失一些有价值的信息。
因此,总结一下,使用PCA比较好的方式,是用它来提高学习算法的速度。但是使用PCA来防止过拟合,这不是PCA的一个好的运用。要使用正则化来防止过拟合。
另一个常见的错误是,默认地将主要成分分析作为学习过程中的一部分,这虽然很多时候有效果,最好还是从所有原始特征开始,只在有必要的时候(算法运行太慢或者占用太多内存)才考虑采用主要成分分析。
㈣ 第11章 降维
去掉数据集中关联性不大和冗余的数据,确保不出现过度适应的前提下降低计算的成本,需要对特征进行无损规约,数学上叫降维。广泛用于模式识别、文本检索以及机器学习领域,主要分为两类,特征提取和特征筛选,前者是高维数据投影到低维空间,后者是特征子集代替锋做原始特征集,包括特征分级和特征筛选,分级是找到优化后的特征子集。
特征提取可以分成线性抽取和非线性抽取两种方法,前者是试图找到一个仿射空间能够最好的说明数据分布的变化,后者对高维非线性曲线平面分布的数据非常有效。
线性特征的抽取方法:
首先设定一些标准,然后挑选出满足标准的特征。
算法首先调用一个权重函数得到每个特征的权重值,权重评价指标是平均精确度下降 importance.type = 1 ,除了上面用的随机森林,还可以使用 chi.squared, information.gain 。
然后获取优化的特征子集,首先5折交叉验证评估特征子集的重要性,爬山搜索算法从原始特征集中选出优化的特征子集,也可以选择其他算法,比如 forward.search 。还可以使用caret包进行特征筛选,据说这个包是个宝呀,包罗万象。
主成分分析是一种应用非常广泛的线性降维方法,适合数据集包含非常多的特征,并且特征间彼此冗余(相关的情况)。通过将特征集缩减成一小部分能代表原始特征集最主要变化的主要特征分量,实现高维数据到低维数据空间的映射。
特征选择过程中会去掉一些彼此关联但有价值的特征,需要在特征制取过程中考虑将这些特征综合到单特征中,PCA采用正交变换将彼此有关行基丛联的特征转化为主成分,以便我们确定方差趋档樱势。
算法主要包括以下步骤:1)找到平均向量的数据点;2)计算
协方差矩阵;3)计算特征向量;4)对特征向量排序并选择前k个特征向量;5)构建特征向量矩阵;最后,将数据样本转换成新的子集。
拓展
princomp 是另一个高不成分分析函数,与上面的 prcomp 采用奇异值分解不同,采用相关矩阵或协方差矩阵的特征值计算方法,一般更习惯用后者。
以上两个函数均来自stats包,还可以使用psych包中的principal函数进行:
Kaiser方法、scree(碎石测试)和依据挑选规则使用解释变量比例都可以。碎石测试的主要目的是将主成分结果以碎石图方式表达,从图中找到引起曲线斜率变化最快的因素。
主成分为2时,斜率变化最快。也可以使用nfactors以并行分析非图形方式作Cattell碎石来测试。
biplot绘制数据与原始特征在前两个主成分上的投影图
biplot绘制数据及原始特征在前两个主成分上的投影,农业高,教育和检查低的省份在PC1上得分高;婴儿死亡率高,农业低的省份在主成分PC2上得分较高。
多维尺度分析通过图形方式展示多个对象之间的相似或相异程度距离),多维是指映射到一维、二维或多维空间表达CF全家人相对距离,一般使用一或二维空间。
分成计量和非计量两类,前者是主要考虑如何保证降维后各对象之间的距离尽可能接近它们在原始空间的距离,后者则假设两个空间中对象的距离排名已知,而且变换后排名不变。
可以通过将投影维度绘制在一个散点图中比较MDS和PCA的差异,如果MDS采用欧氏距离,投影维度将与PCA完全一致。
奇异值分解是矩阵分解的一种形式,可以将一个矩阵分解为两个正交矩阵和一个对角矩阵,原始矩阵可由这三个矩阵相乘得到。可以帮助去掉那些从线性代数角度观察存在线性相关冗余的矩阵,可以应用在特征筛选,图像处理和聚类等。
SVD是一类分解实数或复数矩阵的常见方法,PCA可以被看成SVD的一种特例:
两个矩阵基本相同。
[图片上传失败...(image-be0ae8-1639570485003)]
图像压缩领域应用最为广泛的标准测试图像,花花公子当年的模特图呀!
不知为啥,读什么图片都是负片呢?先继续:
ISOMAP属于流形学习方法,支持线性空间到非线性数据结构的转换,与MDS类似,它也能够以图形方式展现对象之间的相似性或相异性(距离),不过,由于数据采用非线性结构表示,以几何距离代替MDS中有欧氏距离。
ISOMAP是一种等距映射非线性降维方法,如果将计量MDS方法中数据点间成对的欧氏距离替换成邻接图间的测地距离,就可以将ISOMAP当做计量MDS方法的扩展。
算法分为4步:确定邻近点,构建邻接图,计算最短路径和MDS分析找到数据间的低维嵌入。
扩展
可以将RnavGraph包将图形作为数据浏览的基础方式来实现高维数据的可视化。
LLE算法是PCA算法的扩展,通过嵌入高维空间内的流形映射到低维空间来实现数据压缩。ISOMAP是全局性非线性降维,LLE主要是局部母性降维算法,假设每个数据点可以由k个邻近点的母性组合构成,映射后能保持原来的数据性质。
LLE是一种非线性降维算法,基于它我们可以得到高维数据在低维空间保持原有数据邻近嵌入关系的映射。算法主要分成三步:计算每个点的k个邻近,然后计算每个邻近点的权值,使得每个点都能最优地由其邻近点组合重构,即残差和最小。
扩展
还可以选择RDRTollbox包实现非线性降维,支持ISOMAP和LLE算法。