基于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);