【问题标题】:how can I use mahout results?如何使用 mahout 结果?
【发布时间】:2014-02-03 12:15:15
【问题描述】:

我想建立一个基本的电影推荐系统。我搜索并找到了 apache mahout。我使用了一些方法,但我不知道如何使用这些结果。

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.RMSRecommenderEvaluator;
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.impl.similarity.TanimotoCoefficientSimilarity;
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;

public class error {

  public  static double evaluate(DataModel model){
    RecommenderEvaluator evaluator = new RMSRecommenderEvaluator();
    RecommenderBuilder builder = new RecommenderBuilder() {

        @Override
        public Recommender buildRecommender(DataModel model) throws TasteException {
            UserSimilarity similarity = new TanimotoCoefficientSimilarity(model);
            UserNeighborhood neighborhood = new NearestNUserNeighborhood(50, similarity,        model);
            return new GenericUserBasedRecommender(model, neighborhood, similarity);
        }
    };

    double score = 0;
    try {

        score = evaluator.evaluate(builder, null, model, 0.7, 1.0);
    } catch (TasteException e) {
    }
    System.out.println(score);
    return score;
}
public static void main(String[] args) throws IOException, TasteException {
     DataModel model = new FileDataModel(new File("u1.base"));
    evaluate(model);
}

}

这样的结果

2014 年 3 月 3 日下午 2:06:44 org.slf4j.impl.JCLLoggerAdapter 信息信息: 为文件 u1.base 创建 FileDataModel Şub 03, 2014 2:06:44 PM org.slf4j.impl.JCLLoggerAdapter 信息信息:正在读取文件信息...Şub 2014 年 3 月 3 日下午 2:06:44 org.slf4j.impl.JCLLoggerAdapter 信息信息:阅读 行:80000 Şub 03, 2014 2:06:44 PM org.slf4j.impl.JCLLoggerAdapter info INFO:已处理 943 个用户 Şub 03, 2014 2:06:44 PM org.slf4j.impl.JCLLoggerAdapter info INFO:开始评估使用 0.7 的 FileDataModel[dataFile:C:\Users\HydrojaN\Documents\NetBeansProjects\JavaApplication1\u1.base] Şub 03, 2014 2:06:44 PM org.slf4j.impl.JCLLoggerAdapter 信息信息: 已处理 943 个用户 Şub 03, 2014 2:06:44 PM org.slf4j.impl.JCLLoggerAdapter info INFO:开始评估 941 用户 Şub 03, 2014 2:06:44 PM org.slf4j.impl.JCLLoggerAdapter 信息 INFO: 4 个线程中 941 个任务的启动时间 Şub 03, 2014 2:06:45 PM org.slf4j.impl.JCLLoggerAdapter info INFO:平均时间 推荐:193ms Şub 03, 2014 2:06:45 PM org.slf4j.impl.JCLLoggerAdapter 信息信息:使用的近似内存: 86MB / 276MB 2014 年 3 月 3 日下午 2:06:45 org.slf4j.impl.JCLLoggerAdapter info INFO:29例无法推荐

1.0364950141746245

2014 年 3 月 3 日下午 2:07:49 org.slf4j.impl.JCLLoggerAdapter 信息 INFO:评估结果:1.0364950141746245 构建成功(总时间:1 分 5 秒)

【问题讨论】:

    标签: mahout recommendation-engine mahout-recommender


    【解决方案1】:

    您是要进行评估还是要使用推荐器。使用上面的代码,您正在针对您的数据集评估算法的效率(相似性度量与推荐算法一起)。如果您想使用推荐器生成的结果,可以使用以下简单代码:

    class RecommenderExample { 
    
          public static void main(String[] args) throws Exception {
                DataModel model = new FileDataModel (new File("u1.base"));
    
                UserSimilarity similarity = new TanimotoCoefficientSimilarity(model);
                UserNeighborhood neighborhood = new NearestNUserNeighborhood(50, similarity,        model);
    
                Recommender recommender = new GenericUserBasedRecommender (model, neighborhood, similarity);
    
                List<RecommendedItem> recommendations = recommender.recommend(1, 1);
    
                //Print the results
                for (RecommendedItem recommendation : recommendations) {
                     System.out.println(recommendation);
                 }
        }
    }
    

    在任何情况下,您都需要评估以选择最佳算法,但最后,如果您想向用户推荐商品,您可以使用类似的代码。

    您可以在Mahout in Action 一书中找到有关 Mahout 的更多信息。

    【讨论】:

      【解决方案2】:

      在 Mahout 邮件列表上获得 Mahout 答案总是更容易。

      也就是说,您不需要对 Mahout API 本身做太多事情来构建一个简单的推荐器。我建议你使用推荐者的搜索滥用风格。在这种方法中,您运行 Mahout 作业来分析日志,然后将这些日志导入到 Solr 或 Elastic Search 等搜索引擎中。然后这个搜索引擎充当推荐者。

      更多详情请见http://www.youtube.com/watch?v=fWR1T2pY08Y

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-07
        • 2012-08-27
        • 1970-01-01
        相关资源
        最近更新 更多