您的位置:首页 > 编程语言 > Java开发

Mahout建基于用户的推荐模型

2017-04-25 00:09 381 查看
这里我们用mahout建简单的基于用户的推荐。

工程环境

数据集

创建基于用户的推荐

评估

前提条件

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);


进行测试(每次运行结果不同,值越低越好):

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  eclipse 数据 mahout