方法特性与流形介绍

方法特性

缺失值比率:如果数据集的缺失值太多,我们可以用这种方法减少变量数。

低方差滤波:这个方法可从数据集中识别和删除常量变量,方差小的变量对目标变量影响不大,可以放心删去。

高相关滤波:具有高相关性的一对变量会增加数据集中多重共线性,所以用这种方法删去其中一个是有必要的。

随机森林:这是最常用的降维方法之一,它会明确算出数据集中每个特征的重要性。前向特征选择和反向。

特征消除:这两种方法耗时较久,计算成本也都很高,所以只适用于输入变量较少的数据集。

因子分析:这种方法适合数据集中存在高度相关的变量集的情况。

PCA:这是处理线性数据最广泛使用的技术之一。

ICA:ICA非降低维度,而是将数据转换为独立的分量,使用更少的分量来描述数据。

kPCA:适合非线性数据,将数据映射至高维可分后再用PCA。

MDS:原始高维空间中样本距离在低维中继续保持。

ISOMAP:适合非线性数据处理,流形学习,试图保持近邻样本之间的距离不同。

LLE:适合非线性数据处理,流形学习,试图保持邻域内样本之间的线性关系。

t-SNE:适合非线性数据处理,可将数据降至2维或3维度方便可视化。

流形介绍

流形学习(manifold learning)是一类借鉴拓扑流形概念的降维方法。“流形”是在局部与欧氏空间同胚的空间,换言之,它在局部具有欧氏空间的性质,能用欧氏距离来进行距离计算。这给降维方法带来了很大的启发:若低维流形嵌入到高维空间中,则数据样本在高维度空间的分布虽然看上去非常复杂,但在局部上仍具有欧氏空间的性质。因此,可以容易地在局部建立降维映射关系,然后再设法将局部映射关系推广到全局。当维数被降至二维或三维时,能对数据进行可视化展示,因此流形学习也可以被用于可视化。

流形(英语:Manifolds),是局部具有欧几里得空间性质的空间,是欧几里得空间中的曲线、曲面等概念的推广。欧几里得空间就是最简单的流形的实例。地球表面这样的球面则是一个稍微复杂的例子。一般的流形可以通过把许多平直的片折弯并粘连而成。比如下图,地球是三维的,我们可以想象成多个极小二维纸片(地图)拼接而成。

1024px-Triangles_(spherical_geometry).jpg
流形学习的观点是认为,我们所能观察到的数据实际上是由一个低维流形映射到高维空间上的。由于数据内部特征的限制,一些高维中的数据会产生维度上的冗余,实际上只需要比较低的维度就能唯一地表示。

举个例子,比如说我们在平面上有个圆,如何表示这个圆呢?如果我们把圆放在一个平面直角坐标系中,那一个圆实际上就是由一堆二维点构成的。比如一个单位圆:数据降维 - 图2是一个在圆上的点,数据降维 - 图3也是一个在圆上的点,但数据降维 - 图4数据降维 - 图5等等很多点是不在这个圆上的。显然如果用二维坐标来表示,我们没有办法让这个二维坐标系的所有点都是这个圆上的点。也就是说,用二维坐标来表示这个圆其实是有冗余的。我们希望,如果能建立某一种描述方法,让这个描述方法所确定的所有点的集合都能在圆上,甚至能连续不间断地表示圆上的点,那就好了!有没有这种方法呢?对于圆来说,当然有!那就是用极坐标。在极坐标的表示方法下,圆心在原点的圆,只需要一个参数就能确定:半径。当你连续改变半径,就能产生连续不断的“能被转换成二维坐标表示”的圆。

所以说,实际上二维空间中的圆就是一个一维流形。与之相似的,三维空间中一个球面,用x, y, z三个坐标轴确定时会产生冗余(很多在三维空间中的数据点并不在球面上)。但其实只需要用两个坐标就可以确定了,比如经度和维度。只要给定任何合法的经度和维度,我们就都能保证这个点肯定在球面上!


常用方法

缺失值比率(Missing Value Ratio)

当缺失值在数据集中的占比过高时,一般会选择直接删除这个变量,因为它包含的信息太少了。但具体删不删、怎么删需要视情况而定,我们可以设置一个阈值,如果缺失值占比高于阈值,删除它所在的列。阈值越高,降维方法越积极。

低方差滤波(Low Variance Filter)

如果我们有一个数据集,其中某列的数值基本一致,也就是它的方差非常低,那么这个变量还有价值吗?和上一种方法的思路一致,我们通常认为低方差变量携带的信息量也很少,所以可以把它直接删除。

放到实践中,就是先计算所有变量的方差大小,然后删去其中最小的几个。需要注意的一点是:方差与数据范围相关的,因此在采用该方法前需要对数据做归一化处理。

高相关滤波(High Correlation filter)

如果两个变量之间是高度相关的,这意味着它们具有相似的趋势并且可能携带类似的信息。同理,这类变量的存在会降低某些模型的性能(例如线性和逻辑回归模型)。为了解决这个问题,我们可以计算独立数值变量之间的相关性。如果相关系数超过某个阈值,就删除其中一个变量。

