十一城

跬步千里,小流江海。

Home Linux ML Python Java Thoughts KmKg BookCan Links About

2018-02-18
机器学习-降维

• 分类: ml • 标签:

PCA与SVD的关系

PCA与SVD不是一个回事,但是本质上是一样的。

PCA的理论基础是SVD。

PCA可以看作是截断SVD,因为我们只选取了权重大(解释性大)的前$k$个主成分而舍弃其他成分。

PCA-Principal components analysis-1901

在多元统计分析中,主成分分析(PCA)是一种分析、简化数据集的技术。主成分分析经常用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但是,这也不是一定的,要视具体应用而定。由于主成分分析依赖所给数据,所以数据的准确性对分析结果影响很大。PCA是最简单的以特征量分析多元统计分布的方法。通常情况下,这种运算可以被看作是揭露数据的内部结构,从而更好的解释数据的变量的方法。如果一个多元数据集能够在一个高维数据空间坐标系中被显现出来,那么PCA就能够提供一幅比较低维度的图像,这幅图像即为在讯息最多的点上原对象的一个‘投影’。这样就可以利用少量的主成分使得数据的维度降低了。

PCA有两种通俗易懂的解释,

  1. 是最大化投影后数据的方差(让数据更分散)

  2. 是最小化投影造成的损失

这两个思路最后都能推导出同样的结果。

PCA的几个缺点:

  1. PCA依赖于线性假设
  2. PCA是正交的
  3. PCA让方差尽可能大

SVD——PCA的实现

奇异值分解(singular value decomposition)是线性代数中一种重要的矩阵分解,在信号处理统计学等领域有重要应用。奇异值分解在某些方面与对称矩阵厄米矩陣基于特征向量对角化类似。然而这两种矩阵分解尽管有其相关性,但还是有明显的不同。对称阵特征向量分解的基础是谱分析,而奇异值分解则是谱分析理论在任意矩阵上的推广。

$$
X=UΣV^∗
$$

其中$U$是$m×m$阶酉矩阵;$Σ$是$m×n$阶非负实数对角矩阵;而$V^*$,即$V$的共轭转置,是$n×n$阶酉矩阵。这样的分解就称作X的奇异值分解。

  1. $V$的列(columns)组成一套对$X$的正交“输入”或“分析”的基向量。这些向量是$X^TX$的特征向量。
  2. $U$的列(columns)组成一套对$X$的正交“输出”的基向量。这些向量是$XX^T$的特征向量。
  3. $Σ$对角线上的元素是奇异值,可视为是在输入与输出间进行的标量的”膨胀控制”。这些是$X^TX$及$XX^T$的特征值的非零平方根,并与$U$和$V$的行向量相对应。

SVD其实是众多矩阵分解的一种,除了在PCA上使用,也有用于推荐,在推荐领域的svd算法形式上并不能和标准的奇异值分解对应上,但其思路是相通的,具体可以参考协同过滤算法实现

SVD只是一种矩阵分解或者说降维的方法,其实我们是借用它的特性来近似计算item-item之间或者user-user之间的相似度,以此作为推荐的依据。SVD是一种有损的压缩,让你可以在低维情况下近似出矩阵在高维时候的状态。那么,问题就很好理解了,你不做降维也可以,只要能保证在千万维的数据上也能从容的降噪以及做相似度的计算。

LDA-Linear Discriminant Analysis

线性判别分析 (LDA)是对费舍尔的线性鉴别方法的归纳,这种方法使用统计学模式识别机器学习方法,试图找到两类物体或事件的特征的一个线性组合,以能够特征化或区分它们。所得的组合可用来作为一个线性分类器,或者,更常见的是,为后续的分类做降维处理。

LDA与方差分析(ANOVA)和回归分析紧密相关,这两种分析方法也试图通过一些特征或测量值的线性组合来表示一个因变量。然而,方差分析使用类别自变量和连续数因变量,而判别分析连续自变量和类别因变量(即类标签)。 逻辑回归和概率回归比方差分析更类似于LDA,因为他们也是用连续自变量来解释类别因变量的。LDA的基本假设是自变量是正态分布的,当这一假设无法满足时,在实际应用中更倾向于用上述的其他方法。

LDA也与主成分分析(PCA)和因子分析紧密相关,它们都在寻找最佳解释数据的变量线性组合。LDA明确的尝试为数据类之间不同建立模型。 另一方面,PCA不考虑类的任何不同,因子分析是根据不同点而不是相同点来建立特征组合。判别的分析不同因子分析还在于,它不是一个相互依存技术:即必须区分出自变量和因变量(也称为准则变量)的不同。

在对自变量每一次观察测量值都是连续量的时候,LDA能有效的起作用。当处理类别自变量时,与LDA相对应的技术称为判别反应分析。

自编码器

自编码器(autoencoder)是一种用于降维的神经网络。

参考

  1. http://blog.csdn.net/dark_scope/article/details/53150883

dzzxjl

Home Linux ML Python Java Thoughts KmKg BookCan Links About