상속: IMLCluster
        /// <summary>
        /// Perform a single training iteration.
        /// </summary>
        ///
        public void Iteration()
        {
            // loop over all clusters
            foreach (KMeansCluster element  in  _clusters)
            {
                for (int k = 0; k < element.Size(); k++)
                {
                    IMLData data     = element.Get(k);
                    double  distance = CalculateEuclideanDistance(
                        element.Centroid, data);
                    KMeansCluster tempCluster = null;
                    bool          match       = false;


                    foreach (KMeansCluster cluster  in  _clusters)
                    {
                        double d = CalculateEuclideanDistance(cluster.Centroid,
                                                              element.Get(k));
                        if (distance > d)
                        {
                            distance    = d;
                            tempCluster = cluster;
                            match       = true;
                        }
                    }

                    if (match)
                    {
                        tempCluster.Add(element.Get(k));
                        element.Remove(element.Get(k));

                        foreach (KMeansCluster element2  in  _clusters)
                        {
                            element2.Centroid.CalcCentroid();
                        }
                        CalcWcss();
                    }
                }
            }
        }
        /// <summary>
        /// Construct the K-Means object.
        /// </summary>
        ///
        /// <param name="k">The number of clusters to use.</param>
        /// <param name="theSet">The dataset to cluster.</param>
        public KMeansClustering(int k, IMLDataSet theSet)
        {
            _clusters = new KMeansCluster[k];
            for (int i = 0; i < k; i++)
            {
                _clusters[i] = new KMeansCluster();
            }
            _set = theSet;

            SetInitialCentroids();

            // break up the data over the clusters
            int clusterNumber = 0;


            foreach (IMLDataPair pair  in  _set)
            {
                _clusters[clusterNumber].Add(pair.Input);

                clusterNumber++;

                if (clusterNumber >= _clusters.Length)
                {
                    clusterNumber = 0;
                }
            }

            CalcWcss();


            foreach (KMeansCluster element  in  _clusters)
            {
                element.Centroid.CalcCentroid();
            }

            CalcWcss();
        }
        /// <summary>
        /// Construct the K-Means object.
        /// </summary>
        ///
        /// <param name="k">The number of clusters to use.</param>
        /// <param name="theSet">The dataset to cluster.</param>
        public KMeansClustering(int k, IMLDataSet theSet)
        {
            _clusters = new KMeansCluster[k];
            for (int i = 0; i < k; i++)
            {
                _clusters[i] = new KMeansCluster();
            }
            _set = theSet;

            SetInitialCentroids();

            // break up the data over the clusters
            int clusterNumber = 0;


            foreach (IMLDataPair pair  in  _set)
            {
                _clusters[clusterNumber].Add(pair.Input);

                clusterNumber++;

                if (clusterNumber >= _clusters.Length)
                {
                    clusterNumber = 0;
                }
            }

            CalcWcss();


            foreach (KMeansCluster element  in  _clusters)
            {
                element.Centroid.CalcCentroid();
            }

            CalcWcss();
        }
예제 #4
0
 private static double x92c8f50710486fbe(double x3bd62873fafa6252, KMeansCluster x4bbc2c453c470189)
 {
     return (x3bd62873fafa6252 + x4bbc2c453c470189.SumSqr);
 }