Пример #1
0
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            // 清除用户ID下拉列表
            this.comboBox2.Items.Clear();

            // 读取数据,得到训练用户集合以及测试用户集合
            obj_ReadData = new cReadinData(this.comboBox1.SelectedIndex);
            testUsers    = cReadinData.getTestUser();
            trainUsers   = cReadinData.getBaseUser();

            // 根据选择的数据集,填充用户ID的下拉列表
            for (int i = 0; i < testUsers.Length - 1; i++)
            {
                this.comboBox2.Items.Add(testUsers[i + 1].id);
            }

            // 用户ID默认选择第一个
            this.comboBox2.SelectedIndex = 0;

            this.comboBox3.Items.Clear();

            // 填充 连续运行用户数目 下拉列表
            for (int i = 15; i < testUsers.Length; i++)
            {
                comboBox3.Items.Add(i);
            }
        }
Пример #2
0
        public Form_SlopeOne()
        {
            InitializeComponent();

            // 默认选择第一个数据集
            this.comboBox1.SelectedIndex = 0;

            // 读取数据,得到训练用户集合以及测试用户集合
            obj_ReadData    = new cReadinData(this.comboBox1.SelectedIndex);
            obj_AssStrategy = new cAssStrategy();
            testUsers       = cReadinData.getTestUser();
            trainUsers      = cReadinData.getBaseUser();

            this.dataGridView1.RowHeadersVisible = false;
            this.dataGridView2.RowHeadersVisible = false;

            for (int i = 0; i < count_Num.Length; i++)
            {
                count_Num[i] = 0;
                stat_Info[i] = 0;
            }

            // 根据选择的数据集,填充用户ID的下拉列表
            for (int i = 0; i < testUsers.Length - 1; i++)
            {
                this.comboBox2.Items.Add(testUsers[i + 1].id);
            }
            // 用户ID默认选择第一个
            this.comboBox2.SelectedIndex = 0;

            obj_SlopeOne = new SlopeOne();

            for (int i = 1; i < trainUsers.Length; i++)
            {
                userRating = new Dictionary <int, float>();

                //count_Num[trainUsers[i].RatingNums/20]++;

                for (int j = 1; j < trainUsers[i].Ratings.Length; j++)
                {
                    if (trainUsers[i].Ratings[j] != 0)
                    {
                        userRating.Add(j, (float)trainUsers[i].Ratings[j]);
                    }
                }

                obj_SlopeOne.AddUserRatings(userRating);
            }

            this.comboBox3.Items.Clear();

            // 填充 连续运行用户数目 下拉列表
            for (int i = 15; i < testUsers.Length; i++)
            {
                comboBox3.Items.Add(i);
            }
            this.comboBox3.SelectedIndex = 0;
        }
Пример #3
0
        public Form_Apriori()
        {
            InitializeComponent();

            // 读入用户数据
            cReadinData obj_readData = new cReadinData(0);

            testUsers   = cReadinData.getTestUser();
            sourceUsers = cReadinData.getBaseUser();

            // 初始化支持的关联规则集合
            supp_AssRules = new AssociationRule[sourceUsers.Length][];
            // 初始化推荐项目集合
            recItems = new RecItemid_Degree[sourceUsers.Length][];

            // 填充comboBox1
            for (int i = 15; i < testUsers.Length; i++)
            {
                this.comboBox1.Items.Add(i);
            }
            this.comboBox1.SelectedIndex = 0;
        }
