在机器学习中,主成分分析(PCA)或奇异值分解(SVD)的重要性。

38

在这段时间里(特别是在Netflix竞赛中),我经常看到一篇博客(或排行榜论坛),里面提到通过在数据上应用简单的SVD步骤,可以帮助减少数据的稀疏性或者一般地提高他们手头算法的性能。我一直在思考(很长时间了),但是我无法猜测为什么会这样。

一般来说,我得到的数据非常嘈杂(这也是大数据的有趣之处),然后我确实知道一些基本的特征缩放技巧,比如对数转换和均值归一化。

但是像SVD这样的东西怎么会有帮助呢?

假设我有一个巨大的用户评分电影矩阵...然后在这个矩阵中,我实现了某个版本的推荐系统(比如协同过滤):

1) Without SVD
2) With SVD

它如何帮助


1
“性能”指的是速度还是准确性? - Fred Foo
@larsmans 你好.. 我的意思是准确性。 - frazman
3个回答

52
SVD并不用于归一化数据,而是用于消除冗余数据,即降维。例如,如果您有两个变量,一个是湿度指数,另一个是降雨概率,则它们的相关性非常高,第二个变量对于分类或回归任务没有任何额外有用的信息贡献。 SVD中的特征值可帮助您确定哪些变量最具信息量,哪些可以省略。

其工作方式很简单。对训练数据(称为矩阵A)执行SVD,以获得U、S和V*。然后将所有小于某个任意阈值(例如0.1)的S值设置为零,称此新矩阵为S'。然后获得A'=US'V*,并使用A'作为新的训练数据。现在,您的某些特征已经被设置为零,并且可以删除,有时甚至不会影响性能(取决于数据和所选阈值)。这称为k截断SVD。

SVD无法帮助您解决稀疏性问题,只有当特征冗余时才有用。两个特征可能同时稀疏且对于预测任务有信息(相关),因此不能删除其中任何一个。

使用SVD,您可以从n个特征转换为k个特征,每个特征都是原始n的线性组合。这是一个降维步骤,就像特征选择一样。然而,当存在冗余特征时,特征选择算法可能会比SVD在数据集上表现更好(例如,最大熵特征选择)。Weka带有许多这样的算法。

参见:http://en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Dimensionality_Reduction/Singular_Value_Decomposition

https://stats.stackexchange.com/questions/33142/what-happens-when-you-apply-svd-to-a-collaborative-filtering-problem-what-is-th


5
虽然奇异值分解(SVD)确实可以进行降维,但它并不像你描述的那样是特征选择步骤。我认为它更常用于加速训练算法。 - Fred Foo
2
Andrew Ng在他的在线ML课程中将其描述为加速措施。 - Fred Foo
5
这并不是特征选择,因为从 nk 特征的 SVD 转换不一定会给出原始 n 特征集合中大小为 k 的子集。速度提升点很明显:如果要使用与特征数量成线性关系的优化程序来拟合分类器(大多数分类器都是如此),那么减少特征数量可以加快速度;假设您可以快速计算 SVD。此外,@Edouard 的答案在协同过滤方面更加直接。 - Fred Foo
@Diego,嗯,这不是特征选择,因为特征选择是从一堆可用的特征中选择子集的过程。而SVD并不是这样做,它将特征映射到较低的维度,但不一定选择特征的子集。 - Eddie Xie
有关下限应该是多少,是否有任何特定的准则?即,0.01值有多通用? - TayTay
显示剩余6条评论

16

奇异值分解通常用于通过低秩矩阵X_lr来近似矩阵X

  1. 计算SVD X = U D V^T
  2. 通过保留前k个奇异值并将其余奇异值设为零来形成矩阵D'
  3. 通过X_lr = U D' V^T形成矩阵X_lr

对于Frobenius norm(矩阵的等价于l2-norm),矩阵X_lr是矩阵X排名k的最佳逼近。使用这种表示方法在计算上很有效率,因为如果您的矩阵Xnn的且k << n,则可以仅使用(2n + 1)k个系数存储其低秩逼近(通过存储UD'V)。

这种技术常用于矩阵补全问题(如协同过滤),因为用户评分矩阵的真实矩阵被假定为低秩(或者可以很好地近似为低秩矩阵)。因此,你希望通过计算数据矩阵的最佳低秩逼近来恢复真实矩阵。然而,现在有更好的方法可以从嘈杂和缺失的观测中恢复低秩矩阵,即核范数最小化。例如可以参考E. Candes和T. Tao的论文凸松弛的威力:近似最优矩阵补全
(注:基于这种技术推导出的算法也会存储所估计矩阵的奇异值分解,但其计算方式不同。)

在这种方法下,如果X矩阵最初是m x n,则您的降秩矩阵仍将是m x n。如果您的目标是降维而不是矩阵完成,则使用U或V^T作为新的训练集(取决于X中样本是按行还是按列定向)而不是X_lr。 - bill_e

2
PCA或SVD在进行降维时会减少输入的数量。这不仅可以节省学习和/或预测的计算成本,有时还可以产生更加健壮的模型,虽然这些模型在统计意义上并不是最优的,但在噪声条件下具有更好的性能。
从数学上讲,简单的模型具有较小的方差,即它们不容易过拟合。欠拟合当然也可能是一个问题。这被称为偏差-方差困境。或者用爱因斯坦的话来说: 事情应该尽可能地简单,但不能太简单。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接