for (U user : data.getUsers()) { List<I> items = new ArrayList<>(); for (I i : data.getUserItems(user)) { items.add(i); Double pref = data.getUserItemPreference(user, item); Iterable<Long> time = data.getUserItemTimestamps(user, item); int curFold = n % nFolds; for (int i = 0; i < nFolds; i++) { datamodel.addPreference(user, item, pref); datamodel.addTimestamp(user, item, t); for (U u : data.getUsers()) { users.add(u); for (U user : users) { List<I> items = new ArrayList<>(); for (I i : data.getUserItems(user)) { items.add(i); Double pref = data.getUserItemPreference(user, item); Iterable<Long> time = data.getUserItemTimestamps(user, item); int curFold = n % nFolds; for (int i = 0; i < nFolds; i++) { datamodel.addPreference(user, item, pref);
public PreferenceDataWrapper(TemporalDataModelIF<Long, Long> data, FastUserIndex<Long> uIndex, FastItemIndex<Long> iIndex) { List<Tuple3<Long, Long, Double>> tuples = new ArrayList<>(); for (Long u : data.getUsers()) { for (Long i : data.getUserItems(u)) { tuples.add(new Tuple3<>(u, i, data.getUserItemPreference(u, i))); } } wrapper = SimpleFastPreferenceData.load(tuples.stream(), uIndex, iIndex); }
} 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); Iterable<Long> time = dm.getUserItemTimestamps(user, item); if (time == null) { out.println(user + delimiter + item + delimiter + pref + delimiter + "-1");
dataset.addPreference(userId, itemId, preference); if (timestamp != -1) { dataset.addTimestamp(userId, itemId, timestamp);
model.addPreference(user, recItem.getItem(), recItem.getScore());
for (Long time : temporalModel.getUserItemTimestamps(user, crossValidatedItem)) { times.add(time); if (hasTimestamps) { List<Long> times = new ArrayList<>(); for (Long time : temporalModel.getUserItemTimestamps(user, item)) { times.add(time);
splits = splitter.split(data); if (doDataClear) { data.clear();
for (U user : data.getUsers()) { List<I> items = new ArrayList<>(); data.getUserItems(user).forEach(i -> items.add(i)); Collections.shuffle(items, rnd); for (I item : items) { Double pref = data.getUserItemPreference(user, item); Iterable<Long> time = data.getUserItemTimestamps(user, item); int curFold = n % nFolds; for (int i = 0; i < nFolds; i++) { data.getUsers().forEach(u -> users.add(u)); Collections.shuffle(users, rnd); int n = 0; for (U user : users) { List<I> items = new ArrayList<>(); data.getUserItems(user).forEach(i -> items.add(i)); Collections.shuffle(items, rnd); for (I item : items) { Double pref = data.getUserItemPreference(user, item); Iterable<Long> time = data.getUserItemTimestamps(user, item); int curFold = n % nFolds; for (int i = 0; i < nFolds; i++) {
/** * A method that parses a line from the file. * * @param line the line to be parsed * @param dataset the dataset where the information parsed from the line * will be stored into. */ private void parseLine(final String line, final TemporalDataModelIF<Long, Long> dataset) { String[] toks; if (line.contains("::")) { toks = line.split("::"); } else { toks = line.split("\t"); } // user long userId = Long.parseLong(toks[USER_TOK]); // item long itemId = Long.parseLong(toks[ITEM_TOK]); // timestamp long timestamp = Long.parseLong(toks[TIME_TOK]); // preference double preference = Double.parseDouble(toks[RATING_TOK]); ////// // update information ////// dataset.addPreference(userId, itemId, preference); dataset.addTimestamp(userId, itemId, timestamp); } }
dataset.addPreference(userId, itemId, preference);
splits[1] = DataModelFactory.getDefaultTemporalModel(); // test if (perUser) { for (U user : data.getUsers()) { Set<Long> userTimestamps = new HashSet<>(); for (I i : data.getUserItems(user)) { for (Long t : data.getUserItemTimestamps(user, i)) { userTimestamps.add(t); for (I item : data.getUserItems(user)) { Double pref = data.getUserItemPreference(user, item); boolean inTest = false; for (Long time : data.getUserItemTimestamps(user, item)) { if (testTimestamps.contains(time)) { inTest = true; datamodel.addPreference(user, item, pref); for (Long time : data.getUserItemTimestamps(user, item)) { datamodel.addTimestamp(user, item, time); for (I item : data.getUserItems(user)) { Double pref = data.getUserItemPreference(user, item); for (Long time : data.getUserItemTimestamps(user, item)) { TemporalDataModelIF<U, I> datamodel = splits[0]; // training if (testTimestamps.contains(time)) { datamodel.addPreference(user, item, pref); datamodel.addTimestamp(user, item, time);
/** * Constructs the wrapper using the provided model. * * @param model the model to be used to create the wrapped model */ public EventDAOWrapper(final TemporalDataModelIF<Long, Long> model) { List<Rating> events = new ArrayList<>(); RatingBuilder rb = new RatingBuilder(); for (Long u : model.getUsers()) { rb.setUserId(u); for (Long i : model.getUserItems(u)) { rb.setItemId(i); rb.setRating(model.getUserItemPreference(u, i)); Iterable<Long> timestamps = model.getUserItemTimestamps(u, i); long t = -1; if (timestamps != null) { for (Long tt : timestamps) { t = tt; break; } } rb.setTimestamp(t); events.add(rb.build()); } } wrapper = EntityCollectionDAO.create(events); }
dataset.addPreference(userId, itemId, preference); if (timestamp != -1) { dataset.addTimestamp(userId, itemId, timestamp);
splits[1] = new TemporalDataModel<>(); // test if (perUser) { for (U user : data.getUsers()) { if (doSplitPerItems) { List<I> items = new ArrayList<>(); data.getUserItems(user).forEach(items::add); Collections.shuffle(items, rnd); int splitPoint = Math.round(percentageTraining * items.size()); for (int i = 0; i < items.size(); i++) { I item = items.get(i); Double pref = data.getUserItemPreference(user, item); Iterable<Long> time = data.getUserItemTimestamps(user, item); TemporalDataModelIF<U, I> datamodel = splits[0]; // training if (i > splitPoint) { datamodel.addPreference(user, item, pref); datamodel.addTimestamp(user, item, t); for (I i : data.getUserItems(user)) { for (Long t : data.getUserItemTimestamps(user, i)) { itemsTime.add(new Pair<>(i, t)); I item = it.getFirst(); Long time = it.getSecond(); Double pref = data.getUserItemPreference(user, item); TemporalDataModelIF<U, I> datamodel = splits[0]; // training if (i > splitPoint) {
for (Long u : model.getUsers()) { for (Long i : model.getUserItems(u)) { Double d = model.getUserItemPreference(u, i); Iterable<Long> time = model.getUserItemTimestamps(u, i); if (time == null) { out.println(u + "\t" + i + "\t" + d);
/** * {@inheritDoc} */ @Override public TemporalDataModelIF<Long, Long> parseTemporalData(final File f) throws IOException { TemporalDataModelIF<Long, Long> dataset = DataModelFactory.getDefaultTemporalModel(); Reader in = new InputStreamReader(new FileInputStream(f), "UTF-8"); Iterable<CSVRecord> records; if (isHasHeader()) { records = CSVFormat.EXCEL.withDelimiter(getDelimiter()).withHeader().parse(in); } else { records = CSVFormat.EXCEL.withDelimiter(getDelimiter()).parse(in); } for (CSVRecord record : records) { long userID = Long.parseLong(record.get(getUserTok())); long itemID = Long.parseLong(record.get(getItemTok())); long timestamp = -1L; if (getTimeTok() != -1) { timestamp = Long.parseLong(record.get(getTimeTok())); } double preference = Double.parseDouble(record.get(getPrefTok())); dataset.addPreference(userID, itemID, preference); dataset.addTimestamp(userID, itemID, timestamp); } in.close(); return dataset; }
/** * Constructs the wrapper using the provided model. * * @param model the model to be used to create the wrapped model */ public DataModelWrapper(final net.recommenders.rival.core.TemporalDataModelIF<Long, Long> model) { FastByIDMap<Collection<Preference>> data = new FastByIDMap<Collection<Preference>>(); FastByIDMap<FastByIDMap<Long>> timestampData = new FastByIDMap<FastByIDMap<Long>>(); for (Long u : model.getUsers()) { List<Preference> prefs = new ArrayList<Preference>(); FastByIDMap<Long> userTimestamps = new FastByIDMap<Long>(); timestampData.put(u, userTimestamps); for (Long i : model.getUserItems(u)) { Iterable<Long> timestamps = model.getUserItemTimestamps(u, i); long t = -1; if (timestamps != null) { for (Long tt : timestamps) { t = tt; break; } } userTimestamps.put(i, t); prefs.add(new GenericPreference(u, i, model.getUserItemPreference(u, i).floatValue())); } data.put(u, prefs); } FastByIDMap<PreferenceArray> userData = GenericDataModel.toDataMap(data, true); wrapper = new GenericDataModel(userData, timestampData); }