随机森林(Random Forest)

随机森林是一种广泛使用的特征选择算法,它会自动计算各个特征的重要性,所以无需单独编程。这有助于我们选择较小的特征子集。

在开始降维前,我们先把数据转换成数字格式,因为随机森林只接受数字输入。同时,ID这个变量虽然是数字,但它目前并不重要,所以可以删去。

反向特征消除(Backward Feature Elimination)

以下是反向特征消除的主要步骤:

  1. 先获取数据集中的全部n个变量,然后用它们训练一个模型。
  2. 计算模型的性能。
  3. 在删除每个变量(n次)后计算模型的性能,即我们每次都去掉一个变量,用剩余的n-1个变量训练模型。
  4. 确定对模型性能影响最小的变量,把它删除。
  5. 重复此过程,直到不再能删除任何变量。

前向特征选择(Forward Feature Selection)

前向特征选择其实就是反向特征消除的相反过程,即找到能改善模型性能的最佳特征,而不是删除弱影响特征。它背后的思路如下所述:

  1. 选择一个特征,用每个特征训练模型n次,得到n个模型。
  2. 选择模型性能最佳的变量作为初始变量。
  3. 每次添加一个变量继续训练,重复上一过程,最后保留性能提升最大的变量。
  4. 一直添加,一直筛选,直到模型性能不再有明显提高。

因子分析(Factor Analysis)

因子分析是一种常见的统计方法,它能从多个变量中提取共性因子,并得到最优解。假设我们有两个变量:收入和教育。它们可能是高度相关的,因为总体来看,学历高的人一般收入也更高,反之亦然。所以它们可能存在一个潜在的共性因子,比如“能力”。

在因子分析中,我们将变量按其相关性分组,即特定组内所有变量的相关性较高,组间变量的相关性较低。我们把每个组称为一个因子,它是多个变量的组合。和原始数据集的变量相比,这些因子在数量上更少,但携带的信息基本一致。


线性降维方法

线性降维1.png

线性降维的方法可以应对像下图这样简单的数据(比如PCA找方差大的维度进行保留)

线性降维2.png线性降维3.png

主成分分析(PCA)

主成分分析(Principal Component Analysis,PCA)是最常用的一种降维方法,旨在找到数据中的主成分,并利用这些主成分表征原始数据,从而达到降维的目的。它属于一种线性、非监督、全局的降维算法

PCA1.jpg

在介绍PCA之前,不妨先考虑这样一个问题:对于正交属性空间中的样本点,如何用一个超平面对所有样本进行恰当的表达?容易想到,若存在这样的超平面,那么它大概应该有这样的性质:

  1. 最大可分性:样本点在这个超平面上的投影能尽可能分开(最大方差理论)
  2. 最近重构性:样本点到这个超平面的距离都足够近(最小平方误差理论)

基于这两个性质都可以推导出PCA,这里以最大可分性来推导。

最大可分思想

主成分分析顾名思义,就是找出数据里最主要的方面,用数据里最主要的方面来代替原始数据。具体的,假如我们的数据集是数据降维 - 图10维的,共有数据降维 - 图11个数据数据降维 - 图12。我们希望将这数据降维 - 图13个数据的维度从数据降维 - 图14维降到数据降维 - 图15维,希望这数据降维 - 图16数据降维 - 图17维的数据集尽可能的代表原始数据集。我们知道数据从数据降维 - 图18维降到数据降维 - 图19维肯定会有损失,但是我们希望损失尽可能的小。那么如何让这数据降维 - 图20维的数据尽可能表示原来的数据呢?

我们先看看最简单的情况,也就是数据降维 - 图21数据降维 - 图22,也就是将数据从二维降维到一维。数据如下图。我们希望找到某一个维度方向,它可以代表这两个维度的数据。图中列了两个向量方向,数据降维 - 图23数据降维 - 图24,那么哪个向量可以更好的代表原始数据集呢?例如下图,从直观上也可以看出,数据降维 - 图25数据降维 - 图26好,这就是我们所说的最大可分性

PCA2.jpg

上图是二维空间中经过中心化的一组数据,我们很容易看出主成分所在的轴(以下称为主轴)的大致方向,即上图中数据降维 - 图28所在的轴。因为数据降维 - 图29所处的轴上,数据分布的更为分散,这也意味着数据在这个方向上方差更大。在信号处理领域,我们认为信号具有较大方差,噪声具有较小方差,信号与噪声之比称为信噪比。信噪比越大意味着数据的质量越好,反之,信噪比越小意味着数据的质量越小。由此我们不难引出PCA的目标,即最大化投影方差,也就是让数据在主轴上投影的方差最大。

给一组数据点数据降维 - 图30,所有向量均为列向量,中心化后为数据降维 - 图31,其中数据降维 - 图32,即每个数据点减样本集均值。我们知道,向量内积在几何上表示为第一个向量投影到第二个向量上的长度,因此向量数据降维 - 图33数据降维 - 图34(单位方向向量)上的投影坐标可以表示为数据降维 - 图35。所以目标是找到一个投影方向数据降维 - 图36,使数据降维 - 图37数据降维 - 图38上的投影方差尽可能大。易知,投影之后均值为0(因为数据降维 - 图39,这也是我们进行中心化的意义),因此投影后的方差可以表示为:

