正交非负矩阵分解如何应用在较大的数据中?
问题描述:
正交非负矩阵分解中需要计算矩阵和它转置的乘积,即BBT. 我这里的B是1400006,那么BBT就是140000140000了,这个矩阵太大,即使是浮点数也要73个G的内存,所以有没有什么办法可以解决这个问题那?
答
正交矩阵(Orthogonal Matrix)是指其转置等于其逆的矩阵。
所以AT*A =E
E为对角矩阵才用稀疏矩阵的存储办法 可以只存储方阵的阶数
答
使用分块矩阵,一块一块地算,需要推导一下。像我用GPU进行信号处理,两个矩阵都超过256G了,但显卡只有24G。要解决这个问题,还是不得不翻开线性代数那本书,以前忽略得太多了。
答
首先推荐的肯定是矩阵分块啊,比如分成长宽1000*1000的矩阵,然后乘以对应转置之后的位置上面的1000*1000位置上面的矩阵块,保存记录下位置然后结果保存下来,最后组合起来就是了。
图片只是写个大致的意思,具体的公式肯定不是这样子的,需要具体的推导一下。
另外一种就是老老实实用公式去遍历相加,每次计算一个数字,这种方式肯定不如上面来的块就是了