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); }