The algorithm addresses the One Class Collaborative Filtering problem (OCCF) by turning it into a ranking problem and implicitly assuming that users prefer items they have already interacted with another time. Instead of applying rating prediction techniques, BPR ranks candidate items for a user without calculating a “virtual” rating.
The overall goal of the algorithm is to find a personalized total ranking \(>_u \subset I^2\) for any user \(u \in Users\) and pairs of items \((i,j) \in I^2\) that meet the properties of a total order (totality, anti-symmetry, transitivity).
The model uses a pair-wise interpretation of the implicit feedback matrix and tries to reconstruct for each user parts of \(>_u\), meaning a user's positive feedback represents a preference of the user over an item that the user did not provide any feedback on. In other words a positive only feedback will be transformed into positive and negative feedback in terms of pairs of items \((i,j)\), where the user prefers i over j (positive) and correspondingly rephrased dislikes j over i(negative).
Given \(\Theta\) the parameter vector of a model (in rrecsys the model is a factorized matrix) to determine the personalized ranking for any \(i \in I\), BPR aims to maximize \(p(\Theta | >_u) \propto p(>_u|\Theta) p(\Theta)\) posterior probabilities. Optimization of \(\Theta\) is achieved through a criterion called BPR-OPT which is related to the AUC metric and optimizes it implicitly. We optimized the parameter \(\Theta\) with gradient descent, by choosing randomly choosing triples \((u,i,j)\) from the training data.
bpr <- rrecsys(smallML, "BPR", k = 10, randomInit = FALSE, regU = .0025, regI = .0025, regJ = 0.0025, updateJ = TRUE)
bpr
k is he number of features, randomInit to randomly initialize to a small value the item and user feature matrix, regU the regularization term for user, regI the regularization term for positive item, updateJ a Boolean argument to impose if negative terms must be updated and regJ the regularization term for negative items. The above call is configured to the default values.
The returned object is of type BPRclass.
To configure the updater to a specific number of loops:
setStoppingCriteria(nrLoops = 10)
Default value is set to 10. The threshold controller configuration:
setStoppingCriteria(autoConverge = TRUE, deltaErrorThreshold = 1e-5, minNrLoops = 10)
Default values are given in the above call to the method.
The method uses the global environment and a configuration will be the same for all three algorithms that require this kind of iteration.
To get more details about the slots read the reference manual.