PCA或SVD在机器学习中的重要性

Moh*_*hit 35 machine-learning netflix data-mining svd bigdata

所有这些时间(特别是在Netflix竞赛中),我总是遇到这个博客(或排行榜论坛),他们提到如何通过对数据应用简单的SVD步骤帮助他们减少数据的稀疏性或者通常提高他们的算法的性能手.我想(很久以来),但我无法猜测为什么会如此.一般来说,我得到的数据非常嘈杂(这也是bigdata的有趣部分),然后我知道一些基本的功能扩展,如日志转换的东西,平均规范化.但是像SVD这样的东西有什么帮助.所以,假设我有一个巨大的用户评级电影矩阵......然后在这个矩阵中,我实现了一些推荐系统版本(比如协同过滤):

1) Without SVD
2) With SVD
Run Code Online (Sandbox Code Playgroud)

它是如何帮助谢谢的

Die*_*ego 50

SVD不用于标准化数据,而是用于去除冗余数据,即降低维数.例如,如果您有两个变量,一个是湿度指数,另一个是降雨概率,那么它们的相关性非常高,第二个变量不会对分类或回归任务有用的任何其他信息做出贡献.SVD中的特征值可帮助您确定哪些变量信息最丰富,哪些变量可以不用.

它的工作方式很简单.您对训练数据执行SVD(称之为矩阵A),以获得U,S和V*.然后将S的所有值设置为零,使其小于某个任意阈值(例如0.1),调用此新矩阵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

  • 虽然SVD确实可以减少维数,但它并不是您描述的功能选择步骤.我相信它更常用于加速训练算法. (5认同)
  • 这不是特征选择,因为从*n*到*k*特征进行SVD​​不一定会给出原始*n*特征的大小*k*的子集.加速点是显而易见的:如果分类器必须使用具有线性特征数量(大多数是)的复杂度的优化例程,那么较少数量的特征会提高速度; 假设您可以快速计算SVD.此外,@ Edouard的回答似乎更接近wrt.协同过滤. (5认同)
  • Andrew Ng在他的在线[ML课程](http://www.ml-class.org/)中将其描述为一种加速措施. (2认同)

Edo*_*ard 16

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

  1. 计算SVD X = U D V^T.
  2. D'通过保持k最大的奇异值并将其他值设置为零来形成矩阵.
  3. 形成矩阵X_lr通过X_lr = U D' V^T.

该矩阵X_lr是则秩的最佳近似k的矩阵X,对于Frobenius范数(的等效l2范数为矩阵).它是计算效率使用这种表示,因为如果你的矩阵Xnnk << n,你可以存储只有低等级近似(2n + 1)k系数(通过存储U,D'V).

这通常用于矩阵完成问题(例如协同过滤),因为假设用户评级的真实矩阵是低等级的(或者通过低等级矩阵很好地近似).因此,您希望通过计算数据矩阵的最佳低秩近似来恢复真实矩阵.然而,现在有更好的方法从嘈杂和缺失的观测中恢复低秩矩阵,即核规范最小化.参见例如论文凸松弛的力量: E. Candes和T. Tao的近似最优矩阵完成.

(注意:从该技术派生的算法也存储估计矩阵的SVD,但计算方式不同).