问题标签 [matrix-factorization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - Matrix factorization with ALS has very slow performance with implicit zeros for large matrices in R
I want to perform a Matrix factorization with alternating least squares (ALS) in R. While the code is working fine for small matrices, it is incredible slow for larger matrices. I would appreciate any help in speeding up the process. I am using RRopen 8.01, therefore it is already running on multiple cores using MKL
.
I am utilizing a binary matrix as implicit feedback matrix. Furthermore I implemented a weighting matrix.
Here is what I did:
I set the following parameter:
Create the initial matrices for users and items
And now I perform the Matrix Factorization with ALS
R.hat
is the desired end matrix.
w.err
is just a control for the errors over the iterations. Nice for plotting :)
The code as it is works fine. Just when I increase the number of rows and columns in R
(and W
), the performance decrease significantly. While it is fine for let's say nr=200, nr=500
, it is already running for two hours for nr=2000, nr=5000
(and not finished yet) on an 8 core 2.67 Ghz machine.
I didn't use the NMF
or the NMFN
package since negative values are possible, accordingly it is not an non-negative MF.
Does anyone has an idea how to increase performance? Maybe I am just stupid an my code is nonsense, i would be happy if you could point out improvements.
I looked for similar questions but couldn't find one. Maybe I just overlooked it.
apache-spark - MLlib 协同过滤生成 Top N 推荐
我一直在寻找一种方法来使用 MLlib 的 ALS 矩阵分解为所有用户生成前 n 条建议,但仍然没有成功。谁能告诉我这种方法存在吗?
recommendation-engine - 喜欢/不喜欢/未知数据的基于矩阵分解的推荐
大多数文献都关注显式评级数据或隐式(喜欢/未知)数据。是否有任何好的出版物来处理喜欢/不喜欢/未知的数据?也就是说,在数据矩阵中有三个值,我想从未知条目中推荐。
在这方面有什么好的开源实现吗?
谢谢。
algorithm - 使用置换矩阵对稀疏矩阵进行 Cholesky 分解
我对大型稀疏矩阵的 Cholesky 分解很感兴趣。我遇到的问题是 Cholesky 因子不一定是稀疏的(就像两个稀疏矩阵的乘积不一定是稀疏的)。
例如,对于仅沿第一行、第一列和对角线具有非零值的矩阵,Cholesky 因子具有 100% 填充(下三角形和上三角形是 100% 密集的)。在下图中,灰色非零,白色为零。
我知道的一种解决方案是找到一个排列P矩阵并对 P T AP进行 Cholesky 分解。例如,对于相同的矩阵,通过应用将第一行移动到最后一行并将第一列移动到最后一列的置换矩阵,Cholesky 因子是稀疏的。
我的问题是一般如何确定P?
要从更真实的矩阵中了解A和P T AP的 Cholesky 分解的差异,请参见下图。我从http://www.seas.ucla.edu/~vandenbe/103/lectures/chol.pdf拍摄了所有这些图片
根据讲义
存在许多用于选择好的置换矩阵 P 的启发式方法(我们没有介绍)。
我想知道其中一些方法是什么(C、C++ 甚至 Java 中的代码是理想的)。
java - Java中大型稀疏矩阵的Cholesky分解
我想在 Java 中对大型稀疏矩阵进行 Cholesky 分解。目前我正在使用Parallel Colt库类SparseDoubleCholeskyDecomposition但它比使用我在 C 中编写的密集矩阵代码要慢得多,我在 java 中使用 JNI。
例如,对于 5570x5570 的非零密度为 0.25% 的矩阵,使用 SparseDoubleCholeskyDecomposition 需要26.6 秒来分解,而我自己的使用密集存储的相同矩阵的代码只需要1.12 秒。但是,如果我将密度设置为 0.025%,那么 colt 库只需要 0.13 秒。
我还使用压缩行存储和 OpenMP 在 C 中编写了我自己的稀疏矩阵 Cholesky 分解,它也比 SparseDoubleCholeskyDecomposition 快很多,但仍然比我使用密集存储的算法慢。我可能可以进一步优化它,但无论如何 Cholesky 因子都很密集,因此它既不能解决速度问题,也不能解决存储问题。
但是我想要毫秒级的时间,我最终需要扩展到超过 10000x10000 的矩阵,所以即使是我自己的密集矩阵的密集代码也会变得太慢并且使用太多内存。
我有理由相信稀疏矩阵的 Cholesky 分解可以更快地完成并且使用更少的内存。也许我需要一个更好的 Java BLAS 库?是否有 Java 库可以有效地对稀疏矩阵进行 Cholesky 分解?也许我没有以最佳方式使用 Parallel Colt?
cuda - cublas中的Cholesky分解
我是 cuda 编程的新手。我想对小矩阵(8 * 8)执行 Cholesky 分解。是否有任何算法可以通过使用 CUBLAS 批处理函数来获得它
cuda 6.5 版
谢谢
python - sklearn 矩阵分解示例
我正在使用http://www.quuxlabs.com/blog当前给出的代码
它给出了很好的结果。而且我可以清楚地看到矩阵发生了哪些变化。
我也尝试在sklearn.decomposition.NMF使用 sklearn 库, 但是我用相同的输入得到的结果还不够好。也许我错过了一些东西。
这是我的示例代码 -
正如我使用博客中给出的代码所看到的,它没有维护矩阵中的现有/填充值。
谁能帮我理解!
c++ - 各种 b 的稀疏带状 Ax=b 的批量 CUDA 解决方案
我有一个稀疏带状矩阵 A,我想(直接)求解 Ax=b。我有大约 500 个向量 b,所以我想求解相应的 500 个 x。我是 CUDA 的新手,所以我对我有哪些可用选项感到有些困惑。
cuSOLVER 有一个批量直接求解器 cuSolverSP 用于稀疏 A_i x_i = b_i在这里使用 QR 。(我对 LU 也很好,因为 A 的条件很好。)但是,据我所知,我无法利用我所有的 A_i 都相同的事实。
另一种选择是首先在 CPU 或 GPU 上确定稀疏 LU (QR) 分解,然后在 GPU 上并行执行反向替换(分别为反向替换和矩阵 mult)?如果cusolverSp< t >csrlsvlu()用于一个 b_i,是否有标准方法可以为多个 b_i 批量执行此操作?
最后,由于我对此没有直觉,考虑到必要的开销,我是否应该期望这些选项中的任何一个在 GPU 上加速?x 的长度约为 10000-100000。谢谢。
scala - 在 Spark MLlib 中调试大型任务
在 Apache Spark (Scala shell) 中,我正在尝试:
其中训练是一个百万行的文件,分为 100 个分区,rank=20,numIter=20。
我收到一串形式的消息:
WARN scheduler.TaskSetManager: Stage 2175 contains a task of very large size (101 KB). The maximum recommended task size is 100 KB.
我该如何调试呢?我听说广播变量在减少任务大小方面很有用,但在这种情况下,除了 RDD 本身之外没有其他大变量,并且它已经被划分为许多块。
整个代码如下(从 Spark shell 运行):
代码
python - Sympy:在有限域中求解矩阵
对于我的项目,我需要在给定矩阵 Y 和 K 的情况下求解矩阵 X。 (XY=K) 每个矩阵的元素必须是模数为随机 256 位素数的整数。我第一次尝试解决这个问题时使用了 SymPy 的mod_inv(n)
函数。这样做的问题是我的内存不足,矩阵大小约为 30。我的下一个想法是执行矩阵分解,因为这可能会减少内存的负担。但是,SymPy 似乎不包含可以找到模数矩阵的求解器。我可以使用任何解决方法或自制代码吗?