机器学习算法08 - 降维学习

降维学习

在概率统计模块,我详细讲解了如何使用各种统计指标来进行特征的选择,降低用于监督式学习的特征之维度。接下来的几节,我会阐述两种针对数值型特征,更为通用的降维方法,它们是主成分分析 PCA(Principal Component Analysis)和奇异值分解 SVD(Singular Value Decomposition)。这两种方法是从矩阵分析的角度出发,找出数据分布之间的关系,从而达到降低维度的目的,因此并不需要监督式学习中样本标签和特征之间的关系。


主成分分析 PCA(Principal Component Analysis)

PCA 分析法的主要步骤

在解释这个方法之前,我先带你快速回顾一下什么是特征的降维。在机器学习领域中,我们要进行大量的特征工程,把物品的特征转换成计算机所能处理的各种数据。通常,我们增加物品的特征,就有可能提升机器学习的效果。可是,随着特征数量不断的增加,特征向量的维度也会不断上升。这不仅会加大机器学习的难度,还会影响最终的准确度。针对这种情形,我们需要过滤掉一些不重要的特征,或者是把某些相关的特征合并起来,最终达到在减少特征维度的同时,尽量保留原始数据所包含的信息。

PCA 分析法提出了一种可行的解决方案。它包括了下面这样几个主要的步骤:

  • 标准化样本矩阵中的原始数据;
  • 获取标准化数据的协方差矩阵;
  • 计算协方差矩阵的特征值和特征向量;
  • 依照特征值的大小,挑选主要的特征向量;
  • 生成新的特征。

假设我们获得了 k 个特征值和对应的特征向量,那么我们就有:

按照所对应的λ数值的大小,对这 k 组的 v 排序。排名靠前的 v 就是最重要的特征向量。

假设我们只取前 k1 个最重要的特征,那么我们使用这 k1 个特征向量,组成一个 n×k1 维的矩阵 D。

把包含原始数据的 m×n 维矩阵 X 左乘矩阵 D,就能重新获得一个 m×k1 维的矩阵,达到了降维的目的。

有的时候,我们无法确定 k1 取多少合适。一种常见的做法是,看前 k1 个特征值的和占所有特征值总和的百分比。假设一共有 10 个特征值,总和是 100,最大的特征值是 80,那么第一大特征值占整个特征值之和的 80%,我们认为它能表示 80% 的信息量,还不够多。那我们就继续看第二大的特征值,它是 15,前两个特征值之和有 95,占比达到了 95%,如果我们认为足够了,那么就可以只选前两大特征值,把原始数据的特征维度从 10 维降到 2 维。

为什么要使用协方差矩阵?

首先要回答的第一个问题是,为什么我们要使用样本数据中,各个维度之间的协方差,来构建一个新的协方差矩阵?要弄清楚这一点,首先要回到 PCA 最终的目标:降维。降维就是要去除那些表达信息量少,或者冗余的维度。

我们首先来看如何定义维度的信息量大小。这里我们认为样本在某个特征上的差异就越大,那么这个特征包含的信息量就越大,就越重要。相反,信息量就越小,需要被过滤掉。很自然,我们就能想到使用某维特征的方差来定义样本在这个特征维度上的差异。

另一方面,我们要看如何发现冗余的信息。如果两种特征是有很高的相关性,那我们可以从一个维度的值推算出另一个维度的值,所表达的信息就是重复的。在概率和统计模块,我介绍过多个变量间的相关性,而在实际运用中,我们可以使用皮尔森(Pearson)相关系数,来描述两个变量之间的线性相关程度。这个系数的取值范围是 [-1,1],绝对值越大,说明相关性越高,正数表示正相关,负数表示负相关。

皮尔森系数计算公式如下:

其中 n 表示向量维度,xk,i 和 xk,j 分别为两个特征维度 i 和 j 在第 k 个采样上的数值。 x¯,i 和 x¯,j 分别表示两个特征维度上所有样本的均值,σx 和 σy 分别表示两个特征维度上所有样本的标准差。

我把皮尔森系数的公式稍加变化,你来观察一下皮尔森系数和协方差之间的关系。

你看,变换后的分子不就是协方差吗?而分母类似于标准化数据中的分母。所以在本质上,皮尔森相关系数和数据标准化后的协方差是一致的。

考虑到协方差既可以衡量信息量的大小,也可以衡量不同维度之间的相关性,因此我们就使用各个维度之间的协方差所构成的矩阵,作为 PCA 分析的对象。就如前面说讲述的,这个协方差矩阵主对角线上的元素是各维度上的方差,也就体现了信息量,而其他元素是两两维度间的协方差,也就体现了相关性。

为什么要计算协方差矩阵的特征值和特征向量?

关于这点,我们可以从两个角度来理解。

第一个角度是对角矩阵。所谓对角矩阵,就是说只有矩阵主对角线之上的元素有非 0 值,而其他元素的值都为 0。我们刚刚解释了协方差矩阵的主对角线上,都是表示信息量的方差,而其他元素都是表示相关性的协方差。既然我们希望尽可能保留大信息量的维度,而去除相关的维度,那么就意味着我们希望对协方差进行对角化,尽可能地使得矩阵只有主对角线上有非 0 元素。

