mahout推荐入门之评估GroupLens数据集
2014-12-24 12:53
302 查看
前面都是在一个非常小的测试数据集上进行推荐评估,现在我们下载一个真实的数据集来进行评估。
在http://www.grouplens.org/node/73上找到并下载ml-100k.zip,解压在其中找到ua.base文件作为我们的评估数据集。这是一个制表符分隔的文件,对于FileDataModel同样适合装载,包括我们前面用到的逗号分隔符的文件也可以。这个数据集中有100000个偏好值,相对前面的可能会执行比较长一个时间,下面是修改后的代码:
不同的推荐程序得出的评估值都是不一样的,一般都要对不同的推荐程序进行评估,找到针对你的业务场景最适合的推荐程序,即评估结果最小的。
下面用slope-one推荐程序来进行评估:
评估结果为:0.7426243837561557。似乎比基于用户的推荐效果要好一些。但也仅仅是在这个数据集上的表现,还是要进行不断的评估测试才能得到最优的推荐效果。
在http://www.grouplens.org/node/73上找到并下载ml-100k.zip,解压在其中找到ua.base文件作为我们的评估数据集。这是一个制表符分隔的文件,对于FileDataModel同样适合装载,包括我们前面用到的逗号分隔符的文件也可以。这个数据集中有100000个偏好值,相对前面的可能会执行比较长一个时间,下面是修改后的代码:
package com.besttone.mahout.demo.recommender; 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.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.recommender.slopeone.SlopeOneRecommender; 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 TestRecommenderEvaluator { /** * @param args * @throws IOException * @throws TasteException */ public static void main(String[] args) throws IOException, TasteException { // TODO Auto-generated method stub //这个是产生唯一的种子使得在划分训练和测试数据的时候具有唯一性= RandomUtils.useTestSeed(); // 装载数据文件,实现存储,并为计算提供所需的用户ID,物品ID,偏好值 // DataModel dataModel = new FileDataModel(new File( // MyFirstRecommender.class.getResource("intro.txt").getPath())); DataModel dataModel = new FileDataModel(new File( MyFirstRecommender.class.getResource("ua.base").getPath())); //推荐评估,使用均方根 //RecommenderEvaluator evaluator = new RMSRecommenderEvaluator(); // //推荐评估,使用平均差值 RecommenderEvaluator evaluator = new AverageAbsoluteDifferenceRecommenderEvaluator(); RecommenderBuilder builder = new RecommenderBuilder() { public Recommender buildRecommender(DataModel dataModel) throws TasteException { // TODO Auto-generated method stub UserSimilarity similarity = new PearsonCorrelationSimilarity( dataModel); UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, dataModel); return new GenericUserBasedRecommender(dataModel, neighborhood, similarity); //采用slope-one推荐引擎 //return new SlopeOneRecommender(dataModel); } }; //1.0表示待评估的数据集与总数据集的占比,1.0表示100%。 0.7表示训练数据集在评估数据集的占比 double score = evaluator.evaluate(builder, null, dataModel, 0.7, 1.0); System.out.println(score); } }执行以上评估,评估结果为:0.8761682242990649,这个值在1到5这个偏好值区间里面不算坏,也不算太好。
不同的推荐程序得出的评估值都是不一样的,一般都要对不同的推荐程序进行评估,找到针对你的业务场景最适合的推荐程序,即评估结果最小的。
下面用slope-one推荐程序来进行评估:
package com.besttone.mahout.demo.recommender; 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.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.recommender.slopeone.SlopeOneRecommender; 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 TestRecommenderEvaluator { /** * @param args * @throws IOException * @throws TasteException */ public static void main(String[] args) throws IOException, TasteException { // TODO Auto-generated method stub //这个是产生唯一的种子使得在划分训练和测试数据的时候具有唯一性= RandomUtils.useTestSeed(); // 装载数据文件,实现存储,并为计算提供所需的用户ID,物品ID,偏好值 // DataModel dataModel = new FileDataModel(new File( // MyFirstRecommender.class.getResource("intro.txt").getPath())); DataModel dataModel = new FileDataModel(new File( MyFirstRecommender.class.getResource("ua.base").getPath())); //推荐评估,使用均方根 //RecommenderEvaluator evaluator = new RMSRecommenderEvaluator(); // //推荐评估,使用平均差值 RecommenderEvaluator evaluator = new AverageAbsoluteDifferenceRecommenderEvaluator(); RecommenderBuilder builder = new RecommenderBuilder() { public Recommender buildRecommender(DataModel dataModel) throws TasteException { // TODO Auto-generated method stub // UserSimilarity similarity = new PearsonCorrelationSimilarity( // dataModel); // UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, // similarity, dataModel); // // return new GenericUserBasedRecommender(dataModel, neighborhood, // similarity); //采用slope-one推荐引擎 return new SlopeOneRecommender(dataModel); } }; //1.0表示待评估的数据集与总数据集的占比,1.0表示100%。 0.7表示训练数据集在评估数据集的占比 double score = evaluator.evaluate(builder, null, dataModel, 0.7, 1.0); System.out.println(score); } }
评估结果为:0.7426243837561557。似乎比基于用户的推荐效果要好一些。但也仅仅是在这个数据集上的表现,还是要进行不断的评估测试才能得到最优的推荐效果。
相关文章推荐
- Mahout对于GroupLens数据定制的推荐引擎
- mahout推荐4-评估GroupLens数据集
- mahout推荐10-尝试GroupLens数据集
- Mahout对于定制的GroupLens推荐进行评估
- 使用Mahout搭建推荐系统之入门篇2-玩转你的数据1
- 使用Mahout搭建推荐系统之入门篇2-玩转你的数据1
- mahout 使用grouplens数据集定制datamodel以及评估
- 使用Mahout搭建推荐系统之入门篇2-玩转你的数据1
- mahout推荐8-利用布尔型数据评估查准率和查全率
- 使用Mahout搭建推荐系统之入门篇2-玩转你的数据1
- 使用Mahout搭建推荐系统之入门篇2-玩转你的数据1
- mahout入门之对推荐结果进行评估
- mahout中布尔型数据推荐系统的生成与评估
- Mahout in Action 读书笔记chapter3 推荐数据的表示
- 使用Mahout搭建推荐系统之入门篇1-搭建REST风格简单推荐系统
- mahout推荐3-评估查准率和查全率
- 使用Mahout搭建推荐系统之入门篇4-Mahout实战
- Mahout 入门构建一个推荐引擎
- mahout推荐5-偏好数据的表示
- 使用Mahout搭建推荐系统之入门篇1-搭建REST风格简单推荐系统