Пример #4
0
        // 运行一次算法
        private void button1_Click(object sender, EventArgs e)
        {
            // 记录当前时间
            DateTime dt_1 = DateTime.Now;

            this.Rec_Items_num = int.Parse(this.textBox13.Text);    // Top-N推荐个数

            this.progressBar1.Maximum = this.comboBox2.SelectedIndex + 15 + 22;
            this.progressBar1.Value   = 0;
            // 读入数据,生成UI矩阵
            this.textBox3.Text = "开始读入数据";
            this.progressBar1.Value++;

            Application.DoEvents();

            cReadinData obj_ReadData = new cReadinData(comboBox1.SelectedIndex);

            this.textBox3.Text = "读入数据完成   训练数据:" + obj_ReadData.sTrainFileName[comboBox1.SelectedIndex]
                                 + "     测试数据:" + obj_ReadData.testfileName[comboBox1.SelectedIndex];
            this.progressBar1.Value++;
            Application.DoEvents();

            int number = int.Parse(textBox2.Text);

            this.neigh_num = number;

            // 相似度算法的选择
            if (this.radioButton1.Checked)
            {
                sim_alg = 1;
            }
            else if (this.radioButton2.Checked)
            {
                sim_alg = 2;
            }
            else if (this.radioButton3.Checked)
            {
                sim_alg = 3;
            }

            // 测试用户数目,最少为15
            testUserNum = this.comboBox2.SelectedIndex + 15;

            this.textBox3.Text = "初始化最大邻居个数";
            // 初始化,最近邻居数量最大为200
            obj_ItemBased_CF = new cItemBased_CF(200);

            this.progressBar1.Value++;
            Application.DoEvents();

            // 初始化相关数据
            for (int i = 1; i <= 1682; i++)
            {
                this.textBox3.Text = "初始 " + i + " 个项目数据";
                if ((i % 100) == 0)
                {
                    this.progressBar1.Value++;
                    Application.DoEvents();
                }

                Application.DoEvents();
                obj_ItemBased_CF.generateItemNN(i);
            }

            this.progressBar1.Value++;
            Application.DoEvents();

            this.textBox3.Text = "读取最近邻居及其相似值文件";
            obj_ItemBased_CF.readFile();

            this.progressBar1.Value++;
            Application.DoEvents();

            // 得到测试用户集合
            cUser[] testUsers = cReadinData.getTestUser();
            this.textBox3.Text = "读取测试用户集合";

            this.progressBar1.Value++;
            Application.DoEvents();

            double MAE, Precison, Recall, F_Measure;
            double total_MAE = 0, total_Precison = 0, total_Recall = 0, total_F_Measure = 0;
            double average_MAE, average_Precison, average_Recall, average_F_Measure;

            // for循环为每个测试用户产生预测评分以及Top-N推荐,并取得算法评价指标
            for (int i = 1; i <= testUserNum; i++)
            {
                obj_AssStrategy = obj_ItemBased_CF.getPredictRating(testUsers[i], this.sim_alg, neigh_num, Rec_Items_num);

                MAE       = obj_AssStrategy.MAE;
                Precison  = obj_AssStrategy.Precison;
                Recall    = obj_AssStrategy.Recall;
                F_Measure = obj_AssStrategy.calculateF_Measure();

                // 累计各项指标的和
                total_MAE       += MAE;
                total_Precison  += Precison;
                total_Recall    += Recall;
                total_F_Measure += F_Measure;

                this.textBox3.Text = "第" + i.ToString() + "个用户 MAE:" + MAE.ToString() + " 查准率:" + Precison
                                     + " 查全率:" + Recall + " F值:" + F_Measure;
                this.progressBar1.Value++;
                Application.DoEvents();
            }

            // 计算各项指标的平均值
            average_MAE       = total_MAE / this.testUserNum;
            average_Precison  = total_Precison / this.testUserNum;
            average_Recall    = total_Recall / this.testUserNum;
            average_F_Measure = total_F_Measure / this.testUserNum;


            DateTime dt_2 = DateTime.Now;
            TimeSpan ts   = dt_2.Subtract(dt_1);

            this.textBox3.Text = "完成 平均MAE:" + average_MAE.ToString() + " 平均查准率:" + average_Precison +
                                 " 平均查全率:" + average_Recall + " 平均F值:" + average_F_Measure + " 总耗时:" + ts.TotalMilliseconds + "ms";
            Application.DoEvents();

            this.textBox4.Text  = average_MAE.ToString();
            this.textBox5.Text  = ts.TotalMilliseconds + "ms";
            this.textBox6.Text  = this.sSimAlg[this.sim_alg - 1];
            this.textBox7.Text  = this.neigh_num.ToString();
            this.textBox9.Text  = average_Precison.ToString();
            this.textBox10.Text = average_Recall.ToString();
            this.textBox11.Text = average_F_Measure.ToString();
            this.textBox12.Text = Rec_Items_num.ToString();

            string log = this.sSimAlg[this.sim_alg - 1] + " 邻居数:" + this.neigh_num.ToString() + " 平均MAE:" +
                         average_MAE.ToString() + " 平均查准率:" + average_Precison + " 平均查全率:" + average_Recall +
                         " 平均F值:" + average_F_Measure + " 总耗时:" + ts.TotalMilliseconds + "ms";

            this.dataGridView1.Rows.Add(count_dgv++, sSimAlg[sim_alg - 1], this.neigh_num, this.Rec_Items_num, average_MAE,
                                        average_Precison, average_Recall, average_F_Measure, (ts.TotalMilliseconds / this.testUserNum) + " ms");
        }
        private void button1_Click(object sender, EventArgs e)
        {
            DateTime dt_1 = DateTime.Now;

            this.Rec_Items_num = int.Parse(this.textBox13.Text);    // Top-N推荐个数

            this.progressBar1.Maximum = (this.comboBox2.SelectedIndex + 15) * 10 + 5;
            this.progressBar1.Value   = 0;
            // 读入数据,生成UI矩阵
            this.textBox3.Text = "开始读入数据";
            this.progressBar1.Value++;

            Application.DoEvents();

            cReadinData obj_ReadData = new cReadinData(comboBox1.SelectedIndex);

            this.textBox3.Text = "读入数据完成   训练数据:" + obj_ReadData.sTrainFileName[comboBox1.SelectedIndex]
                                 + "     测试数据:" + obj_ReadData.testfileName[comboBox1.SelectedIndex];
            this.progressBar1.Value += 2;

            Application.DoEvents();

            // 读取最近邻居个数
            int number = int.Parse(textBox2.Text);

            this.neigh_num = number;

            // 相似度算法的选择
            if (this.radioButton1.Checked)
            {
                sim_alg = 1;
            }
            else if (this.radioButton2.Checked)
            {
                sim_alg = 2;
            }
            else if (this.radioButton3.Checked)
            {
                sim_alg = 3;
            }

            // 测试用户数目,最少为15
            testUserNum = this.comboBox2.SelectedIndex + 15;

            cUserBased_CF obj_UserBased_CF = new cUserBased_CF(this.neigh_num);

            cUser[] testUsers = cReadinData.getTestUser();

            this.textBox3.Text = "初始化完成 相似度算法:" + sim_alg.ToString() +
                                 " 最近邻居个数:" + this.neigh_num.ToString() + " 测试用户数:" + testUserNum.ToString();
            this.progressBar1.Value += 2;
            Application.DoEvents();

            double MAE_1, Precison, Recall, F_Measure;
            double total_MAE = 0, total_Precison = 0, total_Recall = 0, total_F_Measure = 0;
            double average_MAE, average_Precison, average_Recall, average_F_Measure;


            for (int i = 1; i <= this.testUserNum; i++)
            {
                this.progressBar1.Value += 5;
                obj_AssStrategy          = obj_UserBased_CF.getPredictRating(testUsers[i], this.sim_alg, Rec_Items_num);

                // 取得各项算法评价指标
                MAE_1     = obj_AssStrategy.MAE;
                Precison  = obj_AssStrategy.Precison;
                Recall    = obj_AssStrategy.Recall;
                F_Measure = obj_AssStrategy.calculateF_Measure();

                // 累计各项指标的和
                total_MAE       += MAE_1;
                total_Precison  += Precison;
                total_Recall    += Recall;
                total_F_Measure += F_Measure;

                this.textBox3.Text = "第 " + i.ToString() + " 个用户计算完成.";

                this.progressBar1.Value += 5;
                Application.DoEvents();
            }
            // 计算各个评价准则的平均值
            average_MAE       = total_MAE / this.testUserNum;
            average_Precison  = total_Precison / this.testUserNum;
            average_Recall    = total_Recall / this.testUserNum;
            average_F_Measure = total_F_Measure / this.testUserNum;

            DateTime dt_2 = DateTime.Now;
            TimeSpan ts   = dt_2.Subtract(dt_1);

            this.textBox3.Text = "所有用户计算完成   总耗时:" + ts.TotalMilliseconds + " ms";
            Application.DoEvents();

            this.textBox4.Text  = average_MAE.ToString();
            this.textBox5.Text  = ts.TotalMilliseconds + " ms";
            this.textBox6.Text  = this.sSimAlg[this.sim_alg - 1];
            this.textBox7.Text  = this.neigh_num.ToString();
            this.textBox9.Text  = average_Precison.ToString();
            this.textBox10.Text = average_Recall.ToString();
            this.textBox11.Text = average_F_Measure.ToString();
            this.textBox12.Text = "20";

            this.dataGridView1.Rows.Add(count_dgv++, sSimAlg[sim_alg - 1], this.neigh_num, this.Rec_Items_num, average_MAE,
                                        average_Precison, average_Recall, average_F_Measure, (ts.TotalMilliseconds / this.testUserNum) + " ms");
        }