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)
);
至于数据源的创建及访问就不说了吧。大家都知道。
浙公网安备 33010602011771号