public GridSearchParameterCollection RandomForestGetBestParameters( AppIdentDataSource appIdentDataSource, FeatureSelector featureSelector, AppIdentTestContext appIdentTestContext = null) { var accordAppIdent = new AccordAppIdent(); var appIdentAcordSource = this.GetAppIdentAcordSource(appIdentDataSource.TrainingSet, featureSelector); accordAppIdent.GetBestRandomForestsWithGridSearch(appIdentAcordSource, out var bestParameters, out var minError); appIdentTestContext?.Save(bestParameters); return(bestParameters); }
public ApplicationProtocolClassificationStatisticsMeter RandomForestCrossValidation( AppIdentDataSource appIdentDataSource, FeatureSelector featureSelector, GridSearchParameterCollection bestParameters, int folds, AppIdentTestContext appIdentTestContext) { var precMeasure = new ApplicationProtocolClassificationStatisticsMeter(); var accordAppIdent = new AccordAppIdent(); var appIdentAcordSource = this.GetAppIdentAcordSource(appIdentDataSource.TrainingSet, featureSelector); var cvResults = accordAppIdent.GetCrossValidationResultsOfRandomForestModel(appIdentAcordSource, bestParameters, folds); Console.WriteLine("### CV Results ###"); Console.WriteLine("\n### Training stats ###"); Console.WriteLine(">> model error mean: {0}\n>> model std: {1}", Math.Round(cvResults.Training.Mean, 6), Math.Round(cvResults.Training.StandardDeviation, 6)); Console.WriteLine("\n### Validation stats ###"); Console.WriteLine(">> model error mean: {0}\n>> model std: {1}", Math.Round(cvResults.Validation.Mean, 6), Math.Round(cvResults.Validation.StandardDeviation, 6)); var minErorr = cvResults.Validation.Values.Min(); var bestIndex = cvResults.Validation.Values.IndexOf(minErorr); var classifier = cvResults.Models[bestIndex]; var model = classifier.Model; var labels = appIdentAcordSource.Labels.Distinct(); var modelFilePath = appIdentTestContext.Save(model, labels); var validationDataSource = classifier.Tag as AccordAppIdent.ValidationDataSource; var predictedValues = classifier.Model.Decide(validationDataSource.ValidationInputs); for (var j = 0; j < predictedValues.Length; j++) { precMeasure.UpdateStatistics(appIdentAcordSource.LabelsFromInteges[predictedValues[j]], appIdentAcordSource.LabelsFromInteges[validationDataSource.ValidationOutputs[j]]); } appIdentTestContext.SaveCrossValidation(precMeasure); return(precMeasure); }