mahout评估一个简单的推荐程序
来源:互联网 发布:lua源码 编辑:程序博客网 时间:2024/05/17 13:43
上一篇建立了一个简单的推荐引擎,现在就来评估下
代码如下:
package test.mahout.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 EvaluateRecommeder {
public static void main(String[] args) throws IOException, TasteException
{
RandomUtils.useTestSeed();//生成可重复的结果
DataModel model = new FileDataModel(new File("F:/mahout/mahout_test/intro.csv"));
RecommenderEvaluator evaluator = new AverageAbsoluteDifferenceRecommenderEvaluator();//利用平均差值进行评估
//RecommenderEvaluator evaluator = new RMSRecommenderEvaluator();//均方根
RecommenderBuilder builder = new RecommenderBuilder(){//构建待评估的推荐程序
@Override
public Recommender buildRecommender(DataModel model)
throws TasteException {
// TODO Auto-generated method stub
UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model);
return new GenericUserBasedRecommender(model, neighborhood, similarity);
}
};
/*double evaluate(RecommenderBuilder recommenderBuilder,
DataModelBuilder dataModelBuilder,如果为空,就用默认的datamodel,除非使用了特殊的datamodel实现,需要插入到评估过程中的datamodelbuilder
DataModel dataModel,测试的数据集
double trainingPercentage,每一个用户用来做训练推荐的百分比
double evaluationPercentage用来训练推荐的用户的百分比,可用于仅通过庞大数据集总的很小一部分数据来生成一个精度较低但更快的评估,希望快速测试recommender中的小更改时很有用)
throws TasteException
*/
//提供builder,recommender是由builder对datamodel根据百分比训练出来的
double score = evaluator.evaluate(builder, null, model, 0.7, 1.0);
System.out.println(score);
}
}
运行出来的结果如下:
十一月 17, 2014 3:20:42 下午 org.apache.mahout.cf.taste.impl.model.file.FileDataModel <init>
信息: Creating FileDataModel for file F:\mahout\mahout_test\intro.csv
十一月 17, 2014 3:20:42 下午 org.apache.mahout.cf.taste.impl.model.file.FileDataModel processFile
信息: Reading file info...
十一月 17, 2014 3:20:42 下午 org.apache.mahout.cf.taste.impl.model.file.FileDataModel processFile
信息: Read lines: 21
十一月 17, 2014 3:20:42 下午 org.apache.mahout.cf.taste.impl.model.GenericDataModel <init>
信息: Processed 5 users
十一月 17, 2014 3:20:42 下午 org.apache.mahout.cf.taste.impl.eval.AbstractDifferenceRecommenderEvaluator evaluate
信息: Beginning evaluation using 0.7 of FileDataModel[dataFile:F:\mahout\mahout_test\intro.csv]
十一月 17, 2014 3:20:42 下午 org.apache.mahout.cf.taste.impl.model.GenericDataModel <init>
信息: Processed 5 users
十一月 17, 2014 3:20:42 下午 org.apache.mahout.cf.taste.impl.eval.AbstractDifferenceRecommenderEvaluator getEvaluation
信息: Beginning evaluation of 4 users
十一月 17, 2014 3:20:42 下午 org.apache.mahout.cf.taste.impl.eval.AbstractDifferenceRecommenderEvaluator execute
信息: Starting timing of 4 tasks in 2 threads
十一月 17, 2014 3:20:42 下午 org.apache.mahout.cf.taste.impl.eval.StatsCallable call
信息: Average time per recommendation: 0ms
十一月 17, 2014 3:20:42 下午 org.apache.mahout.cf.taste.impl.eval.StatsCallable call
信息: Approximate memory used: 2MB / 16MB
十一月 17, 2014 3:20:42 下午 org.apache.mahout.cf.taste.impl.eval.StatsCallable call
信息: Unable to recommend in 9 cases
NaN
十一月 17, 2014 3:20:42 下午 org.apache.mahout.cf.taste.impl.eval.AbstractDifferenceRecommenderEvaluator evaluate
信息: Evaluation result: NaN
输出为NaN,由日志可知,有9个案例都无法进行推荐。
原因可能是选取的训练比例不合理。
故增大训练比例的值,改为0.8 仍是NaN,
改为0.9 结果输出:
十一月 17, 2014 3:37:05 下午 org.apache.mahout.cf.taste.impl.model.file.FileDataModel <init>
信息: Creating FileDataModel for file F:\mahout\mahout_test\intro.csv
十一月 17, 2014 3:37:05 下午 org.apache.mahout.cf.taste.impl.model.file.FileDataModel processFile
信息: Reading file info...
十一月 17, 2014 3:37:05 下午 org.apache.mahout.cf.taste.impl.model.file.FileDataModel processFile
信息: Read lines: 21
十一月 17, 2014 3:37:05 下午 org.apache.mahout.cf.taste.impl.model.GenericDataModel <init>
信息: Processed 5 users
十一月 17, 2014 3:37:05 下午 org.apache.mahout.cf.taste.impl.eval.AbstractDifferenceRecommenderEvaluator evaluate
信息: Beginning evaluation using 0.9 of FileDataModel[dataFile:F:\mahout\mahout_test\intro.csv]
十一月 17, 2014 3:37:05 下午 org.apache.mahout.cf.taste.impl.model.GenericDataModel <init>
信息: Processed 5 users
十一月 17, 2014 3:37:05 下午 org.apache.mahout.cf.taste.impl.eval.AbstractDifferenceRecommenderEvaluator getEvaluation
信息: Beginning evaluation of 3 users
十一月 17, 2014 3:37:05 下午 org.apache.mahout.cf.taste.impl.eval.AbstractDifferenceRecommenderEvaluator execute
信息: Starting timing of 3 tasks in 2 threads
十一月 17, 2014 3:37:05 下午 org.apache.mahout.cf.taste.impl.eval.StatsCallable call
信息: Average time per recommendation: 5ms
十一月 17, 2014 3:37:05 下午 org.apache.mahout.cf.taste.impl.eval.StatsCallable call
信息: Approximate memory used: 2MB / 16MB
十一月 17, 2014 3:37:05 下午 org.apache.mahout.cf.taste.impl.eval.StatsCallable call
信息: Unable to recommend in 2 cases
十一月 17, 2014 3:37:05 下午 org.apache.mahout.cf.taste.impl.eval.AbstractDifferenceRecommenderEvaluator evaluate
信息: Evaluation result: 1.0
1.0
即使evaluator在选择测试数据时引入许多随机量,结果仍然是相同的,因为RandomUtils.useTestSeed()的调用会强调每次选择相同的随机值。这仅仅是为了获得可重复的结果而被用在这样的示例或者单元测试中。不要在实际代码中这样用。
- mahout评估一个简单的推荐程序
- 一个简单的基于用户的mahout推荐程序
- mahout计算一个简单的推荐程序的准确率和召回率
- Mahout对于定制的GroupLens推荐进行评估
- mahout实现基于用户的Mahout推荐程序
- mahout中布尔型数据推荐系统的生成与评估
- Mahout协同推荐简单实例
- Mahout协同推荐简单实例
- Mahout--简单推荐系统Demo
- Eclipse下mahout实现推荐的简单实例
- Eclipse下mahout实现推荐的简单实例
- Eclipse下mahout实现推荐的简单实例
- Eclipse下mahout实现推荐的简单实例
- Eclipse下mahout实现推荐的简单实例淹
- mahout入门之对推荐结果进行评估
- mahout推荐入门之评估GroupLens数据集
- Mahout基于余弦相似度的评估
- Mahout小结:关于评估推荐系统估计值与实际值的偏差出现异常:DataModel doesn't have preference values
- 理解遗传算法的例子
- MFC ado数据库:所有表名称
- AFNetworking图片缓存问题
- 推送三个文件转化 p12->pem神马的
- JSP中EL表达式的比较符号、字符串比较
- mahout评估一个简单的推荐程序
- 第十二周项目二 OJ多种输入形式的处理(3)刑警的射击成绩
- 类目、延展、协议
- 超有爱的并查集~~~~【转载】:
- [数据结构与算法]哈希表(等概率情况下)查找成功与查找不成功的平均查找长度
- setreuid
- hibernate反转引擎使用(通过MyEclipse的反向生成工具)
- Java 内存分配全面浅析
- 为什么老板再难,也不会放弃?而员工做得不顺就想逃走?