static void Main(string[] args) { ArrayList cicekList = new ArrayList(); //pull data by string type from the link System.IO.StreamReader sw = new StreamReader(@"C:\Users\Kenan\source\repos\ConsoleApp6\ConsoleApp6\veri.txt"); String satir; //find max and min values for first center's random method. double[] ust = { 0.0, 0.0, 0.0, 0.0 }; double[] alt = { 100.0, 100.0, 100.0, 100.0 }; int merkez_say = 3; while ((satir = sw.ReadLine()) != null) { string[] koordinatlar = satir.Split(','); //convert string to double and create plant object double q = Double.Parse(koordinatlar[0], System.Globalization.CultureInfo.InvariantCulture); double b = Double.Parse(koordinatlar[1], System.Globalization.CultureInfo.InvariantCulture); double c = Double.Parse(koordinatlar[2], System.Globalization.CultureInfo.InvariantCulture); double d = Double.Parse(koordinatlar[3], System.Globalization.CultureInfo.InvariantCulture); plant yaprak = new plant(q, b, c, d, koordinatlar[4]); cicekList.Add(yaprak); for (int a = 0; a < 4; a++) { if (alt[a] > yaprak.deger[a]) { alt[a] = yaprak.deger[a]; } if (ust[a] < yaprak.deger[a]) { ust[a] = yaprak.deger[a]; } } } sw.Close(); Center[] Merkezler = new Center[merkez_say]; for (int i = 0; i < merkez_say; i++) { Merkezler[i] = new Center(alt, ust); } bool finish = true; int r = 0; do { //cluster all of plant by attribute foreach (plant a in cicekList) { double m1; double min = 1000000; Center min1 = null; for (int i = 0; i < merkez_say; i++) { //minimum euclid distance for clustring process m1 = Math.Sqrt((Math.Pow(a.deger[0] - Merkezler[i].d1, 2)) + (Math.Pow(a.deger[1] - Merkezler[i].d2, 2)) + (Math.Pow(a.deger[2] - Merkezler[i].d3, 2)) + (Math.Pow(a.deger[3] - Merkezler[i].d4, 2))); if (m1 < min) { min1 = Merkezler[i]; min = m1; } } min1.liste.Add(a); } for (int p = 0; p < merkez_say; p++) { Merkezler[p].New_Center(); } foreach (Center m in Merkezler) { //print the console datas by clusters Console.WriteLine(); foreach (plant fl in m.liste) { Console.WriteLine(fl.print()); } } foreach (Center m in Merkezler) { //clean all center's plant list for new clustering m.liste.Clear(); } for (int p = 0; p < merkez_say; p++) { //control finish condition if (Merkezler[p].approximate(r) == false) { finish = false; break; } } r++; }while (finish != true); Console.ReadKey(); }
public Center(Center eski) { this.foo1 = (double[])eski.foo1.Clone(); }
public void New_Center() { //find the mean of arraylist of points that closest center and assign as new center this.eskiMerkez = new Center(this); this.foo1 = this.ort(); }
static void Main(string[] args) { int oz_nitelik = 4; rastgele rand = new rastgele(); ArrayList datalist = new ArrayList(); //pull data by string type from the link Console.Write("Veri Tipi Seçiniz(Çiçek-1/Sosyal Medya-2):"); int t = Convert.ToInt32(Console.ReadLine()); Console.Write("Merkez Sayısı Giriniz:"); int merkez_say = Convert.ToInt32(Console.ReadLine()); StreamReader sw = new System.IO.StreamReader(@"C:\Users\ahmetcan\Desktop\ConsoleApp7\ConsoleApp7\veri2.txt"); oz_nitelik = 3; if (t == 1) { sw = new System.IO.StreamReader(@"C:\Users\ahmetcan\Desktop\ConsoleApp7\ConsoleApp7\veri3.txt"); oz_nitelik = 4; } string satir; //find max and min values for first center's random method. while ((satir = sw.ReadLine()) != null)//dosyadan veriler okunur,split yöntemiyle bölünür,bu verilerle obje oluşturulur { string[] koordinat = satir.Split(','); //convert string to double and create data object if (oz_nitelik == 4) { string[] koordinatlar = new string[oz_nitelik + 1]; for (int c = 0; c < oz_nitelik + 1; c++) { koordinatlar[c] = koordinat[c]; } double[] veri = new double[oz_nitelik]; for (int s = 0; s < oz_nitelik; s++) { veri[s] = Double.Parse(koordinatlar[s], System.Globalization.CultureInfo.InvariantCulture); } String isim2 = koordinatlar[4]; data yaprak = new data(veri, isim2); datalist.Add(yaprak); } else { string[] koordinatlar = new string[oz_nitelik]; for (int c = 0; c < oz_nitelik; c++) { koordinatlar[c] = koordinat[c]; } double[] veri = new double[oz_nitelik]; for (int s = 0; s < oz_nitelik; s++) { veri[s] = Double.Parse(koordinatlar[s], System.Globalization.CultureInfo.InvariantCulture); } data yaprak = new data(veri); datalist.Add(yaprak); } } sw.Close(); Center[] choose() { Center[] Merkezi = new Center[merkez_say]; for (int i = 0; i < merkez_say; i++) { int rd = rand.GetRandomNumber(0, datalist.Count); data alım = (data)datalist[rd]; Merkezi[i] = new Center(alım); } return(Merkezi); } Center[] Merkezler = choose(); bool cc = true; int r = 0; do { bool isempty = true; //cluster all of data by attribute while (isempty == true) { foreach (data a in datalist) { double m1; double min = 1000000; Center min1 = null; for (int i = 0; i < merkez_say; i++) { //minimum euclid distance for clustring process m1 = a.uzaklık(Merkezler[i]); if (m1 < min) { min1 = Merkezler[i]; min = m1; } } min1.liste.Add(a); } foreach (Center ctr in Merkezler) { if (ctr.liste == null) { Merkezler = choose(); isempty = true; break; } isempty = false; } } for (int p = 0; p < merkez_say; p++) { Merkezler[p].New_Center(); } foreach (Center m in Merkezler) { //print the console datas by clusters Console.WriteLine("------------------------------------"); foreach (data fl in m.liste) { Console.WriteLine("Öznitelik:" + fl.print() + " Merkez Uzaklık:" + String.Format("{0:0.000}", fl.uzaklık(m)) + " Bulunduğu Merkez:" + m.tostring()); } } for (int i = 0; i < merkez_say; i++) { } foreach (Center m in Merkezler) { //clean all center's data list for new clustering m.liste.Clear(); } foreach (Center cp in Merkezler) { //control finish condition if (cp.finish(r) == false) { cc = false; break; } cc = true; } Console.WriteLine(); Console.WriteLine(); Console.WriteLine(); r++; }while (cc != true); Console.Write("Yeni Veri Girişi Yapmak İster misiniz?(Evet=e/Hayır=h):"); string d = Console.ReadLine(); while (d.Equals("e")) { double mini = 3000; double[] degg = new double[oz_nitelik]; for (int o = 0; o < oz_nitelik; o++) { Console.Write("Veri Giriniz: "); degg[o] = Convert.ToDouble(Console.ReadLine(), System.Globalization.CultureInfo.InvariantCulture); } data ff = new data(degg); double mesafe = 10000; Center sec = null; foreach (Center crr in Merkezler) { mesafe = ff.uzaklık(crr); if (mesafe < mini) { sec = crr; mini = mesafe; } } sec.liste.Add(ff); Console.WriteLine("Öznitelik:" + ff.print() + " Merkez Uzaklık:" + String.Format("{0:0.000}", mesafe) + " Bulunduğu Merkez:" + sec.tostring()); Console.ReadKey(); Console.Write("Yeni Veri Girişi Yapmak İster misiniz?(Evet=e/Hayır=h):"); d = Console.ReadLine(); } }