librec的使用 how to use librec

来源:互联网 发布:软件销售提成比例 编辑:程序博客网 时间:2024/06/08 06:00

http://wiki.librec.net/doku.php?id=introduction

直接使用

1.下载解压

2.进入bin下

3.输入命令行

Librec经过良好的封装, 可以直接通过命令行加载配置项来运行相应的代码,也可以在其他工程中分别实例Java相应的类来进行计算.

在命令行中, rec参数指定程序进行推荐, 其他参数在参数-exec 之后通过-D 或-jobconf来指定. 其中dfs.data.dir 与dfs.result.dir 分别指定了读取数据的路径与存放结果的路径. rec.recommender.class指定运行的算法. 命令行的其他用法请参考CLI walkthrough. 其他算法以及配置项请参考Algorithm list. 不同配置项的含义请参考配置文件librec.properties

LibRec通过调用命令行来输入相应的参数并提交计算作业, 计算过程以日志形式打印在终端, 最终推荐结果保存在当前目录的result文件夹下.

librec rec -exec -D rec.recommender.class=itemcluster -D rec.pgm.number=10 -D rec.iterator.maximum=20
或是使用命令行

librec rec -exec -conf itemcluster-test.properties

itemcluster-test.properties需要自己编写放在bin


命令行介绍

在这里我们展示如何使用命令行来完成数据与模型的读取及保存, 以及使用命令行来输入参数进行推荐计算.

Usage

Usage: librec <command> [options]...commands:  rec                       run recommender  data                      load dataglobal options:  --help                    display this help text  --exec                    run Recommender  --version                 show Librec version infojob options:  -conf <file>              path to config file  -D, -jobconf <prop>       set configuration items (key=value)  -libjars                  add entend jar files to classpath

rec/data 为指定程序进行推荐算法/数据读取功能.

-exec 为执行推荐算法.在2.0版本中为保留选项

-D | -jobconf [options] 为加载相关配置, 具体配置项请参考ConfigurationList及AlgorithmList

-conf [path/to/properties] 加载配置文件

-libjars 为加载其他路径下的jar包到classpath中, 其中lib下的jar包自动加载, 当前脚本为示例


作为自己项目的一部分使用

pom.xml中加入

<dependency>    <groupId>net.librec</groupId>    <artifactId>librec-core</artifactId>    <version>2.0.0</version></dependency>
使用如下代码来运行推荐程序

public void main(String[] args) throws Exception {        // recommender configuration    Configuration conf = new Configuration();    Resource resource = new Resource("rec/cf/userknn-test.properties");    conf.addResource(resource);    // build data model    DataModel dataModel = new TextDataModel(conf);    dataModel.buildDataModel();        // set recommendation context    RecommenderContext context = new RecommenderContext(conf, dataModel);    RecommenderSimilarity similarity = new PCCSimilarity();    similarity.buildSimilarityMatrix(dataModel, true);    context.setSimilarity(similarity);    // training    Recommender recommender = new UserKNNRecommender();    recommender.recommend(context);    // evaluation    RecommenderEvaluator evaluator = new MAEEvaluator();    recommender.evaluate(evaluator);    // recommendation results    List recommendedItemList = recommender.getRecommendedList();    RecommendedFilter filter = new GenericRecommendedFilter();    recommendedItemList = filter.filter(recommendedItemList);}

public static void main(String[] args) throws Exception {        // build data model        Configuration conf = new Configuration();        conf.set("dfs.data.dir", "G:/LibRec/librec/data");        TextDataModel dataModel = new TextDataModel(conf);        dataModel.buildDataModel();        // build recommender context        RecommenderContext context = new RecommenderContext(conf, dataModel);        // build similarity        conf.set("rec.recommender.similarity.key" ,"item");        RecommenderSimilarity similarity = new PCCSimilarity();        similarity.buildSimilarityMatrix(dataModel);        context.setSimilarity(similarity);        // build recommender        conf.set("rec.neighbors.knn.number", "5");        Recommender recommender = new ItemKNNRecommender();        recommender.setContext(context);        // run recommender algorithm        recommender.recommend(context);        // evaluate the recommended result        RecommenderEvaluator evaluator = new RMSEEvaluator();        System.out.println("RMSE:" + recommender.evaluate(evaluator));        // set id list of filter        List<String> userIdList = new ArrayList<>();        List<String> itemIdList = new ArrayList<>();        userIdList.add("1");        itemIdList.add("70");        // filter the recommended result        List<RecommendedItem> recommendedItemList = recommender.getRecommendedList();        GenericRecommendedFilter filter = new GenericRecommendedFilter();        filter.setUserIdList(userIdList);        filter.setItemIdList(itemIdList);        recommendedItemList = filter.filter(recommendedItemList);        // print filter result        for (RecommendedItem recommendedItem : recommendedItemList) {            System.out.println(                    "user:" + recommendedItem.getUserId() + " " +                    "item:" + recommendedItem.getItemId() + " " +                    "value:" + recommendedItem.getValue()            );        }}

读取配置文件代码示例: 可以如示例中使用相对目录访问jar包中的配置文件,也可以指定自己编辑的配置文件。

public void testRecommender() throws ClassNotFoundException, LibrecException, IOException {    Resource resource = new Resource("rec/cf/itemknn-test.properties");    conf.addResource(resource);    RecommenderJob job = new RecommenderJob(conf);    job.runJob();}

配置在conf下的librec.properties里,设置数据来源,默认数据集为filmtrust

# set data directorydfs.data.dir=../data# set result directory# recommender result will output in this folderdfs.result.dir=../result# set log directorydfs.log.dir=../log# convertor# load data and splitting data # into two (or three) set# setting dataset namedata.input.path=filmtrust# setting dataset format(UIR, UIRT)data.column.format=UIR# setting method of split data# value can be ratio, loocv, given, KCVdata.model.splitter=ratio#data.splitter.cv.number=5# using rating to split datasetdata.splitter.ratio=rating# filmtrust dataset is saved by text# text, arff is accepteddata.model.format=text# the ratio of trainset# this value should in (0,1)data.splitter.trainset.ratio=0.8# Detailed configuration of loocv, given, KCV # is written in User Guide # set the random seed for reproducing the results (split data, init parameters and other methods using random)# default is set 1l# if do not set ,just use System.currentTimeMillis() as the seed and could not reproduce the results.rec.random.seed=1# binarize threshold mainly used in ranking# -1.0 - maxRate, binarize rate into -1.0 and 1.0# binThold = -1.0, do nothing# binThold = value, rating > value is changed to 1.0 other is 0.0, mainly used in ranking# for PGM 0.0 maybe a better choosedata.convert.binarize.threshold=-1.0# evaluation the result or notrec.eval.enable=true# specifies evaluators# rec.eval.classes=auc,precision,recall...# if rec.eval.class is blank # every evaluator will be calculated# rec.eval.classes=auc,precision,recall# evaluator value set is written in User Guide# if this algorithm is ranking only true or falserec.recommender.isranking=false#can use user,item,social similarity, default value is user, maximum values:user,item,social#rec.recommender.similarities=user

其中User-Item-Rating简写为UIR, User-Item-Rating-Date简写为UIRT. 当使用Text格式的数据来作为输入时, 对以下配置项进行配置

data.model.format=textdata.column.format=UIR #or UIRT

0 0