/* a hold out test would be better, but this is just a toy example so we only check that the
* factorization is close to the original matrix */
RunningAverage avg = new FullRunningAverage();
LongPrimitiveIterator userIDs = dataModel.getUserIDs();
while (userIDs.hasNext()) {
long userID = userIDs.nextLong();
for (Preference pref : dataModel.getPreferencesFromUser(userID)) {
double rating = pref.getValue();
double estimate = svdRecommender.estimatePreference(userID, pref.getItemID());
double err = rating - estimate;
avg.addDatum(err * err);