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);
        }
Exemplo n.º 2
0
            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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
    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];
    }