Esempio n. 1
0
        public GenericDataModel GetUserBasedDataModel()
        {
            FastByIDMap <IPreferenceArray> data = new FastByIDMap <IPreferenceArray>();

            IEnumerable <UserBookReview> allBookReviews = _userBookReviewRepository.GetListOf();

            var everyReviewsUserId = allBookReviews.GroupBy(b => b.UserId).Select(x => x.Key).ToList();

            foreach (int userId in everyReviewsUserId)
            {
                List <UserBookReview> bookReviewsForABook = (from userReviews in allBookReviews
                                                             where userReviews.UserId == userId
                                                             select userReviews).ToList();
                List <IPreference> listOfPreferences = new List <IPreference>();

                foreach (UserBookReview review in bookReviewsForABook)
                {
                    int rating             = review.Rating;
                    int bookId             = review.BookId;
                    GenericPreference pref = new GenericPreference(userId, bookId, rating); /// userId,  itemid, valueId

                    listOfPreferences.Add(pref);
                }

                GenericUserPreferenceArray dataArray = new GenericUserPreferenceArray(listOfPreferences);
                data.Put(userId, dataArray);
            }

            return(new GenericDataModel(data));
        }
Esempio n. 2
0
 public Preference[] GetPreferencesAsArray()
 {
     Preference[] sortedPrefs = delegateUser.GetPreferencesAsArray();
     Array.Sort(sortedPrefs, ByValuePreferenceComparer.Instance);
     for (int i = 0; i < sortedPrefs.Length; i++)
     {
         sortedPrefs[i] = new GenericPreference(this, sortedPrefs[i].Item, (double)(i + 1));
     }
     Array.Sort(sortedPrefs, ByItemPreferenceComparer.Instance);
     return(sortedPrefs);
 }
Esempio n. 3
0
        public void testNoCorrelation2()
        {
            Preference           pref1     = new GenericPreference(null, new GenericItem <String>("1"), 1.0);
            GenericUser <String> user1     = new GenericUser <String>("test1", ScalarToList <Preference>(pref1));
            Preference           pref2     = new GenericPreference(null, new GenericItem <String>("2"), 1.0);
            GenericUser <String> user2     = new GenericUser <String>("test2", ScalarToList <Preference>(pref2));
            DataModel            dataModel = GetDataModel(user1, user2);
            double correlation             = new PearsonCorrelation(dataModel).GetUserCorrelation(user1, user2);

            Assert.IsTrue(Double.IsNaN(correlation));
        }
Esempio n. 4
0
            public IEnumerable <Preference> GetPreferences()
            {
                // todo: cache this
                Preference[] source = delegateUser.GetPreferencesAsArray();
                int          length = source.Length;

                Preference[] sortedPrefs = new Preference[length];
                Array.Copy(source, sortedPrefs, length);
                for (int i = 0; i < length; i++)
                {
                    Item item = sortedPrefs[i].Item;
                    sortedPrefs[i] = new GenericPreference(this, item, (double)(i + 1));
                }
                Array.Sort <Preference>(sortedPrefs, ByValuePreferenceComparer.Instance);
                return(sortedPrefs);
            }
        private void splitOneUsersPrefs(double trainingPercentage,
                                        FastByIDMap <IPreferenceArray> trainingPrefs,
                                        FastByIDMap <IPreferenceArray> testPrefs,
                                        long userID,
                                        IDataModel dataModel)
        {
            List <IPreference> oneUserTrainingPrefs = null;
            List <IPreference> oneUserTestPrefs     = null;
            IPreferenceArray   prefs = dataModel.GetPreferencesFromUser(userID);
            int size = prefs.Length();

            for (int i = 0; i < size; i++)
            {
                IPreference newPref = new GenericPreference(userID, prefs.GetItemID(i), prefs.GetValue(i));
                if (random.nextDouble() < trainingPercentage)
                {
                    if (oneUserTrainingPrefs == null)
                    {
                        oneUserTrainingPrefs = new List <IPreference>(3);
                    }
                    oneUserTrainingPrefs.Add(newPref);
                }
                else
                {
                    if (oneUserTestPrefs == null)
                    {
                        oneUserTestPrefs = new List <IPreference>(3);
                    }
                    oneUserTestPrefs.Add(newPref);
                }
            }
            if (oneUserTrainingPrefs != null)
            {
                trainingPrefs.Put(userID, new GenericUserPreferenceArray(oneUserTrainingPrefs));
                if (oneUserTestPrefs != null)
                {
                    testPrefs.Put(userID, new GenericUserPreferenceArray(oneUserTestPrefs));
                }
            }
        }
        private void splitOneUsersPrefs(double trainingPercentage, FastByIDMap <PreferenceArray> trainingPrefs, FastByIDMap <PreferenceArray> testPrefs, long userID, DataModel dataModel)
        {
            List <Preference> prefs = null;
            List <Preference> list2 = null;
            PreferenceArray   array = dataModel.getPreferencesFromUser(userID);
            int num = array.length();

            for (int i = 0; i < num; i++)
            {
                Preference item = new GenericPreference(userID, array.getItemID(i), array.getValue(i));
                if (this.random.nextDouble() < trainingPercentage)
                {
                    if (prefs == null)
                    {
                        prefs = new List <Preference>(3);
                    }
                    prefs.Add(item);
                }
                else
                {
                    if (list2 == null)
                    {
                        list2 = new List <Preference>(3);
                    }
                    list2.Add(item);
                }
            }
            if (prefs != null)
            {
                trainingPrefs.put(userID, new GenericUserPreferenceArray(prefs));
                if (list2 != null)
                {
                    testPrefs.put(userID, new GenericUserPreferenceArray(list2));
                }
            }
        }
