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



一直以来(特别是在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带来更好的分类性能(例如,最大熵特征选择)。韦卡带了一堆。

请参阅: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

奇异值分解通常用于通过低秩矩阵X_lr:来近似矩阵X
  1. 计算SVD X = U D V^T
  2. 通过保持k最大奇异值并将其他奇异值设置为零来形成矩阵D'
  3. X_lr = U D' V^T形成矩阵X_lr

对于Frobenius范数(矩阵的l2-范数的等价物),矩阵X_lr是矩阵X的秩k的最佳近似。使用这种表示在计算上是高效的,因为如果矩阵Xn乘以nk << n,则可以仅使用(2n + 1)k系数存储其低秩近似值(通过存储UD'V)。

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

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

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

从数学上讲,更简单的模型方差较小,即它们不太容易过拟合。当然,不合身也可能是个问题。这就是所谓的偏差-方差困境。或者,正如爱因斯坦用通俗易懂的话所说:事情应该尽可能简单,但不能更简单。

最新更新