Ejemplo n.º 1
0
        protected void initialize()
        {
            int           num3;
            RandomWrapper wrapper = RandomUtils.getRandom();

            this.userVectors = new double[this.dataModel.getNumUsers()][];
            this.itemVectors = new double[this.dataModel.getNumItems()][];
            double num = this.getAveragePreference();

            for (int i = 0; i < this.userVectors.Length; i++)
            {
                this.userVectors[i]    = new double[this.rank];
                this.userVectors[i][0] = num;
                this.userVectors[i][USER_BIAS_INDEX] = 0.0;
                this.userVectors[i][ITEM_BIAS_INDEX] = 1.0;
                num3 = FEATURE_OFFSET;
                while (num3 < this.rank)
                {
                    this.userVectors[i][num3] = wrapper.nextGaussian() * NOISE;
                    num3++;
                }
            }
            for (int j = 0; j < this.itemVectors.Length; j++)
            {
                this.itemVectors[j]    = new double[this.rank];
                this.itemVectors[j][0] = 1.0;
                this.itemVectors[j][USER_BIAS_INDEX] = 1.0;
                this.itemVectors[j][ITEM_BIAS_INDEX] = 0.0;
                for (num3 = FEATURE_OFFSET; num3 < this.rank; num3++)
                {
                    this.itemVectors[j][num3] = wrapper.nextGaussian() * NOISE;
                }
            }
        }
        protected void initialize()
        {
            RandomWrapper random = RandomUtils.getRandom();

            userVectors = new double[dataModel.GetNumUsers()][];
            itemVectors = new double[dataModel.GetNumItems()][];

            double globalAverage = getAveragePreference();

            for (int userIndex = 0; userIndex < userVectors.Length; userIndex++)
            {
                userVectors[userIndex] = new double[rank];

                userVectors[userIndex][0] = globalAverage;
                userVectors[userIndex][USER_BIAS_INDEX] = 0; // will store user bias
                userVectors[userIndex][ITEM_BIAS_INDEX] = 1; // corresponding item feature contains item bias
                for (int feature = FEATURE_OFFSET; feature < rank; feature++)
                {
                    userVectors[userIndex][feature] = random.nextGaussian() * NOISE;
                }
            }
            for (int itemIndex = 0; itemIndex < itemVectors.Length; itemIndex++)
            {
                itemVectors[itemIndex] = new double[rank];

                itemVectors[itemIndex][0] = 1;               // corresponding user feature contains global average
                itemVectors[itemIndex][USER_BIAS_INDEX] = 1; // corresponding user feature contains user bias
                itemVectors[itemIndex][ITEM_BIAS_INDEX] = 0; // will store item bias
                for (int feature = FEATURE_OFFSET; feature < rank; feature++)
                {
                    itemVectors[itemIndex][feature] = random.nextGaussian() * NOISE;
                }
            }
        }
Ejemplo n.º 3
0
        protected override void prepareTraining()
        {
            int num;
            int num2;

            base.prepareTraining();
            RandomWrapper wrapper = RandomUtils.getRandom();

            this.p = new double[base.dataModel.getNumUsers()][];
            for (num = 0; num < this.p.Length; num++)
            {
                this.p[num] = new double[base.numFeatures];
                num2        = 0;
                while (num2 < RatingSGDFactorizer.FEATURE_OFFSET)
                {
                    this.p[num][num2] = 0.0;
                    num2++;
                }
                num2 = RatingSGDFactorizer.FEATURE_OFFSET;
                while (num2 < base.numFeatures)
                {
                    this.p[num][num2] = wrapper.nextGaussian() * base.randomNoise;
                    num2++;
                }
            }
            this.y = new double[base.dataModel.getNumItems()][];
            for (num = 0; num < this.y.Length; num++)
            {
                this.y[num] = new double[base.numFeatures];
                num2        = 0;
                while (num2 < RatingSGDFactorizer.FEATURE_OFFSET)
                {
                    this.y[num][num2] = 0.0;
                    num2++;
                }
                for (num2 = RatingSGDFactorizer.FEATURE_OFFSET; num2 < base.numFeatures; num2++)
                {
                    this.y[num][num2] = wrapper.nextGaussian() * base.randomNoise;
                }
            }
            this.itemsByUser = new Dictionary <int, List <int> >();
            IEnumerator <long> enumerator = base.dataModel.getUserIDs();

            while (enumerator.MoveNext())
            {
                long       current = enumerator.Current;
                int        num4    = base.userIndex(current);
                FastIDSet  set     = base.dataModel.getItemIDsFromUser(current);
                List <int> list    = new List <int>(set.size());
                this.itemsByUser[num4] = list;
                foreach (long num5 in set)
                {
                    int item = base.itemIndex(num5);
                    list.Add(item);
                }
            }
        }
