我想建立一个基本的电影推荐系统。我搜索了一下,发现了aph 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);
}
}
和这样的结果
Şub03,20142:06:44 PM org.slf4j.impl.JCLLoggerAdapter info INFO: 为文件u1.base创建FileDataModelŞub03,20142:06:44 PM org.slf4j.impl.JCLLoggerAdapter info INFO:读取文件信息...Şub 03,2014 2:06:44 PM org.slf4j.impl.JCLLoggerAdapter info INFO:Read lines:80000Şub03,20142:06:44 PM org.slf4j.impl.JCLLoggerAdapter info INFO:已处理943位用户Şub03,20142:06:44 PM org.slf4j.impl.JCLLoggerAdapter info INFO:使用开始评估 0.7 FileDataModel [dataFile:C:\ Users \ HydrojaN \ Documents \ NetBeansProjects \ JavaApplication1 \ u1.base] Şub03,20142:06:44 PM org.slf4j.impl.JCLLoggerAdapter info INFO: 处理了943位用户Şub03,20142:06:44 PM org.slf4j.impl.JCLLoggerAdapter info INFO:开始评估941 用户Şub03,20142:06:44 PM org.slf4j.impl.JCLLoggerAdapter info 信息:4个线程中的941个任务的开始时间Şub03,20142:06:45 PM org.slf4j.impl.JCLLoggerAdapter info INFO:平均每个时间 推荐:193毫秒Şub03,20142:06:45 PM org.slf4j.impl.JCLLoggerAdapter info INFO:使用的近似内存: 86MB /276MBŞub03,20142:06:45 PM org.slf4j.impl.JCLLoggerAdapter info INFO:29个案例无法推荐
1.0364950141746245
Şub03,20142:07:49 PM org.slf4j.impl.JCLLoggerAdapter info 信息:评估结果:1.0364950141746245 建立成功(总时间:1分5秒)
答案 0 :(得分:0)
在Mahout邮件列表上获取Mahout答案总是更容易。
也就是说,您不需要对Mahout API本身做很多事情就可以构建一个简单的推荐器。我建议你使用搜索滥用风格的推荐器。在此方法中,您运行Mahout作业来分析日志,然后将这些日志导入搜索引擎,如Solr或Elastic Search。然后,此搜索引擎充当推荐者。
答案 1 :(得分:0)
您想要进行评估还是想要使用推荐器。使用上面的代码,您可以根据数据集评估算法的效率(相似性度量和推荐算法)。如果您想使用推荐人产生的结果,您可以使用以下简单代码:
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的更多信息。