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