鍍金池/ 教程/ Java/ Recommender
FilmTrust
DataModel
Librec
Recommender
Filter
Configuration list
Evaluator
Introduction
DataFileFormat
Algorithm list
CommandLine walkthrough
Librec Document

Recommender

Similarity

相似性矩陣用于構(gòu)建數(shù)據(jù)集中user-user或者item-item之間的距離. 在使用命令行配置時(shí), 示例配置如下:

rec.similarity.class=cos
rec.recommender.similarities=user

其中rec.similarity.class為指定相應(yīng)的距離度量函數(shù). rec.recommender.similarities為指定user-user之間的距離或者item-item之間的距離. 在Social類的推薦方法中, 還可以指定計(jì)算social-social之間的距離.

在Java程序中, 相應(yīng)的示例程序如下

conf.set("rec.recommender.similarities","user");
RecommenderSimilarity similarity = new CosineSimilarity();
similarity.buildSimilarityMatrix(dataModel);

生成RecommenderSimilarity對象之后, 還需要調(diào)用buildSimilarityMatrix方法來進(jìn)行相似度矩陣的計(jì)算.

下表為LibRec中已經(jīng)實(shí)現(xiàn)的距離度量算法以及相應(yīng)的簡寫.

Similarity shortname
BinaryCosineSimilarity bcos
CosineSimilarity cos
CPCSimilarity cpc
MSESimilarity msesim
MSDSimilarity msd
PCCSimilarity pcc
KRCCSimilarity krcc
DiceCoefficientSimilarity dice
JaccardSimilarity jaccard
ExJaccardSimilarity exjaccard

Algorithms

在使用配置項(xiàng)和命令行運(yùn)行LibRec時(shí), 執(zhí)行的推薦算法由配置項(xiàng)rec.recommender.class指定.配置如下

rec.recommender.class=shortname #e.g. aobpr

不同算法的簡寫請參閱[Algorithm list.md](./Algorithm list)

在java實(shí)現(xiàn)中, 實(shí)例Configuration對象, DataModel對象, Similarity矩陣對象之后, 作為RecommenderContext的構(gòu)造器參數(shù)生成RecommenderContext的對象. 此處可以直接實(shí)例相應(yīng)的推薦算法類, 因此無需設(shè)置配置項(xiàng)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);

推薦算法根據(jù)不同的計(jì)算方式具有各自相應(yīng)的配置項(xiàng). 目前LibRec中使用的推薦算法分別有基于矩陣分解算法, 基于因子分解機(jī)算法, 概率圖模型, 基于張量的算法等. 下面依次給出基于不同算法的推薦算法配置項(xiàng). 一般來說, 以矩陣分解為例, 繼承矩陣分解接口的推薦算法在進(jìn)行推薦計(jì)算時(shí)除去配置矩陣分解的配置項(xiàng)之外, 還需要配置其他配置項(xiàng). 如BPMF算法中,還需要配置rec.recommender.user.mu等配置項(xiàng).

實(shí)現(xiàn)基于以上算法的推薦系統(tǒng)只需繼承相應(yīng)的抽象類即可. 不同算法的配置項(xiàng)列舉在下一欄, 目前已經(jīng)實(shí)現(xiàn)的所有推薦算法配置項(xiàng)列舉在Algorithm List中.

AbstractRecommender

# if ranking
rec.recommender.isranking=true
rec.recommender.ranking.topn=10

直接實(shí)現(xiàn)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中實(shí)現(xiàn)自己的算法,需要按照自己算法所屬的類別,繼承對應(yīng)的抽象類,并按要求實(shí)現(xiàn)抽象方法,也可以按自己需求重寫抽象類中的方法。 以繼承AbstractRecommender為例,實(shí)現(xiàn)一個(gè)算法的大致流程如下:

1.重寫setup方法(可選)
    setup方法主要完成的任務(wù)是對算法成員變量的初始化,例如從配置文件中讀取參數(shù)的操作,可以寫在這里。如果算法本身不需要額外配置參數(shù),也可以不重寫這個(gè)方法。
    需要注意的是,在自己重寫的setup方法中,需要首先調(diào)用原抽象類中的setup方法,即在第一行執(zhí)行super.setup(),保證算法的基本參數(shù)得到初始化。

2.實(shí)現(xiàn)trainModel方法
    trainModel方法完成的任務(wù)是算法模型的訓(xùn)練,例如對模型的cost function使用gradient descent進(jìn)行訓(xùn)練的過程,可以寫在這里。

3.實(shí)現(xiàn)predict方法
    predict方法完成的任務(wù)是,使用訓(xùn)練好的模型進(jìn)行預(yù)測。
    例如對于評分預(yù)測算法,在predict方法中需要對測試集中的每個(gè)評分值進(jìn)行預(yù)測,即對于給定的userIndex和ItemIndex,使用模型預(yù)測它們之間的評分。

具體的實(shí)現(xiàn)代碼參考LibRec中recommender目錄下的算法即可。

上一篇:Librec Document下一篇:DataFileFormat