数据降维 - 图40

数据降维 - 图41其实就是样本的协方差矩阵,我们将其写作数据降维 - 图42,且由于数据降维 - 图43是单位方向向量,即数据降维 - 图44。所以,我们要解决的最大化问题可表示为:

数据降维 - 图45

引入拉格朗日乘子,并对数据降维 - 图46求导令其等于0,便可以推出数据降维 - 图47,此时:

数据降维 - 图48

熟悉线性代数的马上会发现,原来数据降维 - 图49投影后的方差就是协方差矩阵的特征值。我们要找到最大的方差也就是协方差矩阵最大的特征值,最佳投影方向就是最大特征值对应的特征向量。次佳投影方向位于最佳投影方向的正交空间中,是第二大特征值对应的特征向量,以此类推。所以有以下PCA求解方法:

  1. 对样本数据进行中心化处理
  2. 求样本协方差矩阵
  3. 对协方差矩阵进行特征值分解(SVD),将特征值从大到小排列
  4. 取特征值前数据降维 - 图50大对应的特征向量数据降维 - 图51,通过以下映射将数据降维 - 图52维样本映射到数据降维 - 图53维:
  5. 数据降维 - 图54

新的数据降维 - 图55的第数据降维 - 图56维就是数据降维 - 图57在第数据降维 - 图58个主成分数据降维 - 图59方向上的投影,通过选取最大的数据降维 - 图60个特征值对应的特征向量,我们将方差较小的特征(噪声)抛弃,使得每个数据降维 - 图61维列向量数据降维 - 图62被映射为数据降维 - 图63维列向量数据降维 - 图64,定义降维后的信息占比为:数据降维 - 图65

code实现

https://github.com/chmx0929/UIUCclasses/tree/master/598MachLrngforSignalProcessng/homework/homework2

线性判别分析(LDA)

线性判别分析(Linear Discriminant Analysis,LDA)是一种监督学习的降维技术也可以做分类任务,也就是说它的数据集的每个样本是有类别输出的,这点和PCA不同。PCA是不考虑样本类别输出的无监督降维技术。LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”,如下图所示。我们要将数据在低维度上进行投影,我们投影后希望

  1. 每一种类别数据的投影点尽可能的接近
  2. 不同类别的数据的类别中心之间的距离尽可能的大

LDA1.jpg

给定数据集数据降维 - 图67数据降维 - 图68

数据降维 - 图69类的集合数据降维 - 图70,第数据降维 - 图71类的均值向量数据降维 - 图72,第数据降维 - 图73类的协方差矩阵数据降维 - 图74数据降维 - 图75即一共就两类

两类样本的中心在直线数据降维 - 图76上的投影,即直线与原均值向量的内积数据降维 - 图77数据降维 - 图78。所有样本点都投影到直线上,则两类样本的协方差为数据降维 - 图79数据降维 - 图80

  1. 投影后类内方差最小,即数据降维 - 图81尽可能小
  2. 类间方差最大,即数据降维 - 图82尽可能大

同时考虑优化二者,则可得到欲最大化的目标:

数据降维 - 图83

定义“类内散度矩阵”:数据降维 - 图84

定义“类间散度矩阵”:数据降维 - 图85

所以,我们可将最大化目标函数数据降维 - 图86写为:

数据降维 - 图87

这就是LDA欲最大化的目标,即数据降维 - 图88数据降维 - 图89的“广义瑞利商”(Generalized Rayleigh Quotient)

如何确定数据降维 - 图90呢?注意到上式的分子和分母都是关于数据降维 - 图91的二次项,因此上式的解数据降维 - 图92的长度无关,只与其方向有关。不失一般性,令数据降维 - 图93,上式等价于

数据降维 - 图94

由拉格朗日乘子法,上式等价于

数据降维 - 图95

其中数据降维 - 图96是拉格朗日乘子。注意到数据降维 - 图97的方向恒为数据降维 - 图98,不妨令数据降维 - 图99代入上式

数据降维 - 图100

考虑到数值解的稳定性,在实践中通常是对数据降维 - 图101进行奇异值分解,即数据降维 - 图102,这里数据降维 - 图103是一个对角矩阵,其对角线上的元素是数据降维 - 图104的奇异值,然后再由数据降维 - 图105得到数据降维 - 图106。值得一提的是,LDA可从贝叶斯决策理论的角度来阐述,并可证明,当两类数据同先验,满足高斯分布且协方差相等时,LDA可达到最优分类。

多类别映射(分类)

若有很多类别,还是基于LDA基本思想,每个类间距离最大,类内距离最小。假定存在数据降维 - 图107个类,且第数据降维 - 图108类示例数为数据降维 - 图109,我们先定义“全局散度矩阵”:

数据降维 - 图110

其中数据降维 - 图111是所有示例的均值向量,将类内散度矩阵数据降维 - 图112重新定义为每个类别的散度矩阵之和,即

数据降维 - 图113

整理上面两式可得

数据降维 - 图114

