37

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

1) Without SVD
2) With SVD

它有什么帮助

4

3 回答 3

51

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

于 2012-03-06T19:09:47.010 回答
16

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

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

对于Frobenius 范数(相当于矩阵的-norm),矩阵是矩阵X_lrrank 的最佳近似值。使用这种表示在计算上是有效的,因为如果你的矩阵是和,你可以只用系数存储它的低秩近似(通过存储 和)。kXl2Xnnk << n(2n + 1)kUD'V

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

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

于 2012-03-07T15:36:34.700 回答
2

PCA 或 SVD,当用于降维时,会减少输入的数量。除了节省学习和/或预测的计算成本外,有时还可以生成更稳健的模型,这些模型在统计意义上不是最优的,但在嘈杂的条件下具有更好的性能。

在数学上,更简单的模型具有较小的方差,即它们不太容易过度拟合。当然,欠拟合也可能是一个问题。这被称为偏差方差困境。或者,正如爱因斯坦所说的那样:事情应该尽可能简单,但不能简单。

于 2016-12-16T12:05:26.133 回答