基於Mahout算法推薦

基於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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章