⑴ 葫芦书第四章——降维
在机器学习中,数据通常需要被表示为向量形式以输入模型进行训练。但众所周知,对高维向量进行处理和分析时,会极大地消耗系统资源,甚至产生维度灾难(相关笔记记录于 这里 )。因此,用一个低维度的向量表示原始高维度的特征就显得尤为重要。
在机器学习领域中,我们对原始数据进行特征提取,有时会得到比较高维的特征向量。在这些向量所处的高维空间中,包含很多的冗余和噪声。我们希望通过降维的方式来寻找数据内部的特性,从而提升特征表达能力,降低训练复杂度。主成分分析(PCA)作为降维中最经典的方法,属于一种 线性、非监督、全局的降维算法 。
1、所谓主成分,就是把原特征进行线性组合后得到新的特征,此特征尽可能多地保留了原特征的方差。
2、设一组参数 ,记原特征为 ,新特征为 ,根据定义,我们要让 的方差尽可能大,即 这就是我们的目标函数。
3、具体的求解过程要借助特征值分解。
(a)是二维空间中经过中心化的一组数据,我们很容易看出主成分所在的轴(以下称为主轴)的大致方向,即(b)中黄线所处的轴。因为在黄线所处的轴上,数据分布得更为分散,这也意味着数据在这个方向上方差更大。
我们不难引出 PCA的目标,即最大化投影方差,也就是让数据在主轴上投影的方差最大 。对于给定的一组数据点 ,其中所有向量均为列向量,中心化后的表示为 ,其中 。我们知道,向量内积在几何上表示为第一个向量投影到第二个向量上的长度,因此向量 在 (单位方向向量)上的投影坐标可以表示为 。所以目标是找到一个投影方向 ,使得 在 上的投影方差尽可能大。易知,投影之后均值为0( ),因此投影后方差可以表示为:
其中 其实就是协方差矩阵,我们将其写为 ,另外,由于 是单位向量,因此 ,因此我们要求解一个最大化问题:
引入拉格朗日乘子并对 求导令其等于0,便可以推出 ,此时:
不难看出, 投影后的方差就是协方差矩阵的特征值。我们要找到最大的方差也就是协方差矩阵最大的特征值,最佳投影方向就是最大特征值所对应的特征向量。次佳投影方向位于最佳投影方向的正交空间中,是第二大特征值对应的特征向量,以此类推。至此,我们得到了PCA的求解方法:
1)对样本数据进行中心化处理。
2)求样本协方差矩阵。
3)对协方差矩阵进行特征值分解,将特征值从大到小排列。
4)取特征值前 大对应的特征向量 通过以下映射将 维样本映射到 维:
定义降维后的信息占比为:
可以。从线性回归的角度切入,最佳投影方向对应的直线应该使得各点到此直线的距离的平方和最小。关于这个目标和最大方差目标的等价性,我在 这里 已经说明过了。
从求解直线的思路出发,很容易联想到数学中的线性回归问题,其目标也是求解一个线性函数使得对应直线能够更好地拟合样本点集合。如果我们从这个角度定义PCA的目标,那么问题就会转化为一个回归问题。
数据集中每个点 到 维超平面 的距离为:
其中 表示 在超平面 上的投影向量。若该超平面 由 个标准正交基 构成,则有线代知识可知, 可由这组基线性表示:
其中 表示 在 方向上投影的长度。因此 实际上就是 在 这组标准正交基下的坐标。而PCA要优化的目标是:
将上式中每个距离展开:
可以看到,第一项与选取的 无关,是一个常数,将 代入第二项第三项得到:
因为当 时, ,因此上式可写为:
于是:
这等价于求解带约束的优化问题:
如果我们对 中的 个基 依次求解,就会发现 和最大方差理论的方法完全等价 。
线性判别分析(Linear Discriminant Analysis, LDA)是一种 有监督学习算法 ,同时经常被用来对数据进行降维。
相比于PCA,LDA可以作为一种有监督的降维算法。在PCA中没有考虑数据的标签(类别),只是把原数据映射到一些方差比较大的方向上而已。
假设用不同的颜色标注 两个不同类别的数据,如图所示。根据PCA算法,数据应该映射到方差最大的那个方向,亦即 轴方向。但是, 两个不同类别的数据就会完全混合在一起,很难区分开。所以,使用PCA算法进行降维后再进行分类的效果会非常差。但是如果使用LDA算法,数据会映射到 轴方向。
1、要想降维过程中不损失类别信息,一个简单的想法就是降维后两类样本点之间的距离越远越好,这样才能将两类样本区分开来。
2、在这样的目标下,假设样本在目标超平面上的投影,并考察两类样本投影的均值点,求解一个超平面,使得这两个均值点之间的距离最大。
LDA首先是为了分类服务的,因此只要找到一个投影方向 ,使得投影后的样本尽可能按照原始类别分开 。 我仍不妨从一个简单的二分类问题出发,有 两个类别的样本,两类的均值分别为 ,我们希望投影之后两类之间的距离尽可能大,距离表示为:
和 表示两类中心在 方向上的投影向量,即 ,因此需要优化的问题为:
容易发现当 方向与 一致的时候,该距离达到最大值,例如对图(a)的黄棕两种类别的样本点进行降维时, 若按照最大化两类投影中心距离的准则,会将样本点投影到下方的黑线上。但是原本可以被线性划分的两类样本经过投影后有了一定程度的重叠,这显然不能使我们满意。我们希望得到的投影结果如图(b)所示,虽然两类的中心在投影之后的距离有所减小,但确使投影之后样本的可区分性提高了。
仔细观察两种投影方式的区别,可以发现,在图(b)中,投影后的样本点似乎在每一类中分布得更为集中了,用数学化的语言描述就是每类内部的方差比(a)中更小。这就引出了 LDA的中心思想一一最大化类间距离和最小化类内距离 。
在前文中我们已经找到了使得类间距离尽可能大的投影方式,现在只需要同时优化类内方差,使其尽可能小。我们将整个数据集的类内方差定义为各个类分别的方差之和,将目标函数定义为类间距离和类内距离的比值,于是引出我们需要最大化的目标:
真中 为单位向量, 分别表示两类投影后的方差:
因此 可以写成:
定义类间散度矩阵为:
类内散度矩阵为:
则有:
我们要最大化 ,只需对 求偏导,并令导数等于零:
于是得出:
在二分类中 和 是两个数,令 ,于是:
即:
从这里我们可以看出,我们最大化的目标对应了一个矩阵的特征值。 于是LDA降维变成了一个求矩阵特征向量的问题。 就对应矩阵 最大的特征值,而投影方向就是这个特征值对应的特征向量 。
对于二分类这一问题,由于 ,因此 的方向始终与 一致,若只考虑 的方向而不考虑长度,可得 。
1、LDA和PCA最显着的区别就是前者是有监督方法而后者是无监督方法,因此在应用中,对于数据中有标签的应该使用LDA,对于数据中无标签的则使用PCA。
2、数学推导上,两者的区别在于,PCA并未考虑类之间的距离(因为PCA并未用到标签信息),而是仅仅考虑了降维后数据的方差,从这个角度来说,PCA相当于在LDA中将所有数据当成一类去处理的特殊情形。因此我们可以看到两者的数学推导也十分相似,最终目标都归为求解一个矩阵的特征值分解。
首先将LDA拓展到多类高维的情况以和问题PCA的求解对应。假设有 个类别,并需要最终将特征降维至 维。我们要找到一个 维投影超平面 使得投影后的样本点满足LDA的目标一一最大化类间距菌和最小化类内距离。
回顾两个散度矩阵,类内散度矩阵 在类别数增加时仍满足定义。而之前两类问题的类间散度矩阵 在类别增加后就无法按照原始定义。
考虑三类样本的情况, 分别表示棕绿黄三类样本的中心, 表示这三个中心的均值(也即全部样本的中心), 表示第 类的类内散度。我们可以定义一个新的矩阵 表示全局整体的散度,称为全局散度矩阵:
如果把全局散度定义为类内散度与类间散度之和,即 ,那么类间散度矩阵可表示为:
其中 是第 个类别中的样本个数, 是总的类别个数。根据LDA的原理,可以将最大化的目标定义为:
剩下的求解过程与之前二分类LDA相同。
至此我们得到了与PCA步骤类似,但具有多个类别标签高维数据的LDA求解方法:
1)计算数据集中每个类别样本的均值向量 ,及总体均值向量 。
2)计算类内散度矩阵 和全局散度矩阵 ,得到类间散度矩阵 。
3)对矩阵 进行特征值分解,将特征值从大到小排列。
4)取特征值前 大的特征值对应的特征向量 ,通过以下映
射将 维样本映射到 维:
从PCA和LDA两种降维方法的求解过程来看,它们确实有着很大的相似性,但对应的原理却有所区别。首先从目标出发, PCA选择的是投影后数据方差最大的方向。由于它是无监督的,因此PCA假设方差越大,信息量越多,用主成分来表示原始数据可以去除冗余的维度,达到降维。而LDA选择的是投影后类内方差小、类间方差大的方向,其用到了类别标签信息。为了找到数据中具有判别性的维度,使得原始数据在这些方向上投影后,不同类别尽可能区分开 。
举一个简单的例子,在语音识别中,我们想从一段音频中提取出人的语音信号,这时可以使用PCA先进行降维,过滤掉一些固定频率(方差较小)的背景噪声。但如果我们的需求是从这段音频中区分出声音属于哪个人,那么我们应该使用LDA对数据进行降维,使每个人的语音信号具有区分性。
从应用的角度,我们可以掌握一个基本的原则一一 对无监督的任务使用PCA进行降维,对有监督的则应用LDA 。
⑵ 从Word2vec可视化算法t-SNE谈起
刚好最近经常看一些word2vec的文章,在最后往往看到作者说用t-SNE可视化结果,也即把高维度的数据降维并可视化。很奇怪作者为何不用PCA或者LDA,深挖下去挖出了一个未曾了解过的 可视化算法领域
降维,所有人都知道就是把特征维度降低后并力求保留有用的信息。
说起降维,大部分人知道PCA(Principal Components Analysis)
说起降维,部分人知道LDA(Linear Discriminant Analysis)
说起降维,少部分人知道一般分为线性降维和非线性降:
1,线性降维:PCA(Principal Components Analysis)
LDA(Linear Discriminant Analysis)
MDS(Classical Multidimensional Scaling)
2,非线性降维:
Isomap(Isometric Mapping)
LLE(Locally Linear Embedding)
LE(Laplacian Eigenmaps)
t-SNE(t-Distributed Stochastic Neighbor Embedding)
大家可能对线性降维中的一些方法比较熟悉了,但是对非线性降维并不了解,非线性降维中用到的方法大多属于 流形学习 范畴,本文主要通过聊聊怎么使用其中的 t-SNE 来入门下 流形学习 。
我们的少部分人知道t-SNE算法已经成为了 Scikit-learn 的功能模块,主要用于可视化和理解高维数据。在此文中,将学习其基本算法核心思想,并结合些例子演示如何使用 Scikit-learn 来调用 t-SNE 。
1)t-SNE是什么?
t-SNE字面上的理解是t分布与SNE结合,所以问题变成了SNE是什么,为何要和t分布结合。
SNE: 即stochastic neighbor embedding,由Hinton于2002年提出的可视化算法:在高维空间相似的数据点,映射到低维空间距离也是相似的。
t-SNE: 2008年Maaten 和Hinton结合t分布改进了SNE,解决了SNE棘手的问题之一:拥挤问题,即不同类别边缘不清晰,当然t-SNE还有其他缺点,如大数派拍据可视化有点吃力。
2)首先使用Iris dataset可视化说明t-SNE与PCA的线性与非线性可视化:
如下图所示:类别只有三类的情况下,我们看到t-SNE和PCA都可以较好的分类并进行可视化。
我们注意到PCA在sklearn使用decomposition模块,而t-SNE使用manifold模块,那manifold模块(翻译成流形学习)的功能是什么呢,首先得了解什么是流形学习:
流形学习为拓扑学与机器学习的结合,可以用来对高维数据降维,如果将维度降到2维或3维,我们就能将原始数据可视化,从而对数据的分布有直观的了解,发现一些可能租前存在的规律。
流形弊羡清学习的前提假设,即某些高维数据,实际是一种低维的流形结构嵌入在高维空间中。流形学习的目的是将其映射回低维空间中,揭示其本质。如下图所示:右图为左图的降维后的展示,是不是更直观,更“流形”。(图片来源知乎)
Manifold learning is an approach to non-linear dimensionality rection。传统的线性降维(PCA,LDA)会经常学不到重要的非线性数据特征,也即官网所说: it learns the high-dimensional structure of the data from the data itself, without the use of predetermined classifications,主要流行算法如下图所示:
3)当维度较高时,且数据较稀缺的时候我们比较下PCA和t-SNE的可视化效果
我们使用sklearn关于20newsgroups,如官网介绍:
The 20 newsgroups dataset comprises around 18000 newsgroups posts on 20 topics split in two subsets: one for training (or development) and the other one for testing (or for performance evaluation).
我们可以通过设置参数subset调用对应的训练或测试数据或者全部数据
subset='train'
subset='test'
subset='all'
理解所使用的实验数据,我们发现数据非常稀缺,稀缺度为0.42%
通过help(TSNE)我们发现其往往会根据稀缺程度来决定选择PCA还是truncatedSVD先降维至50维。由上可知,数据非常稀缺,择TruncatedSVD先降维至50维,我们发现t-SNE可视化效果要明显好于PCA。
参考:
从SNE到t-SNE再到LargeVis
http://bindog.github.io/blog/2016/06/04/from-sne-to-tsne-to-largevis?utm_source=tuicool&utm_medium=referral
http://nbviewer.jupyter.org/urls/gist.githubusercontent.com/AlexanderFabisch/1a0c648de22eff4a2a3e/raw//t-SNE.ipynb
⑶ 线性判别分析(LDA)
线性判别分析(Linear Discriminant Analysis,简称LDA)是一种经典的有监督数据降维方法。LDA的主要思想是将一个高维空间中的数据投影到一个较低维的空间中,且投影后要保证各个类别的类内方差小而类间均值差别大,这意味着同一类的高维数皮念据投影到低维空间后相同类别的聚在一起,而不同类别之间相距较远。如下图将二维数据投影到一维直线上:
上图提供了两种方式,哪一种投影方式更好呢?从图上可以直观的看出右边的比左边的投影后分类的效果好,因此右边的投影方式是一种更好地降维方式。
上图直观的给出了LDA分类的主要思想,下图通过数学公式来推导如何得到这个最佳的投影方式。
为了方便解释LDA的原理,我们以二分类为仔没例。
假设现有数据集 D = {(x 1 , y 1 ), (x 1 , y 1 ), ... ,(x m , y m )},其中任意样本x i 为n维向量。定义N j 为第j类样本的个数,X j 为第j类样本的集合,而μ j 为第j类样本的均值向量,Σ𝑗(𝑗=0,1)为第j类样本的"方差"。
因此,原始均值μ j 和投影后的均值μ' j 的表达式为分别为:
而"方差"则为:
根据上面LDA主要思想的描述我们的目标就是要投影后最大化类间均值差同时最小化类内方差大小。因此目标函数如下:
上式中,分子表示不同类别均值之差,分母表示不同类别方差之和,因此我们的目标就是最大化J(w)即可。
其中,对于分母:
对于分子:
对J(w)的求解过程如下:
输入:数据集 D = {(x 1 , y 1 ), (x 1 , y 1 ), ... ,(x m , y m )},任意样本x i 为n维向量,y i ∈{C1, C2, ... , Ck},共k个类别。现在要将其降维到d维;
输出:燃戚困降维后的数据集D'。
参考:
线性判别分析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关注分类能力,不保证投影到的坐标系是正交的 。
⑸ 降维是什么意思
意思如下:
维,在几何学上指空间独立而互相正交的方位数,通常的空间有三维,平面或曲面有二维,直线或曲线只有一维。
在商业领域,企业的竞争力可以体现在若干个维度的累加上,这些维度包括核心技术、成本优势、管理优势、人才优势、地域优势等多个方面。
降维就是把竞争对手拉入到一个更低维度的竞争模式中,让对手因为失去原有的竞争力而无所适从。
降维方法
降维方法分为线性和非线性降维,非线性降维又分为基于核函数和基于特征值的方法。
1、线性降维方法:PCA 、ICA LDA、LFA、LPP(LE的线性表示)
2、非线性降维方法:
(1)基于核函数的非线性降维方法:KPCA 、KICA、KDA
(2)基于特征值的非线性降维方法(流型学习):ISOMAP、LLE、LE、LPP、LTSA、MVU
方法介绍
1、LLE(Locally Linear Embedding)算法(局部线性嵌入):
每一个数据点都可以由其近邻点的线性加权组合构造得到。
算法的主要步骤分为三步:
(1)寻找每个样本点的k个近邻点(k是一个预先给定的值);
(2)由每个样本点的近邻点计算出该样本点的局部重建权值矩阵;
(3)由该样本点的局部重建权值矩阵和其近邻点计算出该样本点的输出值,定义一个误差函数。
⑹ 三种常用降维方法的思想总结
LDA降维和PCA的不同是LDA是有监督的降维,其原理是将特征映射到低维上,原始数据的类别也能清晰的反应在低维的数据上,也就是低维的数据也可以用来判别分类。
我们先看看二维的情况,我们希望找到一个向量,使得数据点映射到这个向量上后,两个类间的距离尽可能,两个类内的样本的距离尽可能小。这样就得到了一个目标函数,分子是投影后两个类间均值的差的平方,我们希望这个值尽可能大,分母是投影后的类的散列值的和,是少除以样本数量的方差,进一步化简分子得到投影向量的转置乘以投影前的类均值差向量的外积再乘以投影向量,分母是投影向量的转置乘以投影前的类间散列矩阵的和再乘以投影向量,此时我们需要求使得目标函数最小的投影向量,由于投影向量扩大或缩小多少倍,目标函数值不变,那么我们可以让分母的模长为1,此时可以使用拉格朗日乘子法,最后求得:当类间散列矩阵的和存在逆矩阵时,投影向量就是类间散列矩阵的和的逆矩阵和投影前的类均值差向量的外积的特征向量。进一步的,我们化简等式左边得到类间散列矩阵的逆矩阵乘以投影前类间均值向量的差乘以一个常数,那么由于投影向量可以放缩常数倍不影响结果,我们约掉两边的常数,得到投影向量等于投影前类均值向量的差左乘散列矩阵的逆矩阵,这就是fisher提出的判别分析
PCA是将原始样本投影到低维的空间上,使得样本的绝大部分信息得以保留,并且特征的维度降低使得模型不易过拟合。思想是:对于原始空间中的m维向量而言,找到k个投影向量使得这m维向量投影到这k个投影向量上的方差最大,保留原始的样本信息最多,我们首先可以看看找第一个向量,使得在这个方向上的投影方差最大。步骤如下:
1.在投影之前,我们对数据做中心化处理,使得原始数据均值为0
2.计算中心化后的样本的协方差矩阵,这是个m*m维的矩阵,m表示原始特征的数目。第i行第j列的元素表示数据中第i列和第j列的协方差
3.计算协方差矩阵的特征值和特征向量,特征向量是单位向量,模长为1,
4.选择带有最大特征值的k个特征向量
5.计算k个最大特征值对应的k个特征,对于每一个特征,都是用原数据矩阵(n行m列)乘以对应的特征向量(m行1列,m是原始变量的数目):因此最后的特征有n行一列,表示每个样本一个特征值
对数据进行中心化和归一化,然后将其投影到某个向量上,计算这一维上的数据点的方差,经过化简就是投影向量的转置乘以原始数据的协方差矩阵再乘以投影向量,前提是这个投影向量是单位向量,然后我们令这个方差λ最大,得到最大方差时对应的那个投影向量就是第一个主成分,那么这个向量如何求解呢?因为这个投影向量是单位向量,那么等式两边左乘以投影向量,得到了λu=Σu,则说明这个投影向量u的方向其实就是这个协方差矩阵的特征向量,那么最大方差λ对应的就是Σ的最大特征值对应的特征向量的方向,就是第一主成分的方向,第二大特征值对应的特征向量就是第二主成分的方向
数据的中心化并不是必要的,但是却方便了表示和计算,PCA是计算样本协方差矩阵的,因此中心化或者中心化并不改变特征向量的方向或者特征值的大小,因此即使不中心化,PCA一样的起作用,然而如果你中心化数据了,那么样本的协方差矩阵的数学表示就会得以简化,如果你的数据点就是你的数据矩阵的列,那么协方差矩阵就表示为xx',多么简便啊!技术上,PCA是包括数据中心化这一步的,但是那只是为了计算协方差矩阵,然后对协方差矩阵做特征值分解,得到各个特征值和特征向量
数据的归一化也不是必须的,如果某些变量有很大或者很小的方差,那么PCA将会倾向于这些大的方差的变量,例如如果你增加了一个变量的方差,也许这个变量对第一个主成分会从很小的影响到起主导性的作用,因此如果你想要PCA独立于这样的变化,归一化可以做到,当然,如果你的变量在那个规模上很重要,那么你可以不归一化,归一化在PCA中是很重要的,因为PCA是一个方差最大化的实验,它就是投影你的原始数据到方差最大化的方向上
(1)如果原始的特征是高度相关的,PCA的结果是不稳定的;
(2)新的特征是原始特征的线性组合,所以缺乏解释性。
(3)原始数据不一定要是多元高斯分布的,除非你使用这个技术来预测性的建模去计算置信区间
矩阵乘法的作用是线性变换,对一个向量乘以一个矩阵,可以使得这个向量发生伸缩、切变和旋转。我们都知道对称矩阵的特征向量是相互正交的,给定一个对称矩阵M,可以找到一些这样的正交向量v,使得Mv=λv,即这个矩阵M对向量做了拉伸变换,λ是拉伸的倍数。那么对于普通的矩阵呢,才能让一个原来就是相互垂直的网格平面(orthogonal grid), 线性变换成另外一个网格平面同样垂直呢?
对于一个正交矩阵,其对应的变换叫做正交变换,这个变换的作用是不改变向量的尺寸和向量间的夹角。正交变换中的旋转变换只是将变换向量用另一组正交基表示,在这个过程中并没有对向量做拉伸,也不改变向量的空间位置,只是将原坐标系旋转得到新的坐标系,那么这个旋转矩阵怎么求呢?对于二维空间中的某个向量而言,其经过旋转变换的结果就是从用一组坐标系表示到用另外一组坐标系表示,新的坐标系下的坐标各个分量相当于是原坐标系下的坐标的各个分量在新的坐标系的两个正交基下的投影,或者是相当于将原来的二维向量经过旋转到了新的坐标,因此相当于对向量左乘一个旋转矩阵,求出这个矩阵就是旋转变换的矩阵。刚刚说正交变换不改变向量的空间位置是绝对的,但是坐标是相对的,从原来的坐标系的基向量位置看这个二维向量,到从新的坐标系下看这个向量的坐标是变化的
矩阵乘以一个向量的结果仍是同维数的一个向量。因此,矩阵乘法对应了一个变换,把一个向量变成同维数的另一个向量。
对特定的向量,经过一种方阵变换,经过该变换后,向量的方向不变(或只是反向),而只是进行伸缩变化(伸缩值可以是负值,相当于向量的方向反向)?这就是相当于特征向量的定义
特征向量的几何含义是:特征向量通过方阵A变换只进行伸缩,而保持特征向量的方向不变。特征值表示的是这个特征到底有多重要,类似于权重,而特征向量在几何上就是一个点,从原点到该点的方向表示向量的方向。
一个变换(或者说矩阵)的特征向量就是这样一种向量,它经过这种特定的变换后保持方向不变,只是进行长度上的伸缩而已。特征值分解则是对旋转和缩放两种效应的归并。因为特征值分解中的A为方阵,显然是不存在投影效应的。或者说,我们找到了一组基(特征向量们),在这组基下,矩阵的作用效果仅仅是缩放。即矩阵A将一个向量从x这组基的空间旋转到x这组基的空间上,并在每个方向进行了缩放,由于前后两组基都是x,即没有进行旋转和投影。
详细分析特征值分解的过程:首先由于特征向量是正交的,特征向量组成的矩阵是正交方阵,两边同时右乘以这个方阵的逆矩阵,可以得到矩阵A的表达式为A=UΛU',两边同时右乘一个向量,相当于对这个向量左乘矩阵A,对向量做旋转或拉伸的变换。这个变换的过程分为三个映射:第一个是将向量x进行了旋转,它将x用新的坐标系来表示;第二个变换是拉伸变化,对x的每一维分量都进行了特征值大小的拉伸或缩小变换;第三个是对x做第一个变换的逆变换,因为是第一个矩阵的逆矩阵,也是旋转变换。在第二个拉伸变换中,可以看出,如果矩阵A不是满秩的,即有的特征值为0,那么这里相当于将x映射到了m维空间的子空间(m是矩阵A的维数m*m),此时矩阵A是一个正交投影矩阵,它将m维向量x映射到了它的列空间。如果A是二维的,那么可以在二维平面上可以找到一个矩形,使得这个矩形经过A变换后还是矩形
在特征值分解中,矩阵A要求是方阵,那么对于一个任意的矩阵m*n,能否找到一组正交基使得经过它变换后还是正交基?这就是SVD的精髓所在
A=UΣU',我们来分析矩阵A的作用: 首先是旋转 ,U的列向量是一组标准正交基,V也是,这表示我们找到了两组基。A的作用是将一个向量从V这组正交基向量空间旋转到U这组正交基向量空间; 其次是缩放 ,当V对向量x做了旋转以后,相当于把向量x旋转使其用V这组正交基表示坐标,然后Σ对向量x的每个分量做了缩放,缩放的程度就是Σ的主对角线上的元素,是奇异值; 最后是投影 ,如果U的维数小于V的维数,那么这个过程还包含了投影
现在的目的是找一组正交基,使得经过A矩阵变换后仍然是一组正交基,假设已经找到这样一组正交基,那么对这组正交基经过A变换,如何使其仍然是一组正交基呢?只要使得原来的正交基是A'A的特征向量即可,|AVi|就是A'A的特征值的开方,也就是奇异值,然后我们求AVi的单位向量Ui,这些Ui也都是正交的,那么我们就找到了两组正交基使得从V这组正交基变换到U这组正交基,V称作右奇异向量,U称作左奇异向量,AVi的模是奇异值,我们对V1,...,Vk进行扩充Vk+1,..,Vn(Vk+1,..,Vn是Ax=0的零空间)使得V1,...,Vn是n维空间中的一组正交基,对U1,...,Uk进行扩充Uk+1,...,Um,使得U1,..,Um是m维空间中的一组正交基,这个k值是矩阵A的秩,当A是满秩时,分解后的矩阵相乘等于A,k越接近于n,则分解后的矩阵相乘结果越接近于A
对矩阵A的映射过程分析:如果在n维空间中找到一个超矩形,使其都落在A'A的特征向量的方向上,那么经过A变换后的形状仍为超矩形。Vi是A'A的特征向量,Ui是AA'的特征向量,也是AVi的单位向量,σ是A'A的特征值的开方,根据这个公式可以计算出矩阵A的奇异值分解矩阵
SVD是将一个相互垂直的网格变换到另外一个相互垂直的网格,按照上面的对于U,V的定位,可以实现用矩阵A将一个向量变换的过程,首先将向量x写成用V这组正交基表示的形式,然后用矩阵A左乘向量x,并带入AVi=σiUi,最后可以得到A的分解式,不是矩阵分解式,而是向量分解式,可以看出,如果有的奇异值很小甚至为0,那么本来有n项相加,就最后只有奇异值不为0的项相加了,假如有k项相加,那么k越接近于n最后A分解的结果越接近于A
(1)可以用来减少元素的存储
(2)可以用来降噪:去掉奇异值小的项,奇异值小的我们认为是含有样本重要信息很少,都是噪声,因此就把这些信息少的给去掉了
(3)数据分析:比如说我们有一些样本点用于建模,我们通过SVD将数据里面的奇异值小的都去掉了,最后得到了分解后的数据,用来做分析,更加准确
我们知道PCA里面,我们对变量进行降维实际上就相当于对数据矩阵Am*n右乘一个矩阵Pn*r,就得到了Am*r,表示每个样本的特征向量只有r维的,和这个矩阵P代表了r个列向量是数据矩阵A的协方差矩阵n*n的最大的r的特征值对应r个特征向量,都是n维的。和SVD相比,将SVD的表达式两边同时右乘一个Vn*r,这样等式右边就Vr*n和Vn*r相乘是单位向量,因为Vn*r是A'A的r个特征向量,是前r个不为0的特征值对应的特征向量,且由于A'A是对称的,那么各个特征向量之间是正交的,这样就得到了刚刚PCA推导出来的公式
同理,对数据矩阵Am*n左乘一个矩阵Pr*m,就得到了Ar*n,表示每个特征对应的样本只有r个,矩阵P代表了r个m维向量,每个向量是让每个特征对应的样本向量所要投影的方向向量。和SVD相比,将SVD两边同时左乘以一个矩阵Ur*m,就得到了Ar*n,即在行方向上进行了降维,等式右边是Ur*m和Um*r相乘为单位向量,因为Um*r是AA'的特征向量,是AA'的前r个不为0的特征值对应的特征向量,是m维的,由于AA'是对称矩阵,那么各个特征向量之间是正交的,这样就得到了刚刚PCA推导出来的公式
可以看出:
--PCA几乎可以说是对SVD的一个包装,如果我们实现了SVD,那也就实现了PCA了
--而且更好的地方是,有了SVD,我们就可以得到两个方向的PCA,如果我们对A’A进行特征值的分解,只能得到一个方向的PCA。
⑺ 数据降维是什么意思_数据降维的方法有哪些
数据降维是将数据进行降维处理的意思。
降维,通过单幅图像数据的高维化,将单幅图像转化为高维空间中的数据集合,对其进行非线性降维。寻求其高维数据流形本征结构的一维表示向量,将其作为图像数据的特征表达向量。降维处理是将高维数据化为低维度迅派数据的操作。一般来说,化学过程大都是一个多变量的变化过程,一般的化学数据也都是多变量数据。
(7)线性降维的典型分析方法是扩展阅读:
数据降维运用:
通过单幅图像数据的高维化,将单幅图像转化为高维空间中的数据集合,对其进行非线性降维,寻求其高维数据流形本征结构的一维表示向量,将亩禅贺其作为图像数据的特征表达向量。从而将高维图像识别问题转化为特征表达向量的识别问题,大大降低了计算的复杂程度,减少了冗余信息所造成的识别误差,提高了识别的精度。
通过指纹图像的实例说明,将非线性降维方法(如LaplacianEigenmap方法)应用于图像数据识别问题,在实际中是可行的,在计算上是简单的,可大大改善常用方法(如K-近邻方法)的效能,获得更好的识别效果。此外,该方袭基法对于图像数据是否配准是不敏感的,可对不同大小的图像进行识别,这大大简化了识别的过程。
⑻ 降维的方法主要有
在分析高维数据时,降维(Dimensionality rection,DR)方法是我们不可或缺的好帮手。
作为数据去噪简化的一种方法,它对处理大多数现代生物数据很有帮助。在这些数据集中,经常存在着为单个样本同时收集数百甚至数百万个测量值的情况。
由于“维度灾难”(curse of dimensionality)的存在,很多统计方法难以应用到高维数据上。虽然收集到的数据点很多,但是它们会散布在一个庞大的、几乎不可能进行彻底探索的高维空间中。
通过降低数据的维度,你可以把这个复杂棘手的问题变得简单轻松。除去噪音但保存了所关注信息的低维度数据,对理解其隐含的结构和模式很有帮助。原始的高维度数据通常包含了许多无关或冗余变量的观测值。降维可以被看作是一种潜在特征提取的方法。它也经常用于数据压缩、数据探索以及数据可视化。
虽然在标准的数据分析流程中已经开发并实现了许多降维方法,但它们很容易被误用,并且其结果在实践中也常被误解。
本文为从业者提供了一套有用的指南,指导其如何正确进行降维,解释其输出并传达结果。
技巧1:选择一个合适的方法
当你想从现有的降维方法中选择一种进行分析时,可用的降维方法的数量似乎令人生畏。事实上,你不必拘泥于一种方法;但是,你应该意识到哪些方法适合你当前的工作。
降维方法的选择取决于输入数据的性质。比如说,对于连续数据、分类数据、计数数据、距离数据,它们会需要用到不同的降维方法。你也应该用你的直觉和相关的领域知识来考虑收集到的数据。通常情况下,观测可以充分捕获临近(或类似)数据点之间的小规模关系,但并不能捕获远距离观测之间的长期相互作用。对数据的性质和分辨率的考虑是十分重要的,因为降维方法可以还原数据的整体或局部结构。一般来说,线性方法如主成分分析(Principal Component Analysis, PCA)、对应分析(Correspondence Analysis, CA)、多重对应分析(Multiple Correspondence Analysis, MCA)、经典多维尺度分析(classical multidimensional scaling, cMDS)也被称为主坐标分析(Principal Coordinate Analysis, PCoA) 等方法,常用于保留数据的整体结构;而非线性方法,如核主成分分析(Kernel Principal Component Analysis, Kernel PCA)、非度量多维尺度分析(Nonmetric Multidimensional Scaling, NMDS)、等度量映射(Isomap)、扩散映射(Diffusion Maps)、以及一些包括t分布随机嵌入(t-Distributed Stochastic Neighbor Embedding, t-SNE)在内的邻近嵌入技术,更适合于表达数据局部的相互作用关系。NE技术不会保留数据点之间的长期相互作用关系,其可视化报告中的非临近观测组的排列并没有参考价值。因此,NE的图表不应该被用于数据的大规模结构的推测
⑼ 用sklearn进行降维的七种方法
在实际的应用中,有时候我们会遇到数据的维度太少,我们需要新生成新的维度,可以用我们之前的分享( 如何自动化进行特征工程 );有时候维度太多,这时候我们就需要降维了。降维的方法有许多,我们这里介绍了sklearn中介绍的7种,供大家学习和收藏。
主成分分析(PCA)用于将多维的数据集分解为一组具有最大方差的连续正交分量。在sklearn这个包中,PCA是一个transformer对象,使用fit方法可以选择前n个主成分,并且用于投射到新的数据中。
PCA有两种实现方式,一种是特征值分解去实现,一种是奇异值分解去实现。特征值分解是一个提取矩阵特征很不错的方法,但是它只是对方阵而言的,如果不使用SVD,PCA只会寻找每个特征的中心,但并不会对数据进行缩放(scaled)。使用参数whiten=True ,可以将数据投射到奇异空间中,并且将每个组分缩放到方差为1,这个对于后续分析中,假设每个特征是isotropy 是很有帮助的,例如SVM和Kmeans聚类。
PCA不仅仅是对高维数据进行降维,更重要的是经过降维去除了噪声,发现了数据中的模式。PCA把原先的n个特征用数目更少的m个特征取代,新特征是旧特征的线性组合,这些线性组合最大化样本方差,尽量使新的m个特征互不相关。
SVD是一种矩阵分解法,把一个大矩阵分解成易于处理的形式,这种形式可能是两个或多个矩阵的乘积。
参数
例子2:获取每个主成分与特征的关系
PCA虽然很有用,但是需要将数据全部都存入内存,因此当当要分解的数据集太大,会导致内存很大。这时候,增量主成分分析(IPCA)通常用作主成分分析(PCA)的替代,可以通过部分计算的方式,获得跟PCA一样的结果。
IPCA使用与输入数据样本数无关的内存量为输入数据建立低秩近似。它仍然依赖于输入数据功能,但更改批量大小可以控制内存使用量。
该函数,增加了一个batch_size的参数,用来控制批次,其余都一样,至此不再赘述。
实例
对于大型矩阵的分解,我们往往会想到用SVD算法。然而当矩阵的维数与奇异值个数k上升到一定程度时,SVD分解法往往因为内存溢出而失败。因此,Randomized SVD算法,相比于SVD,它更能适应大型矩阵分解的要求,且速度更快。
此外,在某些场景下,我们期望丢掉某些lower sigular values,来达到减少噪音,保留尽可能多的方差,从而达到更好的预测效果。比如人脸的识别,如果是64X64的像素,那么整个维度有4096个。我们利用这个方法,可以保留重要的维度,从而利于后续的分析。
使用 svd_solver='randomized' 可以实现随机化的SVD,来去掉部分的奇异矩阵。
主成分分析(Principal Components Analysis, PCA)适用于数据的线性降维。而核主成分分析(Kernel PCA,KPCA)可实现数据的非线性降维,用于处理线性不可分的数据集。kernel的选择有 {'linear', 'poly', 'rbf', 'sigmoid', 'cosine', 'precomputed'},默认是'linear'。
详细说明见官方说明,与普通的PCA差不多。
SparsePCA 期望找到一组可以最优地重构数据的稀疏主成分。稀疏性的大小由参数alpha给出的L1惩罚系数来控制。Mini-batch sparse PCA是sparsePCA的变种,提高了速度,但是降低了精度。
主成分分析(PCA)的缺点是,该方法提取的成分是一种密集表达式,即用原始变量的线性组合表示时,它们的系数是非零的。这可能会使解释模型变得困难。在许多情况下,真实的基础分量可以更自然地想象为稀疏向量;例如,在人脸识别中,主成分会只包含部分的图像,映射到人脸的某些部分。稀疏主成分产生了一种更简洁的、可解释的表示,清楚地强调是哪些原始特征导致了样本之间的差异。
通过调节alpha来调整惩罚度,alpha越大,越导致许多系数为0。
TruncatedSVD是普通SVD的一个变种,只计算用户指定的前K个奇异值。TSVD通常用于语义分析中,是LSA的其中的一部分,可以解决一词多义和一义多词的问题。
LSA潜在语义分析的目的,就是要找出词(terms)在文档和查询中真正的含义,也就是潜在语义,从而解决上节所描述的问题。具体说来就是对一个大型的文档集合使用一个合理的维度建模,并将词和文档都表示到该空间,比如有2000个文档,包含7000个索引词,LSA使用一个维度为100的向量空间将文档和词表示到该空间,进而在该空间进行信息检索。而将文档表示到此空间的过程就是SVD奇异值分解和降维的过程。降维是LSA分析中最重要的一步,通过降维,去除了文档中的“噪音”,也就是无关信息(比如词的误用或不相关的词偶尔出现在一起),语义结构逐渐呈现。相比传统向量空间,潜在语义空间的维度更小,语义关系更明确。
使用例子如下:
用事先预定义好的字典来对矩阵进行稀疏化编码,达到降维和简化的目的。就像人类的所有语言都是由单词组成一样,因此使用已知的词典可以减少维度;其次,稀疏化可以减少计算的成本,让后续的计算更快。
这个对象没有fit的方法,transformation方法会将数据表示为尽可能少的字典原子的线性组合。可以用transform_method来控制初始化参数,有以下几种:
使用的函数为sklearn.decomposition.DictionaryLearning,会找到一个可以将fitted data足够好稀疏化的字典。
将数据表示为一个overcomplete的字典这个过程,同大脑处理数据的过程类似。这个方法在图像补丁的字典学习已被证明在诸如图像完成、修复和去噪以及监督识别任务的图像处理任务中给出良好的结果。
使用函数为sklearn.decomposition.MiniBatchDictionaryLearning,是一种快速的,但是精确度降低的版本,适应于大数据集合。
默认情况下,MiniBatchDictionaryLearning将数据分成小批量,并通过在指定次数的迭代中循环使用小批量,以在线方式进行优化。但是,目前它没有退出迭代的停止条件。也可以用partial_fit来实现小批次的fit。
从变量中提取共性因子。
因子分析要求原有变量间具有较强的相关性,否则,因子分析无法提取变量间的共性特征,如果相关系数小于0.3,则变量间的共线性较小,不适合因子分析;因子分析得到因子和原变量的关系,因此能够对因子进行解释。
因子分析可以产生与 PCA 相似的特征(载荷矩阵的列)。不过,不能对这些特征做出任何一般性的说明(例如他们是否正交)。
使用的函数为sklearn.decomposition.FactorAnalysis。
使用的函数为sklearn.decomposition.FastICA,ICA可以提取出一系列的主成分,彼此最大的独立。因此,ICA一般不用于降维,而用于区分叠加信号。ICA不考虑noise,为了使模型正确,必须使用whitening,可以使用whiten这个参数。
ICA 通常用于分离混合信号(称为盲源分离的问题),也可以作为一种非线性降维方法,可以找到具有一些稀疏性的特征。
主成分分析假设源信号间彼此非相关,独立成分分析假设源信号间彼此独立。
主成分分析认为主元之间彼此正交,样本呈高斯分布;独立成分分析则不要求样本呈高斯分布。
非负矩阵分解,顾名思义就是,将非负的大矩阵分解成两个非负的小矩阵。在数据矩阵不包含负值的情况下,应用NMF而不是PCA或其变体。
NMF可以产生可以代表数据的主成分,从而可以来解释整个模型。
参数init,可以用来选择初始化的方法,不同的方法对结果会有不同的表现。
在PCA处理中,假使将特征降维为600个,那么降维后的每个人脸都包含了600个特征(所以我们看到降维后的人脸有种“伏地魔”的感觉 ,这是因为降维处理相当于删去了部分细节特征,导致一部分信息丢失,在图片中最直观的体现就是变模糊)。而在NMF的处理中,这1000个特征相当于是被分离了。相当于,一张人脸是由鼻子、耳朵等这些独立的特征叠加出来的。
LDA是文档主题生成模型,对离散数据集(如文本语料库)的集合的生成概率模型。它也是一个主题模型,用于从文档集合中发现抽象主题。LDA是一种非监督机器学习技术,可以用来识别大规模文档集(document collection)或语料库(corpus)中潜藏的主题信息。
sklearn.decomposition.LatentDirichletAllocation是用于进行LDA的函数。
1、 https://www.jianshu.com/p/1adef2d6dd88
2、 https://www.jianshu.com/p/e574e91070ad
3、 https://scikit-learn.org/stable/moles/decomposition.html#decompositions
4、 https://shankarmsy.github.io/posts/pca-sklearn.html
5、 https://mp.weixin.qq.com/s/Tl9ssjmGdeyNrNuIReo1aw
6、 https://www.cnblogs.com/eczhou/p/5433856.html
7、 https://scikit-learn.org/stable/auto_examples/applications/plot_face_recognition.html#sphx-glr-auto-examples-applications-plot-face-recognition-py
8、 https://blog.csdn.net/fkyyly/article/details/84665361 LSA(Latent semantic analysis)
9、 https://blog.csdn.net/fjssharpsword/article/details/74964127
10、 https://www.jianshu.com/p/e90900a3d03a
⑽ LDA和PCA降维总结
线性判别分析(Linear Discriminant Analysis,LDA)是一种经典的降维方法。和主成分分析PCA不考虑样本类别输出的无监督降维技术不同,LDA是一种监督学习的降维技术,数据集的每个样本有类别输出。
LDA分类思想简单总结如下:
如果用一句话概括LDA思想,即“投影后类内方差最小,类间方差最大”。
假设有红、蓝两类数据,这些数据特征均为二维,如下图所示。我们的目标是将这些数据投影到一维,让每一类相近的数据的投影点尽可能接近,不同类别数据尽可能远,即图中红色和蓝色数据中心之间的距离尽可能大。
左图和右图是两种不同的投影方式。
左图思路:让不同类别的平均点距离最远的投影方式。
右图思路:让同类别的数据挨得最近的投影方式。
从上图直观看出,右图红色数据和蓝色数据在各自的区域来说相对集中,根据数据分布直方图也可看出,所以右图的投影效果好于左图,左图中间直方图部分有明显交集。
以上例子是基于数据是二维的,分类后的投影是一条直线。如果原始数据是多维的,则投影后的分类面是一低维的超平面。
输入:数据集 ,其中样本 是n维向量, ,降维后的目标维度 。定义
为第 类样本个数;
为第 类样本的集合;
为第 类样本的均值向量;
为第 类样本的协方差矩阵。
其中
假设投影直线是向量 ,对任意样本 ,它在直线 上的投影为 ,两个类别的中心点 , 在直线 的投影分别为 、 。
LDA的目标是让两类别的数据中心间的距离 尽量大,与此同时,希望同类样本投影点的协方差 、 尽量小,最小化 。
定义
类内散度矩阵
类间散度矩阵
据上分析,优化目标为
根据广义瑞利商的性质,矩阵 的最大特征值为 的最大值,矩阵 的最大特征值对应的特征向量即为 。
LDA算法降维流程如下:
输入:数据集 ,其中样本 是n维向量, ,降维后的目标维度 。
输出:降维后的数据集 。
步骤:
PCA可解决训练数据中存在数据特征过多或特征累赘的问题。核心思想是将m维特征映射到n维(n < m),这n维形成主元,是重构出来最能代表原始数据的正交特征。
假设数据集是m个n维, 。如果 ,需要降维到 ,现在想找到某一维度方向代表这两个维度的数据。下图有 两个向量方向,但是哪个向量才是我们所想要的,可以更好代表原始数据集的呢?
从图可看出, 比 好,为什么呢?有以下两个主要评价指标:
如果我们需要降维的目标维数是其他任意维,则:
下面以基于最小投影距离为评价指标推理:
假设数据集是m个n维, ,且数据进行了中心化。经过投影变换得到新坐标为 ,其中 是标准正交基,即 , 。
经过降维后,新坐标为 ,其中 是降维后的目标维数。样本点 在新坐标系下的投影为 ,其中 是 在低维坐标系里第 j 维的坐标。
如果用 去恢复 ,则得到的恢复数据为 ,其中 为标准正交基组成的矩阵。
考虑到整个样本集,样本点到这个超平面的距离足够近,目标变为最小化 。对此式进行推理,可得:
在推导过程中,分别用到了 ,矩阵转置公式 , , 以及矩阵的迹,最后两步是将代数和转为矩阵形式。
由于 的每一个向量 是标准正交基, 是数据集的协方差矩阵, 是一个常量。最小化 又可等价于
利用拉格朗日函数可得到
对 求导,可得 ,也即 。 是 个特征向量组成的矩阵, 为 的特征值。 即为我们想要的矩阵。
对于原始数据,只需要 ,就可把原始数据集降维到最小投影距离的 维数据集。
基于最大投影方差的推导,这里就不再赘述,有兴趣的同仁可自行查阅资料。
输入: 维样本集 ,目标降维的维数 。
输出:降维后的新样本集 。
主要步骤如下:
降维的必要性 :
降维的目的 :
应用PCA算法前提是假设存在一个线性超平面,进而投影。那如果数据不是线性的呢?该怎么办?这时候就需要KPCA,数据集从 维映射到线性可分的高维 ,然后再从 维降维到一个低维度 。
KPCA用到了核函数思想,使用了核函数的主成分分析一般称为核主成分分析(Kernelized PCA, 简称KPCA)。
假设高维空间数据由 维空间的数据通过映射 产生。
维空间的特征分解为:
其映射为
通过在高维空间进行协方差矩阵的特征值分解,然后用和PCA一样的方法进行降维。由于KPCA需要核函数的运算,因此它的计算量要比PCA大很多。