[英]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.