显然,多分类LDA可以有多种实现方法:使用数据降维 - 图115数据降维 - 图116数据降维 - 图117三者中的任何两个即可,常见的一种实现是采用优化目标:

数据降维 - 图118

其中数据降维 - 图119,上式可通过广义特征值问题求解:数据降维 - 图120数据降维 - 图121的闭式解则是数据降维 - 图122数据降维 - 图123个最大非零广义特征值所对应的特征向量组成的矩阵,数据降维 - 图124

数据降维 - 图125视为一个投影矩阵,则多分类LDA将样本投影到数据降维 - 图126维空间。数据降维 - 图127通常远小于数据原有的属性数数据降维 - 图128于是,可通过这个投影来减少样本点的维数,且投影过程中采用了类别信息,因此LDA也常被视为一种经典的监督降维技术。

PCA vs. LDA

相同点

  1. 两者均可以对数据进行降维。
  2. 两者在降维时均使用了矩阵特征分解的思想。
  3. 两者都假设数据符合高斯分布。

不同点

  1. LDA是有监督的降维方法,而PCA是无监督的降维方法。
  2. LDA降维最多降到类别数k-1的维数,而PCA没有这个限制。
  3. LDA除了可以用于降维,还可以用于分类。
  4. LDA选择分类性能最好的投影方向,而PCA选择样本点投影具有最大方差的方向。这点可以从下图形象的看出,在某些数据分布下LDA比PCA降维较优。

PCA vs LDA.jpg

独立分量分析(ICA)

独立分量分析(Independent Component Analysis, ICA)的最重要的假设就是信号源统计独立,将数据转换为独立的分量,使用更少的分量来描述数据。这个假设在大多数盲信号分离的情况中符合实际情况。即使当该假设不满足时,仍然可以用独立成分分析来把观察信号统计独立化,从而进一步分析数据的特性。独立成分分析的经典问题是“鸡尾酒会问题”(Cocktail Party Problem)。该问题描述的是给定混合信号,如何分离出鸡尾酒会中同时说话的每个人的独立信号。当有数据降维 - 图130个信号源时,通常假设观察信号也有数据降维 - 图131个(例如数据降维 - 图132个麦克风或者录音机)。该假设意味着混合矩阵是个方阵,即数据降维 - 图133,其中数据降维 - 图134是输入数据的维数,数据降维 - 图135是系统模型的维数。对于数据降维 - 图136数据降维 - 图137的情况,学术界也分别有不同研究。

PCA和ICA之间的主要区别在于,PCA寻找不相关的因素,而ICA寻找独立因素。如果两个变量不相关,它们之间就没有线性关系。如果它们是独立的,它们就不依赖于其他变量。例如,一个人的年龄和他吃了什么/看了什么电视无关。该算法假设给定变量是一些未知潜在变量的线性混合。它还假设这些潜在变量是相互独立的,即它们不依赖于其他变量,因此它们被称为观察数据的独立分量。

经典的鸡尾酒宴会问题(cocktail party problem)。假设在party中有数据降维 - 图138个人,他们可以同时说话,我们也在房间中一些角落里共放置了数据降维 - 图139个声音接收器(Microphone)用来记录声音。宴会过后,我们从数据降维 - 图140个麦克风中得到了一组数据数据降维 - 图141数据降维 - 图142表示采样的时间顺序,也就是说共得到了数据降维 - 图143组采样,每一组采样都是数据降维 - 图144维的。我们的目标是单单从这数据降维 - 图145组采样数据中分辨出每个人说话的信号。有数据降维 - 图146个人说话,就是有数据降维 - 图147个信号源数据降维 - 图148每一维都是一个人的声音信号,每个人发出的声音信号独立。数据降维 - 图149是一个未知的混合矩阵(mixing matrix),用来组合叠加信号数据降维 - 图150,那么

数据降维 - 图151

这里的数据降维 - 图152不是一个向量,是一个矩阵。其中每个列向量是数据降维 - 图153,即下图

ICA1.jpg

数据降维 - 图155的每个分量都由数据降维 - 图156的分量线性表示。数据降维 - 图157数据降维 - 图158都是未知的,数据降维 - 图159是已知的,我们要想办法根据数据降维 - 图160来推出数据降维 - 图161。这个过程也称作盲信号分离。令数据降维 - 图162,则

数据降维 - 图163
数据降维 - 图164

最终得到

数据降维 - 图165,其数据降维 - 图166即说话人数据降维 - 图167数据降维 - 图168时刻发出的信号

我们需要知道两个量才能求出另外一个,下面我们进一步分析,先预处理(中心化、漂白)一下数据

中心化:求出数据降维 - 图169均值,然后所有数据降维 - 图170减去均值

漂白:目的是为了让数据降维 - 图171相互独立。将数据降维 - 图172乘以一个矩阵变成数据降维 - 图173(其协方差矩阵是数据降维 - 图174)

数据降维 - 图175,其中数据降维 - 图176

使用特征值分解来得到数据降维 - 图177(特征向量矩阵)和数据降维 - 图178(特征值对角矩阵),公式为数据降维 - 图179

ICA算法

