Recommender
Similarity
相似性矩阵用于构建数据集中 user-user 或者 item-item 之间的距离. 在使用命令行配置时,示例配置如下:
rec.similarity.class=cos
rec.recommender.similarities=user
其中 rec.similarity.class
为指定相应的距离度量函数。 rec.recommender.similarities
为指定 user-user 之间的距离或者 item-item 之间的距离. 在 Social 类的推荐方法中,还可以指定计算 social-social 之间的距离。
在 Java 程序中,相应的示例程序如下
conf.set("rec.recommender.similarities","user");
RecommenderSimilarity similarity = new CosineSimilarity();
similarity.buildSimilarityMatrix(dataModel);
生成 RecommenderSimilarity 对象之后,还需要调用 buildSimilarityMatrix 方法来进行相似度矩阵的计算。
下表为 LibRec 中已经实现的距离度量算法以及相应的简写。
Similarity | shortname |
---|---|
BinaryCosineSimilarity | bcos |
CosineSimilarity | cos |
CPCSimilarity | cpc |
MSESimilarity | msesim |
MSDSimilarity | msd |
PCCSimilarity | pcc |
KRCCSimilarity | krcc |
DiceCoefficientSimilarity | dice |
JaccardSimilarity | jaccard |
ExJaccardSimilarity | exjaccard |
Algorithms
在使用配置项和命令行运行 LibRec 时,执行的推荐算法由配置项 rec.recommender.class
指定.配置如下
rec.recommender.class=shortname #e.g. aobpr
不同算法的简写请参阅[Algorithm list.md](./Algorithm list)
在 java 实现中,实例 Configuration 对象, DataModel 对象, Similarity 矩阵对象之后,作为 RecommenderContext 的构造器参数生成 RecommenderContext 的对象. 此处可以直接实例相应的推荐算法类,因此无需设置配置项 rec.recommedner.class
. 示例代码如下:
RecommenderContext context = new RecommenderContext(conf, dataModel, similarity);
conf.set("rec.neighbors.knn.number","50");
conf.set("rec.recommender.isranking=false");
Recommender recommender = new UserKNNRecommender();
recommender.recommend(context);
推荐算法根据不同的计算方式具有各自相应的配置项. 目前 LibRec 中使用的推荐算法分别有基于矩阵分解算法,基于因子分解机算法,概率图模型,基于张量的算法等. 下面依次给出基于不同算法的推荐算法配置项. 一般来说,以矩阵分解为例,继承矩阵分解接口的推荐算法在进行推荐计算时除去配置矩阵分解的配置项之外,还需要配置其他配置项. 如 BPMF 算法中,还需要配置 rec.recommender.user.mu
等配置项。
实现基于以上算法的推荐系统只需继承相应的抽象类即可. 不同算法的配置项列举在下一栏,目前已经实现的所有推荐算法配置项列举在 Algorithm List 中。
AbstractRecommender
# if ranking
rec.recommender.isranking=true
rec.recommender.ranking.topn=10
直接实现 AbstractRecommender 抽象类的算法有
directory path | short name | algorithm |
---|---|---|
baseline | constantguess | ConstantGuessRecommender |
baseline | globalaverage | GlobalAverageRecommender |
baseline | itemaverage | ItemAverageRecommender |
baseline | mostpopular | MostPopularRecommender |
baseline | randomguess | RandomGuessRecommender |
baseline | useraverage | UserAverageRecommender |
cf.rating | rbm | RBMRecommender |
cf | itemknn | ItemKNNRecommender |
cf | userknn | UserKNNRecommender |
cf.ranking | slim | SLIMRecommender |
ext | associationrule | AssociationRuleRecommender |
ext | external | ExternalRecommender |
ext | personalitydiagnosis | PersonalityDiagnosisRecommender |
ext | slopeone | SlopeOneRecommender |
hybrid | hybrid | HybridRecommender |
Probabilistic Graphical Recommender
rec.iterator.maximum=1000
rec.pgm.burn-in=100
rec.pgm.samplelag=100
直接继承自 Probabilistic Graphical Recommender 的算法有
directory path | short name | algorithm |
---|---|---|
baseline | itemcluster | ItemClusterRecommender |
baseline | usercluster | UserClusterRecommender |
cf | bhfree | BHFreeRecommender |
cf | bucm | BUCMRecommender |
cf.ranking | aspectmodelranking | AspectModelRecommender |
cf.ranking | itembigram | ItemBigramRecommender |
cf.ranking | lda | LDARecommender |
cf.ranking | plsa | PLSARecommender |
cf.rating | aspectmodelrating | AspectModelRecommender |
cf.rating | gplsa | GPLSARecommender |
cf.rating | ldcc | LDCCRecommender |
cf.rating | urp | URPRecommender |
Matrix Factorization Recommender
rec.iterator.maximum=100
rec.iterator.learningrate=0.01
rec.iterator.learningrate.maximum=1000
rec.user.regularization=0.01
rec.item.regularization=0.01
rec.factor.number=10
rec.learningrate.bolddriver=false
rec.learningrate.decay=1.0
直接或间接继承 Matrix Factorization Recommender 的推荐算法有
directory path | short name | algorithm |
---|---|---|
cf.rating | asvdpp | ASVDPlusPlusRecommender |
cf.rating | svdpp | SVDPlusPlusRecommender |
content | efm | EFMRecommender |
content | hft | HFTRecommender |
context.rating | timesvd | TimeSVDRecommender |
cf.ranking | aobpr | AoBPRRecommender |
cf.ranking | bpr | BPRRecommender |
cf.ranking | climf | CLIMFRecommender |
cf.ranking | eals | EALSRecommender |
cf.ranking | fismauc | FISMaucRecommender |
cf.ranking | fismrmse | FISMrmseRecommender |
cf.ranking | gbpr | GBPRRecommender |
cf.ranking | listwisemf | ListwiseMFRecommender |
cf.ranking | rankals | RankALSRecommender |
cf.ranking | ranksgd | RankSGDRecommender |
cf.ranking | wbpr | WBPRRecommender |
cf.ranking | wrmf | WRMFRecommender |
cf.rating | biasedmf | BiasedMFRecommender |
cf.rating | bnpoissmf | BNPoissMFRecommender |
cf.rating | bpmf | BPMFRecommender |
cf.rating | bpoissmf | BPoissMFRecommender |
cf.rating | llorma | LLORMARecommender |
cf.rating | mfals | MFALSRecommender |
cf.rating | nmf | NMFRecommender |
cf.rating | pmf | PMFRecommender |
cf.rating | rfrec | RFRecRecommender |
Factorization Machine Recommender
rec.recommender.maxrate=12.0
rec.recommender.minrate=0.0
rec.factor.number=10
rec.fm.regw0=0.01
reg.fm.regW=0.01
reg.fm.regF=10
直接继承自 Factorization Machine Recommender 的算法有
directory path | short name | algorithm |
---|---|---|
cf.rating | fmals | FMALSRecommender |
cf.rating | fmsgd | FMSGDRecommender |
Social recommender
rec.iterator.maximum=100
rec.iterator.learningrate=0.01
rec.iterator.learningrate.maximum=1000
rec.user.regularization=0.01
rec.item.regularization=0.01
rec.factor.number=10
rec.learningrate.bolddriver=false
rec.learningrate.decay=1.0
rec.social.regularization=0.01
直接继承自 Social recommender 的算法有
directory path | short name | algorithm |
---|---|---|
context.rating | trustmf | TrustMFRecommender |
context.ranking | sbpr | SBPRRecommender |
context.rating | rste | RSTERecommender |
context.rating | socialmf | SocialMFRecommender |
context.rating | sorec | SoRecRecommender |
context.rating | soreg | SoRegRecommender |
context.rating | trustsvd | TrustSVDRecommender |
TensorRecommender
rec.recommender.verbose=true
rec.iterator.learningrate=0.01
rec.iterator.learningrate.maximum=1000
rec.factor.number=10
rec.tensor.regularization=0.01
直接继承自 Tensor Recommender 的算法有
directory path | short name | algorithm |
---|---|---|
context.rating | bptf | BPTFRecommender |
context.rating | pitf | PITFRecommender |
Implement your own algorithm
在 LibRec 中实现自己的算法,需要按照自己算法所属的类别,继承对应的抽象类,并按要求实现抽象方法,也可以按自己需求重写抽象类中的方法。 以继承 AbstractRecommender 为例,实现一个算法的大致流程如下:
1.重写 setup 方法(可选)
setup 方法主要完成的任务是对算法成员变量的初始化,例如从配置文件中读取参数的操作,可以写在这里。如果算法本身不需要额外配置参数,也可以不重写这个方法。
需要注意的是,在自己重写的 setup 方法中,需要首先调用原抽象类中的 setup 方法,即在第一行执行 super.setup(),保证算法的基本参数得到初始化。
2.实现 trainModel 方法
trainModel 方法完成的任务是算法模型的训练,例如对模型的 cost function 使用 gradient descent 进行训练的过程,可以写在这里。
3.实现 predict 方法
predict 方法完成的任务是,使用训练好的模型进行预测。
例如对于评分预测算法,在 predict 方法中需要对测试集中的每个评分值进行预测,即对于给定的 userIndex 和 ItemIndex,使用模型预测它们之间的评分。
具体的实现代码参考 LibRec 中 recommender 目录下的算法即可。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论