@Override public RandomDataSplitStrategy get() { final int userNum = snapshot.userIndex().size(); final int itemNum = snapshot.itemIndex().size(); logger.info("Rating matrix size: {} users and {} items", userNum, itemNum); List<RatingMatrixEntry> allRatings = new ArrayList<>(snapshot.getRatings()); final int size = allRatings.size(); final int validationSize = Math.toIntExact(Math.round(size*proportion)); logger.info("validation set size: {} ratings", validationSize); Collections.shuffle(allRatings, random); List<RatingMatrixEntry> subList = allRatings.subList(0, validationSize); final List<RatingMatrixEntry> validationRatings = ImmutableList.copyOf(subList); subList.clear(); logger.info("validation rating size: {}", validationRatings.size()); final KeyIndex userIndex = snapshot.userIndex(); final KeyIndex itemIndex = snapshot.itemIndex(); return new RandomDataSplitStrategy(allRatings, validationRatings, userIndex, itemIndex); } }
double rmse = Double.MAX_VALUE * 0.5; double trail = initialValue * initialValue * (featureCount - feature - 1); List<RatingMatrixEntry> ratings = snapshot.getRatings(); int epoch = 0; while (rule.keepGoing(epoch, rmse, oldRMSE)) {
/** * Initialize the training estimator. * @param snap The getEntry snapshot. * @param baseline The baseline predictor. * @param dom The getEntry domain (for clamping). */ TrainingEstimator(RatingMatrix snap, BiasModel baseline, PreferenceDomain dom) { ratings = snap.getRatings(); domain = dom; estimates = new double[ratings.size()]; final LongCollection userIds = snap.getUserIds(); LongIterator userIter = userIds.iterator(); double global = baseline.getIntercept(); for (RatingMatrixEntry r: snap.getRatings()) { double userBias = baseline.getUserBias(r.getUserId()); double itemBias = baseline.getItemBias(r.getItemId()); estimates[r.getIndex()] = global + userBias + itemBias; } }
@Override public LeastSquaresItemScorer get() { Collection<RatingMatrixEntry> ratings = snapshot.getRatings(); logger.debug("training predictor on {} ratings", ratings.size());
featureCount, snapshot.getRatings().size());
/** * Initialize the training estimator. * @param snap The getEntry snapshot. * @param baseline The baseline predictor. * @param dom The getEntry domain (for clamping). */ TrainingEstimator(RatingMatrix snap, BiasModel baseline, PreferenceDomain dom) { ratings = snap.getRatings(); domain = dom; estimates = new double[ratings.size()]; final LongCollection userIds = snap.getUserIds(); LongIterator userIter = userIds.iterator(); double global = baseline.getIntercept(); for (RatingMatrixEntry r: snap.getRatings()) { double userBias = baseline.getUserBias(r.getUserId()); double itemBias = baseline.getItemBias(r.getItemId()); estimates[r.getIndex()] = global + userBias + itemBias; } }
@Override public LeastSquaresItemScorer get() { Collection<RatingMatrixEntry> ratings = snapshot.getRatings(); logger.debug("training predictor on {} ratings", ratings.size());
double trail = initialValue * initialValue * (featureCount - feature - 1); TrainingLoopController controller = rule.getTrainingLoopController(); List<RatingMatrixEntry> ratings = snapshot.getRatings(); while (controller.keepTraining(rmse)) { rmse = doFeatureIteration(estimates, ratings, userFeatureVector, itemFeatureVector, trail);
featureCount, snapshot.getRatings().size());