我们假设每数据降维 - 图180有概率密度数据降维 - 图181,那么给定时刻原信号的联合分布就是

数据降维 - 图182,每个人发出的声音信号数据降维 - 图183各自独立

然后,我们就可以求得数据降维 - 图184

数据降维 - 图185

现在,我们需要知道数据降维 - 图186数据降维 - 图187,才能求得数据降维 - 图188,首先我们假设数据降维 - 图189的累积分布函数符合sigmoid函数

数据降维 - 图190,求导后数据降维 - 图191,这就是数据降维 - 图192的密度函数

然后,我们就剩下数据降维 - 图193需要求解了,使用最大似然估计的方法求解,使用前面得到的数据降维 - 图194的概率密度函数

数据降维 - 图195

上式括号里的其实就是数据降维 - 图196,最终,我们可求得

数据降维 - 图197,其中数据降维 - 图198是梯度上升速率,人为指定

迭代求出数据降维 - 图199后,我们就可以还原出原始信号

数据降维 - 图200

code实现

https://github.com/chmx0929/UIUCclasses/tree/master/598MachLrngforSignalProcessng/homework/homework2


非线性降维方法

对于像下图这样复杂一些的数据(比如我们有些”curvy”数据),线性降维的方法就解决不了

非线性降维1.png非线性降维2.png

核主成分分析(Kernel PCA)

假设我们有数据降维 - 图203数据降维 - 图204维线性不可分的数据数据降维 - 图205。我们引入一个非线性映射函数数据降维 - 图206,通过这个非线性映射函数可以将原来的线性不可分的样本映射到更高维度,在这个高维空间中,本来在原空间中线性不可分的样本现在线性可分了

kPCA.png

数据在这个高维度空间中线性可分了,这时候我们再用PCA,问题解决。即

kPCA2.png

每个特征值向量数据降维 - 图209都能从输入数据的线性组合得到:数据降维 - 图210,代入上式得高维度特征分解的表达式:

数据降维 - 图211

两边同时左乘数据降维 - 图212,并引入一个数据降维 - 图213的核函数数据降维 - 图214,即可得低维度特征分解表达式:

数据降维 - 图215
数据降维 - 图216,其中数据降维 - 图217数据降维 - 图218维核矩阵,数据降维 - 图219数据降维 - 图220维列向量

求解公式的含义就是求数据降维 - 图221最大的几个特征值所对应的特征向量,由于数据降维 - 图222为对称矩阵,所得的解向量彼此之间肯定是正交的。请注意,这里的数据降维 - 图223只是数据降维 - 图224的特征向量,但是其不是高维空间中的特征向量,回看数据降维 - 图225公式,高维空间中的特征向量数据降维 - 图226应该是由数据降维 - 图227进一步求出。

核函数

下面这张图位于第一、二象限内。我们关注红色的门,以及“北京四合院”这几个字下面的紫色的字母。我们把红色的门上的点看成是“+”数据,紫色字母上的点看成是“-”数据,它们的横、纵坐标是两个特征。显然,在这个二维空间内,“+”“-”两类数据不是线性可分的。

image.png

我们现在考虑核函数数据降维 - 图229,即“内积平方”。这里面数据降维 - 图230是二维空间中的两个点。

这个核函数对应着二维到三维空间的映射,它的表达式是:数据降维 - 图231,可以验证:

数据降维 - 图232
数据降维 - 图233

在P这个映射下,原来二维空间中的图在三维空间中的像是这个样子:image.png

image.png

注意到绿色的平面可以完美地分割红色和紫色,也就是说,两类数据在三维空间中变成线性可分的了。

而三维中的这个判决边界,再映射回二维空间中是这样的:
image.png

这是一条双曲线,它不是线性的。核函数的作用就是隐含着一个从低维空间到高维空间的映射,而这个映射可以把低维空间中线性不可分的两类点变成线性可分的。它们映射到的高维空间的维数也比例子(三维)高得多,甚至是无穷维的。这样,就可以期待原来并不线性可分的两类点变成线性可分的了。

在机器学习中常用的核函数,一般有这么几类,也就是LibSVM中自带的这几类:

  1. 线性:数据降维 - 图237
  2. 多项式:数据降维 - 图238
  3. Radial basis function:数据降维 - 图239
  4. Sigmoid:数据降维 - 图240

上面的例子是2.多项式核函数中数据降维 - 图241的情况。

核函数要满足的条件称为Mercer’s condition。在实用中,基本是试验各种核函数,并扫描其中的参数,选择效果最好的。所以说,至于什么样的核函数适用于什么样的问题还有待讨论。

多维缩放(MDS)

MDS1.png

若要求原始空间中样本的距离在低维空间中得以保持,如上图所示,即得到多维缩放(Multiple Dimensional Scaling,MDS)。假定数据降维 - 图243个样本在原始空间的距离矩阵为数据降维 - 图244,其第数据降维 - 图245数据降维 - 图246列的元素数据降维 - 图247为样本数据降维 - 图248数据降维 - 图249的距离。我们的目标是获得样本在数据降维 - 图250维空间的表示数据降维 - 图251,且任意两个样本在数据降维 - 图252维空间中欧氏距离等于原始空间中的距离,即数据降维 - 图253