Esempio n. 7
0
        /**
         * {@inheritDoc}
         */
        public double Evaluate(RecommenderBuilder recommenderBuilder,
                               DataModel dataModel,
                               double trainingPercentage,
                               double evaluationPercentage)
        {
            if (recommenderBuilder == null)
            {
                throw new ArgumentNullException("recommenderBuilder is null");
            }
            if (dataModel == null)
            {
                throw new ArgumentNullException("dataModel is null");
            }
            if (double.IsNaN(trainingPercentage) || trainingPercentage <= 0.0 || trainingPercentage >= 1.0)
            {
                throw new ArgumentException("Invalid trainingPercentage: " + trainingPercentage);
            }
            if (double.IsNaN(evaluationPercentage) || evaluationPercentage <= 0.0 || evaluationPercentage > 1.0)
            {
                throw new ArgumentException("Invalid evaluationPercentage: " + evaluationPercentage);
            }

            log.Info("Beginning evaluation using " + trainingPercentage + " of " + dataModel);

            int numUsers = dataModel.GetNumUsers();
            ICollection <User> trainingUsers = new List <User>(1 + (int)(trainingPercentage * (double)numUsers));
            IDictionary <User, ICollection <Preference> > testUserPrefs =
                new Dictionary <User, ICollection <Preference> >(1 + (int)((1.0 - trainingPercentage) * (double)numUsers));

            foreach (User user in dataModel.GetUsers())
            {
                if (random.NextDouble() < evaluationPercentage)
                {
                    ICollection <Preference> trainingPrefs = new List <Preference>();
                    ICollection <Preference> testPrefs     = new List <Preference>();
                    Preference[]             prefs         = user.GetPreferencesAsArray();

                    foreach (Preference pref in prefs)
                    {
                        Item       itemCopy = new GenericItem <String>(pref.Item.ID.ToString());
                        Preference newPref  = new GenericPreference(null, itemCopy, pref.Value);
                        if (random.NextDouble() < trainingPercentage)
                        {
                            trainingPrefs.Add(newPref);
                        }
                        else
                        {
                            testPrefs.Add(newPref);
                        }
                    }
                    if (log.IsDebugEnabled)
                    {
                        log.Debug("Training against " + trainingPrefs.Count + " preferences");
                        log.Debug("Evaluating accuracy of " + testPrefs.Count + " preferences");
                    }
                    if (trainingPrefs.Count > 0)
                    {
                        User trainingUser = new GenericUser <String>(user.ID.ToString(), trainingPrefs);
                        trainingUsers.Add(trainingUser);
                        if (testPrefs.Count > 0)
                        {
                            testUserPrefs.Add(trainingUser, testPrefs);
                        }
                    }
                }
            }

            DataModel   trainingModel = new GenericDataModel(trainingUsers);
            Recommender recommender   = recommenderBuilder.BuildRecommender(trainingModel);
            double      result        = GetEvaluation(testUserPrefs, recommender);

            log.Info("Evaluation result: " + result);
            return(result);
        }