///
        protected override void InitModel()
        {
            base.InitModel();

            user_factors = null;
            item_factors = null;
            p            = new Matrix <float> (MaxUserID + 1, NumFactors);
            p.InitNormal(InitMean, InitStdDev);
            y = new Matrix <float> (MaxItemID + 1, NumFactors);
            y.InitNormal(InitMean, InitStdDev);
            x = new Matrix <float> (item_attributes.NumberOfColumns, NumFactors);
            x.InitNormal(InitMean, InitStdDev);
            q = new Matrix <float> (MaxItemID + 1, NumFactors);
            q.InitNormal(InitMean, InitStdDev);

            int num_attributes = item_attributes.NumberOfColumns;

            x_reg = new float[num_attributes];
            for (int attribute_id = 0; attribute_id < num_attributes; attribute_id++)
            {
                x_reg [attribute_id] = FrequencyRegularization? (RegX / (float)(1 + Math.Exp(-0.005 * item_attributes.NumEntriesByColumn(attribute_id)))) : RegX;
            }

            y_reg = new float[MaxItemID + 1];
            for (int item_id = 0; item_id <= MaxItemID; item_id++)
            {
                var feedback_count_by_item = Feedback.ItemMatrix [item_id];
                if (feedback_count_by_item.Count > 0)
                {
                    y_reg [item_id] = FrequencyRegularization ? (float)(RegY / Math.Sqrt(feedback_count_by_item.Count)) : RegY;
                }
                else
                {
                    y_reg [item_id] = 0;
                }
            }

            Console.Write("Learning attributes...");
            BPRLinear learnAttr = new BPRLinear();

            learnAttr.Feedback       = Feedback;
            learnAttr.ItemAttributes = item_attributes;
            learnAttr.NumIter        = NumIter;     //10;
            learnAttr.LearnRate      = LearnRate;   //0.05f;
            learnAttr.Regularization = 0.015f;      //0.001f;
            learnAttr.Train();
            item_attribute_weight_by_user = learnAttr.ItemAttributeWeights;
            learnAttr = null;
            Console.WriteLine("Done");
        }
예제 #2
0
        ///
        protected override void InitModel()
        {
            base.InitModel();

            user_factors = null;
            item_factors = null;
            p            = new Matrix <float> (MaxUserID + 1, NumFactors);
            p.InitNormal(InitMean, InitStdDev);
            q = new Matrix <float> (MaxItemID + 1, NumFactors);
            q.InitNormal(InitMean, InitStdDev);

            Console.Write("Learning attributes...");
            BPRLinear learnAttr = new BPRLinear();

            learnAttr.Feedback       = Feedback;
            learnAttr.ItemAttributes = item_attributes;
            learnAttr.NumIter        = NumIter;     //10;
            learnAttr.LearnRate      = LearnRate;   //0.05f;
            learnAttr.Regularization = 0.015f;      //0.001f;
            learnAttr.Train();
            item_attribute_weight_by_user = learnAttr.ItemAttributeWeights;
            learnAttr = null;
            Console.WriteLine("Done");
        }
예제 #3
0
        ///
        protected override void InitModel()
        {
            base.InitModel ();

            user_factors = null;
            item_factors = null;
            p = new Matrix<float> (MaxUserID + 1, NumFactors);
            p.InitNormal (InitMean, InitStdDev);
            y = new Matrix<float> (MaxItemID + 1, NumFactors);
            y.InitNormal (InitMean, InitStdDev);
            x = new Matrix<float> (item_attributes.NumberOfColumns, NumFactors);
            x.InitNormal (InitMean, InitStdDev);
            q = new Matrix<float> (MaxItemID + 1, NumFactors);
            q.InitNormal (InitMean, InitStdDev);

            int num_attributes = item_attributes.NumberOfColumns;

            x_reg = new float[num_attributes];
            for (int attribute_id = 0; attribute_id < num_attributes; attribute_id++)
                x_reg [attribute_id] = FrequencyRegularization? (RegX / (float)(1 + Math.Exp(-0.005*item_attributes.NumEntriesByColumn (attribute_id)))) : RegX;

            y_reg = new float[MaxItemID + 1];
            for (int item_id = 0; item_id <= MaxItemID; item_id++) {
                var feedback_count_by_item = Feedback.ItemMatrix [item_id];
                if (feedback_count_by_item.Count > 0)
                    y_reg [item_id] = FrequencyRegularization ? (float)(RegY / Math.Sqrt (feedback_count_by_item.Count)) : RegY;
                else
                    y_reg [item_id] = 0;
            }

            Console.Write("Learning attributes...");
            BPRLinear learnAttr = new BPRLinear();
            learnAttr.Feedback = Feedback;
            learnAttr.ItemAttributes = item_attributes;
            learnAttr.NumIter = NumIter;//10;
            learnAttr.LearnRate = LearnRate;//0.05f;
            learnAttr.Regularization = 0.015f;//0.001f;
            learnAttr.Train();
            item_attribute_weight_by_user = learnAttr.ItemAttributeWeights;
            learnAttr = null;
            Console.WriteLine ("Done");
        }
예제 #4
0
        ///
        protected override void InitModel()
        {
            base.InitModel ();

            user_factors = null;
            item_factors = null;
            p = new Matrix<float> (MaxUserID + 1, NumFactors);
            p.InitNormal (InitMean, InitStdDev);
            q = new Matrix<float> (MaxItemID + 1, NumFactors);
            q.InitNormal (InitMean, InitStdDev);

            Console.Write("Learning attributes...");
            BPRLinear learnAttr = new BPRLinear();
            learnAttr.Feedback = Feedback;
            learnAttr.ItemAttributes = item_attributes;
            learnAttr.NumIter = NumIter;//10;
            learnAttr.LearnRate = LearnRate;//0.05f;
            learnAttr.Regularization = 0.015f;//0.001f;
            learnAttr.Train();
            item_attribute_weight_by_user = learnAttr.ItemAttributeWeights;
            learnAttr = null;
            Console.WriteLine ("Done");
        }