public void SharpLearning_Example() { // Load data var(observations, targets) = DataSetUtilities.LoadWinequalityWhite(); // transform data for neural net var transform = new MinMaxTransformer(0.0, 1.0); transform.Transform(observations, observations); var featureCount = observations.ColumnCount; // define the neural net. var net = new NeuralNet(); net.Add(new InputLayer(inputUnits: featureCount)); net.Add(new DenseLayer(32, Activation.Relu)); net.Add(new DenseLayer(32, Activation.Relu)); net.Add(new SquaredErrorRegressionLayer()); // using only 10 iteration to make the example run faster. // using square error as error metric. This is only used for reporting progress. var learner = new RegressionNeuralNetLearner(net, iterations: 10, loss: new SquareLoss(), optimizerMethod: OptimizerMethod.Adam); var cv = new RandomCrossValidation <double>(10, seed: 232); var predictions = cv.CrossValidate(learner, observations, targets); Trace.WriteLine(FormatErrorString(targets, predictions)); }
public void Hyper_Parameter_Tuning() { #region Read data // Use StreamReader(filepath) when running from filesystem var parser = new CsvParser(() => new StringReader(Resources.winequality_white)); var targetName = "quality"; // read feature matrix var observations = parser.EnumerateRows(c => c != targetName) .ToF64Matrix(); // read classification targets var targets = parser.EnumerateRows(targetName) .ToF64Vector(); #endregion // metric to minimize var metric = new MeanSquaredErrorRegressionMetric(); // Parameter ranges for the optimizer var paramers = new ParameterBounds[] { new ParameterBounds(min: 1, max: 100, transform: Transform.Linear), // maximumTreeDepth new ParameterBounds(min: 1, max: 16, transform: Transform.Linear), // minimumSplitSize }; // create random search optimizer var optimizer = new RandomSearchOptimizer(paramers, iterations: 30, runParallel: true); // other availible optimizers // GridSearchOptimizer // GlobalizedBoundedNelderMeadOptimizer // ParticleSwarmOptimizer // BayesianOptimizer // function to minimize Func <double[], OptimizerResult> minimize = p => { var cv = new RandomCrossValidation <double>(crossValidationFolds: 5, seed: 42); var optlearner = new RegressionDecisionTreeLearner(maximumTreeDepth: (int)p[0], minimumSplitSize: (int)p[1]); var predictions = cv.CrossValidate(optlearner, observations, targets); var error = metric.Error(targets, predictions); Trace.WriteLine("Error: " + error); return(new OptimizerResult(p, error)); }; // run optimizer var result = optimizer.OptimizeBest(minimize); var bestParameters = result.ParameterSet; Trace.WriteLine("Result: " + result.Error); // create learner with found parameters var learner = new RegressionDecisionTreeLearner(maximumTreeDepth: (int)bestParameters[0], minimumSplitSize: (int)bestParameters[1]); // learn model with found parameters var model = learner.Learn(observations, targets); }
public void ClassificationModelSelectingEnsembleLearner_Constructor_EnsembleSelection_Null() { var learners = new IIndexedLearner <ProbabilityPrediction> [4]; var metric = new LogLossClassificationProbabilityMetric(); var ensembleStrategy = new MeanProbabilityClassificationEnsembleStrategy(); var crossValidation = new RandomCrossValidation <ProbabilityPrediction>(5); var sut = new ClassificationModelSelectingEnsembleLearner(learners, crossValidation, ensembleStrategy, null); }
public void ClassificationModelSelectingEnsembleLearner_Constructor_Learners_Null() { var metric = new LogLossClassificationProbabilityMetric(); var ensembleStrategy = new MeanProbabilityClassificationEnsembleStrategy(); var ensembleSelection = new ForwardSearchClassificationEnsembleSelection(metric, ensembleStrategy, 5, 1, true); var crossValidation = new RandomCrossValidation <ProbabilityPrediction>(5); var sut = new ClassificationModelSelectingEnsembleLearner(null, crossValidation, ensembleStrategy, ensembleSelection); }
public void RegressionModelSelectingEnsembleLearner_Constructor_EnsembleSelection_Null() { var learners = new IIndexedLearner <double> [4]; var metric = new MeanSquaredErrorRegressionMetric(); var ensembleStrategy = new MeanRegressionEnsembleStrategy(); var crossValidation = new RandomCrossValidation <double>(5); var sut = new RegressionModelSelectingEnsembleLearner(learners, crossValidation, ensembleStrategy, null); }
public void RegressionModelSelectingEnsembleLearner_Constructor_Learners_Null() { var metric = new MeanSquaredErrorRegressionMetric(); var ensembleStrategy = new MeanRegressionEnsembleStrategy(); var ensembleSelection = new ForwardSearchRegressionEnsembleSelection(metric, ensembleStrategy, 5, 1, true); var crossValidation = new RandomCrossValidation <double>(5); var sut = new RegressionModelSelectingEnsembleLearner(null, crossValidation, ensembleStrategy, ensembleSelection); }
double CrossValidate(int folds) { var(observations, targets) = DataSetUtilities.LoadDecisionTreeDataSet(); var sut = new RandomCrossValidation <double>(folds, 42); var predictions = sut.CrossValidate(new RegressionDecisionTreeLearner(), observations, targets); var metric = new MeanSquaredErrorRegressionMetric(); return(metric.Error(targets, predictions)); }
double CrossValidate(int folds) { var targetName = "T"; var parser = new CsvParser(() => new StringReader(Resources.DecisionTreeData)); var observations = parser.EnumerateRows(v => !v.Contains(targetName)).ToF64Matrix(); var targets = parser.EnumerateRows(targetName).ToF64Vector(); var sut = new RandomCrossValidation <double>(folds, 42); var predictions = sut.CrossValidate(new RegressionDecisionTreeLearner(), observations, targets); var metric = new MeanSquaredErrorRegressionMetric(); return(metric.Error(targets, predictions)); }
double CrossValidate_Provide_Indices(int folds) { var(observations, targets) = DataSetUtilities.LoadDecisionTreeDataSet(); var sut = new RandomCrossValidation <double>(folds, 42); var rowsToCrossvalidate = targets.Length / 2; var indices = Enumerable.Range(0, rowsToCrossvalidate).ToArray(); var predictions = new double[rowsToCrossvalidate]; sut.CrossValidate(new RegressionDecisionTreeLearner(), observations, targets, indices, predictions); var metric = new MeanSquaredErrorRegressionMetric(); return(metric.Error(targets.Take(rowsToCrossvalidate).ToArray(), predictions)); }
double CrossValidate_Provide_Indices(int folds) { var targetName = "T"; var parser = new CsvParser(() => new StringReader(Resources.DecisionTreeData)); var observations = parser.EnumerateRows(v => !v.Contains(targetName)).ToF64Matrix(); var targets = parser.EnumerateRows(targetName).ToF64Vector(); var sut = new RandomCrossValidation <double>(folds, 42); var rowsToCrossvalidate = targets.Length / 2; var indices = Enumerable.Range(0, rowsToCrossvalidate).ToArray(); var predictions = new double[rowsToCrossvalidate]; sut.CrossValidate(new RegressionDecisionTreeLearner(), observations, targets, indices, predictions); var metric = new MeanSquaredErrorRegressionMetric(); return(metric.Error(targets.Take(rowsToCrossvalidate).ToArray(), predictions)); }
public void CrossValidation_CrossValidate_ProbabilityPredictions() { #region Read data // Use StreamReader(filepath) when running from filesystem var parser = new CsvParser(() => new StringReader(Resources.winequality_white)); var targetName = "quality"; // read feature matrix (all columns different from the targetName) var observations = parser.EnumerateRows(c => c != targetName) .ToF64Matrix(); // read targets var targets = parser.EnumerateRows(targetName) .ToF64Vector(); #endregion // creates cross validator, observations are shuffled randomly var cv = new RandomCrossValidation <ProbabilityPrediction>(crossValidationFolds: 5, seed: 42); // create learner var learner = new ClassificationDecisionTreeLearner(); // cross-validated predictions var cvPredictions = cv.CrossValidate(learner, observations, targets); // metric for measuring model error var metric = new LogLossClassificationProbabilityMetric(); // cross-validation provides an estimate on how the model will perform on unseen data Trace.WriteLine("Cross-validation error: " + metric.Error(targets, cvPredictions)); // train and predict training set for comparison var predictions = learner.Learn(observations, targets).PredictProbability(observations); // The training set is NOT a good estimate of how well the model will perfrom on unseen data. Trace.WriteLine("Training error: " + metric.Error(targets, predictions)); }