数据降维

方法特性与流形介绍

方法特性

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

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

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

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

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

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

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

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

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

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

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

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

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

流形介绍

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

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

缺失值比率(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)

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

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

线性降维方法

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

主成分分析(PCA)

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

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

  1. 最大可分性:样本点在这个超平面上的投影能尽可能分开(最大方差理论)

  2. 最近重构性:样本点到这个超平面的距离都足够近(最小平方误差理论)

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

  1. 对样本数据进行中心化处理

  2. 求样本协方差矩阵

  3. 对协方差矩阵进行特征值分解(SVD),将特征值从大到小排列

线性判别分析(LDA)

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

  1. 每一种类别数据的投影点尽可能的接近

  2. 不同类别的数据的类别中心之间的距离尽可能的大

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

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

多类别映射(分类)

整理上面两式可得

PCA vs. LDA

相同点

1)两者均可以对数据进行降维。

2)两者在降维时均使用了矩阵特征分解的思想。

3)两者都假设数据符合高斯分布。

不同点

1)LDA是有监督的降维方法,而PCA是无监督的降维方法

2)LDA降维最多降到类别数k-1的维数,而PCA没有这个限制。

3)LDA除了可以用于降维,还可以用于分类。

4)LDA选择分类性能最好的投影方向,而PCA选择样本点投影具有最大方差的方向。这点可以从下图形象的看出,在某些数据分布下LDA比PCA降维较优。

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

最终得到

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

ICA算法

非线性降维方法

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

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

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

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

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

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

多维缩放(MDS)

由上面所有式子可得

算法步骤

  1. 过程:

等度量映射(ISOMAP)

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

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

算法步骤

  1. 过程:

  2. end for

  3. return MDS算法的输出

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

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

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. 1、SNE构建一个高维对象之间的概率分布,使得相似的对象有更高的概率被选择,而不相似的对象有较低的概率被选择。

  2. 2、SNE在低维空间里在构建这些点的概率分布,使得这两个概率分布之间尽可能的相似。

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

t-SNE

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

  1. 1、使用对称版的 SNE,简化梯度公式

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

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

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

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

  1. 1、对于不相似的点,用一个较小的距离会产生较大的梯度来让这些点排斥开来。

  2. 2、这种排斥又不会无限大(梯度中分母),避免不相似的点距离太远。

算法过程

优化过程如下

主要不足:

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

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

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

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

Source

Last updated