假如我们确实可以把矩阵尽可能的对角化,那么对角化之后的矩阵,它的主对角线上元素就是、或者接近矩阵的特征值,而特征值本身又表示了转换后的方差,也就是信息量。而此时,对应的各个特征向量之间是基本正交的,也就是相关性极低甚至没有相关性。

第二个角度是特征值和特征向量的几何意义。在向量空间中,对某个向量左乘一个矩阵,实际上是对这个向量进行了一次变换。在这个变换的过程中,被左乘的向量主要发生旋转和伸缩这两种变化。如果左乘矩阵对某一个向量或某些向量只发生伸缩变换,不对这些向量产生旋转的效果,那么这些向量就称为这个矩阵的特征向量,而伸缩的比例就是特征值。换句话来说,某个矩阵的特征向量表示了这个矩阵在空间中的变换方向,这些方向都是趋于正交的,而特征值表示每个方向上伸缩的比例

如果一个特征值很大,那么说明在对应的特征向量所表示的方向上,伸缩幅度很大。这也是为什么,我们需要使用原始的数据去左乘这个特征向量,来获取降维后的新数据。因为这样做可以帮助我们找到一个方向,让它最大程度地包含原有的信息。需要注意的是,这个新的方向,往往不代表原始的特征,而是多个原始特征的组合和缩放。

小结

这一节,我首先简要地重温了为什么有时候需要进行特征的降维和基于分类标签的特征选择。随后,我引出了和特征选择不同的另一种方法,基于矩阵操作的 PCA 主成分分析。这种方法的几个主要步骤包括,标准化原始数据、获得不同特征的协方差矩阵、计算协方差矩阵的特征值和特征向量、选择最重要的主成分,以及通过所选择的主成分来转换原始的数据集。

要理解 PCA 分析法是有一定难度的,主要是因为两点原因:第一,计算的步骤有些复杂。第二,这个方法的核心思路有些抽象。这两点可能会让刚刚接触 PCA 的学习者,感到无从下手。

这两节,我详细讲解了 PCA 主成分分析法,它是一种针对数值型特征、较为通用的降维方法。和特征选择不同,它并不需要监督式学习中的样本标签,而是从不同维度特征之间的关系出发,进行了一系列的操作和分析。主要步骤包括,标准化原始的数据矩阵、构建协方差矩阵、计算这种协方差矩阵的特征值和特征向量、挑选较大特征值所对应的特征向量、进行原始特征数据的转换。如果排名靠前的特征向量,或者说主成分,已经包括了足够的信息量,那么我们就可以通过选择较少的主成分,对原始的样本矩阵进行转换,从而达到降维的目的。

PCA 方法一开始不是很好理解,其主要的原因之一是它背后的核心思想并不是很直观。为此,我详细解释了为什么 PCA 会从标准化和协方差入手来构建协方差矩阵。对于同类的特征来说,标准化之后的协方差就是方差,表示了这一维特征所包含的信息量。而对于不同类的特征来说,标准化之后的协方差体现了这两维特征的相关性。鉴于这两个特性,我们需要求解协方差矩阵的特征值和特征向量。如果你弄清楚了这几个关键点,那么 PCA 方法也就不难理解了。

机器学习基本算法之一的主成分分析的基本原理,也介绍了另一种降维技术特征选择,其要点如下:

  • 主成分分析利用正交变换将可能存在相关性的原始属性转换成一组线性无关的新属性,并通过选择重要的新属性实现降维;
  • 主成分分析的解满足最大方差和最小均方误差两类约束条件,因而具有最大可分性和最近重构性;
  • 特征选择则是选取原始特征中的一个子集用于学习任务,是另一种主要的降维技术;
  • 特征选择的关键问题是对特征子集的评价,主要的特征选择算法包括包裹法、过滤法和嵌入法。

降维操作实质上体现出的是主要矛盾和次要矛盾的取舍问题。在资源有限的条件下,一定要优先解决主要矛盾。


奇异值分解 SVD(Singular Value Decomposition)

SVD 奇异值分解

今天,我们来聊另一种降维的方法,SVD 奇异值分解(Singular Value Decomposition)。它的核心思路和 PCA 不同。PCA 是通过分析不同纬特征之间的协方差,找到包含最多信息量的特征向量,从而实现降维。而 SVD 这种方法试图通过样本矩阵本身的分解,找到一些“潜在的因素”,然后通过把原始的特征维度映射到较少的潜在因素之上,达到降维的目的。

方阵的特征分解

方阵(Square Matrix)是一种特殊的矩阵,它的行数和列数相等。如果一个矩阵的行数和列数都是 n,那么我们把它称作 n 阶方阵。

如果一个矩阵和其转置矩阵相乘得到的是单位矩阵,那么它就是一个酉矩阵(Unitary Matrix)。

X′X=I

其中 X’表示 X 的转置,I 表示单位矩阵。换句话说,矩阵 X 为酉矩阵的充分必要条件是 X 的转置矩阵和 X 的逆矩阵相等。

