Exemplo n.º 1
0
        public void F64MatrixExtensions_Map2()
        {
            var matrix = new F64Matrix(InputData.ToArray(), 2, 3);

            matrix.Map(() => 10);
            matrix.Map(v => v + 1);

            var expected = Enumerable.Range(0, matrix.Data().Length).Select(v => 11.0).ToArray();

            CollectionAssert.AreEqual(expected, matrix.Data());
        }
Exemplo n.º 2
0
        public void RegressionNeuralNetModel_Save()
        {
            var numberOfObservations = 500;
            var numberOfFeatures     = 5;

            var random       = new Random(32);
            var observations = new F64Matrix(numberOfObservations, numberOfFeatures);

            observations.Map(() => random.NextDouble());
            var targets = Enumerable.Range(0, numberOfObservations)
                          .Select(i => (double)random.NextDouble()).ToArray();

            var net = new NeuralNet();

            net.Add(new InputLayer(numberOfFeatures));
            net.Add(new DenseLayer(10));
            net.Add(new SquaredErrorRegressionLayer());

            var learner = new RegressionNeuralNetLearner(net, new AccuracyLoss());
            var sut     = learner.Learn(observations, targets);

            // save model.
            var writer = new StringWriter();

            sut.Save(() => writer);

            // load model and assert prediction results.
            sut = RegressionNeuralNetModel.Load(() => new StringReader(writer.ToString()));
            var predictions = sut.Predict(observations);

            var evaluator = new MeanSquaredErrorRegressionMetric();
            var actual    = evaluator.Error(targets, predictions);

            Assert.AreEqual(0.0871547675024143, actual, 0.0001);
        }
Exemplo n.º 3
0
        public void RegressionNeuralNetModel_Predict_Single()
        {
            var numberOfObservations = 500;
            var numberOfFeatures     = 5;

            var random       = new Random(32);
            var observations = new F64Matrix(numberOfObservations, numberOfFeatures);

            observations.Map(() => random.NextDouble());
            var targets = Enumerable.Range(0, numberOfObservations)
                          .Select(i => (double)random.NextDouble()).ToArray();

            var sut = RegressionNeuralNetModel.Load(() => new StringReader(m_regressionNeuralNetModelText));

            var predictions = new double[numberOfObservations];

            for (int i = 0; i < numberOfObservations; i++)
            {
                predictions[i] = sut.Predict(observations.Row(i));
            }

            var evaluator = new MeanSquaredErrorRegressionMetric();
            var actual    = evaluator.Error(targets, predictions);

            Assert.AreEqual(0.0871547675024143, actual, 0.0001);
        }
        public void ContinuousMunchAugmentor_Augment()
        {
            var random = new Random(2342);
            var data   = new F64Matrix(10, 2);

            data.Map(() => random.NextDouble());

            var sut    = new ContinuousMungeAugmentator(0.5, 1.0);
            var actual = sut.Agument(data);

            var expected = new F64Matrix(new double[] { 0.246329100917247, 0.00372775551105279, 0.797896387892727, 0.441504622549519, 0.585635684703307, 0.227548045212192, 0.254812818139239, 0.387049265851755, 0.722062122878647, 0.888775135804329, 0.714802723710799, 0.900545311114073, 0.643038906922116, 0.907352483788204, 0.316260776164132, 0.658306110025526, 0.343312428492733, 0.0337710422620974, 0.0760259759035082, 0.148426381940221 },
                                         10, 2);

            Assert.AreNotEqual(data, actual);
            Assert.AreEqual(expected.RowCount, actual.RowCount);
            Assert.AreEqual(expected.ColumnCount, actual.ColumnCount);

            var expectedData = expected.Data();
            var actualData   = expected.Data();

            for (int i = 0; i < expectedData.Length; i++)
            {
                Assert.AreEqual(expectedData[i], actualData[i], 0.00001);
            }
        }
        public void NominalMunchAugmentor_Augment()
        {
            var random = new Random(2342);
            var data   = new F64Matrix(10, 2);

            data.Map(() => random.Next(2));

            var sut    = new NominalMungeAugmentator(0.5);
            var actual = sut.Agument(data);

            var expected = new F64Matrix(new double[] { 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0 },
                                         10, 2);

            Assert.AreNotEqual(data, actual);
            Assert.AreEqual(expected.RowCount, actual.RowCount);
            Assert.AreEqual(expected.ColumnCount, actual.ColumnCount);

            var expectedData = expected.Data();
            var actualData   = expected.Data();

            for (int i = 0; i < expectedData.Length; i++)
            {
                Assert.AreEqual(expectedData[i], actualData[i], 0.00001);
            }
        }
        public void ClassificationNeuralNetModel_PredictProbability_Single()
        {
            var numberOfObservations = 500;
            var numberOfFeatures     = 5;
            var numberOfClasses      = 5;

            var random       = new Random(32);
            var observations = new F64Matrix(numberOfObservations, numberOfFeatures);

            observations.Map(() => random.NextDouble());
            var targets = Enumerable.Range(0, numberOfObservations)
                          .Select(i => (double)random.Next(0, numberOfClasses)).ToArray();

            var sut = ClassificationNeuralNetModel.Load(() => new StringReader(m_classificationNeuralNetModelText));

            var predictions = new ProbabilityPrediction[numberOfObservations];

            for (int i = 0; i < numberOfObservations; i++)
            {
                predictions[i] = sut.PredictProbability(observations.Row(i));
            }

            var evaluator = new TotalErrorClassificationMetric <double>();
            var actual    = evaluator.Error(targets, predictions.Select(p => p.Prediction).ToArray());

            Assert.AreEqual(0.762, actual);
        }
