/** * Method that saves a data model to a file. * * @param dm the data model * @param outfile file where the model will be saved * @param overwrite flag that indicates if the file should be overwritten * @param delimiter field delimiter * @param <U> type of users * @param <I> type of items * @throws FileNotFoundException when outfile cannot be used. * @throws UnsupportedEncodingException when the requested encoding (UTF-8) * is not available. */ public static <U, I> void saveDataModel(final DataModelIF<U, I> dm, final String outfile, final boolean overwrite, final String delimiter) throws FileNotFoundException, UnsupportedEncodingException { if (new File(outfile).exists() && !overwrite) { System.out.println("Ignoring " + outfile); } else { PrintStream out = new PrintStream(outfile, "UTF-8"); for (U user : dm.getUsers()) { for (I item : dm.getUserItems(user)) { Double pref = dm.getUserItemPreference(user, item); out.println(user + delimiter + item + delimiter + pref); } } out.close(); } }
for (U user : data.getUsers()) {
for (Long user : testModel.getUsers()) { if (outRanking != null) { final List<Pair<Long, Double>> allScoredItems = mapUserRecommendations.get(user);
for (U user : testModel.getUsers()) { out.println(metricName + "\t" + user + "\t" + metric.getValue(user)); if (metric instanceof AbstractRankingMetric) {
outGroundtruth = new PrintStream(groundtruthFile, "UTF-8"); for (Long user : testModel.getUsers()) { if (outRanking != null) { final List<Pair<Long, Double>> allScoredItems = readScoredItems(userRecommendationFile, user);
/** * Method that transforms the user data from pairs of (item, score) into * ranked lists of relevance values, by using ground truth information. * * @return a map with the transformed data, one list per user */ public Map<U, List<Pair<I, Double>>> processDataAsRankedTestRelevance() { Map<U, List<Pair<I, Double>>> data = new HashMap<U, List<Pair<I, Double>>>(); for (U testUser : getTest().getUsers()) { Map<I, Double> userPredictedRatings = new HashMap<>(); for (I i : getPredictions().getUserItems(testUser)) { userPredictedRatings.put(i, getPredictions().getUserItemPreference(testUser, i)); } if (!userPredictedRatings.isEmpty()) { List<Pair<I, Double>> rankedTestRel = new ArrayList<Pair<I, Double>>(); for (I item : rankItems(userPredictedRatings)) { double rel = getTest().getUserItemPreference(testUser, item); if (Double.isNaN(rel)) { rel = 0.0; } rankedTestRel.add(new Pair<I, Double>(item, rel)); } data.put(testUser, rankedTestRel); } } return data; }
for (Long user : recModel.getUsers()) { for (Long item : strategy.getCandidateItemsToRank(user)) { if (!Double.isNaN(recModel.getUserItemPreference(user, item))) {
for (Long user : recModel.getUsers()) { for (Long item : strategy.getCandidateItemsToRank(user)) { if (!Double.isNaN(recModel.getUserItemPreference(user, item))) {
for (Long user : recModel.getUsers()) { assert strategy != null; for (Long item : strategy.getCandidateItemsToRank(user)) {
emptyUsers = 0; for (U testUser : getTest().getUsers()) { List<Double> userData = data.get(testUser); if (userData == null) {
for (Long user : recModel.getUsers()) { assert strategy != null; for (Long item : strategy.getCandidateItemsToRank(user)) {
for (Long user : recModel.getUsers()) { assert strategy != null; for (Long item : strategy.getCandidateItemsToRank(user)) {
for (Long user : recModel.getUsers()) { assert strategy != null; for (Long item : strategy.getCandidateItemsToRank(user)) {
for (U testUser : getTest().getUsers()) { int userItems = 0; double umse = 0.0;
for (U testUser : getTest().getUsers()) { int userItems = 0; double ume = 0.0;