The similarity matrix is used to construct the distance between user and user or item and item in the data set. The example is shown as follows.
rec.similarity.class=cos
rec.recommender.similarities=user
rec.similarity.class
is the distance measure function. rec.recommender.similarities
is the distance of a specified user-user pair or a item-item pair. For the Social recommendation algorithms, users can also specify the distance of a social-social pair.
In the Java program, the corresponding sample program is shown as follows.
conf.set("rec.recommender.similarities","user");
RecommenderSimilarity similarity = new CosineSimilarity();
similarity.buildSimilarityMatrix(dataModel);
After generating the RecommenderSimilarity object, users need to call the buildSimilarityMatrix method to build the similarity matrix.
The table below is the distance measure functions and corresponding abbreviations in LibRec.
Similarity | shortname |
---|---|
BinaryCosineSimilarity | bcos |
CosineSimilarity | cos |
CPCSimilarity | cpc |
MSESimilarity | msesim |
MSDSimilarity | msd |
PCCSimilarity | pcc |
KRCCSimilarity | krcc |
DiceCoefficientSimilarity | dice |
JaccardSimilarity | jaccard |
ExJaccardSimilarity | exjaccard |
When users use the configuration and command line to run programs, the recommendation algorithm is specified by rec.recommender.class
. The configuration is shown as follows.
rec.recommender.class=shortname #e.g. aobpr
Please refer to [Algorithm list.md](./Algorithm list) for the abbreviations of different algorithms.
In the Java implementation, after making instances of the Configuration object, the DataModel object, and the Similarity matrix object, these three instances are passed in as constructor parameters to generate the RecommenderContext object. Users can make the corresponding instance of the recommendation algorithm, that is to say, no need to set the rec.recommedner.class
configuration. The example code is shown as follows.
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.train(context);
Each recommendation algorithm has its own configurations according to different algorithm categories. Current recommendation algorithms implemented in LibRec are matrix-decomposition-based, factor-factorization-based, probability-graph-model-based, and tensor-based. The following part gives different configurations based on different algorithms. In general, taking the matrix factorization for example, making recommendations by inheriting the interface of matrix factorization algorithms not only needs to set the configuration of matrix factorization, but also needs to set other configurations. For example, the BPMF also needs to configure rec.recommender.user.mu
and other configurations.
The implementation of the recommendation algorithms based on the above algorithms, which only needs to inherit the corresponding abstract classes. Different algorithms are listed in the following table. All the recommendation algorithm configurations are listed in Algorithm List.
# if ranking
rec.recommender.isranking=true
rec.recommender.ranking.topn=10
The algorithms that directly implement the AbstractRecommender abstract class are shown as follows.
directory path | short name | algorithm |
---|---|---|
poi | usg | USGRecommender |
directory path | short name | algorithm |
---|---|---|
baseline | constantguess | ConstantGuessRecommender |
baseline | globalaverage | GlobalAverageRecommender |
baseline | itemaverage | ItemAverageRecommender |
baseline | mostpopular | MostPopularRecommender |
baseline | randomguess | RandomGuessRecommender |
baseline | useraverage | UserAverageRecommender |
cf | itemknn | ItemKNNRecommender |
cf | userknn | UserKNNRecommender |
cf.rating | rbm | RBMRecommender |
ext | associationrule | AssociationRuleRecommender |
ext | bipolarslopeone | BipolarSlopeOneRecommender |
ext | external | ExternalRecommender |
ext | personalitydiagnosis | PersonalityDiagnosisRecommender |
ext | slopeone | SlopeOneRecommender |
hybrid | hybrid | HybridRecommender |
nn.ranking | cdae | CDAERecommender |
nn.rating | autorec | AutoRecRecommender |
rec.iterator.maximum=1000
rec.pgm.burn-in=100
rec.pgm.samplelag=100
The algorithms that directly inherit the MatrixProbabilisticGraphicalRecommender class are shown as follows.
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
The algorithms that directly or indirectly inherit the Matrix Factorization Recommender class are shown as follows.
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 | bnppf | BNPPFRecommeder |
cf.ranking | bpoissmf | BPoissMFRecommender |
cf.ranking | bpr | BPRRecommender |
cf.ranking | climf | CLIMFRecommender |
cf.ranking | cofiset | CoFiSetRecommender |
cf.ranking | eals | EALSRecommender |
cf.ranking | fismauc | FISMaucRecommender |
cf.ranking | fismrmse | FISMrmseRecommender |
cf.ranking | gbpr | GBPRRecommender |
cf.ranking | listwisemf | ListwiseMFRecommender |
cf.ranking | nmfitemitem | NMFItemItemRecommender |
cf.ranking | pnmf | PNMFRecommender |
cf.ranking | rankals | RankALSRecommender |
cf.ranking | rankpmf | RankPMFRecommender |
cf.ranking | ranksgd | RankSGDRecommender |
cf.ranking | slim | SLIMRecommender |
cf.ranking | wbpr | WBPRRecommender |
cf.ranking | wrmf | WRMFRecommender |
cf.rating | biasedmf | BiasedMFRecommender |
cf.rating | bnpoissmf | BNPoissMFRecommender |
cf.rating | bpmf | BPMFRecommender |
cf.rating | irrg | IRRGRecommender |
cf.rating | llorma | LLORMARecommender |
cf.rating | mfals | MFALSRecommender |
cf.rating | nmf | NMFRecommender |
cf.rating | pmf | PMFRecommender |
cf.rating | rbm | RBMRecommender |
cf.rating | remf | ReMFRecommender |
cf.rating | rfrec | RFRecRecommender |
poi | rankgeofm | RankGeoFMRecommender |
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
The algorithms that directly inherit the Factorization Machine Recommender class are shown as follows.
directory path | short name | algorithm |
---|---|---|
cf.rating | ffm | FFMRecommender |
cf.rating | fmals | FMALSRecommender |
cf.rating | fmftrl | FMFTRLRecommender |
cf.rating | fmsgd | FMSGDRecommender |
context.ranking | dlambdafm | DLambdaFMRecommender |
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
The algorithms that directly inherit the Social Recommender class are shown as follows.
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
The algorithms that directly inherit the Tensor Recommender class are shown as follows.
directory path | short name | algorithm |
---|---|---|
content | convmf | ConvMFRecommender |
content | efm | EFMRecommender |
content | hft | HFTRecommender |
content | tfidf | TFIDFRecommender |
content | topicmfat | TopicMFATRecommender |
content | topicmfmt | TopicMFMTRecommender |
context.rating | cptf | CPTFRecommender |
Implementing users' own algorithms in LibRec needs to inherit the corresponding abstract class according to the algorithm's category. And users need to implement the abstract methods, or re-write the methods in the abstract class. In order to inherit the AbstractRecommender class, for example, the implementation of an algorithm is shown as follows.
1. Re-write the setup method (optional)
The main task of the setup method is to initialize the member variables. For example, reading arguments from the configuration file. If the algorithm does not need to set extra configurations, the program does not need to re-write the methods.
It should be noted that, in the rewrite of the setup method, users need to call the original abstract class in the setup method. That is, to put super.setup() in the first line of the implementation, to ensure that the basic parameters of the algorithm is initialized.
2. Implement the trainModel Method
The trainModel method accomplish the task of training the model. For example, using gradient descent to optimize the cost function of the model.
3. Implement the Predict Method
The task of the Predict method is to use the trained model to make predictions.
For example, for rating prediction algorithms, the predict method is used to predict each rating in the test set. Particularly, for a given userIndex and itemIndex, using the model to predict the rating score of userIndex-itemIndex pair.
Please refer to the exact implementation in the recommender directory.