public NeuralNetwork(int numberOfInputs, int numberOfHidden, int numberOfOutput, bool bias, Matrix.Matrix inputs) { learningRate = 0.001; momentumRate = 0.002; useBias = bias; numberOfHiddenNeurons = numberOfHidden; inp = inputs; hiddenOutput = new Matrix.Matrix(numberOfHidden, 1); outputWeights = new Matrix.Matrix(numberOfOutput, numberOfHidden); range = new Matrix.Matrix(numberOfHidden, 1); //hiddenOutput.RandomizeMatrix(-1, 1); outputWeights.RandomizeMatrix(-1, 1); Random rnd = new Random(); List <Kmeans.Point> Data = new List <Kmeans.Point>(); for (int i = 0; i < inputs.row; i++) { Data.Add(new Kmeans.Point(inputs.tab[i, 0], inputs.tab[i, 1], inputs.tab[i, 2], inputs.tab[i, 3])); } var km = new Kmeans.KMeans(numberOfHidden, Data, rnd); km.Train(); Console.WriteLine("centroids done"); centre = km.Centroids; for (int i = 0; i < numberOfHidden; ++i) { //wypełnianie macierzy r - zasięgu range.tab[i, 0] = setRange(centre[i]) * beta; } momentumMatrixOutput = new Matrix.Matrix(numberOfOutput, numberOfHidden); biasOutput = new Matrix.Matrix(numberOfOutput, 1); momentumMatrixOutputBias = new Matrix.Matrix(numberOfOutput, 1); biasOutput.RandomizeMatrix(-1, 1); }
// K-MEANS İŞLEMİ VE SONUÇ ÇİZİMİ private void btnUygula_Click(object sender, EventArgs e) { // K-Means öncesi veri kontrolü if (KMeans.noktalar.Count() < 1) { MessageBox.Show("En Az 1 Düğüm Olmalı"); return; } if (KMeans.kümeler.Count() < 1) { MessageBox.Show("En Az 1 Küme Olmalı"); return; } // Örnek Sonucu Yada İterasyon Sonucunu ilerde bastırmak üzere şimdiden mesaj için sonuc isimli string açılır. string sonuc = ""; // Biten İterasyon Var Mı Kontrol if (KMeans.iterasyon == 0) // iterasyon 0 sa yani bitmişse Sonuç Göstertilecektir (EN AŞAĞIDA, Chart Gösterimi Sonrası) { sonuc = "Iterasyon BİTTİ.\n\t Sonuç : "; } else // iterasyon 0 dan farklı yani bitmemişse. Hem K-Means Yapılır Hemde İterasyon Sonucu Hazırlanacak (EN AŞAĞIDA, Chart Gösterimi Sonrası) { sonuc = KMeans.iterasyon + ".Iterasyon.\n\t Sonuç : "; // K-Means İşlemi KMeans.uzakliklariHesapla(); KMeans.kümelerinDüğümOrtalamasınıHesapla(); //işlem yapıldıktan sonra bittiyse iterasyon. Örnek bittiyse sonuç mesajını güncelleriz. if (KMeans.iterasyon == 0) { sonuc = "Iterasyon BİTTİ.\n\t Sonuç : "; } } //K-Means Sonrası Çizimler foreach (Series se in chart1.Series.ToList()) // chart'ın içindeki series'ler boşaltılır { chart1.Series.Remove(se); } int kumeAdSayac = 1; foreach (Küme küme in KMeans.kümeler) // Küme Ve Düğümleri bastırılır. { // Düğümleri Ekleme Series s = new Series(); // her kümenin düğümlerini eklemek için series açılır s.Name = "Küme " + kumeAdSayac + " Düğümleri"; // adı "Küme {KümeSayısı} Düğümleri" s.Enabled = true; // chart'ta aktif olacak, görünecek s.ChartType = SeriesChartType.Point; // düğümlerin tipi nokta olacak s.XValueType = ChartValueType.Double; // düğümlerin x verisi double s.YValueType = ChartValueType.Double; // düğümlerin y verisi double s.MarkerColor = küme.renk; // düğümlerin rengi kümenin rengi yapılır s.MarkerSize = 10; // düğümlerin büyüklüğü 10 s.MarkerStyle = MarkerStyle.Circle; // düğümler yuvarlak olacak s.IsVisibleInLegend = false; // Düğümler Yandaki liste yazısına eklenmesinler foreach (Düğüm düğüm in küme.noktaları) // Kümeye Ait Tüm Noktalar Eklenir. { if ((string)btnKoordinatlariAcKapa.Tag == "acik") { s.Points.Add(new DataPoint() { XValue = düğüm.x, YValues = new double[] { düğüm.y }, Label = $"({kırp(düğüm.x)} , {kırp(düğüm.y)})", Font = new Font("Arial", 9.0f) }); } else { s.Points.Add(new DataPoint() { XValue = düğüm.x, YValues = new double[] { düğüm.y } }); } } chart1.Series.Add(s); // Series, Chart'a Kaydolur //kümenin kendisi Eklenir Series s2 = new Series(); // her kümenin kendisini eklemek için series açılır s2.Name = "Küme " + kumeAdSayac++; // adı "Küme {KümeSayısı}" s2.Enabled = true; // chart'ta aktif olacak, görünecek s2.ChartType = SeriesChartType.Point; // kümenin tipi nokta olacak s2.XValueType = ChartValueType.Double; // kümenin x verisi double s2.YValueType = ChartValueType.Double; // kümenin y verisi double s2.MarkerBorderColor = küme.renk; // kümenin çevre(sınır) rengi kümeye verilen renk olacak s2.MarkerBorderWidth = 2; // kümenin çevre sınır büyüklüğü 2 olacak (HALKA(SİMİT) YAPISI İÇİN) s2.MarkerColor = Color.Transparent; // kümenin içi transparent yani boş olacak s2.MarkerSize = 26; // kümenin tam çapı 26 uzunlukta olacak s2.MarkerStyle = MarkerStyle.Circle; // kümenin tipi yuvarlak olacak (TAM İSTEDİĞİMİZ HALKA(SİMİT) YAPISINA ULAŞTIK) if ((string)btnKoordinatlariAcKapa.Tag == "acik") { s2.Points.Add(new DataPoint() { XValue = küme.x, YValues = new double[] { küme.y }, Label = $"({kırp(küme.x)} , {kırp(küme.y)})", Font = new Font("Arial", 9.0f) }); // kümenin merkez noktaları verilir. } else { s2.Points.Add(new DataPoint() { XValue = küme.x, YValues = new double[] { küme.y } }); // kümenin merkez noktaları verilir. } chart1.Series.Add(s2); // series gösterime girer. } // Örnek Sonucu Yada İterasyon Sonucunu Göstermek için Tüm Kümelerin Koordinatları Yazdırılır. int kumeSayac = 1; foreach (Küme küme in KMeans.kümeler) { sonuc += $"\n Küme " + kumeSayac++ + " ( " + kırp(küme.x) + " , " + kırp(küme.y) + " )"; } MessageBox.Show(sonuc); }