コード例 #1
0
ファイル: Form3.cs プロジェクト: ntandung/KTLTHDT
        private void FindRule()
        {
            int         minConf  = int.Parse(txtMinConf.Text);
            List <Rule> allRules = new List <Rule>();

            foreach (Itemsets itemsets in Program.tapL)
            {
                if (itemsets.Count == 1)
                {
                    continue;
                }
                ItemSetsCollection subsets = itemsets.findSubSet();
                int a = 0;
                foreach (Itemsets subset in subsets)
                {
                    if (subset.Count == itemsets.Count)
                    {
                        continue;
                    }
                    double confidence = (itemsets.support / Program.tapL.GetSupp(subset)) * 100.0;
                    if (confidence >= minConf)
                    {
                        Rule rule = new Rule();
                        rule.X          = subset;
                        rule.Y          = itemsets.Remove(subset);
                        rule.confidence = Math.Round(confidence, 2);
                        if (rule.X.Count > 0 && rule.Y.Count > 0)
                        {
                            allRules.Add(rule);
                        }
                    }
                }
            }
            dgvRule.DataSource = SinhBangLuat(allRules);
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: ntandung/KTLTHDT
        /// <summary>
        /// Thuat toan apriori_gen, sinh ra tap ung vien C tu tap L(k-1)
        /// </summary>
        /// <param name="lPrevious">L(k-1)</param>
        /// <returns></returns>
        public static ItemSetsCollection AprioriGen(ItemSetsCollection lPrevious)
        {
            ItemSetsCollection result = new ItemSetsCollection();

            if (lPrevious.Count <= 1)
            {
                return(result);
            }

            int k = lPrevious[0].Count;

            for (int i = 0; i < lPrevious.Count - 1; i++)
            {
                Itemsets p = new Itemsets(lPrevious[i]);
                p.RemoveAt(k - 1);

                for (int j = i + 1; j < lPrevious.Count; j++)
                {
                    Itemsets q = new Itemsets(lPrevious[j]);
                    q.RemoveAt(k - 1);

                    if (p.IsEqual(q))
                    {
                        q.Add(lPrevious[i][k - 1]);
                        q.Add(lPrevious[j][k - 1]);
                        result.Add(q);
                    }
                }
            }
            return(result);
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: ntandung/KTLTHDT
        /// <summary>
        /// Kiem tra tap muc thuoc tid
        /// </summary>
        /// <param name="tid">Transaction id cua F</param>
        /// <param name="muc">Mot muc cua L, Example: {1,2}</param>
        /// <returns></returns>
        public static bool ThuocTid(ItemSetsCollection tid, Itemsets muc)
        {
            Itemsets p = new Itemsets(muc);

            p.RemoveAt(muc.Count - 1);

            // p: c-c[k]
            List <int> q = new List <int>(muc);

            q.RemoveAt(muc.Count - 2);

            //q: c-c[k-1]
            int count = 0;

            foreach (Itemsets item in tid)
            {
                if (item.IsEqual(p))
                {
                    count += 1;
                }
                if (item.IsEqual(q))
                {
                    count += 1;
                }
            }
            return(count >= 2);
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: ntandung/KTLTHDT
        /// <summary>
        /// Tinh tap L tu tap F hien tai
        /// </summary>
        /// <param name="fCurrent"></param>
        /// <returns></returns>
        public static ItemSetsCollection TinhL(List <ItemSetsCollection> fCurrent)
        {
            ItemSetsCollection results = new ItemSetsCollection();

            // Lap lay danh sach cac chi muc thuoc F
            foreach (ItemSetsCollection listItemsets in fCurrent)
            {
                foreach (Itemsets itemsets in listItemsets)
                {
                    results.AddItemsets(itemsets);
                }
            }

            // Cac chi muc cua tap L thoa minSup
            // Loai bo cac tap muc khong thoa minSup
            ItemSetsCollection tmp1 = new ItemSetsCollection();

            foreach (Itemsets i in results)
            {
                if (i.support >= Program.sup)
                {
                    i.support = (float)Math.Round(((i.support) / Program.tongSoGiaoTac * 100), 2);
                    if (!Program.tapL.IsContains(i))
                    {
                        Program.tapL.Add(i);
                    }
                    tmp1.Add(i);
                }
            }
            return(tmp1);
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: ntandung/KTLTHDT
        /// <summary>
        /// Sinh ra tap F moi tu F(k-1) va L(k-1)
        /// </summary>
        /// <param name="fPrevious"></param>
        /// <param name="lPrevious"></param>
        /// <returns></returns>
        public static List <ItemSetsCollection> SinhF(List <ItemSetsCollection> fPrevious, ItemSetsCollection lPrevious)
        {
            Program.k += 1;
            ItemSetsCollection tapC = AprioriGen(lPrevious);

            List <ItemSetsCollection> result = new List <ItemSetsCollection>();

            foreach (ItemSetsCollection fItem in fPrevious)
            {
                // tid
                ItemSetsCollection tmp = new ItemSetsCollection();
                foreach (Itemsets item in tapC)
                {
                    if (ThuocTid(fItem, item))
                    {
                        tmp.Add(item);
                        tmp.tid = fItem.tid;
                    }
                }
                if (tmp.Count > 0)
                {
                    result.Add(tmp);
                }
            }
            Program.tapF.Add(result);
            return(result);
        }
コード例 #6
0
        private void btnNext_Click(object sender, EventArgs e)
        {
            btnBack.Enabled = true;
            if (btnNext.Text.Equals("Sinh Luật"))
            {
                Form3 form3 = new Form3();
                form3.Show();
            }
            else
            {
                List <ItemSetsCollection> fNext = Program.SinhF(Program.tapF[Program.k], Program.TinhL(Program.tapF[Program.k]));
                lbTapL.Text = "Tập L " + (Program.k + 1);
                DataTable dt = SinhBangF(fNext);
                dgvF.DataSource = dt;

                ItemSetsCollection tapL = Program.TinhL(Program.tapF[Program.k]);

                dgvL.DataSource = SinhBangL(tapL);

                if (tapL.Count == 0)
                {
                    btnNext.Text    = "Sinh Luật";
                    lbTapL.Text     = "Tập L tổng";
                    dgvL.DataSource = SinhBangL(Program.tapL);
                    dgvF.DataSource = null;
                }
            }
        }
コード例 #7
0
        private void Form2_Load(object sender, EventArgs e)
        {
            Program.k = 0;
            Program.tapF.RemoveRange(1, Program.tapF.Count - 1);
            Program.tapL.Clear();
            btnBack.Enabled = false;
            lbTapL.Text     = "Tập L " + (Program.k + 1);

            DataTable dt = SinhBangF(Program.tapF[0]);

            dgvF.DataSource = dt;

            ItemSetsCollection tapL = Program.TinhL(Program.tapF[0]);
            DataTable          dtc  = SinhBangL(tapL);

            dgvL.DataSource = dtc;
            if (Program.TinhL(Program.tapF[0]).Count == 0)
            {
                btnNext.Text = "Sinh Luật";
                lbTapL.Text  = "Tập L tổng";
            }

            dgvL.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            dgvF.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            dgvF.Columns[0].Width    = 60;
            dgvL.Columns[1].Width    = 60;
        }
コード例 #8
0
        /// <summary>
        /// Sinh bang L de hien thi len datagridview
        /// </summary>
        /// <param name="lCurrent"></param>
        /// <returns></returns>
        public static DataTable SinhBangL(ItemSetsCollection lCurrent)
        {
            DataTable dt = new DataTable();

            dt.Columns.Add("Tập mục");
            dt.Columns.Add("Support (%)");
            foreach (Itemsets item in lCurrent)
            {
                dt.Rows.Add(new object[] { item.GetDisplay(), item.support });
            }

            return(dt);
        }
コード例 #9
0
ファイル: Form1.cs プロジェクト: ntandung/KTLTHDT
        /// <summary>
        /// Lap tren datatable lay tu sql server do ve, Kiem tra cac ceil co gia tri la 1 thi them vao F
        /// </summary>
        /// <param name="dataTable"></param>
        /// <returns></returns>
        public static List <ItemSetsCollection> SinhTapFTuTapD(DataTable dataTable)
        {
            List <ItemSetsCollection> fResults = new List <ItemSetsCollection>();

            for (int i = 0; i < dataTable.Rows.Count; i++)
            {
                ItemSetsCollection tapCacMuc = new ItemSetsCollection();
                for (int j = 1; j < dataTable.Columns.Count; j++)
                {
                    if (dataTable.Rows[i][j].ToString().Equals("1"))
                    {
                        Itemsets muc = new Itemsets();
                        muc.Add(j);
                        tapCacMuc.Add(muc);
                    }
                }
                tapCacMuc.tid = dataTable.Rows[i][0].ToString();
                fResults.Add(tapCacMuc);
            }
            return(fResults);
        }
コード例 #10
0
        public ItemSetsCollection findSubSet()
        {
            ItemSetsCollection result = new ItemSetsCollection();

            for (int i = 1; i < this.Count; i++)
            {
                result.Add(new Itemsets(this[i - 1]));
                ItemSetsCollection newSubsets = new ItemSetsCollection();
                for (int j = 0; j < result.Count; j++)
                {
                    Itemsets newSubset = new Itemsets();
                    newSubset.AddRange(result[j]);
                    newSubset.Add(this[i]);
                    newSubsets.Add(newSubset);
                }

                result.AddRange(newSubsets);
            }
            result.Add(new Itemsets(this[this.Count - 1]));
            return(result);
        }