问题标签 [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 投票
0 回答
497 浏览

hadoop - Hadoop 上的 Mahout 矩阵分解推荐器非常慢

我目前正在使用以下方法在 Hadoop 上运行 Mahout 的(0.8 版)矩阵分解推荐器

mahout Recommendationfactorized -i mahout_parallelALS_output/userRatings/ -o Recommendations/ --userFeatures mahout_parallelALS_output/U/ --itemFeatures mahout_parallelALS_output/M/
--numRecommendations 10

这需要很长时间才能完成地图阶段(超过 4 小时,但到目前为止只完成了 3% 的地图工作。)在我看来,这很不寻常。有人可以告诉我我做错了还是以某种方式优化了性能?

0 投票
1 回答
274 浏览

python - 使用字典进行矩阵分解和“nan”出现在 dictionary.values()

我正在学习并尝试使用 LFM(潜在因子模型)构建玩具推荐系统。所以我在这个页面中找到了一些关于矩阵分解的东西(http://www.quuxlabs.com/blog/2010/09/matrix-factorization-a-simple-tutorial-and-implementation-in-python/

该页面内的代码可以完美运行。但在我的工作中,矩阵应该是稀疏的,因为初始化后很多元素仍然是空白的。所以我用字典重写了它,一切都搞砸了。

以下是网页中给出的代码:

这段代码可以正常工作。所以我写了以下代码:

这两个部分应该具有相同的功能并且结构是相同的。但是!我的代码返回的是:

或计算 P 和 Q 后显示:

我只是不知道为什么,非常可悲的事实是我已经使用这种方法完成了我的推荐系统。你能帮我找出发生这种情况的原因吗?非常感谢您的宝贵时间!

0 投票
2 回答
734 浏览

python - 使用字典进行矩阵分解和因子向量越来越大

我正在尝试使用潜在因素模型构建玩具推荐系统。所以我只是从( http://www.quuxlabs.com/blog/2010/09/matrix-factorization-a-simple-tutorial-and-implementation-in-python/ )复制代码并运行它。一切都很好。然后我用字典重写了代码,出了点问题,我想不通。

原始代码在这里:

您可以看到每一步的误差都较小。

我的代码:

与上一节几乎相同。唯一的区别是我用字典写的。但它显示:

错误在每一步都变得越来越大。我对此感到很困惑。

非常感谢您的宝贵时间!

0 投票
3 回答
11682 浏览

python - 处理零和缺失数据的Python非负矩阵分解?

我寻找具有 python 接口的 NMF 实现,并处理丢失的数据和零。

我不想在开始分解之前估算我的缺失值,我希望它们在最小化函数中被忽略。

似乎 scikit-learn、nimfa、graphlab 和 mahout 都没有提出这样的选择。

谢谢!

0 投票
1 回答
1253 浏览

hadoop - 使用hadoop的并行机器学习(推荐)算法

我正在研究推荐算法:使用随机梯度作为优化器的矩阵分解。

我想并行化我的算法。我发现这篇文章Parallelized Stochastic Descent Gradient。他们给出了一个算法(p3):

他们评论说:

“该算法直到最后都不需要机器之间的通信。这非常适合 MapReduce 设置。”

我看不出他们是如何实现的。他们是否“手动”在每台机器上分发数据?还是使用HDFS

由于 HDFS 负责数据的分发;如何限制我的程序仅在他当前的数据节点上处理数据?

有没有合适的方法用spark + hadoop 集群来实现它?

欢迎任何线索


我忘了提一件事。我在 spark 上看到了带有SGD的示例回归逻辑。

但数据集只是一个

在我的例子中,为了加强算法,我们添加了一些用户信息和项目信息。所以我在每个数据节点上还有两个文件(UserID 年龄性别..)和(ItemID 颜色大小..),以完成计算。

我在想也许可以让 HDFS 的复制数量等于机器的数量,这样所有数据都将在每个节点上。但我不知道什么时候我会在 spark 上这样做:

  1. 会发生什么?
  2. rdd 会在每个数据节点的内存上创建吗?
  3. 是否所有任务只能由每个数据节点在本地处理?
0 投票
1 回答
2575 浏览

r - R - 使用 SVD 获得特征数量减少的矩阵

我正在使用带有 R 的 SVD 包,我可以通过将最低奇异值替换为 0 来降低矩阵的维数。但是当我重构矩阵时,我仍然具有相同数量的特征,我找不到如何有效地删除源矩阵中最无用的特征,以减少其列数。

例如我目前正在做的事情:

这是我的源矩阵 A:

如果我做:

我得到了具有相同尺寸(4x4)的 A',仅用 2 个“组件”重建,并且是 A 的近似值(包含更少的信息,可能更少的噪声等):

我想要的是一个列较少但再现不同行之间的距离的子矩阵,如下所示(使用 PCA 获得,我们称之为 A''):

这是使用 PCA 获取 A'' 的代码:

最终目标是减少列数,以加快大型数据集上的聚类算法。

如果有人可以指导我,请提前感谢您:)

0 投票
4 回答
5738 浏览

machine-learning - Apache Spark ALS 协同过滤结果。他们没有意义

我想尝试使用 MLlib 进行协同过滤的 Spark,如本教程中所述: https ://databricks-training.s3.amazonaws.com/movie-recommendation-with-mllib.html 该算法基于论文“Collaborative Filtering”对于隐式反馈数据集”,进行矩阵分解。

使用 1000 万个 Movielens 数据集,一切都已启动并运行。数据集分为 80% 训练 10% 测试和 10% 验证。

  • RMSE 基线:1.060505464225402
  • RMSE(火车)= 0.7697248827452756
  • RMSE(验证)= 0.8057135933012889,用于以 rank = 24、lambda = 0.1 和 Iterations = 10 训练的模型。
  • 最佳模型将基线提高了 23.94%。

这些值与教程相似,但训练参数不同。

我多次尝试运行该算法,但总是得到对我没有任何意义的建议。即使只评价儿童电影,我也会得到以下结果:

对于评级:

  • 个人评分:玩具总动员 (1995) 评分:4.0
  • 个人评分:丛林之书,(1994)评分:5.0
  • 个人评分:狮子王,(1994)评分:5.0
  • 个人评分:Mary Poppins (1964) 评分:4.0
  • 个人评分:爱丽丝梦游仙境(1951)评分:5.0

结果:

为您推荐的电影:

  1. 小春的一生,The (Saikaku ichidai onna) (1952)
  2. 更多 (1998)
  3. 谁在那边唱歌?(又名谁在那边唱歌)(Ko to tamo peva)(1980)
  4. 星期日和赛贝勒 (Dimanches de Ville d'Avray, Les) (1962)
  5. 蓝光,(Das Blaue Licht)(1932)
  6. 哈维牛奶时代 (1984)
  7. 请为我投票 (2007)
  8. 种树的人,(Homme qui plantait des arbres,L')(1987)
  9. 肖申克的救赎 (1994)
  10. 只有昨天 (Omohide poro poro) (1991)

除了只有昨天之外,这似乎没有任何意义。

如果有人知道如何解释这些结果或获得更好的结果,我将非常感谢您分享您的知识。

此致

编辑:

正如建议的那样,我训练了另一个具有更多因素的模型:

  • 基线错误:1.0587417035872992
  • RMSE(火车)= 0.7679883378412548
  • 对于使用 rank = 100、lambda = 0.1 和 numIter = 10 训练的模型,RMSE(验证)= 0.8070339258049574。

以及不同的个人评分:

  • 个人评分:星球大战:第六集 - 绝地归来(1983)评分:5.0
  • 个人评分:使命:不可能(1996)评分:4.0
  • 个人评分:虎胆龙威:复仇(1995)评分:4.0
  • 个人评分:永远的蝙蝠侠(1995)评分:5.0
  • 个人评分:黑衣人(1997)评分:4.0
  • 个人评分:终结者2:审判日(1991)评分:4.0
  • 个人评分:壮志凌云(1986)评分:4.0
  • 个人评分:星球大战:第五集 - 帝国反击战(1980)评分:3.0
  • 个人评分:外星人(1979)评分:4.0

推荐的电影有:

为您推荐的电影:

  1. 卡门 (1983)
  2. 寂静之光 (Stellet licht) (2007)
  3. 耶稣 (1979)
  4. 小春的一生,The (Saikaku ichidai onna) (1952)
  5. 美国之心 (2003)
  6. 因为圣经告诉我(2007)
  7. 更多 (1998)
  8. Leigh Bowery 传奇 (2002)
  9. 葬礼 (Ososhiki) (1984)
  10. 远射 (2008)

没有一个有用的结果。

EDIT2:使用隐式反馈方法,我得到了更好的结果!对于与上述相同的动作电影,建议是:

为您推荐的电影:

  1. 星球大战:第四集 - 新希望(又名星球大战)(1977)
  2. 终结者 (1984)
  3. 夺宝奇兵(印第安纳琼斯和夺宝奇兵)(1981)
  4. 虎胆龙威 (1988)
  5. 教父 (1972)
  6. 外星人 (1986)
  7. 摇滚 (1996)
  8. 独立日(又名 ID4)(1996 年)
  9. 星际迷航 II:可汗之怒 (1982)
  10. 金眼 (1995)

这更符合我的预期!问题是为什么显式版本如此糟糕

0 投票
2 回答
1170 浏览

apache-spark - 如何对 Spark MatrixFactorizationModel 中的所有用户产品组合进行评分?

给定一个MatrixFactorizationModel返回完整的用户产品预测矩阵的最有效方法是什么(实际上,通过某个阈值过滤以保持稀疏性)?

通过当前的 API,曾经可以将用户产品的笛卡尔积传递给 predict 函数,但在我看来,这会做很多额外的处理。

访问私有的 userFeatures、productFeatures 是否是正确的方法,如果是这样,是否有一种好方法可以利用框架的其他方面以有效的方式分配此计算?具体来说,有没有比“手动”乘以所有对 userFeature、productFeature 更好的简单方法?

0 投票
0 回答
241 浏览

matlab - 计算矩阵分解输出的 AUC 度量

初始矩阵包含链接预测系统中1的已知链接(0未知和错过的条目)。矩阵分解的输出是要计算的错过条目的预测值AUC

  1. 隐藏20%已知链接(矩阵中带有to20%的条目集)10
  2. 对 Factorization 的输出进行排序并丢弃用于 train ( 80%of 1)的索引
  3. 设置N为隐藏值的数量
  4. 获取N最高预测值并检查它们是否是隐藏值(类标签设置为1)或不是(类标签设置为0
  5. AUC使用N最高预测进行计算

我知道perfcurve在 matlab 计算中AUC,但我需要确定上述过程以提供标记数据perfcurve

任何评论都非常感谢。

0 投票
2 回答
1514 浏览

python - 大型稀疏矩阵分解

如何在尺寸极其稀疏的矩阵(例如 70000 x 70000)上运行svdnmf ?该矩阵的稀疏版本可以存储为磁盘上小于 700M 的二进制文件。我可以将它分解为稀疏格式(如磁盘上的文件或可存储在内存中),而不重建无法存储在内存中(甚至难以存储在磁盘上)的整个矩阵吗?

我知道R中有irlbapython中有sklearnpymf。但似乎他们需要重建矩阵?svd的问题是我无法保存矩阵S,V 和 D,但是如果我指定一个 K 并且只保存对应于 k 最大特征值的矩阵S_k、V_k 和 D_k怎么办?至于nmf,我想将其分解为W秩 = 100,可以存储在内存中。

如果有某些方法可以做到这一点,计算svdnmf的预期时间是多少?任何帮助将不胜感激!