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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
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; } } }
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; }
/// <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); }
/// <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); }
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); }