3.2 内存中的DataModel
这是个抽象概念,在Mahout中,recommender的输入数据是DataModel。DataModel的实现为各种推荐器算法需要的数据提供了有效的使用。例如,一个DataModel可以在输入数据中,提供一个包括所有user IDs的列表,或提供与一个item相关联的所有分值,或者提供一个为一系列item IDs打分的所有用户的列表。我们将会集中研究一些highlights;一个关于DataModel的API的更详细的描述,可以通过在线文档中找到。
3.3.1 GenericDataModel
这个我们先来看一下,最简单的实现(在内存中实现),GenericDataModel。当你想用编程的方法,在内存中呈现你的数据,而不是基于一个现存的外部数据资源。例如一个文件或相关数据库在内存中创建你的数据表现时,这是非常合适的。它只是以这种形式把分值当作输入数据,这个形式就是一个FastByIDMap映射user IDs到有这些用户的数据的PreferenceArrays上。
列表3.2 基于GenericDataModel,定义输入数据
FastByIDMap<PreferenceArray> preferences = new FastByIDMap<PreferenceArray>(); PreferenceArray prefsForUser1 = new GenericUserPreferenceArray(10); // 为user 1建立PreferenceArray prefsForUser1.setUserID(0, 1L); prefsForUser1.setItemID(0, 101L); // 添加第一个preference,在刚刚创建的10中 prefsForUser1.setValue(0, 3.0f); //B prefsForUser1.setItemID(1, 102L); prefsForUser1.setValue(1, 4.5f); … (8 more) preferences.put(1L, prefsForUser1);// 把user 1的preference添加到输入数据上 DataModel model = new GenericDataModel(preferences); //创建DataModel
Refreshable是一个很有用的接口,Mahout里有很多关于它的实现, 它是只要实现一个 refresh(Collection<Refreshble>), 基于最新的数据,请求组件的重新加载,重新计算,和刷新他们额状态,,例如: