问题标签 [mahout-recommender]
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.
mahout - 评估基于 Mahout 的推荐器实现
我正在使用 mahout 0.7 来实现推荐系统。
Ro 评估我正在使用的所提供建议的质量,AverageAbsoluteDifferenceRecommenderEvaluator
这使我能够评估 MAE(平均平均误差)。当我使用 AverageAbsoluteDifferenceRecommenderEvaluator 时,MAE 值似乎在 0.0 和 1.0 之间进行了标准化。但如果我选择GenericBooleanPrefItemBasedRecommender
,则值不在 0.0 和 1.0 之间。
如果我增加训练数据集的百分比,则评估值越大,GenericBooleanPrefItemBasedRecommender
表示推荐不佳。
我是这样评价推荐人的:
为什么AverageAbsoluteDifferenceRecommenderEvaluator
withGenericBooleanPrefItemBasedRecommender
会产生未标准化的值,我该如何正确解释它们?
mahout - 没有负面偏好值的 Mahout 推荐
我对 Mahout 中偏好值的含义有疑问。从 Mahout in Action 一书中,它说:
偏好值可以是任何值,只要更大的值意味着更强的积极偏好。例如,这些值可能是 1 到 5 的评分,其中 1 表示用户无法忍受的项目,而 5 表示最喜欢的项目。
这是否意味着推荐者总是将较小的值解释为负面偏好(不喜欢)?
我正在尝试创建一个没有负面偏好的推荐器。我的意思是我根本没有偏好,但我可以根据不同的加权指标(点击/编辑次数、编辑量、编辑方式等)推导出它们。但是,在我的实现中,当用户编辑了某个页面时,这并不意味着用户不喜欢该页面,而是在一定程度上喜欢它(并且喜欢的强度是如上所述的)。
我曾尝试仅使用布尔偏好(对数似然和谷本相似度),但它们表现不佳,并且在大多数情况下,它们无法产生推荐(超过 50%)。
我想利用数字来获得偏好,因此推荐会更好,但我不确定如何。我尝试过从 5 到 10 的偏好值,然后每个用户对人造物品的偏好值为 1(意思是不喜欢它)。但是我认为这不是一个好方法,因为这意味着每个用户都不喜欢同一个项目。
有人对我如何应用一些仅具有“积极”(喜欢)偏好值的基于用户和基于项目的算法有更好的了解吗?
mahout - 推荐引擎的文件输入格式是什么?
当我以这种格式提供输入文件时,我在 Hadoop 集群上使用 Ubuntu12.04、Hadoop-1.0.4、Mahout-0.7 运行作业进行推荐算法,map reduce 运行良好但没有给出任何结果(空白)
tataRecommend100.txt(用户 ID - 产品 ID - 偏好)
命令 :-bin/hadoop jar /home/hadoop/apacheC/mahout-distribution-0.7/mahout-core-0.7-job.jar
org.apache.mahout.cf.taste.hadoop.item.RecommenderJob -s SIMILARITY_COOCCURRENCE --input /tataDocomo/recommend/tataRecommend100.txt --output /tataDocomo/recommend/tataRecommendOutput
machine-learning - 这种“嵌套”推荐使用什么模型或方法?
我有一个非常具体的推荐问题。
假设我有 3 种类型的值/实体 - 项、属性、值。有N个项目,A属性和B值。每个项目都有一些属性值对。例子:
项目#1
2374-23783
8455-5783
744-2438
项目#2
5435-23783
8455-54654
544-9778
...
现在,给定一个“匿名”项目,比如 Item#x,上面有 3-4 个示例属性值对,我想获得针对特定属性的建议。例子:
项目
#x
5435-23783 544-9778
744-2438
8455-?? (获得推荐)
现在,直觉 - Item#x 中属性 8455 的推荐值可能是 54654。您会看到属性 5435 和 744 在 Item#2 中的值与在 Item#x 中的值相同。因此,8455 的值很可能与 Item#2 中 8455 的值相似。
问题:
你认为哪种模型最适合这个问题?我应该使用什么方法?协同过滤 - 但如何?显然,简单地将所有属性值对转储到数据集中并获取建议并不能满足我的需求。
您也可以添加任何特定于实现的细节吗?马豪?米利克斯?机器学习/推荐库?
multithreading - Mahout 优化:多线程 TopItems.getTopUsers() 和 TopItems.getTopItems()
我们有以下系统:
用户数量:~500k
项目数量:~100k
使用上述推荐器,对于 400 个邻域大小,我们获得了平均 600 毫秒的响应时间。
我们尝试使其小于 100 毫秒(在线引擎),我们确实通过使用自定义TopItems.getTopUsers()和TopItems.getTopItems()多线程(等于核心数)函数实现了这一点。函数 TopUsers() 花费的平均时间
:~ 30-40 ms
TopItems():~ 50-60 ms
但是,当我们尝试发出许多并发请求(甚至达到 25 个)时,响应时间会飙升至几秒。
我们可以为每个用户预先计算类似邻域的东西,但 TopItems() 仍然是并发请求的明显瓶颈。
您会建议任何方法来改善多线程并发请求的响应时间吗?
后备选项是将预先计算的建议存储在一些 NoSql DB 中。这将不会很昂贵,因为我们会定期进行预计算,即使对于不那么活跃的用户也是如此。我们可能会比不那么活跃的用户更频繁地挑选活跃用户并预先计算推荐。
有什么想法吗?
performance - Mahout 推荐性能问题
我一直在与 Mahout 合作,根据以下数据创建推荐引擎:
- 10 万用户
- 10k 项
- 400万收视率
我使用以下 JVM 参数在 Tomcat 上运行它:
推荐用了6s左右,好像很慢!我怎样才能提高 Mahout 的性能?
我正在使用以下代码:
这部分在启动时运行一次:
而且,对于我所做的每个用户请求:
java - 在 mahout 0.7 中的 mahout 0.5 中 VectorWritable.addTo 的等效方法是什么?
我发现这本书 mahout in action 的代码缺少方法。Mahout 0.7 似乎没有 addTo。什么是等价物?谢谢!
mahout - Mahout - 项目存在于测试数据中,但不存在于训练数据中
我正在尝试使用PearsonCorrelationSimilarity
. 我DataModel
从包含用户 ID、项目 ID、首选项、时间戳(按此顺序)的文件中加载我的代码如下所示:
当我运行它时,我得到了很多
这是否与我的DataModel
或与评估者有关。我都试过了RMSRecommenderEvaluator
,AverageAbsoluteDifferenceRecommenderEvaluator
但我得到了相同的信息通知。我也尝试使用RandomUtils.useTestSeed();.
当我使用UserSimilarity
指标运行相同时,我没有这个问题。
我的问题是这会影响我的评估结果吗?
谢谢你。德拉甘
categories - Mahout:为特定产品类别的用户推荐商品
我们现在有什么?- 我们正在使用 Mahout 的 GenericItemBasedRecommender 为使用 TanimotoCoefficientSimilarity 作为 ItemSimilarity 的用户获取推荐产品列表。
我们想从这里去哪里?- 当我们不关心产品类别但我们想知道的是产品类别特定的建议时,上述工作正常,即说如果用户一直在购买、浏览、喜欢等,特别是在男士和小工具类别中,我会然后想要在该特定类别中显示此用户推荐,并在 [X] 中为您推荐,在这种情况下,X 将被替换为男士或小工具。我们正在考虑以下几个选项来实现这一目标,我们需要一些线索/意见/反馈等,以确保我们朝着正确的方向前进。选项:
- 首先,我们必须转移到非tanimoto 版本来计算项目相似度,以便我们考虑用户购买、喜欢等,而不仅仅是查看/浏览数据。
找出特定用户的产品类别(这是我们需要指导的地方) - 我们的产品类别层次结构基本上是一棵树,我们需要知道我们将向用户展示树中哪些前 4 个节点(具有最佳推荐)。此外,如果我们说节点 X 是我们向用户显示的类别,节点 Y 是节点 X 的父节点,那么我们不希望在类别 Y 或任何父节点中显示用户产品。实现这一目标的几种方法:
对于每个用户,计算叶级节点的项目相似性得分值的总和,并递归计算父节点直到根。现在在每个节点上,我们有 A = 相似性分数的总和 & B = 推荐的项目数,所以我们在每个节点上也有 A/B=Value (V)。现在我们从树中挑选前 4 V 值并推荐给用户。这里的挑战是,如果我们尝试在请求期间在线计算此时间,我们将很难将整个请求的时间限制在 150 毫秒以下。一个例子:
第一类推荐产品:Item1(分数=2)、Item2(分数=4)
第二类推荐产品:Item3(分数=1)、Item4(分数=4)第二种选择:为每个类别创建一个基于用户行为(喜欢、购买、查看等)的用户集群,然后找出用户所属的前 4 个类别。不确定我们是否可以在 Mahout 中使用集群来实现这一点,但我认为我们可以离线进行。
请提供您的反馈/建议/线索/想法。
提前致谢!
mahout - Mahout 基于内容的相似性
我创建了一个自定义项目相似性,它基于产品分类模拟基于内容的相似性。我有一个用户只喜欢两个项目:
我的自定义itemSimilarity
从 [-1,1] 返回值,其中 1 应该表示高度相似,-1 表示高度不同。用户喜欢的两个项目在分类树中没有任何最低的共同祖先,因此它们的值不是 1。但它们的值在某些项目中是 0、0.20 和 0.25。
我通过以下方式提出建议:
我得到以下结果:
乍一看有人会说,好的,它会产生建议。我尝试从 中打印值,itemSimilarity
因为它在成对项目之间进行比较,我得到了这个令人惊讶的结果:
还有更多。它们不在生产订单中。我只是想说明一点。所有相异度为 -1 的项目都被推荐,而那些相似度为 0.0、0.2 和 0.25 的项目则完全不推荐。这怎么可能?itemSimilarity
接口的方法ItemSimilarity
有如下解释:
该接口的实现定义了两个项目之间的相似性概念。实现应返回 -1.0 到 1.0 范围内的值,其中 1.0 表示完全相似。
如果我使用 [0,1] 之间的相似性,我会得到以下建议:
并且成对相似度如下(仅针对那些树,其他为0):
编辑:我还打印出与1449133, 18886199
with 最相似的项目:(GenericItemBasedRecommender)delegate).mostSimilarItems(new long[]{1449133, 18886199}, 10)
我得到了:[RecommendedItem[item:228964, value:0.125], RecommendedItem[item:950062, value:0.125], RecommendedItem[item:899573, value:0.1]]
仅对于项目 18886199,(GenericItemBasedRecommender)delegate).mostSimilarItems(new long[]{18886199}, 10)
我得到了[RecommendedItem[item:228964, value:0.25]]
. 因为1449133
只有没有类似的项目。
我不明白为什么它不能与强烈的不同?另一个问题是为什么所有预测的偏好值都是8.0
或4.5
。我可以看到只有项目18886199
与推荐项目相似,但是有没有办法将 8.0 的值与 case 中的相似度相乘0.25
,并得到值2.0
代替8.0
。在计算相似度时我不能这样做,因为我还不了解用户,但我认为应该在推荐阶段完成。这不是推荐器应该如何工作,或者我应该创建一个自定义推荐器并以自定义方式完成工作?
如果 Mahout 社区的人能给我指路,我将不胜感激。