基于Mahout算法推荐

基于Mahout算法推荐

参考链接:https://blog.youkuaiyun.com/bystc/article/details/87904666

pom

导入jar包

<dependency>
			<groupId>org.apache.mahout</groupId>
			<artifactId>mahout</artifactId>
			<version> LATEST</version>
			<type>pom</type>
		</dependency>

		<dependency>
			<groupId>org.apache.mahout</groupId>
			<artifactId>mahout-examples</artifactId>
			<version>LATEST</version>
			<exclusions>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-log4j12</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

数据库

数据库设计需要:

userId,用于被推荐的用户

itemId,推荐的内容id

score,可以是分数或者用户喜爱程度

Model

首先需要构造数据模型,有两种方式,一种是直接到根据数据库系统自动生成,另一种是通过代码构造

数据库系统自动生成

//ssm或者springboot框架中dataSource可通过@Autowire自动注入
DataModel model = new MySQLJDBCDataModel(
                    dataSource,"operate","user_id","movie_id","score","timestamp");

代码构造数据模型

private DataModel getDataMode(){
        FastByIDMap<PreferenceArray> preferences = new FastByIDMap<PreferenceArray>();
            List<OperateEntity> operateEntities = operateDao.selectList(new QueryWrapper<OperateEntity>().groupBy("user_id"));
            for (OperateEntity operateEntity : operateEntities){
                List<OperateEntity> operateEntities2 = operateDao.selectList(
                        new QueryWrapper<OperateEntity>().eq("user_id",operateEntity.getUserId())
                );
                PreferenceArray preferenceArray = new GenericUserPreferenceArray(operateEntities2.size());
                preferenceArray.setUserID(0,operateEntity.getUserId());
                for(int i = 0;i < operateEntities2.size();i ++){
                    preferenceArray.setItemID(i,operateEntities2.get(i).getMovieId());
                    preferenceArray.setValue(i,operateEntities2.get(i).getScore().floatValue());
                }
                preferences.put(operateEntity.getUserId(),preferenceArray);
            }
            DataModel model = new GenericDataModel(preferences);
            return model;
    }

taste

使用基于mahout的推荐算法推荐,可以基于内容推荐或者计算邻居推荐

内容推荐

 //计算内容相似度
            ItemSimilarity similarity = new PearsonCorrelationSimilarity(model);
//        UserNeighborhood neighborhood = new NearestNUserNeighborhood(2,similarity, model);//计算邻居
            // 创建推荐引擎
            Recommender recommender = new GenericItemBasedRecommender(model, similarity);
            //为用户1推荐2个
            recommendations = recommender.recommend(userId, num);

邻居推荐

//计算相似度
            UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
            //计算邻居
            UserNeighborhood neighborhood = new NearestNUserNeighborhood(neighborhoodId,similarity, model);
            // 创建推荐引擎
            Recommender recommender = new GenericUserBasedRecommender(model,neighborhood, similarity);
            //为用户1推荐2个
            recommendations = recommender.recommend(userId, num);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值