返回介绍

Recommender

发布于 2025-02-22 11:29:56 字数 10197 浏览 0 评论 0 收藏 0

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 中已经实现的距离度量算法以及相应的简写。

Similarityshortname
BinaryCosineSimilaritybcos
CosineSimilaritycos
CPCSimilaritycpc
MSESimilaritymsesim
MSDSimilaritymsd
PCCSimilaritypcc
KRCCSimilaritykrcc
DiceCoefficientSimilaritydice
JaccardSimilarityjaccard
ExJaccardSimilarityexjaccard

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 pathshort namealgorithm
baselineconstantguessConstantGuessRecommender
baselineglobalaverageGlobalAverageRecommender
baselineitemaverageItemAverageRecommender
baselinemostpopularMostPopularRecommender
baselinerandomguessRandomGuessRecommender
baselineuseraverageUserAverageRecommender
cf.ratingrbmRBMRecommender
cfitemknnItemKNNRecommender
cfuserknnUserKNNRecommender
cf.rankingslimSLIMRecommender
extassociationruleAssociationRuleRecommender
extexternalExternalRecommender
extpersonalitydiagnosisPersonalityDiagnosisRecommender
extslopeoneSlopeOneRecommender
hybridhybridHybridRecommender

Probabilistic Graphical Recommender

rec.iterator.maximum=1000
rec.pgm.burn-in=100
rec.pgm.samplelag=100

直接继承自 Probabilistic Graphical Recommender 的算法有

directory pathshort namealgorithm
baselineitemclusterItemClusterRecommender
baselineuserclusterUserClusterRecommender
cfbhfreeBHFreeRecommender
cfbucmBUCMRecommender
cf.rankingaspectmodelrankingAspectModelRecommender
cf.rankingitembigramItemBigramRecommender
cf.rankingldaLDARecommender
cf.rankingplsaPLSARecommender
cf.ratingaspectmodelratingAspectModelRecommender
cf.ratinggplsaGPLSARecommender
cf.ratingldccLDCCRecommender
cf.ratingurpURPRecommender

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 pathshort namealgorithm
cf.ratingasvdppASVDPlusPlusRecommender
cf.ratingsvdppSVDPlusPlusRecommender
contentefmEFMRecommender
contenthftHFTRecommender
context.ratingtimesvdTimeSVDRecommender
cf.rankingaobprAoBPRRecommender
cf.rankingbprBPRRecommender
cf.rankingclimfCLIMFRecommender
cf.rankingealsEALSRecommender
cf.rankingfismaucFISMaucRecommender
cf.rankingfismrmseFISMrmseRecommender
cf.rankinggbprGBPRRecommender
cf.rankinglistwisemfListwiseMFRecommender
cf.rankingrankalsRankALSRecommender
cf.rankingranksgdRankSGDRecommender
cf.rankingwbprWBPRRecommender
cf.rankingwrmfWRMFRecommender
cf.ratingbiasedmfBiasedMFRecommender
cf.ratingbnpoissmfBNPoissMFRecommender
cf.ratingbpmfBPMFRecommender
cf.ratingbpoissmfBPoissMFRecommender
cf.ratingllormaLLORMARecommender
cf.ratingmfalsMFALSRecommender
cf.ratingnmfNMFRecommender
cf.ratingpmfPMFRecommender
cf.ratingrfrecRFRecRecommender

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 pathshort namealgorithm
cf.ratingfmalsFMALSRecommender
cf.ratingfmsgdFMSGDRecommender

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 pathshort namealgorithm
context.ratingtrustmfTrustMFRecommender
context.rankingsbprSBPRRecommender
context.ratingrsteRSTERecommender
context.ratingsocialmfSocialMFRecommender
context.ratingsorecSoRecRecommender
context.ratingsoregSoRegRecommender
context.ratingtrustsvdTrustSVDRecommender

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 pathshort namealgorithm
context.ratingbptfBPTFRecommender
context.ratingpitfPITFRecommender

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文