相似性矩陣用于構(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 |
在使用配置項(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中.
# 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 |
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 |
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 |
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 |
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 |
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 |
在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目錄下的算法即可。