Ejemplo n.º 4
0
        protected virtual void prepareTraining()
        {
            RandomWrapper random = RandomUtils.getRandom();

            userVectors = new double[dataModel.GetNumUsers()][]; //numFeatures
            itemVectors = new double[dataModel.GetNumItems()][];

            double globalAverage = getAveragePreference();

            for (int userIndex = 0; userIndex < userVectors.Length; userIndex++)
            {
                userVectors[userIndex] = new double[numFeatures];

                userVectors[userIndex][0] = globalAverage;
                userVectors[userIndex][USER_BIAS_INDEX] = 0; // will store user bias
                userVectors[userIndex][ITEM_BIAS_INDEX] = 1; // corresponding item feature contains item bias
                for (int feature = FEATURE_OFFSET; feature < numFeatures; feature++)
                {
                    userVectors[userIndex][feature] = random.nextGaussian() * randomNoise;
                }
            }
            for (int itemIndex = 0; itemIndex < itemVectors.Length; itemIndex++)
            {
                itemVectors[itemIndex] = new double[numFeatures];

                itemVectors[itemIndex][0] = 1;               // corresponding user feature contains global average
                itemVectors[itemIndex][USER_BIAS_INDEX] = 1; // corresponding user feature contains user bias
                itemVectors[itemIndex][ITEM_BIAS_INDEX] = 0; // will store item bias
                for (int feature = FEATURE_OFFSET; feature < numFeatures; feature++)
                {
                    itemVectors[itemIndex][feature] = random.nextGaussian() * randomNoise;
                }
            }

            cachePreferences();
            shufflePreferences();
        }
Ejemplo n.º 5
0
        protected virtual void prepareTraining()
        {
            int           num3;
            RandomWrapper wrapper = RandomUtils.getRandom();

            this.userVectors = new double[this.dataModel.getNumUsers()][];
            this.itemVectors = new double[this.dataModel.getNumItems()][];
            double num = this.getAveragePreference();

            for (int i = 0; i < this.userVectors.Length; i++)
            {
                this.userVectors[i]    = new double[this.numFeatures];
                this.userVectors[i][0] = num;
                this.userVectors[i][USER_BIAS_INDEX] = 0.0;
                this.userVectors[i][ITEM_BIAS_INDEX] = 1.0;
                num3 = FEATURE_OFFSET;
                while (num3 < this.numFeatures)
                {
                    this.userVectors[i][num3] = wrapper.nextGaussian() * this.randomNoise;
                    num3++;
                }
            }
            for (int j = 0; j < this.itemVectors.Length; j++)
            {
                this.itemVectors[j]    = new double[this.numFeatures];
                this.itemVectors[j][0] = 1.0;
                this.itemVectors[j][USER_BIAS_INDEX] = 1.0;
                this.itemVectors[j][ITEM_BIAS_INDEX] = 0.0;
                for (num3 = FEATURE_OFFSET; num3 < this.numFeatures; num3++)
                {
                    this.itemVectors[j][num3] = wrapper.nextGaussian() * this.randomNoise;
                }
            }
            this.cachePreferences();
            this.shufflePreferences();
        }