1基于用户的推荐引擎
Datamodel:提供存储和访问用户、项和偏好数据,用于计算
Usersimilarity:计算用户之间的相似度
UserNeighborhood:计算用户的邻居
Recommender :将上述组件组织在一起,为用户提供item推荐
package com.taobao.afan;
import java.io.File;
import java.util.List;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood<wbr>;</wbr>
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommen<wbr>der;</wbr>
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimila<wbr>rity;</wbr>
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;
public class RecommenderIntro {
public static void main(String[] args)
throws Exception{
// TODO Auto-generated method stub
DataModel model = new FileDataModel(new File("./intro.csv")); //加载数据文件
UserSimilarity similarity = new PearsonCorrelationSimila<wbr>rity(model); //构建相似度计算方式</wbr>
UserNeighborhood neighborhood =
new NearestNUserNeighborhood<wbr>(2, similarity, model);</wbr>
Recommender recommender = new GenericUserBasedRecommen<wbr>der(</wbr>
model, neighborhood, similarity); //创建推荐引擎
List<RecommendedItem> recommendations =
recommender.recommend(1, 1); //给用户1推荐一个item
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}
}
}
输出:
2011-2-8 12:42:46 org.slf4j.impl.JCLLoggerAdapter info
信息: Creating FileDataModel for file ./intro.csv
2011-2-8 12:42:48 org.slf4j.impl.JCLLoggerAdapter info
信息: Reading file info...
2011-2-8 12:42:48 org.slf4j.impl.JCLLoggerAdapter info
信息: Read lines: 21
2011-2-8 12:42:48 org.slf4j.impl.JCLLoggerAdapter info
信息: Processed 5 users
RecommendedItem[item:104, value:4.253491]
推荐引擎评价
package com.taobao.afan;
import java.io.File;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.eval.RecommenderBuilder;
import org.apache.mahout.cf.taste.impl.eval.AverageAbsoluteDifferenc<wbr>eRecommenderEvaluator;</wbr>
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;
import org.apache.mahout.common.RandomUtils;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood<wbr>;</wbr>
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommen<wbr>der;</wbr>
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimila<wbr>rity;</wbr>
import org.apache.mahout.cf.taste.eval.RecommenderEvaluator;
public class EvaluatorInfo {
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
RandomUtils.useTestSeed();
DataModel model = new FileDataModel(new File("./intro.csv"));
RecommenderEvaluator evaluator = new AverageAbsoluteDifferenc<wbr>eRecommenderEvaluator();</wbr>
RecommenderBuilder builder = new RecommenderBuilder() {
@Override
public Recommender buildRecommender(DataModel model)
throws TasteException {
UserSimilarity similarity = new PearsonCorrelationSimila<wbr>rity(model);</wbr>
UserNeighborhood neighborhood =
new NearestNUserNeighborhood<wbr>(2, similarity, model);</wbr>
return
new GenericUserBasedRecommen<wbr>der(model, neighborhood, similarity);</wbr>
}
};
double score = evaluator.evaluate(builder, null, model, 0.7, 1.0);
System.out.println(score);
}
}
输出:
2011-2-8 13:35:31 org.slf4j.impl.JCLLoggerAdapter info
信息: Creating FileDataModel for file ./intro.csv
2011-2-8 13:35:31 org.slf4j.impl.JCLLoggerAdapter info
信息: Beginning evaluation using 0.7 of FileDataModel[dataFile:/root/workspace/RecommenderIntro/./intro.csv]
2011-2-8 13:35:31 org.slf4j.impl.JCLLoggerAdapter info
信息: Reading file info...
2011-2-8 13:35:31 org.slf4j.impl.JCLLoggerAdapter info
信息: Read lines: 21
2011-2-8 13:35:31 org.slf4j.impl.JCLLoggerAdapter info
信息: Processed 5 users
2011-2-8 13:35:31 org.slf4j.impl.JCLLoggerAdapter info
信息: Processed 5 users
2011-2-8 13:35:31 org.slf4j.impl.JCLLoggerAdapter info
信息: Beginning evaluation of 3 users
2011-2-8 13:35:31 org.slf4j.impl.JCLLoggerAdapter info
信息: Starting timing of 3 tasks in 1 threads
2011-2-8 13:35:31 org.slf4j.impl.JCLLoggerAdapter info
信息: Average time per recommendation: 11ms
2011-2-8 13:35:31 org.slf4j.impl.JCLLoggerAdapter info
信息: Approximate memory used: 1MB / 7MB
2011-2-8 13:35:31 org.slf4j.impl.JCLLoggerAdapter info
信息: Evaluation result: 0.5
0.5
2评价准确性和返回率
package com.taobao.afan;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.eval.IRStatistics;
import org.apache.mahout.cf.taste.eval.RecommenderBuilder;
import org.apache.mahout.cf.taste.eval.RecommenderIRStatsEvalua<wbr>tor;</wbr>
import org.apache.mahout.cf.taste.impl.eval.GenericRecommenderIRStat<wbr>sEvaluator;</wbr>
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood<wbr>;</wbr>
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommen<wbr>der;</wbr>
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimila<wbr>rity;</wbr>
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;
import java.io.File;
class IREvaluatorIntro {
public static void main(String[] args) throws Exception {
DataModel model = new FileDataModel(new File("./intro.csv"));
RecommenderIRStatsEvalua<wbr>tor evaluator =</wbr>
new GenericRecommenderIRStat<wbr>sEvaluator();</wbr>
// 创建推荐引擎
RecommenderBuilder recommenderBuilder = new RecommenderBuilder() {
@Override
public Recommender buildRecommender(DataModel model) throws TasteException {
UserSimilarity similarity = new PearsonCorrelationSimila<wbr>rity(model);</wbr>
UserNeighborhood neighborhood =
new NearestNUserNeighborhood<wbr>(2, similarity, model);</wbr>
return new GenericUserBasedRecommen<wbr>der(model, neighborhood, similarity);</wbr>
}
};
// 评估准确性和返回率 "at 2":
IRStatistics stats = evaluator.evaluate(recommenderBuilder,
null, model, null, 2,
GenericRecommenderIRStat<wbr>sEvaluator.CHOOSE_THRESHOLD,</wbr>
1.0);
System.out.println(stats.getPrecision());
System.out.println(stats.getRecall());
}
}
输出:
2011-2-8 13:44:52 org.slf4j.impl.JCLLoggerAdapter info
信息: Creating FileDataModel for file ./intro.csv
2011-2-8 13:44:52 org.slf4j.impl.JCLLoggerAdapter info
信息: Reading file info...
2011-2-8 13:44:52 org.slf4j.impl.JCLLoggerAdapter info
信息: Read lines: 21
2011-2-8 13:44:52 org.slf4j.impl.JCLLoggerAdapter info
信息: Processed 5 users
2011-2-8 13:44:52 org.slf4j.impl.JCLLoggerAdapter info
信息: Processed 5 users
2011-2-8 13:44:52 org.slf4j.impl.JCLLoggerAdapter info
信息: Evaluated with user 2 in 29ms
2011-2-8 13:44:52 org.slf4j.impl.JCLLoggerAdapter info
信息: Precision/recall/fall-out: 0.0 / 0.0 / 0.3333333333333333
2011-2-8 13:44:52 org.slf4j.impl.JCLLoggerAdapter info
信息: Processed 5 users
2011-2-8 13:44:52 org.slf4j.impl.JCLLoggerAdapter info
信息: Evaluated with user 4 in 0ms
2011-2-8 13:44:52 org.slf4j.impl.JCLLoggerAdapter info
信息: Precision/recall/fall-out: 0.25 / 0.5 / 0.25
0.25
0.5
分享到:
相关推荐
基于 Apache Mahout 构建社会化推荐引擎
recommenderApache Mahout 推荐引擎 基于用户评分数据推荐相关电影
推荐引擎服务API Apache Mahout建议( )作为与dropwizard( )一起提供的RESTful Web服务。 要求 Java 1.7 Postgres数据库服务器(必需) 评分表或视图,例如“ user_id,item_id,评分...” 设置 使用您的设置...
具体步骤,参见博客:http://blog.csdn.net/fufengrui/article/details/17022535
#资源达人分享计划#
自定义文件模型Mahout 用于 mahout 推荐引擎的 CustomFileDataModel,它索引现实生活中的数据,即 UserId、ItemId 到与 mahout FileDataModel 兼容的 data(long)。
教你成功运行mahout的taste webapp例子,网上的很多资料说的不清楚,或者版本冲突。正确的版本是jdk1.6 maven3.0.5 mahout0.5 。 摸索良久,亲测有效!
“基于 Apache Mahout 构建社会化推荐引擎”中的“使用 Taste 构建推荐引擎实例 – 电影推荐引擎”的工程文件,环境:MyEclipse8.5+JDK1.6+TOMCAT6。直接下载,用MyEclipse导入项目即可。
同时在理论讲解的基础上,还会结合 Apache Mahout 介绍如何在大规模数据上实现各种推荐策略,进行策略优化,构建高效的推荐引擎的方法。本文作为这个系列的第一篇文章,将深入介绍推荐引擎的工作原理,和其中涉及的...
DataGeneratorForMahoutRecommender mahout 推荐引擎的数据生成器,具有三列 UserId、ItemId 和偏好值,与 csv 文件中的现实生活数据相同。
它实现的算法都被归入机器学习或者集体智慧的范畴,但是在这里Mahout主要注重协同过滤/推荐引擎、聚类和分类。 Mahout是可伸缩的。Mahout致力于实现海量数据,单机无法处理情况下的机器学习工具。在目前阶段,这种...
(1)推荐引擎的组成部分: (1)datamodel 数据模型 (2)userSimilarity 通过datamodel构建一个用户相似度模型 (3)neig
- 利用Mahout强大的推荐引擎,实现个性化的电影推荐 - 清晰的文件结构,易于维护和扩展 - 前后端分离的设计,保证了系统的灵活性和响应速度 MovieRecommender适用于任何对电影推荐系统感兴趣的爱好者或专业人士,是...
mahout in action英文正版电子书,书中附带多个基于mahout的推荐系统源码,是一本学习推荐系统,上手推荐系统的圣经!
spring-boot-starter-recommender Spring Boot Starter,用于将Mahout用作基于项目的协作过滤的推荐引擎。
这就可以代表很多东西,但此时此刻,我们关心Mahout的主要部分是:协同过滤(CF)/推荐引擎(recommender),聚类(clustering)和分类(classification)。 它具有很强的扩展性。当被处理的非常巨大的数据量,对单个...
ESHOP一站式购物网站,提供购物比价,购物优惠汇总,购物重定向,价格趋势展示,为了充分利用购物...索引擎,网站结构基于S2SH开发,使用Apache的Mahout算法进行了推荐引擎设计,实现了基于用户和商品的双层数据推荐
math、collections模块采用FP-bonsai pruning而实现更快的频 繁模式增长(Frequent Pattern Growtt)算法并行计算Dirichlet 聚 类算法(基于模型的聚类算法)并行计算基于共现算法的推荐引擎结合基于LLR的ngram生成...
推荐引擎利用特殊的信息过滤(IF,Information Filtering)技术,将不同的内容(例如电影、音乐、书籍、新闻、图片、网页等)推荐给可能感兴趣的用户。通常情况下,推荐引擎的实现是通过将用户的个人喜好与特定的...