mahout推荐6DataModel表示
1、内存级别的datamodel
就是直接采用程序进行构建的那种。
示例:
package mahout; import org.apache.mahout.cf.taste.impl.common.FastByIDMap; import org.apache.mahout.cf.taste.impl.model.GenericDataModel; import org.apache.mahout.cf.taste.impl.model.GenericUserPreferenceArray; import org.apache.mahout.cf.taste.model.DataModel; import org.apache.mahout.cf.taste.model.PreferenceArray; /** * 构造内存级别的dataModel * @author Administrator * */ public class DataModelInMemory { public static void main(String[] args) { //构造一个存储用户偏好的map FastByIDMap<PreferenceArray> preMap = new FastByIDMap<PreferenceArray>(); //构造用户1的偏好 PreferenceArray user1 = new GenericUserPreferenceArray(10); user1.setUserID(0, 1L); user1.setItemID(0, 101L); user1.setValue(0, 3.0f); user1.setItemID(1, 102L); user1.setValue(1, 4.5f); //................ preMap.put(1L, user1); DataModel dataModel = new GenericDataModel(preMap); //接下来你知道怎么做了............. } }
2、基于文件的datamodel
csv,tsv都可以,FileDataModel有好些构造方法,第二个参数就是数据字段的分隔符。
甚至使用压缩的zip和gzip也可以。只有名字分别以.zip和gz结尾。试一下:
将那个ua.base进行压缩成ua.zip
报错:有时间再整,有可能需要进行某些配置,网上没有查到。
14/08/04 10:43:29 INFO file.FileDataModel: Creating FileDataModel for file data\ua.zip Exception in thread "main" java.util.NoSuchElementException at com.google.common.collect.AbstractIterator.peek(AbstractIterator.java:169) at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.<init>(FileDataModel.java:193) at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.<init>(FileDataModel.java:169) at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.<init>(FileDataModel.java:149) at mahout.TestRecommenderEvaluator.main(TestRecommenderEvaluator.java:26)
3、基于数据库的数据
重要的是表的格式:
例子:
create table taste_pref(
user_id bigint not null,
item_id bigint not null,
pref_value float not null,
primary key(user_id,item_id),
index(user_id),
index(item_id)
);
至于数据源的创建及访问就不说了吧。大家都知道。