数据降维 - 图254,其中数据降维 - 图255为降维后样本的内积矩阵,数据降维 - 图256,有

数据降维 - 图257

令降维后的样本数据降维 - 图258被中心化,即数据降维 - 图259。显然,矩阵数据降维 - 图260的行与列之和均为零,即数据降维 - 图261,易知

数据降维 - 图262 数据降维 - 图263 数据降维 - 图264

其中数据降维 - 图265表示矩阵的迹(trace),数据降维 - 图266,令

数据降维 - 图267 数据降维 - 图268 数据降维 - 图269

由上面所有式子可得

数据降维 - 图270

由此即可通过降维前后保持不变的距离矩阵数据降维 - 图271求取内积矩阵数据降维 - 图272

对矩阵数据降维 - 图273做特征值分解,数据降维 - 图274,其中数据降维 - 图275为特征值构成的对角矩阵,数据降维 - 图276数据降维 - 图277为特征向量矩阵。假定其中有数据降维 - 图278个非零特征值,它们构成的对角矩阵数据降维 - 图279,令数据降维 - 图280表示相应的特征向量矩阵,则数据降维 - 图281可表达为

数据降维 - 图282

在现实应用中为了有效降维,往往仅需降维后的距离与原始空间中的距离尽可能接近,而不必严格相等。此时可取数据降维 - 图283个最大特征值构成的对角矩阵数据降维 - 图284,令数据降维 - 图285表示相应特征向量矩阵,则数据降维 - 图286可表达为

数据降维 - 图287

算法步骤

输入:距离矩阵数据降维 - 图288,其元素数据降维 - 图289,为样本数据降维 - 图290数据降维 - 图291的距离;低维空间维数数据降维 - 图292
过程:

  1. 根据上面公式计算数据降维 - 图293数据降维 - 图294数据降维 - 图295
  2. 计算内积矩阵数据降维 - 图296
  3. 对矩阵数据降维 - 图297做特征分解
  4. 数据降维 - 图298数据降维 - 图299个最大特征所构成的对角矩阵,数据降维 - 图300为相应的特征向量矩阵

输出:矩阵数据降维 - 图301,每行是一个样本的低维坐标

等度量映射(ISOMAP)

等度量映射(Isometric Mapping,Isomap)的基本出发点,是认为低维流形嵌入到高维空间之后,直接在高维空间中计算直线距离具有误导性,因为高维空间中的直线距离在低维嵌入流形上是不可达的。我们利用流形在局部上与欧氏空间同胚这个性质,对每个点基于欧氏距离找出其近邻点,然后就能建立一个近邻连接图,图中近邻之间存在连接,而非近邻点之间不存在连接,于是,计算两点之间测地线距离的问题,就转变为计算近邻连接图上两点之间的最短路径问题。

在近邻连接图上计算两点间的最短路径,可采用著名Dijkstra算法或Floyd算法,在得到任意两点的距离之后,就可以通过MDS来获得样本点在低维空间中的坐标。

算法步骤

输入:样本集数据降维 - 图302;近邻参数数据降维 - 图303;低维空间维数数据降维 - 图304
过程:

  1. 数据降维 - 图305
    1. 确定数据降维 - 图306数据降维 - 图307近邻
    2. 数据降维 - 图308数据降维 - 图309近邻点之间的距离设置为欧氏距离,与其他店的距离设置为无穷大
  2. 数据降维 - 图310
  3. 调用最短路径算法(eg.Dijkstra)计算任意两样本点之间距离数据降维 - 图311
  4. 数据降维 - 图312作为MDS算法的输入
  5. 返回MDS算法的输出

输出:样本集数据降维 - 图313在低维空间的投影数据降维 - 图314

局部线性嵌入(LLE)

局部线性嵌入(Locally Linear Embedding,LLE)与Isomap试图保持近邻样本之间的距离不同,LLE试图保持邻域样本之间的线性关系。

LLE.png

即样本点数据降维 - 图316的坐标能通过它的领域样本数据降维 - 图317数据降维 - 图318数据降维 - 图319的坐标通过线性组合而重构出来,而这里的权值参数在低维和高维空间是一致的,即

数据降维 - 图320

第一步,先为每个样本数据降维 - 图321找到其近邻下标集合数据降维 - 图322,然后计算出基于数据降维 - 图323中的所有的样本点对数据降维 - 图324进行线性重构系数数据降维 - 图325,也就是找出每一个样本和其领域内的样本之间的线性关系

数据降维 - 图326

其中数据降维 - 图327数据降维 - 图328均为已知,令数据降维 - 图329数据降维 - 图330有闭式解

数据降维 - 图331

第二步,在低维空间领域重构系数数据降维 - 图332不变,去求每个样本在低维空间的坐标

数据降维 - 图333数据降维 - 图334

利用M矩阵,可以将问题写成

数据降维 - 图335

问题就成了对数据降维 - 图336矩阵进行特征分解,然后取最小的数据降维 - 图337个特征值对应的特征向量组成低维空间的坐标数据降维 - 图338

