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); } }
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); } }
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); } }
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); } }
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); } }
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); }
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); }