def buildModel(self):
loss_pre = sys.float_info.max
nonzeros = self.trainMatrix.nnz
hr_prev = 0.0
sys.stderr.write("Run for BPR. \n")
for itr in xrange(self.maxIter):
start = time.time()
# Each training epoch
for s in xrange(nonzeros):
# sample a user
u = np.random.randint(self.userCount)
itemList = self.trainMatrix.getrowview(u).rows[0]
if len(itemList) == 0:
continue
# sample a positive item
i = random.choice(itemList)
# One SGD step update
self.update_ui(u, i)
# Show progress
if self.showProgress:
self._showProgress(itr, start, self.testRatings)
# Show loss
if self.showLoss:
loss_pre = self._showLoss(itr, start, loss_pre)
if self.adaptive:
if not self.showProgress:
self.evaluate(self.testRatings)
hr = np.mean(self.ndcgs)
self.lr = self.lr * 1.05 if hr > hr_prev else self.lr * 0.5
hr_prev = hr
1. nnz
Number of stored values, including explicit zeros.
2. numpy.random.randint(low, high=None, size=None, dtype='l')