2019-05-03

SVD奇艺值分解看了一段时间了,对线性代数也理解了一部分。今天重温了一下,PDF/Singular_Value_Decomposition_Tutorial,写一下觉得比较重要的内容:

第一张自汇图,丑了点。矩阵A与向量v的乘法理解

Singular value decomposition (SVD) can be looked at from three mutually compatible points of view. On the one hand, we can see it as a method for transforming correlated variables into a set of uncorrelated ones that better expose the various relationships among the original data items. 这句有点难以理解,若干点(原始数据)从一组基转换到另一组基下的表示,能够更清楚地反应出原始数据之间的关系。At the same time, SVD is a method for identifying and ordering the dimensions along which data points exhibit the most variation新的基下展示了更大的变化. This ties in to the third way of viewing SVD, which is that once we have identified where the most variation is, it’s possible to find the best approximation of the original data points using fewer dimensions. Hence, SVD can be seen as a method for data reduction.

Reduced singular value decomposition is the mathematical technique underlying a type of document retrieval文档检索 and word similarity词相似method variously called Latent Semantic Indexing 潜在语义索引or Latent Semantic Analysis 潜在语义分析. 

    (抄袭一段:https://www.cnblogs.com/donaldlee2008/p/5237100.html)奇异值的计算是一个难题,是一个O(N^3)的算法。在单机的情况下当然是没问题的,matlab在一秒钟内就可以算出1000 * 1000的矩阵的所有奇异值,但是当矩阵的规模增长的时候,计算的复杂度呈3次方增长,就需要并行计算参与了。Google的吴军老师在数学之美系列谈到SVD的时候,说起Google实现了SVD的并行化算法,说这是对人类的一个贡献,但是也没有给出具体的计算规模,也没有给出太多有价值的信息。

    其实SVD还是可以用并行的方式去实现的,在解大规模的矩阵的时候,一般使用迭代的方法,当矩阵的规模很大(比如说上亿)的时候,迭代的次数也可能会上亿次,如果使用Map-Reduce框架去解,则每次Map-Reduce完成的时候,都会涉及到写文件、读文件的操作。个人猜测Google云计算体系中除了Map-Reduce以外应该还有类似于MPI的计算模型,也就是节点之间是保持通信,数据是常驻在内存中的,这种计算模型比Map-Reduce在解决迭代次数非常多的时候,要快了很多倍。

你可能感兴趣的:(2019-05-03)