Пример #1
0
        private double doItemSimilarity(long itemID1, long itemID2, long preferring1, long numUsers)
        {
            DataModel model = base.getDataModel();
            long      num   = model.getNumUsersWithPreferenceFor(itemID1, itemID2);

            if (num == 0L)
            {
                return(double.NaN);
            }
            long   num2 = model.getNumUsersWithPreferenceFor(itemID2);
            double num3 = LogLikelihood.logLikelihoodRatio(num, num2 - num, preferring1 - num, ((numUsers - preferring1) - num2) + num);

            return(1.0 - (1.0 / (1.0 + num3)));
        }
Пример #2
0
        private double doItemSimilarity(long itemID1, long itemID2, long preferring1, long numUsers)
        {
            IDataModel dataModel       = getDataModel();
            long       preferring1and2 = dataModel.GetNumUsersWithPreferenceFor(itemID1, itemID2);

            if (preferring1and2 == 0)
            {
                return(Double.NaN);
            }
            long   preferring2   = dataModel.GetNumUsersWithPreferenceFor(itemID2);
            double logLikelihood =
                LogLikelihood.logLikelihoodRatio(preferring1and2,
                                                 preferring2 - preferring1and2,
                                                 preferring1 - preferring1and2,
                                                 numUsers - preferring1 - preferring2 + preferring1and2);

            return(1.0 - 1.0 / (1.0 + logLikelihood));
        }
Пример #3
0
        public double userSimilarity(long userID1, long userID2)
        {
            DataModel model = base.getDataModel();
            FastIDSet other = model.getItemIDsFromUser(userID1);
            FastIDSet set2  = model.getItemIDsFromUser(userID2);
            long      num   = other.size();
            long      num2  = set2.size();
            long      num3  = (num < num2) ? ((long)set2.intersectionSize(other)) : ((long)other.intersectionSize(set2));

            if (num3 == 0L)
            {
                return(double.NaN);
            }
            long   num4 = model.getNumItems();
            double num5 = LogLikelihood.logLikelihoodRatio(num3, num2 - num3, num - num3, ((num4 - num) - num2) + num3);

            return(1.0 - (1.0 / (1.0 + num5)));
        }
Пример #4
0
        public double UserSimilarity(long userID1, long userID2)
        {
            IDataModel dataModel = getDataModel();
            FastIDSet  prefs1    = dataModel.GetItemIDsFromUser(userID1);
            FastIDSet  prefs2    = dataModel.GetItemIDsFromUser(userID2);

            long prefs1Size       = prefs1.Count();
            long prefs2Size       = prefs2.Count();
            long intersectionSize =
                prefs1Size < prefs2Size?prefs2.IntersectionSize(prefs1) : prefs1.IntersectionSize(prefs2);

            if (intersectionSize == 0)
            {
                return(Double.NaN);
            }
            long   numItems      = dataModel.GetNumItems();
            double logLikelihood =
                LogLikelihood.logLikelihoodRatio(intersectionSize,
                                                 prefs2Size - intersectionSize,
                                                 prefs1Size - intersectionSize,
                                                 numItems - prefs1Size - prefs2Size + intersectionSize);

            return(1.0 - 1.0 / (1.0 + logLikelihood));
        }