Exemplo n.º 1
0
        KmeansTrainResult <T> Training()
        {
            var ThisGen = FirstGeneration;

            for (int Iteration = 0; Iteration < IterationLimit; Iteration++)
            {
                ClassifyUntrainedData(ThisGen);

                var NextGen = GenerateNextIteration(ThisGen);
                OnIteration?.Invoke(ThisGen, Iteration);

                float LongestDistance = CalcLongestDistance(ThisGen, NextGen);

                if (LongestDistance < ConvDistance)
                {
                    Console.WriteLine("Iteration:{0}, LongestDistance:{1} < {2}, Done", Iteration, LongestDistance, ConvDistance);
                    break;
                }
                else
                {
                    Console.WriteLine("Iteration:{0}, LongestDistance:{1} > {2}, Continue...", Iteration, LongestDistance, ConvDistance);
                    ThisGen = NextGen;
                }
            }

            foreach (var vectorCollection in ThisGen)
            {
                vectorCollection.Tag = vectorCollection.GetMostTag();
            }

            var trainResult = new KmeansTrainResult <T>(ThisGen.Select(x => x.Center));

            return(trainResult);
        }
Exemplo n.º 2
0
 public Kmeans(KmeansTrainResult <T> trainResult)
 {
     TrainedResult = trainResult;
 }