for (RatingMatrixEntry r : ratings) { final int uidx = r.getUserIndex(); final int iidx = r.getItemIndex(); final double p = mean + uoff[uidx] + ioff[iidx]; final double err = r.getValue() - p;
/** * Update the current estimates with trained values for a new feature. * @param ufvs The user feature values. * @param ifvs The item feature values. */ public void update(RealVector ufvs, RealVector ifvs) { for (RatingMatrixEntry r : ratings) { int idx = r.getIndex(); double est = estimates[idx]; est += ufvs.getEntry(r.getUserIndex()) * ifvs.getEntry(r.getItemIndex()); if (domain != null) { est = domain.clampValue(est); } estimates[idx] = est; } } }
RatingMatrixEntry ratingEntry = valIter.next(); int user = ratingEntry.getUserIndex(); int item = ratingEntry.getItemIndex(); double rating = ratingEntry.getValue(); double eThetaBeta = 0.0;
final int iidx = r.getItemIndex();
@Test public void testAddPreference() { int idx = bld.add(10, 39, 3.5); assertThat(idx, equalTo(0)); assertThat(bld.size(), equalTo(1)); PackedRatingData data = bld.build(); assertThat(data.size(), equalTo(1)); RatingMatrixEntry p2 = data.getEntry(0); assertThat(p2.getIndex(), equalTo(0)); assertThat(p2.getUserIndex(), equalTo(0)); assertThat(p2.getItemIndex(), equalTo(0)); assertThat(p2.getUserId(), equalTo(10L)); assertThat(p2.getItemId(), equalTo(39L)); assertThat(p2.getValue(), equalTo(3.5)); }
final int item = ratings.get(0).getItemIndex(); final double itemWeightShpPrior = hyperParameters.getItemWeightShpPrior(); final double itemActivityShpPrior = hyperParameters.getItemActivityShpPrior();
while (userRatings.hasNext()) { RatingMatrixEntry entry = userRatings.next(); int item = entry.getItemIndex(); double rating = entry.getValue(); if (rating <= 0) {
while (allUIPairs.hasNext()) { RatingMatrixEntry entry = allUIPairs.next(); int item = entry.getItemIndex(); int user = entry.getUserIndex(); double ratingUI = entry.getValue(); RatingMatrixEntry ratingEntry = valIter.next(); int user = ratingEntry.getUserIndex(); int item = ratingEntry.getItemIndex(); double rating = ratingEntry.getValue(); double eThetaBeta = 0.0;
int item = re.getItemIndex(); long userId = re.getUserId(); long itemId = re.getItemId(); for (RatingMatrixEntry re : trainingRatings) { int user = re.getUserIndex(); int item = re.getItemIndex(); long userId = userIndex.getKey(user); long itemId = itemIndex.getKey(item);
@Test public void testGetRatings() throws Exception { RandomDataSplitStrategyProvider splitData = new RandomDataSplitStrategyProvider(snapshot, new Random(), 0, 0.2); DataSplitStrategy splitStrategy = splitData.get(); KeyIndex userIndex = splitStrategy.getUserIndex(); KeyIndex itemIndex = splitStrategy.getItemIndex(); List<RatingMatrixEntry> validations = splitStrategy.getValidationRatings(); List<RatingMatrixEntry> trainingRatings = splitStrategy.getTrainRatings(); for (RatingMatrixEntry re : trainingRatings) { int user = re.getUserIndex(); int item = re.getItemIndex(); long userId = userIndex.getKey(user); long itemId = itemIndex.getKey(item); double rating = re.getValue(); assertThat(rating, equalTo(snapshot.getUserRatingVector(userId).get(itemId))); assertThat(rating, equalTo(data.get(itemId).get(userId))); } for (RatingMatrixEntry re : validations) { long userId = re.getUserId(); long itemId = re.getItemId(); double rating = re.getValue(); assertThat(rating, equalTo(snapshot.getUserRatingVector(userId).get(itemId))); assertThat(rating, equalTo(data.get(itemId).get(userId))); } }
/** * Update the current estimates with trained values for a new feature. * @param ufvs The user feature values. * @param ifvs The item feature values. */ public void update(RealVector ufvs, RealVector ifvs) { for (RatingMatrixEntry r : ratings) { int idx = r.getIndex(); double est = estimates[idx]; est += ufvs.getEntry(r.getUserIndex()) * ifvs.getEntry(r.getItemIndex()); if (domain != null) { est = domain.clampValue(est); } estimates[idx] = est; } } }
for (RatingMatrixEntry r : ratings) { final int uidx = r.getUserIndex(); final int iidx = r.getItemIndex(); final double p = mean + uoff[uidx] + ioff[iidx]; final double err = r.getValue() - p;
/** * Do a single feature iteration. * * * * @param estimates The estimates. * @param ratings The ratings to train on. * @param userFeatureVector The user column vector for the current feature. * @param itemFeatureVector The item column vector for the current feature. * @param trail The sum of the remaining user-item-feature values. * @return The RMSE of the feature iteration. */ protected double doFeatureIteration(TrainingEstimator estimates, List<RatingMatrixEntry> ratings, RealVector userFeatureVector, RealVector itemFeatureVector, double trail) { // We'll create a fresh updater for each feature iteration // Not much overhead, and prevents needing another parameter FunkSVDUpdater updater = rule.createUpdater(); for (RatingMatrixEntry r : ratings) { final int uidx = r.getUserIndex(); final int iidx = r.getItemIndex(); updater.prepare(0, r.getValue(), estimates.get(r), userFeatureVector.getEntry(uidx), itemFeatureVector.getEntry(iidx), trail); // Step 3: Update feature values userFeatureVector.addToEntry(uidx, updater.getUserFeatureUpdate()); itemFeatureVector.addToEntry(iidx, updater.getItemFeatureUpdate()); } return updater.getRMSE(); }