// 读入数据按钮 private void button2_Click(object sender, EventArgs e) { openFileDialog1.InitialDirectory = openPath; openFileDialog1.RestoreDirectory = true; openFileDialog1.FileName = "EX1_Order.csv"; openFileDialog1.CheckFileExists = true; openFileDialog1.CheckPathExists = true; openFileDialog1.Multiselect = false; if (openFileDialog1.ShowDialog() == DialogResult.OK && File.Exists(openFileDialog1.FileName.ToString())) { openPath = openFileDialog1.FileName.ToString(); Apriori.SetData(openPath); textBox.AppendText("成功从\"" + openPath + "\"读入数据。" + Environment.NewLine); GenFreqBtn.Enabled = true; Gen2FreqBtn.Enabled = true; minsup.Enabled = true; ShowFreqBtn.Enabled = false; ShowRuleBtn.Enabled = false; IntRecBtn.Enabled = false; minint.Enabled = false; recnum.Enabled = false; productid.Enabled = false; } else { textBox.AppendText("请检查文件是否存在!" + Environment.NewLine); } }
// 生成数据按钮 private void button1_Click_1(object sender, EventArgs e) { if (int.TryParse(minuid.Text, out int a) && int.TryParse(maxuid.Text, out int b) && int.TryParse(minpid.Text, out int c) && int.TryParse(maxpid.Text, out int d) && int.TryParse(dataAmount.Text, out int h)) { folderBrowserDialog1.SelectedPath = "C:\\Users\\13614\\OneDrive\\4\\电子商务\\实验"; if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) { string path = folderBrowserDialog1.SelectedPath; Apriori.GenData(a, b, c, d, h, path); textBox.AppendText("成功在\"" + path + "\"生成EX1_Order.csv文件和EX1_ProductInfo.csv文件。" + Environment.NewLine); } } else { textBox.AppendText("请检查数据输入是否有误!" + Environment.NewLine); } ShowFreqBtn.Enabled = false; ShowRuleBtn.Enabled = false; IntRecBtn.Enabled = false; GenFreqBtn.Enabled = false; Gen2FreqBtn.Enabled = false; }
private Apriori GetNextItemset() { Apriori retObj = new Apriori(K + 1); retObj.GetCandidateSet(this); // this扩展到retObj的候选项集 retObj.CalSupCount(); return(retObj); }
public Rule(double minSup, double minInt, int untilWhichSet) { outResult.pid = new List <int>(); outResult.pInfo = new List <List <string> >(); outResult.interest = new List <double>(); outResult.header = new List <string>(); minInterest = minInt; Apriori.minSupPer = minSup; allSets = Apriori.GetAllSets(allSets, untilWhichSet); }
static public List <Apriori> GetAllSets(List <Apriori> allSets, int untilWhichSet) { Apriori set = new Apriori(1); set.GetFirstItemset(); while (set.freqSet.freqSet.Count > 0 && allSets.Count < untilWhichSet) { allSets.Add(set); set = set.GetNextItemset(); } return(allSets); }
private void GetCandidateSet(Apriori SrcSet) { // 组合得到K+1集 // 组合方法是两个项0~k-2的元素相等的话,那么就能产生新项{0~k-2,第一项k-1,第二项k-1} // 找出频繁项集内的两个项尝试组合 for (int i = 0; i < SrcSet.freqSet.freqSet.Count; ++i) { for (int j = i + 1; j < SrcSet.freqSet.freqSet.Count; ++j) { // 对于每个频繁项集内的元素 for (int k = 0; k < SrcSet.K; ++k) { // 如果两个项第k个元素相等 if (SrcSet.freqSet.freqSet[i][k] != SrcSet.freqSet.freqSet[j][k]) { // 如果k不是最后一个,直接跳过 if (k != SrcSet.K - 1) { break; } else { // 组合的结果unit List <int> unit = new List <int>(); // 组合生成候选项集的项 for (int g = 0; g < SrcSet.K + 1; ++g) { if (g != SrcSet.K) { unit.Add(SrcSet.freqSet.freqSet[i][g]); } else { unit.Add(SrcSet.freqSet.freqSet[j][g - 1]); } } if (!SrcSet.IsInFreq(unit)) { freqSet.freqSet.Add(unit); freqSet.supCount.Add(0); } } } } } } }