public Sonuc KokOperasyonYiliIcinUcYaprakBul(List <Hasta> hastalar, string bolumleme, Sonuc sonuc) { sonuc.KokDugum = "Operasyon Yılı"; int yilBolumlemeSayisi = hastalar.Where(each => each.OperasyonYili == bolumleme).Count(); int yilIcinDurumBirSayisi = hastalar.Where(each => each.Durum == 1 && each.OperasyonYili == bolumleme).Count(); int yilIcinDurumIkiSayisi = hastalar.Where(each => each.Durum == 2 && each.OperasyonYili == bolumleme).Count(); double yilIcinDurumBirOlasilik = Convert.ToDouble(yilIcinDurumBirSayisi) / Convert.ToDouble(yilBolumlemeSayisi); double yilIcinDurumIkiOlasilik = Convert.ToDouble(yilIcinDurumIkiSayisi) / Convert.ToDouble(yilBolumlemeSayisi); double H_Yil_Entropi = EntropiHesapla(yilIcinDurumBirOlasilik, yilIcinDurumIkiOlasilik); /*---------------------------------------------------------------------------------------------------------------------------*/ int yilIcinDugumSayisiKucukSayisi = hastalar.Where(each => each.OperasyonYili == bolumleme && each.DugumSayisi == "K").Count(); int yilIcinDugumSayisiBuyukSayisi = hastalar.Where(each => each.OperasyonYili == bolumleme && each.DugumSayisi == "B").Count(); int yilIcinDugumSayisiKucukDurumBirSayisi = hastalar.Where(each => each.Durum == 1 && each.OperasyonYili == bolumleme && each.DugumSayisi == "K").Count(); int yilIcinDugumSayisiKucukDurumIkiSayisi = hastalar.Where(each => each.Durum == 2 && each.OperasyonYili == bolumleme && each.DugumSayisi == "K").Count(); int yilIcinDugumSayisiBuyukDurumBirSayisi = hastalar.Where(each => each.Durum == 1 && each.OperasyonYili == bolumleme && each.DugumSayisi == "B").Count(); int yilIcinDugumSayisiBuyukDurumIkiSayisi = hastalar.Where(each => each.Durum == 2 && each.OperasyonYili == bolumleme && each.DugumSayisi == "B").Count(); decimal yilIcinDugumKazanc = KazancHesapla(yilIcinDugumSayisiKucukDurumBirSayisi, yilIcinDugumSayisiKucukDurumIkiSayisi, yilIcinDugumSayisiKucukSayisi, yilIcinDugumSayisiBuyukDurumBirSayisi, yilIcinDugumSayisiBuyukDurumIkiSayisi, yilIcinDugumSayisiBuyukSayisi, yilBolumlemeSayisi, H_Yil_Entropi); /*---------------------------------------------------------------------------------------------------------------------------*/ int yilIcinYasKucukSayisi = hastalar.Where(each => each.OperasyonYili == bolumleme && each.Yas == "K").Count(); int yilIcinYasBuyukSayisi = hastalar.Where(each => each.OperasyonYili == bolumleme && each.Yas == "B").Count(); int yilIcinYasKucukDurumBirSayisi = hastalar.Where(each => each.Durum == 1 && each.OperasyonYili == bolumleme && each.Yas == "K").Count(); int yilIcinYasKucukDurumIkiSayisi = hastalar.Where(each => each.Durum == 2 && each.OperasyonYili == bolumleme && each.Yas == "K").Count(); int yilIcinYasBuyukDurumBirSayisi = hastalar.Where(each => each.Durum == 1 && each.OperasyonYili == bolumleme && each.Yas == "B").Count(); int yilIcinYasBuyukDurumIkiSayisi = hastalar.Where(each => each.Durum == 2 && each.OperasyonYili == bolumleme && each.Yas == "B").Count(); decimal yilIcinYasKazanc = KazancHesapla(yilIcinYasKucukDurumBirSayisi, yilIcinYasKucukDurumIkiSayisi, yilIcinYasKucukSayisi, yilIcinYasBuyukDurumBirSayisi, yilIcinYasBuyukDurumIkiSayisi, yilIcinYasBuyukSayisi, yilBolumlemeSayisi, H_Yil_Entropi); if (yilIcinDugumKazanc > yilIcinYasKazanc) { if (bolumleme == "K") { sonuc.UcYaprakSol = "Dugum"; SolUcYaprakIcinDurumBelirleme(yilIcinDugumSayisiKucukDurumBirSayisi, yilIcinDugumSayisiKucukDurumIkiSayisi, yilIcinDugumSayisiBuyukDurumBirSayisi, yilIcinDugumSayisiBuyukDurumIkiSayisi, sonuc); } else { sonuc.UcYaprakSag = "Dugum"; SagUcYaprakIcinDurumBelirleme(yilIcinDugumSayisiKucukDurumBirSayisi, yilIcinDugumSayisiKucukDurumIkiSayisi, yilIcinDugumSayisiBuyukDurumBirSayisi, yilIcinDugumSayisiBuyukDurumIkiSayisi, sonuc); } } else { if (bolumleme == "K") { sonuc.UcYaprakSol = "Yas"; SolUcYaprakIcinDurumBelirleme(yilIcinYasKucukDurumBirSayisi, yilIcinYasKucukDurumIkiSayisi, yilIcinYasBuyukDurumBirSayisi, yilIcinYasBuyukDurumIkiSayisi, sonuc); } else { sonuc.UcYaprakSag = "Yas"; SagUcYaprakIcinDurumBelirleme(yilIcinYasKucukDurumBirSayisi, yilIcinYasKucukDurumIkiSayisi, yilIcinYasBuyukDurumBirSayisi, yilIcinYasBuyukDurumIkiSayisi, sonuc); } } return(sonuc); }
public void SagUcYaprakIcinDurumBelirleme(int kucukDurumBirSayisi, int kucukDurumIkiSayisi, int buyukDurumBirSayisi, int buyukDurumIkiSayisi, Sonuc sonuc) { if (kucukDurumBirSayisi > kucukDurumIkiSayisi) { sonuc.UcYaprakSagDurumSol = "1"; } else { sonuc.UcYaprakSagDurumSol = "2"; } if (buyukDurumBirSayisi > buyukDurumIkiSayisi) { sonuc.UcYaprakSagDurumSag = "1"; } else { sonuc.UcYaprakSagDurumSag = "2"; } }
private void button1_Click(object sender, EventArgs e) { List <Hasta> hastalar = HastalariGetir(); List <int> yasBolumlemeListesi = new List <int> { 50, 60, 70 }; List <int> yilBolumlemeListesi = new List <int> { 62, 63, 64 }; List <int> dugumBolumlemeListesi = new List <int> { 5, 10, 19 }; int durumBirSayisi = hastalar.Where(each => each.Durum == 1).Count(); //Linq //Durumu 1 olan kayıtların sayısı int durumIkiSayisi = hastalar.Where(each => each.Durum == 2).Count(); //Durumu 2 olan kayıtların sayısı int kayitSayisi = hastalar.Count(); //Bütün hastaların sayısı double durumBirOlasilik = Convert.ToDouble(durumBirSayisi) / Convert.ToDouble(kayitSayisi); //Durumu 1 olan kayıtların olasılık hesabı double durumIkiOlasilik = Convert.ToDouble(durumIkiSayisi) / Convert.ToDouble(kayitSayisi); //Durumu 2 olan kayıtların olasılık hesabı double H_Durum = EntropiHesapla(durumBirOlasilik, durumIkiOlasilik); //Entropi hesaplıyorum. decimal enBuyukYasKazanc = 0; double yasEnIyiBolumleme = 0; foreach (int item in yasBolumlemeListesi) //Hastanın yaşı için en iyi bölümleme hangisi onu seçiyoruz. { foreach (Hasta hasta in hastalar) { if (Convert.ToInt32(hasta.Yas) >= item) { hasta.Yas = "B"; //Büyük eşit } else { hasta.Yas = "K"; //Kucuk } } decimal yasKazanc = YasKazancHesaplama(hastalar, H_Durum); //Yaş için kazanç hesaplama işlemi yapar. if (yasKazanc > enBuyukYasKazanc) { enBuyukYasKazanc = yasKazanc; yasEnIyiBolumleme = item; } hastalar = HastalariGetir(); //Listeyi tekrar eski haline getirmek gerekiyor. Yoksa tekrar kontrol yaparken patlar. } decimal enBuyukYilKazanc = 0; double yilEnIyiBolumleme = 0; foreach (int item in yilBolumlemeListesi) //Hastanın operasyon(ameliyat) yılı için en iyi bölümleme hangisi onu seçiyoruz. { foreach (Hasta hasta in hastalar) { if (Convert.ToInt32(hasta.OperasyonYili) >= item) { hasta.OperasyonYili = "B"; //Büyük eşit } else { hasta.OperasyonYili = "K"; //Kucuk } } decimal yilKazanc = YilKazancHesaplama(hastalar, H_Durum); if (yilKazanc > enBuyukYilKazanc) { enBuyukYilKazanc = yilKazanc; yilEnIyiBolumleme = item; } hastalar = HastalariGetir(); } decimal enBuyukDugumKazanc = 0; double dugumEnIyiBolumleme = 0; foreach (int item in dugumBolumlemeListesi) //Hastanın düğüm sayısı (hastalık sayısı) için en iyi bölümleme hangisi onu seçiyoruz. { foreach (Hasta hasta in hastalar) { if (Convert.ToInt32(hasta.DugumSayisi) >= item) { hasta.DugumSayisi = "B"; //Büyük eşit } else { hasta.DugumSayisi = "K"; //Kucuk } } decimal dugumKazanc = DugumKazancHesaplama(hastalar, H_Durum); if (dugumKazanc > enBuyukDugumKazanc) { enBuyukDugumKazanc = dugumKazanc; dugumEnIyiBolumleme = item; } hastalar = HastalariGetir(); } /*-----------------En iyi bölümlemelere göre Küçük/Büyük bölümlemesi yapılır.---------------------------*/ foreach (Hasta hasta in hastalar) { if (Convert.ToInt32(hasta.Yas) >= yasEnIyiBolumleme) { hasta.Yas = "B"; //Büyük eşit } else { hasta.Yas = "K"; //Kucuk } if (Convert.ToInt32(hasta.OperasyonYili) >= yilEnIyiBolumleme) { hasta.OperasyonYili = "B"; //Büyük eşit } else { hasta.OperasyonYili = "K"; //Kucuk } if (Convert.ToInt32(hasta.DugumSayisi) >= dugumEnIyiBolumleme) { hasta.DugumSayisi = "B"; //Büyük eşit } else { hasta.DugumSayisi = "K"; //Kucuk } } /*-------------------------Kök düğümü(En tepedekini) hesapladık------------------------------------*/ List <decimal> kazanclar = new List <decimal> { enBuyukYasKazanc, enBuyukYilKazanc, enBuyukDugumKazanc }; decimal enBuyukKazanc = EnBuyukKazancBul(kazanclar); /*-------------------------Uç yaprakları hesaplayacağız------------------------------------*/ List <string> bolumlemeler = new List <string> { "K", "B" }; Sonuc sonuc = new Sonuc(); Parallel.ForEach(bolumlemeler, bolumleme => { if (enBuyukKazanc == enBuyukDugumKazanc) { KokDugumSayisiIcinUcYaprakBul(hastalar, bolumleme, sonuc); } else if (enBuyukKazanc == enBuyukYasKazanc) { KokYasIcinUcYaprakBul(hastalar, bolumleme, sonuc); } else if (enBuyukKazanc == enBuyukYilKazanc) { KokOperasyonYiliIcinUcYaprakBul(hastalar, bolumleme, sonuc); } }); lblUcYaprakSol.Text = sonuc.UcYaprakSol; lblUcYaprakSag.Text = sonuc.UcYaprakSag; lblKokDugum.Text = sonuc.KokDugum; lblUcSolDurumSol.Text = sonuc.UcYaprakSolDurumSol; lblUcSolDurumSag.Text = sonuc.UcYaprakSolDurumSag; lblUcSagDurumSol.Text = sonuc.UcYaprakSagDurumSol; lblUcSagDurumSag.Text = sonuc.UcYaprakSagDurumSag; }