Mahout建基于用户的推荐模型
2017-04-25 00:09
381 查看
这里我们用mahout建简单的基于用户的推荐。
工程环境
数据集
创建基于用户的推荐
评估
前提条件
1. 已经安装好Eclipse环境
2. 下载完成mahout配置包
使用默认工作环境
选择快速开始
设置基本信息:
Group ID:com.recommenderExample
Artifact ID:MahoutRecommender
默认版本:0.0.1-SNAPSHOT
包:com.recommenderExample.MahoutRecommender
创建完成
项目右键->新建->文件夹
分别创建:
data:用于存放数据集
lib:用于引入其他数据库(主要为mahout数据库)
将下载的mahout压缩包解压,复制jar包到Lib文件夹下
右键点击项目->配置环境
点击添加jar包,添加刚引入的包
我们用”dataset.csv”来保存数据,分别代表userID,itemID,value。
数据集:
1,10,1.0
1,11,2.0
1,12,5.0
1,13,5.0
1,14,5.0
1,15,4.0
1,16,5.0
1,17,1.0
1,18,5.0
2,10,1.0
2,11,2.0
2,15,5.0
2,16,4.5
2,17,1.0
2,18,5.0
3,11,2.5
3,12,4.5
3,13,4.0
3,14,3.0
3,15,3.5
3,16,4.5
3,17,4.0
3,18,5.0
4,10,5.0
4,11,5.0
4,12,5.0
4,13,0.0
4,14,2.0
4,15,3.0
4,16,1.0
4,17,4.0
4,18,1.0
点击data文件夹(右键)->新建->文件,命名 dataset.csv
将数据文件拖到面板中,复制上面的数据
我们根据其他相似品味用户的信息来推断特定用户的推荐,用相互作用关系来推断彼此之间的联系:
定义相似的用户,超过0.1的可能性则认为是相似的:
根据数据模型、相似信息、相似用户来创建推荐:
显示推荐信息:
运行:
可以看出:用户2 中 item12的阅读值为4.8328104,item13的阅读值为4.6656213,item13的阅读值为4.331242。用户2最可能购买的是item12,13,14。
对于警告:可以添加slf4j-nop-1.7.7.jar解决。
90% trainingset
10% testset
创建新类:EvaluateRecommender
创建实现RecommenderBuilder接口的类MyRecommenderBuilder:
测试代码:
进行测试(每次运行结果不同,值越低越好):
工程环境
数据集
创建基于用户的推荐
评估
前提条件
1. 已经安装好Eclipse环境
2. 下载完成mahout配置包
工程环境
打开eclipse,新建一个maven项目使用默认工作环境
选择快速开始
设置基本信息:
Group ID:com.recommenderExample
Artifact ID:MahoutRecommender
默认版本:0.0.1-SNAPSHOT
包:com.recommenderExample.MahoutRecommender
创建完成
项目右键->新建->文件夹
分别创建:
data:用于存放数据集
lib:用于引入其他数据库(主要为mahout数据库)
将下载的mahout压缩包解压,复制jar包到Lib文件夹下
右键点击项目->配置环境
点击添加jar包,添加刚引入的包
数据集
Mahout推荐算法是希望将用户与项之间的关系作为输入进行计算,这里采用最简单的txt文本方式保存数据。我们用”dataset.csv”来保存数据,分别代表userID,itemID,value。
数据集:
1,10,1.0
1,11,2.0
1,12,5.0
1,13,5.0
1,14,5.0
1,15,4.0
1,16,5.0
1,17,1.0
1,18,5.0
2,10,1.0
2,11,2.0
2,15,5.0
2,16,4.5
2,17,1.0
2,18,5.0
3,11,2.5
3,12,4.5
3,13,4.0
3,14,3.0
3,15,3.5
3,16,4.5
3,17,4.0
3,18,5.0
4,10,5.0
4,11,5.0
4,12,5.0
4,13,0.0
4,14,2.0
4,15,3.0
4,16,1.0
4,17,4.0
4,18,1.0
点击data文件夹(右键)->新建->文件,命名 dataset.csv
将数据文件拖到面板中,复制上面的数据
创建基于用户的推荐
在App类中创建数据模型:DataModel model = new FileDataModel(new File("/path/to/dataset.csv"));
我们根据其他相似品味用户的信息来推断特定用户的推荐,用相互作用关系来推断彼此之间的联系:
UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
定义相似的用户,超过0.1的可能性则认为是相似的:
UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, model);
根据数据模型、相似信息、相似用户来创建推荐:
UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
显示推荐信息:
List recommendations = recommender.recommend(2, 3); for (RecommendedItem recommendation : recommendations) { System.out.println(recommendation); }
运行:
可以看出:用户2 中 item12的阅读值为4.8328104,item13的阅读值为4.6656213,item13的阅读值为4.331242。用户2最可能购买的是item12,13,14。
对于警告:可以添加slf4j-nop-1.7.7.jar解决。
评估
我们区分数据集为两种:90% trainingset
10% testset
创建新类:EvaluateRecommender
创建实现RecommenderBuilder接口的类MyRecommenderBuilder:
class myRecommenerBuilder implements RecommenderBuilder{ public Recommender buildRecommender(DataModel dataModel) throws TasteException { UserSimilarity similarity = new PearsonCorrelationSimilarity(dataModel); UserNeighborhood neighborhood = new ThresholdUserNeighborhood(0.1, similarity, dataModel); return new GenericUserBasedRecommender(dataModel, neighborhood, similarity); } }
测试代码:
DataModel model = new FileDataModel(new File("data/dataset.csv")); RecommenderEvaluator evaluator = new AverageAbsoluteDifferenceRecommenderEvaluator(); RecommenderBuilder builder = new myRecommenderBuilder(); double result = evaluator.evaluate(builder, null, model, 0.9, 1.0); System.out.println(result);
进行测试(每次运行结果不同,值越低越好):
相关文章推荐
- mahout入门之编写第一个基于用户的推荐程序
- mahout基于用户推荐的简单例子(2)
- mahout实现基于用户的Mahout推荐程序
- 【Machine Learning】Mahout基于协同过滤(CF)的用户推荐
- 推荐引擎之Mahout 基于用户协同过滤算法的使用
- 【Machine Learning】Mahout基于协同过滤(CF)的用户推荐
- mahout基于用户推荐的简单例子(1)
- 基于用户的协同过滤推荐模型
- R全面解析Mahout的基于用户推荐协同过滤算
- 推荐引擎之Mahout 基于用户协同过滤算法的使用
- 一个简单的基于用户的mahout推荐程序
- win7基于mahout推荐之用户相似度计算
- Mahout系列之推荐算法-基于用户协同过滤
- 基于Java的开源的模型驱动转换器和抽象用户接口标识语言6.1发布
- Vsftpd服务器实现基于虚拟用户帐号服务 推荐
- RUP大讲堂(第八讲)-基于模型转换的OOAD 推荐
- 基于 Apache Mahout 构建社会化推荐引擎【链接】
- 基于 Apache Mahout 构建社会化推荐引擎
- 基于Java的开源的模型驱动转换器和抽象用户接口标识语言6.1发布
- 基于 Apache Mahout 构建社会化推荐引擎