LLE2.pngLLE3.jpeg

t-分布随机近邻嵌入(t-SNE)

t-SNE(t-distributed stochastic neighbor embedding)是一种非线性降维算法,非常适用于高维数据降维到2维或者3维,进行可视化。我们看到t-SNE模型是非监督的降维,他跟kmeans等不同,他不能通过训练得到一些东西之后再用于其它数据(比如kmeans可以通过训练得到k个点,再用于其它数据集,而t-SNE只能单独的对数据做操作,也就是说他只有fit_transform,而没有fit操作)。t-SNE是由SNE(Stochastic Neighbor Embedding,SNE)发展而来。我们先介绍SNE的基本原理,之后再扩展到t-SNE。

SNE(Stochastic Neighbor Embedding)

SNE是通过仿射(affinitie)变换将数据点映射到概率分布上,主要包括两个步骤:

  1. SNE构建高维对象之间的概率分布,使得相似对象有更高的概率被选择,而不相似对象有较低的概率被选择
  2. SNE在低维空间里在构建这些点的概率分布,使得这两个概率分布之间尽可能的相似

SNE先将欧氏距离转换为条件概率来表达点与点之间的相似度。具体来说,给定数据降维 - 图341个高维数据数据降维 - 图342,先计算概率数据降维 - 图343,正比于数据降维 - 图344数据降维 - 图345之间的相似度(这种概率是我们自己构建的),即

数据降维 - 图346

数据降维 - 图347依据不同的数据降维 - 图348取值不同,此外因为我们关注的是两两之间的相似度,所以设置数据降维 - 图349。对于低维度下的数据降维 - 图350,我们可以指定高斯分布的方差为数据降维 - 图351,因此它们之间的相似度如下

数据降维 - 图352,同样设定数据降维 - 图353

如果姜维的效果比较好,局部特征保留完整,那么数据降维 - 图354,因此我们优化两个分布之间的距离KL散度,那么目标函数如下

数据降维 - 图355

这里的数据降维 - 图356表示了给定数据降维 - 图357下,其他所有数据点的条件概率分布。需要注意的是KL散度具有不对称性,在低维映射中不同距离对应的惩罚权重是不同的,具体来说:距离较远的两个点来表达距离较近的两个点会产生更大的cost,相反,用较近的两个点来表达较远的两个点产生的cost相对较小,即用较小的数据降维 - 图358来建模较大的数据降维 - 图359,cost为数据降维 - 图360,同样用较大的数据降维 - 图361来建模较大的数据降维 - 图362,cost为数据降维 - 图363,因此,SNE会倾向于保留数据中的局部特征。

首先,不同的点具有不同的数据降维 - 图364数据降维 - 图365的熵会随着数据降维 - 图366的增加而增加。SNE使用困惑度的概念,用二分搜索的方式来寻找一个最佳的数据降维 - 图367

困惑度:数据降维 - 图368,熵:数据降维 - 图369

困惑度可以解释为一个点附近的有效近邻点个数。SNE对困惑度的调整比较有鲁棒性,通常选在5至50之间,给定之后,使用二分搜索的方式寻找合适的数据降维 - 图370

那么核心问题就是如何求解梯度了,目标函数等价于数据降维 - 图371这个式子与softmax非常相似,我们知道softmax的目标函数是数据降维 - 图372,对应的梯度是数据降维 - 图373(注:这里的softmax中y表示label,p表示预估值)。同样我们可以推导SNE的目标函数中的数据降维 - 图374数据降维 - 图375下的条件概率情况的梯度是数据降维 - 图376,同样j在i下的条件概率的梯度是数据降维 - 图377,最后得到完整的梯度公式如下:

数据降维 - 图378

在初始化中,可以用较小的数据降维 - 图379下的高斯分布来进行初始化。为了加速优化过程和避免陷入局部最优解,梯度中需要使用一个相对较大的动量。即参数更新中除了当前梯度,还要引入之前的梯度累加的指数衰退项,如下:

数据降维 - 图380

这里的数据降维 - 图381表示迭代数据降维 - 图382次的解,数据降维 - 图383表示学习速率,数据降维 - 图384表示迭代数据降维 - 图385次的动量。

此外,在初始优化的阶段,每次迭代中可以引入一些高斯噪声,之后像模拟退火一样逐渐减小该噪声,可以用来避免陷入局部最优解。因此,SNE在选择高斯噪声,以及学习速率,什么时候开始衰减,动量选择等等超参数上,需要跑多次优化才可以。

t-SNE

尽管SNE提供了很好的可视化方法,但是他很难优化,而且存在”crowding problem”(拥挤问题),t-SNE在低维空间下使用更重长尾分布的t分布来避免crowding问题和优化问题。t-SNE与SNE不同主要如下:

  1. 使用对称版的SNE,简化梯度公式
  2. 低维空间下,使用数据降维 - 图386分布代替高斯分布表达两点之间的相似度

对称版SNE使用联合概率分布来替换条件概率分布,即数据降维 - 图387是高维空间里各个点的联合概率分布,数据降维 - 图388是低维空间下的,目标函数为:

数据降维 - 图389

