Mahout建基于用户的推荐模型

这里我们用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);

进行测试(每次运行结果不同,值越低越好):
这里写图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值