예제 #1
0
        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);
        }
예제 #2
0
        // 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);
        }