这里的数据降维 - 图390数据降维 - 图391我们依旧设置为0,我们将这种SNE称之为对称SNE,因为假设了对于任意数据降维 - 图392数据降维 - 图393数据降维 - 图394,因此概率分布可以改写为:

数据降维 - 图395 数据降维 - 图396

这种表达方式使得整体简洁了很多,但是会有引入异常值的问题。比如数据降维 - 图397是异常值,那么数据降维 - 图398很会大,对应的所有的数据降维 - 图399数据降维 - 图400都会很小,导致低维映射下的数据降维 - 图401对cost影响很小。为了解决这个问题,我们将联合分布修正为:数据降维 - 图402,这保证了数据降维 - 图403,使得每个点对于cost都会有一定的贡献。对称SNE的最大优点是梯度计算变得简单,如下:

数据降维 - 图404

拥挤问题就是说各个簇聚集在一起,无法区分。比如有一种情况,高维度数据在降维到10维下,可以有很好的表达,但是降维到两维后无法得到可信映射,比如降维如10维中有11个点之间两两等距离的,在二维下就无法得到可信的映射结果(最多3个点)。进一步的说明,假设一个以数据点数据降维 - 图405为中心,半径为数据降维 - 图406数据降维 - 图407维球(三维空间就是球),其体积是按数据降维 - 图408增长的,假设数据点是在数据降维 - 图409维球中均匀分布的,我们来看看其他数据点与数据降维 - 图410的距离随维度增大而产生的变化。

sne_crowding.png

从上图可以看到,随着维度的增大,大部分数据点都聚集在数据降维 - 图412维球的表面附近,与点数据降维 - 图413的距离分布极不均衡。如果直接将这种距离关系保留到低维,就会出现拥挤问题。为了解决拥挤问题, Cook et al.(2007) 提出一种slight repulsion的方式,在基线概率分布(uniform background)中引入一个较小的混合因子数据降维 - 图414,这样数据降维 - 图415就永远不会小于数据降维 - 图416(因为一共了数据降维 - 图417个pairs),这样在高维空间中比较远的两个点之间的数据降维 - 图418总是会比数据降维 - 图419大一点。这种称之为UNI-SNE,效果通常比标准的SNE要好。优化UNI-SNE的方法是先让数据降维 - 图420为0,使用标准的SNE优化,之后用模拟退火的方法的时候,再慢慢增加数据降维 - 图421。直接优化UNI-SNE是不行的(即一开始数据降维 - 图422不为0),因为距离较远的两个点基本是一样的数据降维 - 图423(等于基线分布),即使数据降维 - 图424很大,一些距离变化很难在数据降维 - 图425中产生作用。也就是说优化中刚开始距离较远的两个聚类点,后续就无法再把他们拉近了。

对称SNE实际上在高维度下另外一种减轻”拥挤问题”的方法:在高维空间下,在高维空间下我们使用高斯分布将距离转换为概率分布,在低维空间下,我们使用更加偏重长尾分布的方式来将距离转换为概率分布,使得高维度下中低等的距离在映射后能够有一个较大的距离。

norm_t_dict.png

我们对比一下高斯分布和t分布(如上图),t分布受异常值影响更小,拟合结果更为合理,较好的捕获了数据的整体特征。使用了t分布之后的q变化,如下:

数据降维 - 图427

此外,t分布是无限多个高斯分布的叠加,计算上不是指数的,会方便很多。优化的梯度如下:

数据降维 - 图428
sne_norm_t_dist_cost.png

t-sne的有效性,也可以从上图中看到:横轴表示距离,纵轴表示相似度,可以看到,对于较大相似度的点,t分布在低维空间中的距离需要稍小一点;而对于低相似度的点,t分布在低维空间中的距离需要更远。这恰好满足了我们的需求,即同一簇内的点(距离较近)聚合的更紧密,不同簇之间的点(距离较远)更加疏远。总结一下,t-SNE的梯度更新有两大优势:

  1. 1、对于不相似的点,用一个较小的距离会产生较大的梯度来让这些点排斥开来。
  2. 2、这种排斥又不会无限大(梯度中分母),避免不相似的点距离太远。

算法过程

t-SNE算法.png

优化过程如下

t-sne_optimise.gif

主要不足:

主要用于可视化,很难用于其他目的。比如测试集合降维,因为他没有显式的预估部分,不能在测试集合直接降维;比如降维到10维,因为t分布偏重长尾,1个自由度的t分布很难保存好局部特征,可能需要设置成更高的自由度。

t-SNE倾向于保存局部特征,对于本征维数(intrinsic dimensionality)本身就很高的数据集,是不可能完整的映射到2-3维的空间。

t-SNE没有唯一最优解,且没有预估部分。如果想要做预估,可以考虑降维之后,再构建一个回归方程之类的模型去做。但是要注意,t-sne中距离本身是没有意义,都是概率分布问题。

训练太慢。有很多基于树的算法在t-sne上做一些改进

Source

https://github.com/chmx0929/UIUCclasses/tree/master/598MachLrngforSignalProcessng/Slide
https://zhuanlan.zhihu.com/p/43225794