static void sosyalMedyaKullanımı(int merkezsayısı) // sosyal medya kullnımı veriseti için k-means algoritmasını //gerçekleştiren method. { Veri[] merkezler = İlkKumeMerkezleri(merkezsayısı, 3); Veri[] kişiler = new Veri[10]; kişiler[0] = new Veri(90, 3, 5); kişiler[1] = new Veri(53, 37, 35); kişiler[2] = new Veri(48, 52, 40); kişiler[3] = new Veri(85, 7, 2); kişiler[4] = new Veri(5, 55, 4); kişiler[5] = new Veri(93, 8, 25); kişiler[6] = new Veri(11, 75, 6); kişiler[7] = new Veri(8, 9, 80); kişiler[8] = new Veri(5, 19, 80); kişiler[9] = new Veri(9, 3, 91); ArrayList[] kumelenmisler = kümele(kişiler, merkezler); Veri[] yenimerkezler = YeniKumeMerkezleri(kumelenmisler, merkezler); Console.WriteLine("Devam etmek için enter'a basınız..."); Console.ReadLine(); while (!merkezlerEsitmi(merkezler, yenimerkezler)) { merkezler = yenimerkezler; kumelenmisler = kümele(kişiler, merkezler); yenimerkezler = YeniKumeMerkezleri(kumelenmisler, merkezler); Console.WriteLine("Devam etmek için enter'a basınız..."); Console.ReadLine(); } yenikişi(yenimerkezler); Console.WriteLine(); Console.WriteLine("İşlem bitti.Programı kapatmak için entera basınız."); }
static void zambakTürleri(int türsayısı) //zambak veriseti için k-means algoritmasını gerçekleştiren method { Veri[] merkezler = İlkKumeMerkezleri(türsayısı, 4); Veri[] çiçekler = new Veri[150]; string[] lines = System.IO.File.ReadAllLines(@"C:\Users\fatih\source\repos\K-means\K-means\Veriseti.txt"); for (int i = 0; i < lines.Length / 2; i++) { string[] veriler = lines[2 * i].Split(','); çiçekler[i] = new Veri(double.Parse(veriler[0], System.Globalization.CultureInfo.InvariantCulture), double.Parse(veriler[1], System.Globalization.CultureInfo.InvariantCulture), double.Parse(veriler[2], System.Globalization.CultureInfo.InvariantCulture), double.Parse(veriler[3], System.Globalization.CultureInfo.InvariantCulture)); string[] veriler2 = lines[2 * i + 1].Split(','); çiçekler[i + 75] = new Veri(double.Parse(veriler2[0], System.Globalization.CultureInfo.InvariantCulture), double.Parse(veriler2[1], System.Globalization.CultureInfo.InvariantCulture), double.Parse(veriler2[2], System.Globalization.CultureInfo.InvariantCulture), double.Parse(veriler2[3], System.Globalization.CultureInfo.InvariantCulture)); } ArrayList[] kumelenmisler = kümele(çiçekler, merkezler); Veri[] yenimerkezler = YeniKumeMerkezleri(kumelenmisler, merkezler); Console.WriteLine("Devam etmek için enter'a basınız..."); Console.ReadLine(); while (!merkezlerEsitmi(merkezler, yenimerkezler)) { merkezler = yenimerkezler; kumelenmisler = kümele(çiçekler, merkezler); yenimerkezler = YeniKumeMerkezleri(kumelenmisler, merkezler); Console.WriteLine("Devam etmek için enter'a basınız..."); Console.ReadLine(); } Console.WriteLine("Programı kapatmak için enter'a basınız."); }
static Veri[] İlkKumeMerkezleri(int merkezsayısı, int özniteliksayısı) //istenen bir sayıdaki ve öznitelikteki // ilk küme merkezlerini random şekilde // belirleyen metod { Veri[] merkezler = new Veri[merkezsayısı]; for (int i = 0; i < merkezsayısı; i++) { if (özniteliksayısı == 3) // sosyal medya kullanımı veriseti için küme merkezlerini belirleyen kod { int x = random.Next(100); int y = random.Next(100); int z = random.Next(100); Veri merkez = new Veri(x, y, z); merkezler[i] = merkez; } if (özniteliksayısı == 4) // çiçek veriseti için küme merkezlerini belirleyen kod { double x = random.Next(43, 78) / 10.0; double y = random.Next(20, 45) / 10.0; double z = random.Next(10, 70) / 10.0; double s = random.Next(1, 26) / 10.0; Veri merkez = new Veri(x, y, z, s); merkezler[i] = merkez; } } return(merkezler); }
static Veri[] YeniKumeMerkezleri(ArrayList[] kumelenmisler, Veri[] merkezler) //kumelenmis verileri alıp bu verilere göre //herbir küme merkezini tekrardan belirleyen //ve bu kumemerkezlerini veri dizisi şeklinde //geri döndüren method { Veri[] yenimerkezler = new Veri[kumelenmisler.Length]; for (int i = 0; i < kumelenmisler.Length; i++) { double x = 0; double y = 0; double z = 0; double s = 0; ArrayList icerdekidizi = kumelenmisler[i]; if (icerdekidizi.Count == 0) { yenimerkezler[i] = new Veri(merkezler[i].X, merkezler[i].Y, merkezler[i].Z, merkezler[i].S); } else { for (int j = 0; j < icerdekidizi.Count; j++) { x += ((Veri)icerdekidizi[j]).X; y += ((Veri)icerdekidizi[j]).Y; z += ((Veri)icerdekidizi[j]).Z; s += ((Veri)icerdekidizi[j]).S; } yenimerkezler[i] = new Veri(x / icerdekidizi.Count, y / icerdekidizi.Count, z / icerdekidizi.Count, s / icerdekidizi.Count); } } return(yenimerkezler); }
static void yenikişi(Veri [] merkezler) //sosyal medya verisetinin son k-means algoritmasına göre son hali // belirlendikten sonra bilgileri verilen kişiyi kümeleyen method. { Console.WriteLine("X koordinatı :"); int x = Convert.ToInt16(Console.ReadLine()); Console.WriteLine("Y koordinatı :"); int y = Convert.ToInt16(Console.ReadLine()); Console.WriteLine("Z koordinatı :"); int z = Convert.ToInt16(Console.ReadLine()); Veri yeniveri = new Veri(x, y, z); double uzaklık = 175; int kume = 0; for (int i = 0; i < merkezler.Length; i++) { double gecici = 0; gecici += Math.Pow(yeniveri.X - merkezler[i].X, 2); gecici += Math.Pow(yeniveri.Y - merkezler[i].Y, 2); gecici += Math.Pow(yeniveri.Z - merkezler[i].Z, 2); gecici += Math.Pow(yeniveri.S - merkezler[i].S, 2); gecici = Math.Sqrt(gecici); if (gecici < uzaklık) { uzaklık = gecici; kume = i + 1; } } Console.WriteLine("Girdiğiniz veriye ait bilgiler :"); Console.WriteLine("Öznitelikler\tMin Uzaklık\tKüme No\tKüme Merkezi"); Console.Write(yeniveri.ToString() + "\t"); Console.Write(string.Format("{0:F6}", uzaklık) + "\t"); Console.Write(kume + "\t"); Console.Write(merkezler[kume - 1].ToString()); }