Example #1
0
 private void btnKMeansClustering_Click(object sender, EventArgs e)
 {
     try
     {
         if (PList.Count == 0)
         {
             throw new Exception("No points data exists..");
         }
         int numClusters = int.Parse(txtClusters.Text);
         List <ClusterCenterPoint> CList = null;
         KMeans.DoKMeans(numClusters, ref PList, ref CList, 0.1, 1000, true); //true means do kplusplus
         MyImageProc.DrawClusters(pic1, PList, 1.0, numClusters);
         txtResult.Text = ComputeAndShowVarianceResults(numClusters);
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
 }
Example #2
0
        private void voBtnKMeanPPV_Click(object sender, EventArgs e)
        {
            int kiNumClusters;
            List <ClusterCenterPoint> koCList = null;

            try
            {
                if (this.voPList.Count == 0)
                {
                    throw new Exception("No points data exists..");
                }
                kiNumClusters = int.Parse(this.voTbCount.Text);
                KMeans.MDoKMeansWithMinVariance(kiNumClusters, ref this.voPList, ref koCList, 0.1, 1000, true);
                MyImageProc.MDrawClusters(this.voPB, this.voPList, 1.0, kiNumClusters);
                this.voTbResult.Text = mComputeAndShowVarianceResults(kiNumClusters);
            }
            catch (Exception koEx)
            {
                MessageBox.Show(koEx.Message);
            }
        }
Example #3
0
        private void voBtnLoad_Click(object sender, EventArgs e)
        {
            string koDataFileName;
            string koLine;

            string[] koParts;
            char[]   kcDelim = { ',', ' ' };

            try
            {
                OpenFileDialog koDlg = new OpenFileDialog( );

                if (koDlg.ShowDialog( ) == DialogResult.OK)
                {
                    this.voPList.Clear( );
                    koDataFileName = koDlg.FileName;
                    using (StreamReader koReader = new StreamReader(koDataFileName))
                    {
                        while ((koLine = koReader.ReadLine( )) != null)
                        {
                            koParts = koLine.Split(kcDelim);
                            if (koParts.Length >= 3)
                            {
                                this.voPList.Add(new MyPoint( )
                                {
                                    VdX = double.Parse(koParts[1]),
                                    VdY = double.Parse(koParts[2])
                                });
                            }
                        }

                        MyImageProc.MDrawClusters(this.voPB, this.voPList, 1.0, 1);
                    }
                }
            }
            catch (Exception koEx)
            {
                MessageBox.Show(koEx.Message);
            }
        }
Example #4
0
 private void btnLoad_Click(object sender, EventArgs e)
 {
     try
     {
         OpenFileDialog ofd = new OpenFileDialog();
         ofd.InitialDirectory = "d:\\csharp2016\\ClusterData";
         if (ofd.ShowDialog() == DialogResult.OK)
         {
             PList.Clear();
             string       dataFileName = ofd.FileName;
             FileInfo     fi           = new FileInfo(dataFileName);
             Stream       strm         = fi.Open(FileMode.Open, FileAccess.Read);
             StreamReader strmr        = new StreamReader(strm);
             string       sline        = null;
             char[]       seps         = { ',', ' ' }; // for comma or space separated list of coordinates
                                                       // read each line and store the point coordinates in CList
             sline = strmr.ReadLine();
             while (sline != null)
             {
                 string[] parts = sline.Split(seps); // break line into parts
                 MyPoint  pt    = new MyPoint();
                 pt.ClusterId = 0;
                 int ptnum = int.Parse(parts[0]); // point number - ignored
                 pt.X = double.Parse(parts[1]);   // X coord value
                 pt.Y = double.Parse(parts[2]);   // Y coord value
                 PList.Add(pt);
                 sline = strmr.ReadLine();
             }
             MessageBox.Show("Data File read, total points = " + PList.Count.ToString());
             MyImageProc.DrawClusters(pic1, PList, 1.0, 1);
             strmr.Close();
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
 }
Example #5
0
 private void btnKmeans_Click(object sender, EventArgs e)
 {
     try
     {
         if (PList.Count == 0)
         {
             throw new Exception("No points data exists..");
         }
         Stopwatch sw                    = new Stopwatch();
         int       numClusters           = int.Parse(txtClusters.Text);
         List <ClusterCenterPoint> CList = null;
         sw.Start();
         KMeans.DoKMeans(numClusters, ref PList, ref CList, 0.1, 1000);
         sw.Stop();
         MessageBox.Show("Time elapsed (ms): " + sw.ElapsedMilliseconds);
         MyImageProc.DrawClusters(pic1, PList, 1.0, numClusters);
         txtResult.Text = ComputeAndShowVarianceResults(numClusters);
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
 }
Example #6
0
        private void btnInitialize_Click(object sender, EventArgs e)
        {
            PList.Clear();
            Random rand       = new Random();
            int    dataLength = 5000; // number of data points
                                      // create 4 distributions with different means and std devs
            double meanx0   = 150;
            double meanx1   = 250;
            double meanx2   = 375;
            double meanx3   = 475;
            double meany0   = 175;
            double meany1   = 250;
            double meany2   = 350;
            double meany3   = 450;
            double stddevx0 = 240;
            double stddevx1 = 270;
            double stddevx2 = 220;
            double stddevx3 = 260;
            double stddevy0 = 250;
            double stddevy1 = 240;
            double stddevy2 = 280;
            double stddevy3 = 245;
            int    index    = 0;

            for (int i = 0; i < dataLength / 4; i++)
            {
                MyPoint pt   = new MyPoint();
                double  rnum = rand.NextDouble();
                if (rnum < 0.5)
                {
                    pt.X = rand.NextDouble() * stddevx0 / 2 + meanx0;
                }
                else
                {
                    pt.X = -1 * rand.NextDouble() * stddevx0 / 2 + meanx0;
                }
                if (rnum < 0.5)
                {
                    pt.Y = rand.NextDouble() * stddevy0 / 2 + meany0;
                }
                else
                {
                    pt.Y = -1 * rand.NextDouble() * stddevy0 / 2 + meany0;
                }
                index++;
                PList.Add(pt);
            }

            for (int i = 0; i < dataLength / 4; i++)
            {
                MyPoint pt   = new MyPoint();
                double  rnum = rand.NextDouble();
                if (rnum < 0.5)
                {
                    pt.X = rand.NextDouble() * stddevx1 / 2 + meanx1;
                }
                else
                {
                    pt.X = -1 * rand.NextDouble() * stddevx1 / 2 + meanx1;
                }
                if (rnum < 0.5)
                {
                    pt.Y = rand.NextDouble() * stddevy1 / 2 + meany1;
                }
                else
                {
                    pt.Y = -1 * rand.NextDouble() * stddevy1 / 2 + meany1;
                }
                index++;
                PList.Add(pt);
            }

            for (int i = 0; i < dataLength / 4; i++)
            {
                double  rnum = rand.NextDouble();
                MyPoint pt   = new MyPoint();
                if (rnum < 0.5)
                {
                    pt.X = rand.NextDouble() * stddevx2 / 2 + meanx2;
                }
                else
                {
                    pt.X = -1 * rand.NextDouble() * stddevx2 / 2 + meanx2;
                }
                if (rnum < 0.5)
                {
                    pt.Y = rand.NextDouble() * stddevy2 / 2 + meany2;
                }
                else
                {
                    pt.Y = -1 * rand.NextDouble() * stddevy2 / 2 + meany2;
                }
                PList.Add(pt);
                index++;
            }
            for (int i = 0; i < dataLength / 4; i++)
            {
                double  rnum = rand.NextDouble();
                MyPoint pt   = new MyPoint();
                if (rnum < 0.5)
                {
                    pt.X = rand.NextDouble() * stddevx3 / 2 + meanx3;
                }
                else
                {
                    pt.X = -1 * rand.NextDouble() * stddevx3 / 2 + meanx3;
                }
                if (rnum < 0.5)
                {
                    pt.Y = rand.NextDouble() * stddevy3 / 2 + meany3;
                }
                else
                {
                    pt.Y = -1 * rand.NextDouble() * stddevy3 / 2 + meany3;
                }
                index++;
                PList.Add(pt);
            }
            MyImageProc.DrawClusters(pic1, PList, 1.0, 1);
        }
Example #7
0
        private void voBtnInit_Click(object sender, EventArgs e)
        {
            MyPoint koPt;
            Random  koRand       = new Random( );
            int     kiDataLength = 5000; // number of data points
            double  kdRNum;

            this.voPList.Clear( );

            // create 4 distributions with different means and std devs
            double kdMeanX0 = 150, kdMeanX1 = 250, kdMeanX2 = 375, kdMeanX3 = 475;
            double kdMeanY0 = 175, kdMeanY1 = 250, kdMeanY2 = 350, kdMeanY3 = 450;
            double kdStdDevX0 = 240, kdStdDevX1 = 270, kdStdDevX2 = 220, kdStdDevX3 = 260;
            double kdStdDevY0 = 250, kdStdDevY1 = 240, kdStdDevY2 = 280, kdStdDevY3 = 245;
            int    kiIndex = 0;

            for (int i = 0; i < (kiDataLength / 4); i++)
            {
                koPt   = new MyPoint( );
                kdRNum = koRand.NextDouble( );
                if (kdRNum < 0.5)
                {
                    koPt.VdX = koRand.NextDouble( ) * kdStdDevX0 / 2 + kdMeanX0;
                }
                else
                {
                    koPt.VdX = -1 * koRand.NextDouble( ) * kdStdDevX0 / 2 + kdMeanX0;
                }
                if (kdRNum < 0.5)
                {
                    koPt.VdY = koRand.NextDouble( ) * kdStdDevY0 / 2 + kdMeanY0;
                }
                else
                {
                    koPt.VdY = -1 * koRand.NextDouble( ) * kdStdDevY0 / 2 + kdMeanY0;
                }
                kiIndex++;
                this.voPList.Add(koPt);
            }

            for (int i = 0; i < (kiDataLength / 4); i++)
            {
                koPt   = new MyPoint( );
                kdRNum = koRand.NextDouble( );
                if (kdRNum < 0.5)
                {
                    koPt.VdX = koRand.NextDouble( ) * kdStdDevX1 / 2 + kdMeanX1;
                }
                else
                {
                    koPt.VdX = -1 * koRand.NextDouble( ) * kdStdDevX1 / 2 + kdMeanX1;
                }
                if (kdRNum < 0.5)
                {
                    koPt.VdY = koRand.NextDouble( ) * kdStdDevY1 / 2 + kdMeanY1;
                }
                else
                {
                    koPt.VdY = -1 * koRand.NextDouble( ) * kdStdDevY1 / 2 + kdMeanY1;
                }
                kiIndex++;
                this.voPList.Add(koPt);
            }

            for (int i = 0; i < (kiDataLength / 4); i++)
            {
                koPt   = new MyPoint( );
                kdRNum = koRand.NextDouble( );
                if (kdRNum < 0.5)
                {
                    koPt.VdX = koRand.NextDouble( ) * kdStdDevX2 / 2 + kdMeanX2;
                }
                else
                {
                    koPt.VdX = -1 * koRand.NextDouble( ) * kdStdDevX2 / 2 + kdMeanX2;
                }
                if (kdRNum < 0.5)
                {
                    koPt.VdY = koRand.NextDouble( ) * kdStdDevY2 / 2 + kdMeanY2;
                }
                else
                {
                    koPt.VdY = -1 * koRand.NextDouble( ) * kdStdDevY2 / 2 + kdMeanY2;
                }
                kiIndex++;
                this.voPList.Add(koPt);
            }

            for (int i = 0; i < (kiDataLength / 4); i++)
            {
                koPt   = new MyPoint( );
                kdRNum = koRand.NextDouble( );
                if (kdRNum < 0.5)
                {
                    koPt.VdX = koRand.NextDouble( ) * kdStdDevX3 / 2 + kdMeanX3;
                }
                else
                {
                    koPt.VdX = -1 * koRand.NextDouble( ) * kdStdDevX3 / 2 + kdMeanX3;
                }
                if (kdRNum < 0.5)
                {
                    koPt.VdY = koRand.NextDouble( ) * kdStdDevY3 / 2 + kdMeanY3;
                }
                else
                {
                    koPt.VdY = -1 * koRand.NextDouble( ) * kdStdDevY3 / 2 + kdMeanY3;
                }
                kiIndex++;
                this.voPList.Add(koPt);
            }

            MyImageProc.MDrawClusters(this.voPB, this.voPList, 1.0, 1);
        }