Exemplo n.º 7
0
        public NetworkHelper(string inputFileName)
        {
            var trainingParser = new CsvParser(() => new StreamReader(new FileStream(inputFileName, FileMode.Open)));

            var featureNames = trainingParser.EnumerateRows(c => c != TargetName).First().ColumnNameToIndex.Keys
                               .ToArray();

            _trainingObservations = trainingParser.EnumerateRows(featureNames).ToF64Matrix();
            _trainingTargets      = trainingParser.EnumerateRows(TargetName).ToF64Vector();

            _trainingObservations.Map(p => p / 255);
        }
Exemplo n.º 8
0
        public void MatrixAdd_AddInPlace_1()
        {
            var m = new F64Matrix(4, 3);
            var v = new double[] { 1, 1, 1, 1 };

            var actual = new F64Matrix(4, 3);

            MatrixAdd.AddF64(m, v, actual);

            var expected = new F64Matrix(4, 3);

            expected.Map(() => 1.0);

            Assert.AreEqual(expected, actual);
        }
Exemplo n.º 9
0
        public void MatrixSubtraction_SubtractF64Matrix_1()
        {
            var m1 = new F64Matrix(4, 3);
            var m2 = new F64Matrix(4, 3);

            m2.Map(() => 1.0);

            var actual = new F64Matrix(4, 3);

            MatrixSubtraction.SubtractF64(m1, m2, actual);

            var expected = new F64Matrix(4, 3);

            expected.Map(() => - 1.0);
            Assert.AreEqual(expected, actual);
        }
        public void BackwardEliminationRegressionEnsembleSelection_Select()
        {
            var sut = new BackwardEliminationRegressionEnsembleSelection(new MeanSquaredErrorRegressionMetric(),
                                                                         new MeanRegressionEnsembleStrategy(), 3);

            var random = new Random(42);

            var observations = new F64Matrix(10, 10);

            observations.Map(() => random.Next());
            var targets = Enumerable.Range(0, 10).Select(v => random.NextDouble()).ToArray();

            var actual   = sut.Select(observations, targets);
            var expected = new int[] { 2 };

            CollectionAssert.AreEqual(expected, actual);
        }
Exemplo n.º 11
0
        public void ForwardSearchRegressionEnsembleSelection_Select_Start_With_2_Models()
        {
            var sut = new ForwardSearchRegressionEnsembleSelection(new MeanSquaredErrorRegressionMetric(),
                                                                   new MeanRegressionEnsembleStrategy(), 3, 2, true);

            var random = new Random(42);

            var observations = new F64Matrix(10, 10);

            observations.Map(() => random.Next());
            var targets = Enumerable.Range(0, 10).Select(v => random.NextDouble()).ToArray();

            var actual   = sut.Select(observations, targets);
            var expected = new int[3] {
                2, 3, 2
            };

            CollectionAssert.AreEqual(expected, actual);
        }
Exemplo n.º 12
0
        public void ClassificationNeuralNetModel_Predict_Multiple()
        {
            var numberOfObservations = 500;
            var numberOfFeatures     = 5;
            var numberOfClasses      = 5;

            var random       = new Random(32);
            var observations = new F64Matrix(numberOfObservations, numberOfFeatures);

            observations.Map(() => random.NextDouble());
            var targets = Enumerable.Range(0, numberOfObservations).Select(i => (double)random.Next(0, numberOfClasses)).ToArray();

            var sut = ClassificationNeuralNetModel.Load(() => new StringReader(ClassificationNeuralNetModelText));

            var predictions = sut.Predict(observations);

            var evaluator = new TotalErrorClassificationMetric <double>();
            var actual    = evaluator.Error(targets, predictions);

            Assert.AreEqual(0.762, actual);
        }
 void CreateData(int numberOfObservations, int numberOfFeatures, Random random, out F64Matrix observations, out double[] targets)
 {
     observations = new F64Matrix(numberOfObservations, numberOfFeatures);
     observations.Map(() => random.NextDouble());
     targets = Enumerable.Range(0, numberOfObservations).Select(i => random.NextDouble()).ToArray();
 }