public static List<Birliktelik> BirlitelikBul(VeriToplami db, VeriToplami L, double GuvenEsik) { List<Birliktelik> tumKurallarListesi = new List<Birliktelik>(); foreach (Veri veriler in L) { VeriToplami liste = Bit.AltKumeBul(veriler, 0); foreach (Veri altkume in liste) { double Guven = (db.DestekBul(veriler) / db.DestekBul(altkume)) * 100.0; if (Guven >= GuvenEsik) { Birliktelik kural = new Birliktelik(); kural.X.AddRange(altkume); kural.Y.AddRange(veriler.Remove(altkume)); kural.Destek = db.DestekBul(veriler); kural.Guven = Guven; if (kural.X.Count > 0 && kural.Y.Count > 0) { tumKurallarListesi.Add(kural); } } } } return (tumKurallarListesi); }
public static VeriToplami AltKumeBul(Veri veriler, int n) { VeriToplami liste = new VeriToplami(); int AltKumeSayisi = (int)Math.Pow(2, Convert.ToInt32(veriler.Count)); for (int i = 0; i < AltKumeSayisi; i++) { if (n == 0 || GetOnCount(i, veriler.Count) == n) { string binary = DecimalToBinary(i, veriler.Count); Veri altkume = new Veri(); for (int bitIndex = 0; bitIndex < veriler.Count; bitIndex++) { if (binary[bitIndex] == '1') { altkume.Add(veriler[bitIndex]); } } //Console.WriteLine("Alt küme sayısı " + altkume.Count()); //Console.WriteLine(altkume); liste.Add(altkume); } } return liste; }
//apiori algoritması............................. public static VeriToplami Apiori_1(VeriToplami db, double mindestek) { Veri I = db.DistincYap(); VeriToplami L = new VeriToplami(); VeriToplami Li = new VeriToplami(); VeriToplami Ci = new VeriToplami(); foreach (string item in I) { Ci.Add(new Veri() { item }); } //ikinci terasyon kümeleme int k = 2; while (Ci.Count != 0) { Li.Clear(); foreach (Veri veriler in Ci) { veriler.Destek = db.DestekBul(veriler); if (veriler.Destek >= mindestek) { Li.Add(veriler); L.Add(veriler); } } Ci.Clear(); Ci.AddRange(Bit.AltKumeBul(Li.DistincYap(), k)); k = k + 1; } return L; }