DataModel doesn't have preference values
mahout和hadoop实现简单的智能推荐系统的时候,出现了一下几个方面的错误
DataModel doesn't have preference values
意思是DataModel中没有找到初始值,通过现有的算法,我们可以初试话算法,从而实现如下:
DataModel model = new FileDataModel(new File("F:/htt/work/recommend/src/main/resource/ratings.csv"));
CachingRecommender cachingRecommender=new CachingRecommender(new SlopeOneRecommender(model));
for (LongPrimitiveIterator iter=model.getUserIDs(); iter.hasNext(); ) {
long userId=iter.nextLong();
List<RecommendedItem> list =cachingRecommender.recommend(userId, RECOMMENDER_NUM);
System.out.printf("uid:%s", userId);
for (RecommendedItem ritem : list) {
System.out.printf("(%s,%f)", ritem.getItemID(), ritem.getValue());
}
System.out.println();
我没有修改的代码如下:
DataModel model=new FileDataModel(new File("/home/xuyao/mahout/test_data/intro.csv"));
//UserSimilarity封装了用户间相似性的概念
UserSimilarity similarity=new PearsonCorrelationSimilarity(model);
//UserNeighborhood封装了最相似用户组的概念. 2是用户的邻域,指的是最相似的几个用户
UserNeighborhood neighborhood=new NearestNUserNeighborhood(2,similarity,model);
//Recommender推荐引擎
Recommender recommender=new GenericUserBasedRecommender(model,neighborhood,similarity);
List<RecommendedItem> recommendations=recommender.recommend(1,1);
for(RecommendedItem recommendation : recommendations)
System.out.println(recommendation);
修改之后采用的是slope算法进行