/** * Calculates the weight for two users over all items they share recorded ratings for. * * @param train User object for particular user in training data. * @param test User object for active user. * @return Returns a Double representing the computed weight. */ public static double calculateWeight(User train, User test) { double numSum = 0; double denTestSum = 0; double denTrainSum = 0; Map<Integer, Rating> ratings = train.getRatings(); for (Rating r : test.getRatings().values()) { if (ratings.containsKey(r.getMovieId())) { numSum += (r.getRating() - test.getMean()) * (ratings.get(r.getMovieId()).getRating() - train.getMean()); denTestSum += Math.pow(r.getRating() - test.getMean(), 2); denTrainSum += Math.pow(ratings.get(r.getMovieId()).getRating() - train.getMean(), 2); } } return (denTestSum == 0 || denTrainSum == 0) ? 0 : numSum / Math.sqrt(denTestSum * denTrainSum); }