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