Evaluates the quality of a {@link org.apache.mahout.cf.taste.recommender.Recommender}'s recommendations. The range of values that may be returned depends on the implementation, but lower values must mean better recommendations, with 0 being the lowest / best possible evaluation, meaning a perfect match. This method does not accept a {@link org.apache.mahout.cf.taste.recommender.Recommender} directly, butrather a {@link RecommenderBuilder} which can build the{@link org.apache.mahout.cf.taste.recommender.Recommender} to test on top of a given {@link DataModel}.
Implementations will take a certain percentage of the preferences supplied by the given {@link DataModel}as "training data". This is typically most of the data, like 90%. This data is used to produce recommendations, and the rest of the data is compared against estimated preference values to see how much the {@link org.apache.mahout.cf.taste.recommender.Recommender}'s predicted preferences match the user's real preferences. Specifically, for each user, this percentage of the user's ratings are used to produce recommendatinos, and for each user, the remaining preferences are compared against the user's real preferences.
For large datasets, it may be desirable to only evaluate based on a small percentage of the data. evaluationPercentage
controls how many of the {@link DataModel}'s users are used in evaluation.
To be clear, trainingPercentage
and evaluationPercentage
are not related. They do not need to add up to 1.0, for example.
@param recommenderBuilder object that can build a {@link org.apache.mahout.cf.taste.recommender.Recommender} to test
@param dataModelBuilder
@param dataModelBuilder {@link DataModelBuilder} to use, or if null, a default {@link DataModel}implementation will be used
@param dataModel dataset to test on
@param trainingPercentage percentage of each user's preferences to use to produce recommendations; the rest are compared to estimated preference values to evaluate {@link org.apache.mahout.cf.taste.recommender.Recommender} performance
@param evaluationPercentage percentage of users to use in evaluation
@return a "score" representing how well the {@link org.apache.mahout.cf.taste.recommender.Recommender}'s estimated preferences match real values;
lower scores mean a better match and 0 is a perfect match
@throws TasteException if an error occurs while accessing the {@link DataModel}