public void Test_ClassificationWith_BackwardsEliminationKnnModel()
        {
            // Given
            var randomizer = new Random(55);
            var data = TestDataBuilder.ReadIrisData();
            var trainingDataPercentage = 0.8;
            int trainingDataCount = (int)(data.RowCount * trainingDataPercentage);
            var shuffledIndices = data.RowIndices.Shuffle();
            var trainingIndices = shuffledIndices.Take(trainingDataCount).ToList();
            var testIndices =
                shuffledIndices.Skip(trainingDataCount).Take(shuffledIndices.Count - trainingDataCount).ToList();

            var trainingData = data.GetSubsetByRows(trainingIndices);
            var testData = data.GetSubsetByRows(testIndices);

            var weightingFunction = new GaussianFunction(0.07);
            var predictor = new SimpleKnnClassifier<string>(
                new EuclideanDistanceMeasure(),
                new MinMaxNormalizer(),
                weightingFunction.GetValue);
            var modelBuilder = new BackwardsEliminationKnnModelBuilder<string>(
                new MinMaxNormalizer(),
                predictor,
                new ClassificationAccuracyError<string>()
                );
            var modelParams = new KnnAdditionalParams(3, true);
            var errorMeasure = new MeanSquareError();

            var subject = new BackwardsEliminationKnnClassifier<string>(
                new EuclideanDistanceMeasure(),
                new MinMaxNormalizer(),
                weightingFunction.GetValue);

            // When
            var model = modelBuilder.BuildModel(trainingData, "iris_class", modelParams);
            var actualResults = subject.Predict(testData, model, "iris_class");
            var confusionMatrix = new ConfusionMatrix<string>(testData.GetColumnVector<string>("iris_class"),
                actualResults);

            // Then
            Assert.IsTrue(confusionMatrix.Accuracy >= 0.95);
        }
        public void Test_ClassificationWith_BackwardsEliminationKnnModel()
        {
            // Given
            var randomizer             = new Random(55);
            var data                   = TestDataBuilder.ReadIrisData();
            var trainingDataPercentage = 0.8;
            int trainingDataCount      = (int)(data.RowCount * trainingDataPercentage);
            var shuffledIndices        = data.RowIndices.Shuffle();
            var trainingIndices        = shuffledIndices.Take(trainingDataCount).ToList();
            var testIndices            =
                shuffledIndices.Skip(trainingDataCount).Take(shuffledIndices.Count - trainingDataCount).ToList();

            var trainingData = data.GetSubsetByRows(trainingIndices);
            var testData     = data.GetSubsetByRows(testIndices);

            var weightingFunction = new GaussianFunction(0.07);
            var predictor         = new SimpleKnnClassifier <string>(
                new EuclideanDistanceMeasure(),
                new MinMaxNormalizer(),
                weightingFunction.GetValue);
            var modelBuilder = new BackwardsEliminationKnnModelBuilder <string>(
                new MinMaxNormalizer(),
                predictor,
                new ClassificationAccuracyError <string>()
                );
            var modelParams  = new KnnAdditionalParams(3, true);
            var errorMeasure = new MeanSquareError();

            var subject = new BackwardsEliminationKnnClassifier <string>(
                new EuclideanDistanceMeasure(),
                new MinMaxNormalizer(),
                weightingFunction.GetValue);

            // When
            var model           = modelBuilder.BuildModel(trainingData, "iris_class", modelParams);
            var actualResults   = subject.Predict(testData, model, "iris_class");
            var confusionMatrix = new ConfusionMatrix <string>(testData.GetColumnVector <string>("iris_class"),
                                                               actualResults);

            // Then
            Assert.IsTrue(confusionMatrix.Accuracy >= 0.95);
        }