[mahout in action]mahout中用于推荐引擎的数据结构(二)

本文介绍了Mahout中的DataModel接口及其实现,如GenericDataModel和FileDataModel。详细说明了如何手动录入数据以及如何从文件读取数据到DataModel。还讨论了数据更新时如何利用Refreshable接口以及FileDataModel的更新文件功能进行高效操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DataModel是在Mahout中封装推荐引擎输入数据的抽象接口。实现类包括GenericDataModel,FileDataModel

mahout中读取数据的方式有很多种,可以分为 手动录入,从file读取,从数据库读取
这里参考 《mahout in action》简单说一下手动录入方式,以及从file读取的方式。从数据库读取可参考 API文档

手动
FastByIDMap<PreferenceArray> preferences = new FastByIDMap<PreferenceArray>();
PreferenceArray = prefsForUser1 = new GenericUserPreferenceArray(10);

prefsForUser1 . setUserID(0, 1L);
prefsForUser1 . setItemID(0, 101L);
prefsForUser1 . setValue(0, 3.0f):
prefsForUser1 . setItemID(1, 102L);
prefsForUser1 . setValue(1, 4.5f);
… … ( 8 more )

preferences.put(1L, prefsForUser1);

DataModel model = new GenericDataModel( preferences );



从file读取,这是个经常使用的方法
DataModel model = new FileDataModel(new File(“ratings.csv"));

文件的每一行包括 User ID, item ID, preference value,  用Tab来分割也可以。
压缩格式的文件例如 .zip  或者 .gz 都可以,如果数据特别大的话,用压缩格式是个很好的选择

那么当数据有 更新的时候,可以调用 Refreshable 接口的方法, reload data。同时,实践中我们希望更新所有跟这些数据相关的objects,所以一般这样写:

DataModel dataModel = new FileDataModel( new file(“input.csv”);
Recommender recommender = new SlopeOneRecommender(dataModel);
...
recommender.refresh(null);   // refresh datamodel, then itself

refresh的方法是reload,但是如果只有一小部分data需要更改,用refresh显然是效率很低的,所以 FileDataModel支持 update files

update的文件中,可以新增,修改,和删除。例如:
1, 108, 3.0
1, 103, 
更新user 1对item 108 的评分为3.0, 删除user 1对item 103的评分

需要update的file要跟原来的data file在同一个文件夹下,命名需要有相同的prefix。
例如原data file 为 foo.txt.gz, 则更新的data file可以是 foo.1.txt.gz, foo.2.txt.gz。 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值