第一个Mhout实例UserCf

最近刚接触mahout,网上所有资料的版本最新的都是0.9的,用的0.12.2的版本变化还是蛮大的,jar包就有很多对不上,所有在这里把0.12.2的第一个实例整个过程拿出来分享下。

网上0.9版本都有一个mahout-core-0.x的jar,在0.12.2版本中原先的mahout.cf被包含在mahout-examples-0.12.2-job.jar中,貌似是从0.9之后改的,这个我并没有去深入去了解。


mahout版本0.12.2

IDE:eclipse



一、新建java项目


二、将mahout相关jar包拷入项目



三、将使用的的模拟数据拷入到项目中

新建文件夹datafile

新建文件item.csv

用文本编辑器打开item.csv

将下面的数据拷入其中

1,101,5
1,102,3
1,103,2.5
2,101,2
2,102,2.5
2,103,5
2,104,2
3,101,2.5
3,104,4
3,105,4.5
3,107,5
4,101,5
4,103,3
4,104,4.5
4,106,4
5,101,4
5,102,3
5,103,2
5,104,4
5,105,3.5
5,106,4



四、编写代码

package com.mahout.demo;

import java.io.File;
import java.util.List;

import org.apache.mahout.cf.taste.impl.common.LongPrimitiveIterator;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.EuclideanDistanceSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;

public class UserCF {

	final static int NEIGHBORHOOD_NUM = 2;// 用户邻居数量
	final static int RECOMMENDER_NUM = 3;// 推荐结果的个数

	public static void main(String[] args) throws Exception {
		String file = "datafile/item.csv";

		// 从文件加载数据
		DataModel model = new FileDataModel(new File(file));
		// 指定用户相似度计算方法,欧式距离相似性
		UserSimilarity similarity = new EuclideanDistanceSimilarity(model);
		// 指定用户邻居数量
		NearestNUserNeighborhood neighborhood = new NearestNUserNeighborhood(NEIGHBORHOOD_NUM, similarity, model);
		// 构建基于用户的推荐系统
		Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);

		// 得到所有用户的ID集合
		LongPrimitiveIterator iter = model.getUserIDs();

		// 遍历所有用户
		while (iter.hasNext()) {
			long uid = iter.nextLong();
			// 获取推荐结果
			List<RecommendedItem> recommendations = recommender.recommend(uid, RECOMMENDER_NUM);
			System.out.printf("uid:%s", uid);

			// 遍历推荐结果,输出
			for (RecommendedItem ritem : recommendations) {
				System.out.printf("(%s,%f)", ritem.getItemID(), ritem.getValue());
			}

			System.out.println();
		}

	}
}

五、运行结果


结果解读

  • 向用户ID1,推荐前二个最相关的物品, 104和106
  • 向用户ID2,推荐前二个最相关的物品, 但只有一个105
  • 向用户ID3,推荐前二个最相关的物品, 103和102
  • 向用户ID4,推荐前二个最相关的物品, 但只有一个102
  • 向用户ID5,推荐前二个最相关的物品, 没有符合的

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值