之前我们说过特征向量表示了矩阵变化的方向,而特征值表示了变化的幅度。实际上,通过特征值和特征矩阵,我们还可以把矩阵 X 进行特征分解(Eigendecomposition)。这里矩阵的特征分解,是指把矩阵分解为由其特征值和特征向量表示的矩阵之积的方法。如果我们求出了矩阵 X 的 k 个特征值 λ1,λ2,…,λn 以及这 n 个特征值所对应的特征向量 v1,v2,…,vn,那么就有 XV=VΣ。

其中,V 是这 n 个特征向量所张成的 n×n 维矩阵,而 Σ 为这 n 个特征值为主对角线的 n×n 维矩阵。进一步推导,我们可以得到:

矩阵的奇异值分解

SVD 分解和特征分解相比,在形式上是类似的。假设矩阵 X 是一个 m×n 维的矩阵,那么 X 的 SVD 为 X=UΣV′。

转化为方阵

左奇异向量:矩阵 XX’ 的 m 个特征值和对应的 m 个特征向量 u。通过 XX’的所有特征向量构造一个 m×m 的矩阵 U。

右奇异向量:矩阵 X′X 的 n 个特征值和对应的 n 个特征向量 v。通过 X’X 的所有特征向量构造一个 n×n 维的矩阵 V。

现在,包含左右奇异向量的 U 和 V 都求解出来了,只剩下奇异值矩阵 Σ 了。之前我提到,Σ 除了对角线上是奇异值之外,其他位置的元素都是 0,所以我们只需要求出每个奇异值 σ 就可以了。这个解可以通过下面的公式推导求得:

其中 vi 和 ui 都是列向量。一旦我们求出了每个奇异值 σ,那么就能得到奇异值矩阵 Σ。

潜在语义分析和 SVD

潜在语义分析 LSA(Latent Semantic Analysis)或者叫潜在语义索引 LSI(Latent Semantic Index)。

和一般的向量空间模型有所不同,LSA 通过词条和文档所组成的矩阵,发掘词和词之间的语义关系,并过滤掉原始向量空间中存在的一些“噪音”,最终提高信息检索和机器学习算法的精确度。LSA 主要包括以下这些步骤。

  • 第一步,分析文档集合,建立表示文档和词条关系的矩阵。
  • 第二步,对文档 - 词条矩阵进行 SVD 奇异值分解。在 LSA 的应用场景下,分解之后所得到的奇异值σ对应了一个语义上的“概念”,而 σ 值的大小表示这个概念在整个文档集合中的重要程度。U 中的左奇异值向量表示了每个文档和这些语义“概念”的关系强弱,V 中的右奇异值向量表示每个词条和这些语义“概念”的关系强弱。所以说,SVD 分解把原来的词条 - 文档关系,转换成了词条 - 语义概念 - 文档关系。

我画了一张图帮助你理解这个过程。

在这种图中,我们有一个 7×5 维的矩阵 X,表示 7 个文档和 5 个单词。经过 SVD 分解之后,我们得到了两个主要的语义概念,一个概念描述了计算机领域,另一个概念描述了医学领域。矩阵 U 描述文档和这两个概念之间的关系,而矩阵 V’ 描述了各个词语和这两个概念之间的关系。如果要对文档进行检索,我们可以使用 U 这个降维之后的矩阵,找到哪些文档和计算机领域相关。同样,对于聚类算法,我们也可以使用 U 来判断哪些文档属于同一个类。

  • 第三步,对 SVD 分解后的矩阵进行降维,这个操作和 PCA 主成分分析的降维操作是类似的。
  • 第四步,使用降维后的矩阵重新构建概念 - 文档矩阵,新矩阵中的元素不再表示词条是不是出现在文档中,而是表示某个概念是不是出现在文档中。

总的来说,LSA 的分解,不仅可以帮助我们找到词条之间的语义关系,还可以降低向量空间的维度。在这个基础之上在运行其他的信息检索或者机器学习算法,就更加有效。

总结

之前介绍的 PCA 主成分分析,要求矩阵必须是对称的方阵,因此只适用于刻画特征之间关系的协方差矩阵。但是,有的时候我们需要挖掘的是样本和特征之间的关系,例如文档和词条。这个时候矩阵并不是对称的方阵,因此无法直接使用 PCA 分析。

为此,SVD 奇异值分解提供了一种可行的方案。它巧妙的运用了矩阵 X 和自己的转置相乘,生成了两种对称的方阵,并通过这两者的特征分解,获得了 SVD 中的左奇异向量所组成的矩阵 U 和右奇异向量所组成的矩阵 V,并最终推导出奇异值矩阵Σ。这样,SVD 就可以对原始的数据矩阵进行分解,并运用最终的奇异向量进行降维。

我们可以把 SVD 运用在很多场合中,在不同的应用场景下,U,V 和 Σ 代表了不同的含义。例如,在 LSA 分析中,通过对词条和文档矩阵的 SVD 分解,我们可以利用 Σ 获得代表潜在语义的一些概念。而矩阵 U 表示了这些概念和文档之间的关系,矩阵 V 表示了这些概念和单个词语之间的关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值