美文网首页
mahout 基于用户推荐

mahout 基于用户推荐

作者: 刷爆服务器 | 来源:发表于2018-07-17 19:32 被阅读0次
    package org.conan.mymahout.recommendation;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.List;
    import org.apache.mahout.cf.taste.common.TasteException;
    import org.apache.mahout.cf.taste.common.Weighting;
    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.PearsonCorrelationSimilarity;
    import org.apache.mahout.cf.taste.model.DataModel;
    import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
    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 {
        public static void main(String[] args) throws IOException, TasteException { 
            List<RecommendedItem> recommendations = null;  
            DataModel model = new FileDataModel(new File("C:\\Users\\dell\\Desktop\\new_ratings.csv"));//构造数据模型
            //计算相似度,相似度算法有很多种,欧几里得、皮尔逊等等。
            UserSimilarity similarity = new PearsonCorrelationSimilarity(model,Weighting.WEIGHTED);
            //计算最近邻域,邻居有两种算法,基于固定数量的邻居和基于相似度的邻居,这里使用基于固定数量的邻居
            UserNeighborhood userNeighborhood = new NearestNUserNeighborhood(100, similarity, model);
            Recommender recommender = new GenericUserBasedRecommender(model, userNeighborhood, similarity);
            recommendations = recommender.recommend(3363,10);
            //打印推荐的结果
            if(recommendations!=null) {
                for (RecommendedItem recommendedItem : recommendations) {
                    System.out.println(recommendedItem);
            }
                System.out.println(recommender.estimatePreference(3363,542));
            }
        }
    }
    

    2.评估结果

    package org.conan.mymahout.recommendation;
    
    import java.io.File;
    import java.io.IOException;
    import org.apache.mahout.cf.taste.common.TasteException;
    import org.apache.mahout.cf.taste.eval.RecommenderBuilder;
    import org.apache.mahout.cf.taste.eval.RecommenderEvaluator;
    import org.apache.mahout.cf.taste.impl.eval.AverageAbsoluteDifferenceRecommenderEvaluator;
    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.PearsonCorrelationSimilarity;
    import org.apache.mahout.cf.taste.model.DataModel;
    import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
    import org.apache.mahout.cf.taste.recommender.Recommender;
    import org.apache.mahout.cf.taste.similarity.UserSimilarity;
    import org.apache.mahout.common.RandomUtils;
    
    public class UserCF {
        public static void main(String[] args) throws IOException, TasteException { 
            RandomUtils.useTestSeed();
            DataModel model = new FileDataModel(new File("C:\\Users\\dell\\Desktop\\new_ratings.csv"));//构造数据模型
            RecommenderEvaluator evaluator=new AverageAbsoluteDifferenceRecommenderEvaluator();//均方根评分用RMSRecommenderEvaluator
            RecommenderBuilder builder=new RecommenderBuilder() {   
                public Recommender buildRecommender(DataModel model) throws TasteException{
                    UserSimilarity similarity=new PearsonCorrelationSimilarity(model);
                    UserNeighborhood neighborhood=new NearestNUserNeighborhood(2,similarity,model);
                    return new GenericUserBasedRecommender(model,neighborhood,similarity);
                }
            };
            double score=evaluator.evaluate(builder,null,model,0.7,1.0);//训练70%的数据,测试30%
            System.out.println(score);
        }
    }
    
    分值4.103173790518768表示平均而言所给出的估计值与实际值的偏差

    相关文章

      网友评论

          本文标题:mahout 基于用户推荐

          本文链接:https://www.haomeiwen.com/subject/drigpftx.html