public void MakeRndCenters(MyDataComparer cmp) { var DistData = dataset.Distinct(cmp).ToList(); Random r = new Random(); for (int i = 1; i < clusterNum; i++) { int rnd = r.Next(1, DistData.Count - 1); clusterCenter[i] = DistData[rnd]; DistData.RemoveAt(rnd); } clusterCenter[0] = null; sumDist = 10000; }
public List <DataInstance> DoClusters(List <DataInstance> pDataset, int pClusterNum, double accuracy = 0.1) { kMeansClient lCurClient = new kMeansClient(pDataset, pClusterNum); int clientNum = clients.Count() - 1; clients.Add(lCurClient); MyDataComparer cmp = new MyDataComparer(); lCurClient.MakeRndCenters(cmp); updateMarkers(clientNum); while (!computeCenters(accuracy, clientNum)) { updateMarkers(clientNum); } return(clients[clientNum].dataset); }
public void DoClusters(Guid client, int pClusterNum, double accuracy = 0.1) { Console.WriteLine("зашёл в метод"); kMeansContext lCurClient = clients[client]; lCurClient.SetClusterCount(pClusterNum); Console.WriteLine("создал контекст"); MyDataComparer cmp = new MyDataComparer(); lCurClient.MakeRndCenters(cmp); Console.WriteLine("сделал рандомные центры"); updateMarkers(client); while (!computeCenters(accuracy, client)) { updateMarkers(client); } Console.WriteLine("закончил работать"); isFin = true; }
private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e) { lAllTime = 0; dt1 = DateTime.Now; double accuracy = 0; Double.TryParse(accuracyTB.Text, out accuracy); clusterNum = 5; clusterNum++; clusterCenter = new DataInstance[clusterNum]; clusterCount = new int[clusterNum]; clusterCount[0] = dataset.Count; MyDataComparer cmp = new MyDataComparer(); var DistData = dataset.Distinct(cmp).ToList(); Random r = new Random(); for (int i = 1; i < clusterNum; i++) { int rnd = r.Next(1, DistData.Count - 1); clusterCenter[i] = DistData[rnd]; DistData.RemoveAt(rnd); } clusterCenter[0] = null; sumDist = 10000; updateMarkers(); while (!ParallelComputeCenters(accuracy)) { Rounds++; ParallelUpdateMarkers(); backgroundWorker2.ReportProgress((int)((accuracy / sumDist) * 100), clusterCount); } dt2 = DateTime.Now; lAllTime = dt2.Millisecond - dt1.Millisecond; }