/// <summary>The initialize.</summary> /// <param name="configuration">The configuration.</param> /// <param name="logManager">The log manager.</param> /// <param name="cacheManager">The cache manager.</param> /// <param name="preprocessingManager">The preprocessing manager.</param> /// <param name="runStartTime">The run start time.</param> /// <param name="timeMeasure">The time measure.</param> private void Initialize( WebGreaseConfiguration configuration, LogManager logManager, ICacheManager cacheManager, PreprocessingManager preprocessingManager, DateTimeOffset runStartTime, ITimeMeasure timeMeasure) { if (configuration == null) { throw new ArgumentNullException("configuration"); } if (configuration.Global.TreatWarningsAsErrors != null) { logManager.TreatWarningsAsErrors = configuration.Global.TreatWarningsAsErrors == true; } // Note: Configuration needs to be set before the other ones. this.Configuration = configuration; this.Configuration.Validate(); this.Measure = timeMeasure; this.Log = logManager; this.Cache = cacheManager; this.Preprocessing = preprocessingManager; this.SessionStartTime = runStartTime; this.Cache.SetContext(this); this.Preprocessing.SetContext(this); }
public ISolver simpleSeparation(int percentTrain) { int sizeTrainDataset = Convert.ToInt32(InputData.Length * ((double)percentTrain / 100)); int sizeTestDataset = InputData.Length - sizeTrainDataset; float[][] trainInputDataset = new float[sizeTrainDataset][]; float[][] testInputDataset = new float[InputData.Length - sizeTrainDataset][]; float[] trainOutputDataset = new float[sizeTrainDataset]; float[] testOutputDataset = new float[InputData.Length - sizeTrainDataset]; Array.Copy(InputData, trainInputDataset, sizeTrainDataset); Array.Copy(InputData, sizeTrainDataset, testInputDataset, 0, sizeTestDataset); Array.Copy(OutputData, trainOutputDataset, sizeTrainDataset); Array.Copy(OutputData, sizeTrainDataset, testOutputDataset, 0, sizeTestDataset); if (ISolver is INeuralNetwork) { LearningAlgoManager la = new LearningAlgoManager() { usedAlgo = LS.LearningAlgorithmName, GeneticParams = LS.LAParameters }; ClosingError = la.startLearn(ISolver, trainInputDataset, trainOutputDataset); } else if (ISolver is DecisionTree) { DecisionTreeLearning la = new DecisionTreeLearning(); ClosingError = la.startLearn(ISolver, trainInputDataset, trainOutputDataset); } PreprocessingManager preprocessing = new PreprocessingManager(); mistakeTrain = 0; List <string> expectedOutputValues = trainOutputDataset.Select(x => Convert.ToString(x)).ToList(); List <string> obtainedOutputValues = new List <string>(); for (int i = 0; i < sizeTrainDataset; i++) { obtainedOutputValues.Add(Convert.ToString(ISolver.Solve(trainInputDataset[i])[0])); } List <bool> comparisonOfResult = preprocessing.compareExAndObValues(expectedOutputValues, obtainedOutputValues, SelectionID, ParameterID); var counts = comparisonOfResult.GroupBy(x => x).ToDictionary(x => x.Key, x => x.Count()); mistakeTrain = (float)counts[false] / (float)sizeTrainDataset; mistakeTest = 0; expectedOutputValues = testOutputDataset.Select(x => Convert.ToString(x)).ToList(); obtainedOutputValues.Clear(); for (int i = 0; i < sizeTestDataset; i++) { obtainedOutputValues.Add(Convert.ToString(ISolver.Solve(testInputDataset[i])[0])); } comparisonOfResult = preprocessing.compareExAndObValues(expectedOutputValues, obtainedOutputValues, SelectionID, ParameterID); counts = comparisonOfResult.GroupBy(x => x).ToDictionary(x => x.Key, x => x.Count()); mistakeTest = (float)counts[false] / (float)sizeTestDataset; return(ISolver); }
private ISolver crossValidation(int folds) { ISolver curSolver = ISolver.Copy(); List <float> listOfTestMistakes = new List <float>(); for (int k = 0; k < folds; k++) { float kMistakeTrain = 0; float kMistakeTest = 0; float[][] trainInputDataset = GetInputTrainData(InputData, folds, k); float[][] testInputDataset = GetInputTestData(InputData, folds, k); float[] trainOutputDataset = GetOutputTrainData(OutputData, folds, k); float[] testOutputDataset = GetTestOutputData(OutputData, folds, k); LearningAlgoManager la = new LearningAlgoManager() { usedAlgo = LS.LearningAlgorithmName, GeneticParams = LS.LAParameters }; PreprocessingManager preprocessing = new PreprocessingManager(); ClosingError = la.startLearn(ISolver, trainInputDataset, trainOutputDataset); int sizeTrainDataset = trainInputDataset.Length; List <string> expectedOutputValues = trainOutputDataset.Select(x => Convert.ToString(x)).ToList(); List <string> obtainedOutputValues = new List <string>(); for (int i = 0; i < sizeTrainDataset; i++) { obtainedOutputValues.Add(Convert.ToString(ISolver.Solve(trainInputDataset[i])[0])); } List <bool> comparisonOfResult = preprocessing.compareExAndObValues(expectedOutputValues, obtainedOutputValues, SelectionID, ParameterID); var counts = comparisonOfResult.GroupBy(x => x).ToDictionary(x => x.Key, x => x.Count()); kMistakeTrain = (float)counts[false] / (float)sizeTrainDataset; int sizeTestDataset = testOutputDataset.Length; expectedOutputValues = testOutputDataset.Select(x => Convert.ToString(x)).ToList(); obtainedOutputValues.Clear(); for (int i = 0; i < sizeTestDataset; i++) { obtainedOutputValues.Add(Convert.ToString(ISolver.Solve(testInputDataset[i])[0])); } comparisonOfResult = preprocessing.compareExAndObValues(expectedOutputValues, obtainedOutputValues, SelectionID, ParameterID); counts = comparisonOfResult.GroupBy(x => x).ToDictionary(x => x.Key, x => x.Count()); kMistakeTest = (float)counts[false] / (float)sizeTestDataset; if (k != 0 && kMistakeTest < listOfTestMistakes.Min()) { curSolver = ISolver.Copy(); mistakeTest = kMistakeTest; mistakeTrain = kMistakeTrain; } listOfTestMistakes.Add(kMistakeTest); } ISolver = curSolver.Copy() as INeuralNetwork; return(ISolver); }
public void Solve() { SelectionID = SelectedLearning.SelectionID; ParameterID = SelectedLearning.ParameterID; ISolver isolver = this.SelectedLearning.LearnedSolver.Soul; List <string> curOutputValues = new List <string>(); foreach (var item in SolvingList) { curOutputValues.Add(Convert.ToString(isolver.Solve(item.X.Select(x => float.Parse(x.Value)).ToArray())[0])); } PreprocessingManager preprocessing = new PreprocessingManager(); outputValues = preprocessing.getAppropriateValuesAfterInversePreprocessing(curOutputValues, SelectionID, ParameterID); foreach (var item in SolvingList) { for (int i = 0; i < item.Y.Count; i++) { item.Y[i] = outputValues[i]; } } }
/// <summary>Initializes a new instance of the <see cref="WebGreaseContext"/> class. The web grease context.</summary> /// <param name="configuration">The configuration</param> /// <param name="logManager">The log Manager.</param> /// <param name="parentCacheSection">The parent Cache Section.</param> /// <param name="preprocessingManager">The preprocessing Manager.</param> public WebGreaseContext(WebGreaseConfiguration configuration, LogManager logManager, ICacheSection parentCacheSection = null, PreprocessingManager preprocessingManager = null) { var runStartTime = DateTimeOffset.Now; configuration.Validate(); var timeMeasure = configuration.Measure ? new TimeMeasure() as ITimeMeasure : new NullTimeMeasure(); var cacheManager = configuration.CacheEnabled ? new CacheManager(configuration, logManager, parentCacheSection) as ICacheManager : new NullCacheManager(); this.Initialize( configuration, logManager, cacheManager, preprocessingManager != null ? new PreprocessingManager(preprocessingManager) : new PreprocessingManager(configuration, logManager, timeMeasure), runStartTime, timeMeasure); }