我试图在非常稀疏的数据集上应用随机投影方法.我找到了关于Johnson Lindenstrauss方法的论文和教程,但是每一个方法都充满了方程式,对我没有任何有意义的解释.例如,关于Johnson-Lindenstrauss的这份文件
不幸的是,从这个文档中,我不知道算法的实现步骤.这是一个很长的镜头,但有谁能告诉我简单的英文版本或非常简单的算法伪代码?或者我在哪里可以开始挖掘这个方程式?有什么建议?
例如,通过阅读有关Johnson-Lindenstrauss的论文,我从算法中理解的是:
AxB矩阵,其中A是样本B数,是维数,例如100x5000.我想减小它的尺寸500,这将产生一个100x500矩阵.据我所知:首先,我需要构建一个100x500矩阵并随机填充条目+1和-1(概率为50%).
编辑:
好的,我想我开始明白了.因此,我们有一个矩阵A是mxn.我们希望减少它E是mxk.
我们需要做的是,建立一个矩阵R具有nxk尺寸,并与填充它0,-1或者+1,对于2/3,1/6和1/6概率.
在构造之后R,我们将简单地进行矩阵乘法AxR以找到我们的简化矩阵E.但我们并不需要做一个完整的矩阵乘法,因为如果一个元素Ri是0,我们不需要做计算.简单地跳过它.但是如果我们面对1,我们只需要添加列,或者如果是-1,只需从计算中减去它.所以我们只需使用求和而不是乘法来找到E.这就是使这种方法非常快的原因.
事实证明这是一个非常简洁的算法,虽然我觉得这个想法太愚蠢了.
我目前想要将一个大的稀疏矩阵(~1M x 200k)与其转置相乘.结果矩阵的值将是浮点数.
实现这种乘法的有效方法是什么?因为我在计算中看到了一个模式.
我想知道哪些库可以更快地实现计算.它可以是Python,R,C,C++或任何其他.
c++ python linear-algebra sparse-matrix matrix-multiplication
出于此目的,我现在使用该线程链接的解决方案,但是由于我的矩阵A大小为600万到40000矩阵,因此它给出了预期的内存错误.因此,我正在寻找任何其他解决方案来近似相关矩阵.我怎样才能为这个问题接种疫苗?任何帮助表示赞赏.