基於Mahout算法推薦
參考鏈接:https://blog.csdn.net/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);