问题标签 [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.
python - 大型稀疏矩阵上的快速非负矩阵分解
使用 Scikit-learn (v 0.15.2) 对大型稀疏矩阵(小于 1% 的值 > 0)进行非负矩阵分解。我想通过仅在矩阵的非零值上最小化错误来找到因子(即,不计算零条目的错误),并支持稀疏性。我不确定我正在尝试的内容是否有问题。scikit-learn 包的 NMF 和 ProjectedGradientNMF 以前对我很有效。但似乎当矩阵大小增加时,分解速度非常慢。
我说的是具有 > 10^10 个单元格的矩阵。对于具有 ~10^7 单元格的矩阵,我发现执行时间很好。
我使用的参数如下nmf_model = NMF(n_components = 100, init='nndsvd', random_state=0, tol = 0.01, sparseness='data')
:
当我尝试稍微不同的参数(更改为init=random
)时,我收到以下警告。警告后,脚本的执行将停止。
有没有办法让它更快并解决上述问题?我尝试过使用 numpy 稀疏矩阵(列和行稀疏),但令人惊讶的是 - 在我使用较小矩阵(~10^7 单元格)进行的测试中它更慢。
考虑到必须运行这种分解的多次迭代(以选择理想数量的因子和 k 折交叉验证),因此非常需要一种更快的方法来解决这个问题。
我也愿意接受不基于 sklearn 或 Pyhon 的包/工具的建议。我知道不鼓励提出有关包/工具选择的问题,但是对于这样一个特定的用例,了解该领域的其他人使用什么技术会非常有帮助。
apache-spark - MLlib MatrixFactorizationModel 推荐Products(user, num) 在某些用户上失败
我使用和现在使用来训练一个MatrixFactorizationModel
模型来获得最受推荐的产品,但是代码在某些用户上失败,并出现以下错误:ALS.train()
model.recommendProducts(user, num)
正如您在上面的第一行中看到的,我正在运行
代替
因为后者没有在我使用的 1.3.0 pyspark 中实现。无论如何,它正确地为某些用户返回了预测,但在其他用户上却失败了。
我知道它可能没有我要求的确切数量的预测,我希望它会返回更少。
matlab - Nonnegative Matrix Factorization: The Alternating Least Squares Method
I am trying to implement NMF with Alternating Least Squares method. I am just curious about the following basic implementation of the problem:
If I understand correctly, we can solve for each matrix equation stated in this pseudocode without nonnegativity constraints, with closed form solution and set the negative entries to 0, in a brute force way. Is this understanding correct? Is this a basic alternative to more complicated, constrained optimization problems, where we use projected gradient descent, for example? More importantly, if implemented in this basic way, will the algorithm have any practical value? I want to use NMF for variable reduction purposes and it is important that I use NMF, since my data is by definition non-negative. I am looking for opinions on this one.
linear-algebra - 要求解的集合线性方程组的最大大小?(X=AX+B)
这是一个非常普遍的问题,关于一组线性方程组的最大大小,由当今最快的硬件求解,形式为:
X = AX + B
A:NxN 浮点矩阵,它是稀疏的。
B:浮点数的 N 向量。
求解 X。
这变成了 X(IA) = B,正如我在这里读到的,最好使用分解(而不是矩阵求逆)来解决:
http://www.johndcook.com/blog/2010/01/19/dont-invert-that-matrix/
您是否了解自己或参考了基准测试或论文,该基准或论文使用当今最快的硬件为 N 提供了一些最大值?我见过的大多数基准测试都使用 N < 10,000。我正在考虑在一个月内处理 N>10x10^6 或更多。
请不仅考虑计算维度,还要考虑 A 的存储。这可能是一个问题:例如,假设 N = 1 x 10^6,对于完全密集的矩阵,存储将是 1x10^12 x 4 字节/(1024x1024x1024) = 4 Terrabytes,我想这是可以管理的。
最后,解决系统的方法是否可以并行化,以便我可以假设并行化 N 可以很大?
在此先感谢, bliako
python - 在推荐系统中预测缺失值
我正在尝试实现非负矩阵分解,以便为推荐引擎项目找到矩阵的缺失值。我正在使用 nimfa 库来实现矩阵分解。但似乎无法弄清楚如何预测缺失值。该矩阵中的缺失值用 0 表示。
但是给出的 ans 几乎与 a 相同,我无法预测零值。请告诉我使用哪种方法或任何其他可能的实现以及任何可能的资源。
我想使用这个函数来最小化预测值的错误。
错误=|| a - UV ||_F + c*||U||_F + c*||V||_F
其中 _F 表示 frobenius 范数
scala - 为什么recommendedProductsForUsers 不是 org.apache.spark.mllib.recommendation.MatrixFactorizationModel 的成员
我已经使用带有 ALS collaboratife 过滤 mllib 的 Spark 构建了推荐系统
我的代码段:
evrything 没问题,但我需要更改代码来满足要求,我从这里的 scala doc 中读到
我需要使用def recommendProducts
但是当我尝试我的代码时:
编译时出错:
也许任何人都可以帮助我
谢谢
注意:我使用 Spark 1.5.0
我的进口:
algorithm - 如何将此 MATLAB 代码推广到 Householder QR 分解
我正在寻求帮助,以概括我在 Householder QR 分解的第一步中所做的代码。我做了以下事情:
我已经尝试了以下步骤来完成其余的步骤:
但它没有用,它给出了一个错误,说明如下:
尝试访问 R1(5,3);索引超出范围,因为 size(R1)=[4,3]。
Householderfactorization 中的错误(第 33 行) beta=-sqrt(R1(k+j,k)'*R1(k+j,k));
所以我一直在尝试寻找另一种获取算法的方法,但我无法弄清楚如何做到这一点,我已经阅读了 Kincaid & Cheney 第一版的“数值分析”一书以获得澄清,但在阅读之后我更加困惑(我想执行书中的算法,因为它是我发现的最简单的算法,尽管有点令人困惑)。
有人可以帮我以正确的方式执行这个算法吗?
注意:这本书可以在这里找到,实际上是在第 253 页。所以问题是我想将第一个之后的部分的算法翻译成 MATLAB 代码(我说的是泛化),而该算法存在的问题是,当您要计算第二步并前进时,您必须考虑先前的矩阵,然后您必须将 A(:,1) 更改为 [R1(2,2),R1 (3,2),R1(4,2)]',然后使用这个新向量计算你在第一步中所做的一切,所以这个过程是我不知道如何将其转换为 MATLAB 的过程。第一步很容易,其他的对我来说很难。
matlab - matlab中qr分解算法的错误
我应该使用 Matlab 实现 QR 分解,然后在矩阵 A = [1 2; 1 1; 2 3; 2 2]。这是我到目前为止尝试编写的代码。但是我遇到了一些错误,我不确定问题出在哪里。谁能发现它?
vowpalwabbit - 无法反转哈希以获取带有矩阵分解的 vowpal wabbit 中的特征名称
--invert_hash 适用于回归模型,但是当我激活矩阵分解时,--readable_model 和--invert hash 的输出是相同的。我想查看每个用户或项目的潜在变量,但无法将它们与项目/用户的名称匹配。这个可重现的小样本并没有向您展示我的所有完整数据集,而是说明了这个问题:
结果如下所示:
这些行都不包含字符串“user1”、“user2”、“item1”或“item2”。我错过了什么吗?
还有一个问题,我在文档中找不到答案 - 为什么每个事件有 5 个潜在变量,因为 rank=2?
machine-learning - NMF 稀疏矩阵分析(使用 SKlearn)
只是在寻找一些简短的建议,让我回到正确的轨道上。我一直在研究一个问题的解决方案,其中我有一个非常稀疏的输入矩阵(大约 25% 的信息填充,其余为 0)存储在 sparse.coo_matrix 中:
在从我的数据集中构建这个数组并弄乱了一些其他选项之后,我目前将我的 NMF 模型拟合器函数定义如下:
现在,问题是我的输出似乎没有正确解释 0 值。任何为 0 的值都会被撞到小于 1 的某个值,并且我的已知值与实际值有很大的波动(所有数据都是 1 到 10 之间的评级)。谁能发现我做错了什么?从 scikit 的文档中,我假设使用 nndsvd 初始化将有助于解释正确的空值。样本输出:
感谢任何更有经验的 ML 编码员可以提供的任何建议!