Ejemplo n.º 1
0
        /// <summary>
        /// recalculates the centroid of a cluster based on its current members
        /// </summary>
        public void ReCalculateCentroid()
        {
            int maxFeature = this.currentCentroid.ExpectedNoOfFeatures;

            if (this.members.Count == 0)//implement better check #### TO-DOOOO
            {
            }
            else
            {
                //calculate the mean value for each attribute of the current centroid

                Observation newCentroid = new Observation(maxFeature);
                newCentroid = members.ElementAt(0);
                for (int i = 0; i < maxFeature; i++)
                {
                    for (int j = 1; j < this.members.Count; j++)
                    {
                        newCentroid.ReplaceFeature(i, newCentroid.GetFeature(i).Sum(this.members.ElementAt(j).GetFeature(i)));
                    }
                    newCentroid.ReplaceFeature(i, newCentroid.GetFeature(i).Average(this.members.Count));
                }
                this.prevCentroid    = currentCentroid;
                this.currentCentroid = newCentroid;
            }
        }
Ejemplo n.º 2
0
        public int GetDistance(Observation observation)
        {
            //#### CONSIDER NORMALIZING in KMEANS
            int runningSum = 0;

            for (int i = 0; i < this.features.Count; i++)
            {
                runningSum += this.features.ElementAt(i).CalculateDistance(observation.GetFeature(i));
            }
            return(runningSum);
        }