Пример #1
0
        public override void Fit(BaseDataSet dataSet)
        {
            Profiler.BeginSample("SlopeOne.Fit");
            var nItems = dataSet.itemCount;

            base.Fit(dataSet);
            m_Freq = new int[nItems, nItems];
            m_Dev  = new double[nItems, nItems];
            foreach (var(_, uRatings) in dataSet.userRatings)
            {
                foreach (var(_, i, rUi) in uRatings)
                {
                    foreach (var(_, j, rUj) in uRatings)
                    {
                        m_Freq[i, j] += 1;
                        m_Dev[i, j]  += rUi - rUj;
                    }
                }
            }

            for (var i = 0; i < nItems; i++)
            {
                m_Dev[i, i] = 0;
                for (var j = i + 1; j < nItems; j++)
                {
                    m_Dev[i, j] /= m_Freq[i, j];
                    m_Dev[j, i]  = -m_Dev[i, j];
                }
            }

            m_UserMean = dataSet.allUsers
                         .Select(u => dataSet.UserRatings(u).Select(rt => rt.rating).Average()).ToArray();
            Profiler.EndSample();
        }
Пример #2
0
 public CollaborativeFilteringRecommender(BaseAlgorithm algorithm)
 {
     m_Algorithm = algorithm;
     m_DataSet   = new ArrayBackedSinglePlayerDataSet(MonsterMatchArrayData.Data,
                                                      MonsterMatchArrayData.UserCount, MonsterMatchArrayData.ItemCount);
     m_PlayerUserId = MonsterMatchArrayData.PlayerUserId;
     Debug.Log($"DefaultRecommender: m_PlayerUserId={m_PlayerUserId}");
     m_ApplicationItemIdsToInternalIds = Enumerable.Range(0, MonsterMatchArrayData.ItemCount)
                                         .ToDictionary(i => MonsterMatchArrayData.ForProfiles[i], i => i);
     m_InternalIdsToApplicationItemIds = MonsterMatchArrayData.ForProfiles;
 }
Пример #3
0
 public virtual void Fit(BaseDataSet dataSet)
 {
     m_DataSet = dataSet;
 }