[英]Apache Mahout not giving any recommendation
我正在尝试使用mahout作为推荐但没有得到 。
我的数据集:
0,102,5.0
1,101,5.0
1,102,5.0
代码:
DataModel datamodel = new FileDataModel(new File("dataset.csv"));
// Creating UserSimilarity object.
UserSimilarity usersimilarity = new PearsonCorrelationSimilarity(datamodel);
// Creating UserNeighbourHHood object.
UserNeighborhood userneighborhood = new ThresholdUserNeighborhood(0.1, usersimilarity, datamodel);
// Create UserRecomender
UserBasedRecommender recommender = new GenericUserBasedRecommender(datamodel, userneighborhood, usersimilarity);
List<RecommendedItem> recommendations = recommender.recommend(0, 1);
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}
我使用的是Mahout版本:0.13.0
理想情况下,它应该推荐item_id = 101' to 'user_id = 0' as
user = 0 and
user = 1 have item 102 common show it should recommend
item_id = 101 to
user_id = 0`
日志:
18:08:11.669 [main] INFO org.apache.mahout.cf.taste.impl.model.file.FileDataModel - Creating FileDataModel for file dataset.csv
18:08:11.700 [main] INFO org.apache.mahout.cf.taste.impl.model.file.FileDataModel - Reading file info...
18:08:11.702 [main] INFO org.apache.mahout.cf.taste.impl.model.file.FileDataModel - Read lines: 3
18:08:11.722 [main] INFO org.apache.mahout.cf.taste.impl.model.GenericDataModel - Processed 2 users
18:08:11.738 [main] DEBUG org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender - Recommending items for user ID '0'
Mahout中的Hadoop Mapreduce代码已被弃用。 新的推荐代码以@rawkintrevo的例子开头。 如果您是Scala程序员,请关注他们。
大多数工程师都希望系统无需修改,Mahout算法封装在Apache PredictionIO之上构建的Universal Recommender中。 它有一个服务器来接受事件,例如示例中的事件,它具有内部事件存储,以及用于结果的查询服务器。 旧的Mapreduce代码有许多改进,包括使用实时用户行为来提出建议。 无论是新的Mahout还是旧的包含输入和查询的服务器,Universal Recommender都有两个REST端点。
鉴于您正在使用的代码将被弃用,我强烈建议您深入了解Mahout代码(@ rawkintrevo的示例)或查看The Universal Recommender,这是一个完整的端到端系统。
完成此设置后,您将处理配置,REST或Java SDK以及PIO CLI。 无需Scala编码。
我有三个基于版本0.13.0的示例(Scala,Samsara需要,R-Like Scala DSL Mahout使用v0.10 +)
步行
第一个例子是一个非常缓慢的步骤: https ://gist.github.com/rawkintrevo/3869030ff1a731d43c5e77979a5bf4a8,并且是作为Pat Ferrels博客文章/幻灯片在这里找到的伴侣。 http://actionml.com/blog/cco
爬行
第二个例子更加“真实”,因为它利用了SimilarityAnalysis.cooccurrencesIDSs(...
这是CCO算法的propper接口。
https://gist.github.com/rawkintrevo/c1bb00896263bdc067ddcd8299f4794c
跑
这里我们使用'真实'数据。 MovieLens数据集没有足够的功能来展示CCO的多模式功能(能够推荐多种用户行为)。 在这里,我们加载“真实”数据并生成建议。 https://gist.github.com/rawkintrevo/f87cc89f4d337d7ffea80a6af3bee83e
结论我知道你特意要求Java,但Apache Mahout目前还不适合Java。 从理论上讲,你可以将Scala导入到你的java中,或者将这些函数包装在另一个更友好的Java函数中......我听说过一些深夜(或者可能是在梦中)的传闻,一些研究生在某些地方工作Java API,但它现在不在主干中,也没有PR,也不是路线图中的子弹。
希望以上提供一些见解。
附录
Stackoverflow最简单的例子(你可以通过键入$MAHOUT_HOME/bin/mahout spark-shell
在Mahout spark shell中以交互方式运行它(假设设置了SPARK_HOME
, JAVA_HOME
和MAHOUT_HOME
):
val inputRDD = sc.parallelize(Array( ("u1", "purchase", "iphone"),
("u1","purchase","ipad"),
("u2","purchase","nexus"),
("u2","purchase","galaxy"),
("u3","purchase","surface"),
("u4","purchase","iphone"),
("u4","purchase","galaxy"),
("u1","category-browse","phones"),
("u1","category-browse","electronics"),
("u1","category-browse","service"),
("u2","category-browse","accessories"),
("u2","category-browse","tablets"),
("u3","category-browse","accessories"),
("u3","category-browse","service"),
("u4","category-browse","phones"),
("u4","category-browse","tablets")) )
import org.apache.mahout.math.indexeddataset.{IndexedDataset, BiDictionary}
import org.apache.mahout.sparkbindings.indexeddataset.IndexedDatasetSpark
val purchasesIDS = IndexedDatasetSpark.apply(inputRDD.filter(_._2 == "purchase").map(o => (o._1, o._3)))(sc)
val browseIDS = IndexedDatasetSpark.apply(inputRDD.filter(_._2 == "category-browse").map(o => (o._1, o._3)))(sc)
import org.apache.mahout.math.cf.SimilarityAnalysis
val llrDrmList = SimilarityAnalysis.cooccurrencesIDSs(Array(purchasesIDS, browseIDS),
randomSeed = 1234,
maxInterestingItemsPerThing = 3,
maxNumInteractions = 4)
val llrAtA = llrDrmList(0).matrix.collect
IndexedDatasetSpark.apply(
需要一个RDD[(String, String)]
,其中第一个字符串是'row'(例如用户),第二个字符串是'behavior',因此对于'buy matrix',列将是'products' ,但这也可能是一个'性别'矩阵,有两列(男/女)
然后将一个IndexedDataSets数组传递给SimilarityAnalysis.cooccurrencesIDSs(
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.