示例#1
0
        /// <summary>
        /// Calculates and returns  width of a gaussian function </summary>
        /// <param name="centroid"> </param>
        /// <param name="nearestNeighbours"> </param>
        /// <returns>  </returns>
        private double calculateSigma(KVector centroid, KVector[] nearestNeighbours)
        {
            double sigma = 0;

            foreach (KVector nn in nearestNeighbours)
            {
                sigma += Math.Pow(centroid.distanceFrom(nn), 2);
            }

            sigma = Math.Sqrt(1 / ((double)nearestNeighbours.Length) * sigma);

            return(sigma);
        }
示例#2
0
        /// <summary>
        /// http://en.wikipedia.org/wiki/Selection_algorithm </summary>
        /// <param name="vector"> </param>
        /// <param name="k"> </param>
        /// <returns>  </returns>
        public virtual KVector[] getKNearestNeighbours(KVector vector, int k)
        {
            KVector[] nearestNeighbours = new KVector[k];

            // calculate distances for entire dataset
            foreach (KVector otherVector in dataSet)
            {
                double distance = vector.distanceFrom(otherVector);
                otherVector.Distance = distance;
            }

            for (int i = 0; i < k; i++)
            {
                int     minIndex    = i;
                KVector minVector   = dataSet[i];
                double  minDistance = minVector.Distance;

                for (int j = i + 1; j < dataSet.Count; j++)
                {
                    if (dataSet[j].Distance <= minDistance)
                    {
                        minVector   = dataSet[j];
                        minDistance = minVector.Distance;
                        minIndex    = j;
                    }
                }

                // swap list[i] and list[minIndex]
                KVector temp = dataSet[i];
                dataSet[i]        = dataSet[minIndex];
                dataSet[minIndex] = temp;

                nearestNeighbours[i] = dataSet[i];
            }


            //            function select(list[1..n], k)
            //                for i from 1 to k
            //                    minIndex = i
            //                    minValue = list[i]
            //                    for j from i+1 to n
            //                        if list[j] < minValue
            //                            minIndex = j
            //                            minValue = list[j]
            //                    swap list[i] and list[minIndex]
            //                return list[k]

            return(nearestNeighbours);
        }