public override void SetUp() { base.SetUp(); FastByIDMap <IPreferenceArray> userData = new FastByIDMap <IPreferenceArray>(); userData.Put(1L, new GenericUserPreferenceArray(new List <IPreference>() { new GenericPreference(1L, 1L, 5.0f), new GenericPreference(1L, 2L, 5.0f), new GenericPreference(1L, 3L, 2.0f) })); userData.Put(2L, new GenericUserPreferenceArray(new List <IPreference>() { new GenericPreference(2L, 1L, 2.0f), new GenericPreference(2L, 3L, 3.0f), new GenericPreference(2L, 4L, 5.0f) })); userData.Put(3L, new GenericUserPreferenceArray(new List <IPreference>() { new GenericPreference(3L, 2L, 5.0f), new GenericPreference(3L, 4L, 3.0f) })); userData.Put(4L, new GenericUserPreferenceArray(new List <IPreference>() { new GenericPreference(4L, 1L, 3.0f), new GenericPreference(4L, 4L, 5.0f) })); dataModel = new GenericDataModel(userData); factorizer = new ALSWRFactorizer(dataModel, 3, 0.065, 10); }
public Features(ALSWRFactorizer factorizer) { dataModel = factorizer.dataModel; numFeatures = factorizer.numFeatures; var random = RandomUtils.getRandom(); M = new double[dataModel.GetNumItems()][]; //numFeatures var itemIDsIterator = dataModel.GetItemIDs(); while (itemIDsIterator.MoveNext()) { long itemID = itemIDsIterator.Current; int itemIDIndex = factorizer.itemIndex(itemID); M[itemIDIndex] = new double[numFeatures]; M[itemIDIndex][0] = averateRating(itemID); for (int feature = 1; feature < numFeatures; feature++) { M[itemIDIndex][feature] = random.nextDouble() * 0.1; } } U = new double[dataModel.GetNumUsers()][]; //numFeatures for (int i = 0; i < U.Length; i++) { U[i] = new double[numFeatures]; } }
public void ratingVector() { IPreferenceArray prefs = dataModel.GetPreferencesFromUser(1); double[] ratingVector = ALSWRFactorizer.ratingVector(prefs); Assert.AreEqual(prefs.Length(), ratingVector.Length); Assert.AreEqual(prefs.Get(0).GetValue(), ratingVector[0], EPSILON); Assert.AreEqual(prefs.Get(1).GetValue(), ratingVector[1], EPSILON); Assert.AreEqual(prefs.Get(2).GetValue(), ratingVector[2], EPSILON); }
public void toyExampleImplicit() { var observations = new double[4, 4] { { 5.0, 5.0, 2.0, 0 }, { 2.0, 0, 3.0, 5.0 }, { 0, 5.0, 0, 3.0 }, { 3.0, 0, 0, 5.0 } }; var preferences = new double[4, 4] { { 1.0, 1.0, 1.0, 0 }, { 1.0, 0, 1.0, 1.0 }, { 0, 1.0, 0, 1.0 }, { 1.0, 0, 0, 1.0 } }; double alpha = 20; ALSWRFactorizer factorizer = new ALSWRFactorizer(dataModel, 3, 0.065, 5, true, alpha); SVDRecommender svdRecommender = new SVDRecommender(dataModel, factorizer); IRunningAverage avg = new FullRunningAverage(); for (int sliceIdx = 0; sliceIdx < preferences.GetLength(0); sliceIdx++) { var slice = MatrixUtil.viewRow(preferences, sliceIdx); for (var eIndex = 0; eIndex < slice.Length; eIndex++) { var e = slice[eIndex]; long userID = sliceIdx + 1; long itemID = eIndex + 1; if (!Double.IsNaN(e)) { double pref = e; double estimate = svdRecommender.EstimatePreference(userID, itemID); double confidence = 1 + alpha * observations[sliceIdx, eIndex]; double err = confidence * (pref - estimate) * (pref - estimate); avg.AddDatum(err); Console.WriteLine("Comparing preference of user [{0}] towards item [{1}], was [{2}] with confidence [{3}] " + "estimate is [{4}]", sliceIdx, eIndex, pref, confidence, estimate); } } } double rmse = Math.Sqrt(avg.GetAverage()); Console.WriteLine("RMSE: {0}", rmse); Assert.True(rmse < 0.4); }
public void toyExampleImplicit() { var observations = new double[4,4] { { 5.0, 5.0, 2.0, 0 }, { 2.0, 0, 3.0, 5.0 }, { 0, 5.0, 0, 3.0 }, { 3.0, 0, 0, 5.0 } }; var preferences = new double[4, 4] { { 1.0, 1.0, 1.0, 0 }, { 1.0, 0, 1.0, 1.0 }, { 0, 1.0, 0, 1.0 }, { 1.0, 0, 0, 1.0 } }; double alpha = 20; ALSWRFactorizer factorizer = new ALSWRFactorizer(dataModel, 3, 0.065, 5, true, alpha); SVDRecommender svdRecommender = new SVDRecommender(dataModel, factorizer); IRunningAverage avg = new FullRunningAverage(); for (int sliceIdx = 0; sliceIdx < preferences.GetLength(0); sliceIdx++) { var slice = MatrixUtil.viewRow(preferences, sliceIdx); for (var eIndex=0; eIndex<slice.Length; eIndex++) { var e = slice[eIndex]; long userID = sliceIdx + 1; long itemID = eIndex + 1; if (!Double.IsNaN(e)) { double pref = e; double estimate = svdRecommender.EstimatePreference(userID, itemID); double confidence = 1 + alpha * observations[sliceIdx, eIndex]; double err = confidence * (pref - estimate) * (pref - estimate); avg.AddDatum(err); Console.WriteLine("Comparing preference of user [{0}] towards item [{1}], was [{2}] with confidence [{3}] " + "estimate is [{4}]", sliceIdx, eIndex, pref, confidence, estimate); } } } double rmse = Math.Sqrt(avg.GetAverage()); Console.WriteLine("RMSE: {0}", rmse); Assert.True(rmse < 0.4); }
public override void SetUp() { base.SetUp(); FastByIDMap<IPreferenceArray> userData = new FastByIDMap<IPreferenceArray>(); userData.Put(1L, new GenericUserPreferenceArray( new List<IPreference>() {new GenericPreference(1L, 1L, 5.0f), new GenericPreference(1L, 2L, 5.0f), new GenericPreference(1L, 3L, 2.0f) } )); userData.Put(2L, new GenericUserPreferenceArray( new List<IPreference>() {new GenericPreference(2L, 1L, 2.0f), new GenericPreference(2L, 3L, 3.0f), new GenericPreference(2L, 4L, 5.0f) } )); userData.Put(3L, new GenericUserPreferenceArray( new List<IPreference>() {new GenericPreference(3L, 2L, 5.0f), new GenericPreference(3L, 4L, 3.0f) } )); userData.Put(4L, new GenericUserPreferenceArray(new List<IPreference>() {new GenericPreference(4L, 1L, 3.0f), new GenericPreference(4L, 4L, 5.0f)})); dataModel = new GenericDataModel(userData); factorizer = new ALSWRFactorizer(dataModel, 3, 0.065, 10); }
public Features(ALSWRFactorizer factorizer) { dataModel = factorizer.dataModel; numFeatures = factorizer.numFeatures; var random = RandomUtils.getRandom(); M = new double[dataModel.GetNumItems()][]; //numFeatures var itemIDsIterator = dataModel.GetItemIDs(); while (itemIDsIterator.MoveNext()) { long itemID = itemIDsIterator.Current; int itemIDIndex = factorizer.itemIndex(itemID); M[itemIDIndex] = new double[numFeatures]; M[itemIDIndex][0] = averateRating(itemID); for (int feature = 1; feature < numFeatures; feature++) { M[itemIDIndex][feature] = random.nextDouble() * 0.1; } } U = new double[dataModel.GetNumUsers()][]; //numFeatures for (int i=0; i<U.Length; i++) U[i] = new double[numFeatures]; }