好吧,我对Mahout和java非常陌生。我试图评估一个推荐器,无论我使用的距离测量或簇大小,下面的代码都会返回0.0。显然,它根本没有拆分培训和测试数据,我不知道为什么。
对此代码的任何帮助表示赞赏!
public class Example {
public static void main(String[] args) throws Exception {
final DataModel model = new FileDataModel(new File("FILENAME")) ;
RecommenderEvaluator evaluator = new AverageAbsoluteDifferenceRecommenderEvaluator();
RecommenderBuilder recommenderBuilder = new RecommenderBuilder() {
@Override
public Recommender buildRecommender(DataModel dataModel) throws TasteException {
UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
ClusterSimilarity clusterSimilarity = new NearestNeighborClusterSimilarity(similarity);
TreeClusteringRecommender tree = new TreeClusteringRecommender(model, clusterSimilarity, 50);
return tree;
}
} ;
double score = evaluator.evaluate(recommenderBuilder, null, model, .7, 1.0);
System.out.println(score);
}
}
谢谢!
答案 0 :(得分:3)
我相信它是因为您将模型作为buildRecommender方法中的参数传递。在将DataModel传递给PearsonCorrelation,NearestNeighborClusterSimilarity等事物时,必须在该方法中使用dataModel。
如果您不这样做,您最终会对包含所有首选项的数据模型进行评估,这意味着它将尝试估计首选项,发现它已存在并返回该值。因此,您将始终拥有完美的推荐,因为DataModel模型已经知道了首选项。
答案 1 :(得分:-1)
来自mahout文档,
https://builds.apache.org/job/Mahout-Quality/javadoc/org/apache/mahout/cf/taste/eval/RecommenderEvaluator.html#evaluate(org.apache.mahout.cf.taste.eval.RecommenderBuilder,org.apache.mahout.cf.taste.eval.DataModelBuilder,org.apache.mahout.cf.taste.model.DataModel,double,double)
evaluate()返回: “得分”表示推荐者的估计偏好与实际值的匹配程度;较低的分数意味着更好的匹配,0是完美的匹配
我猜你没事。