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)

  );

  至于数据源的创建及访问就不说了吧。大家都知道。

  

  

posted @ 2014-08-04 10:53  jseven  阅读(1589)  评论(0编辑  收藏  举报