问题标签 [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.

0 投票
3 回答
320 浏览

apache-spark - 如何将 Sparks MatrixFactorizationModel 推荐ProductsForUsers 保存到 Hbase

我是 spark 的新手,我想将推荐产品ForUsers 的输出保存到 Hbase 表。我找到了一个示例(https://sparkkb.wordpress.com/2015/05/04/save-javardd-to-hbase-using-saveasnewapihadoopdataset-spark-api-java-coding/)显示使用 JavaPairRDD 和 saveAsNewAPIHadoopDataset 来保存.

如何转换JavaRDD<Tuple2<Object, Rating[]>>JavaPairRDD<ImmutableBytesWritable, Put>以便可以使用 saveAsNewAPIHadoopDataset?

0 投票
1 回答
1554 浏览

r - 使用非负矩阵分解 (IntNMF) 进行聚类:如何处理“维度为零”错误

使用IntNMF我想在数据集中查找集群的包。我的数据是一个稀疏矩阵(80-90% 零),行中的主题和列中的特征。出于某种原因,我收到一个错误,我无法弄清楚为什么或该怎么做。

我得到的错误是:

我认为稀疏不是问题,也许是。我对 NMF 或IntNMF包还不是很熟悉,所以任何提示都表示赞赏。

0 投票
1 回答
504 浏览

r - R中NMF包的加权NMF自定义目标函数

似乎NMFR 包(v0.22)还不允许开箱即用的加权非负矩阵分解(WNMF),但欢迎使用自定义算法(此处为第 25 页)。我正在尝试,但不确定我是否在正确的轨道上。有没有人已经实现了自定义算法nmf()?任何可以让我开始使用 WNMF 的草图示例?考虑:

WNMF 忽略X(通过 的零映射)的零值,并通过按元素将两边乘以权重矩阵(如 中W)来近似,即通过最小化 Frobenius(或其他一些)范数。XWW.X ~ W.BL|W.X - W.BL|

UPDATE1:创建了目标函数,但不知道如何传递W给它。我猜这个method论点现在需要采用自定义算法,但在线示例很少。欢迎提出想法。

0 投票
1 回答
1082 浏览

machine-learning - Vowpal Wabbit:低秩矩阵分解?

我有一个非常基本的问题。我想做低秩矩阵分解,我正在查看有关该主题的Vowpal Wabbit 文档。我的问题是:

这两种方法有区别吗?(实施或其他)

或者

在这里,ab是特征命名空间,5是潜在因素维度。


可能的后续行动:

如果这些是等价的,是否--rank也适用于高阶交互?

0 投票
2 回答
3154 浏览

python - 如何处理python scikit NMF中的缺失值

我正在尝试使用 python scikit-learn 在我的数据集上应用 NMF。我的数据集包含 0 个值和缺失值。但是 scikit-learn 不允许在数据矩阵中使用 NaN 值。一些帖子说用零替换缺失值。

我的问题是:

  • 如果我用零替换缺失值,算法如何分辨缺失值和实际零值?

  • 是否有任何其他 NMF 实现可以处理缺失值?

  • 或者是否有任何其他矩阵分解算法可以进行缺失值预测?

0 投票
1 回答
405 浏览

python - 使用张量流进行批量矩阵分解中的内存泄漏

假设我有一个速率矩阵R,我想将它分解为矩阵UV使用 tensorflow

没有批量大小它的简单问题,可以用以下代码解决:

我决定通过批量更新来解决这个问题,我的解决方案是发送索引UV我想用它来预测速率矩阵R并只更新那些选定的,这是我的代码(如果需要很多时间,请阅读评论):

但我有内存泄漏u = tf.assign(u, tmp_u)u = tf.assign(u, tmp_u) 我应用了这个但什么也没得到。
还有另一种解决方案可以将更新仅应用于子集UV类似这样,但遇到了许多其他错误,所以请继续了解如何解决我的内存泄漏问题。
抱歉我的长问题,感谢阅读。

0 投票
1 回答
1132 浏览

python - scikit-learn - 我应该用 TF 还是 TF-IDF 拟合模型?

我试图找出在 sklearn(Python)上拟合不同概率模型(如潜在狄利克雷分配、非负矩阵分解等)的最佳方法。

查看 sklearn 文档中的示例,我想知道为什么 LDA 模型适合 TF 数组,而 NMF 模型适合 TF-IDF 数组。这种选择有确切的理由吗?

这是示例:http ://scikit-learn.org/stable/auto_examples/applications/topics_extraction_with_nmf_lda.html#sphx-glr-auto-examples-applications-topics-extraction-with-nmf-lda-py

此外,任何关于如何找到适合我的模型的最佳参数(迭代次数、主题数......)的提示都被广泛接受。

先感谢您。

0 投票
1 回答
1308 浏览

c# - 在推荐系统中使用矩阵分解

我正在使用 C# 6.0 中基于项目的协作过滤器为餐厅开发推荐系统。我想设置我的算法以尽可能好地执行,因此我对预测用户尚未评论的餐厅评分的不同方法进行了一些研究。

我将从我所做的研究开始

首先,我想使用用户之间的皮尔逊相关性来设置基于用户的协作过滤器,以便能够查看哪些用户可以很好地组合在一起。
这样做的主要问题是能够计算这种相关性所需的数据量。首先,您需要在同一家餐厅的每 2 位用户获得 4 条评论。但我的数据将非常稀疏。2 个用户不可能评论完全相同的 4 家餐厅。我想通过扩大匹配项来解决这个问题(即不匹配同一餐厅的用户,而是同一类型的餐厅),但这给我带来了一个问题,即很难确定我将在相关性中使用哪些评论,因为用户可以在“快餐”类型的餐厅留下 3 条评论。以下哪一项最适合其他用户对快餐店的评论?

经过更多研究,我得出结论,基于项目的协同过滤器优于基于用户的协同过滤器。但是,我又遇到了数据稀疏问题。在我的测试中,我成功地计算了用户尚未评论的餐厅评分的预测,但是当我在稀疏数据集上使用该算法时,结果还不够好。(大多数时候,两家餐厅之间不可能有相似之处,因为没有 2 位用户对同一家餐厅进行评分)。
经过更多研究后,我发现使用矩阵分解方法可以很好地处理稀疏数据。

现在我的问题

我一直在互联网上寻找有关使用此方法的教程,但我没有任何推荐系统经验,而且我对代数的了解也有限。我理解方法的正确性。您有一个矩阵,其中一侧是用户,另一侧是餐馆。每个单元格都是用户对餐厅的评分。
矩阵分解方法创建了两个矩阵,一个是用户和餐厅类型之间的权重,另一个是餐厅和这些类型之间的权重。

我只是想不通的是如何计算餐厅类型和餐厅/用户之间的权重(如果我正确理解矩阵分解)。我找到了许多计算这些数字的公式,但我不知道如何分解它们并将它们应用到我的应用程序中。

我将举一个例子来说明数据在我的应用程序中的外观:
在这张表中,U1 代表用户,R1 代表餐厅。每家餐厅都有自己的标签(餐厅类型)。即 R1 有标签“意大利”,R2 有“快餐”等。

有没有人可以指出我正确的方向或解释我应该如何在我的数据上使用这种方法?任何帮助将不胜感激!

0 投票
0 回答
389 浏览

apache-spark - Spark 内存泄漏与 MatrixFactorizationModel.recommendProductsForUsers(num: Int)

我正在准备基于协作过滤的用户推荐。为此,我使用了 org.apache.spark.mllib.recommendation._ 。但是当我以大约 7GB 的大小运行作业时,由于火花内存泄漏而导致作业失败。但是我得到了小数据集的结果。

ALS 型号配置:

  • 排名 50
  • 迭代 15
  • 拉姆达 0.25
  • 阿尔法 300

星火集群详细信息:

  • 节点 9
  • 内存 每个节点 64 GB
  • 每个节点 4 个核心

运行配置:

代码 :

即使我尝试调试,

纱线日志:


0 投票
0 回答
160 浏览

apache-spark - Spark MatrixFactorizationModel 在SuggestProductsForUsers 调用时崩溃

我在 Apache Spark 1.6.0 中有一个超过 3M 用户和 30k 个项目的隐式 MatrixFactorizationModel。现在我想为所有用户计算每个用户推荐的前 10 个项目,代码如下:

不幸的是,这会使计算崩溃并出现以下错误:

原因是什么?如何计算推荐值?

Spark 在 54 个节点的集群上运行,我使用以下命令启动 REPL:

用户和项目因素都在具有 504 个分区的缓存 RDD 中。