一直以来(特别是在Netflix竞赛中),我总是遇到这个博客(或排行榜论坛),他们提到在数据上应用简单的SVD步骤如何帮助他们减少数据稀疏性或总体上提高算法的性能。手。
我试图思考(很长时间以来),但我无法猜测为什么会这样。
总的来说,我手头的数据非常嘈杂(这也是bigdata的有趣部分),然后我知道一些基本的功能扩展内容,例如对数转换内容,均值归一化。
但是,像SVD这样的东西有什么帮助。
因此,假设我有一个庞大的用户评分电影矩阵。然后在该矩阵中,我实现了某些版本的推荐系统(例如协作过滤):

1) Without SVD
2) With SVD

有什么帮助

最佳答案

SVD不用于规范化数据,而是用于消除冗余数据,即用于降维。例如,如果您有两个变量,一个是湿度指数,另一个是下雨的概率,那么它们的相关性是如此之高,以至于第二个变量不会对分类或回归任务有用。 SVD中的特征值可帮助您确定哪些变量最有用,哪些变量您可以不使用。

它的工作方式很简单。您对训练数据执行SVD(称为矩阵A),以获得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

关于machine-learning - PCA或SVD在机器学习中的重要性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9590114/

10-12 19:27