public IEnumerable <RatingPredictionRecommendation> GetRecommendations(MalUserListEntries inputForUser, int numRecommendationsToTryToGet)
        {
            IBasicInputForUser basicInput = inputForUser.AsBasicInput(m_minEpisodesToCountIncomplete, m_useDropped,
                                                                      additionalOkToRecommendPredicate: (animeId) => m_userCountByAnime.ContainsKey(animeId) && m_userCountByAnime[animeId] >= m_minUsersToCountAnime
                                                                      );

            return(m_recommender.GetRecommendations(basicInput, numRecommendationsToTryToGet));
        }
Esempio n. 2
0
        public IEnumerable <RatingPredictionRecommendation> GetRecommendations(IBasicInputForUser userRatings, int numRecommendationsToTryToGet)
        {
            IList <Tuple <int, float> > userMediaLiteRatings = new List <Tuple <int, float> >();

            foreach (KeyValuePair <int, float> realRating in userRatings.Ratings)
            {
                int   realItemId = realRating.Key;
                float score      = realRating.Value;

                // Do not pass in items that MyMediaLite does not know about, it will crash
                if (m_realItemIdToMediaLiteItemId.ContainsKey(realItemId))
                {
                    int mediaLiteItemId = m_realItemIdToMediaLiteItemId[realItemId];
                    userMediaLiteRatings.Add(new Tuple <int, float>(mediaLiteItemId, score));
                }
            }

            IList <Tuple <int, float> > mediaLitePredictions = m_recommender.ScoreItems(userMediaLiteRatings);

            List <RatingPredictionRecommendation> recs = new List <RatingPredictionRecommendation>();

            foreach (Tuple <int, float> prediction in mediaLitePredictions.OrderByDescending(p => p.Item2))
            {
                int   mediaLiteItemId = prediction.Item1;
                float predictedScore  = prediction.Item2;

                int realItemId = m_mediaLiteItemIdToRealItemId[mediaLiteItemId];
                if (userRatings.ItemIsOkToRecommend(realItemId))
                {
                    recs.Add(new RatingPredictionRecommendation(realItemId, predictedScore));
                    if (recs.Count >= numRecommendationsToTryToGet)
                    {
                        break;
                    }
                }
            }

            return(recs);
        }
Esempio n. 3
0
        public void Train(IBasicTrainingData <IBasicInputForUser> trainingData)
        {
            m_realUserIdToMediaLiteUserId = new Dictionary <int, int>();
            m_mediaLiteUserIdToRealUserId = new Dictionary <int, int>();
            m_nextMediaLiteUserId         = 0;

            m_realItemIdToMediaLiteItemId = new Dictionary <int, int>();
            m_mediaLiteItemIdToRealItemId = new Dictionary <int, int>();
            m_nextMediaLiteItemId         = 0;

            MyMediaLite.Data.Ratings mediaLiteRatings = new MyMediaLite.Data.Ratings();
            foreach (KeyValuePair <int, IBasicInputForUser> userRatingsPair in trainingData.Users)
            {
                int userId = userRatingsPair.Key;
                IBasicInputForUser ratings = userRatingsPair.Value;

                m_realUserIdToMediaLiteUserId[userId] = m_nextMediaLiteUserId;
                m_mediaLiteUserIdToRealUserId[m_nextMediaLiteUserId] = userId;
                m_nextMediaLiteUserId++;

                foreach (KeyValuePair <int, float> rating in ratings.Ratings)
                {
                    int   itemId = rating.Key;
                    float score  = rating.Value;

                    if (!m_realItemIdToMediaLiteItemId.ContainsKey(itemId))
                    {
                        m_realItemIdToMediaLiteItemId[itemId] = m_nextMediaLiteItemId;
                        m_mediaLiteItemIdToRealItemId[m_nextMediaLiteItemId] = itemId;
                        m_nextMediaLiteItemId++;
                    }

                    mediaLiteRatings.Add(m_realUserIdToMediaLiteUserId[userId], m_realItemIdToMediaLiteItemId[itemId], score);
                }
            }

            m_recommender.Ratings = mediaLiteRatings;
            m_recommender.Train();
        }