private void ConfigureNewTraining()
        {
            GlobalTrainerConfiguration = _configurationManager.GetGlobalTrainerConfiguration();
            Training1Parameters        = _configurationManager.GetTraining1Parameters();
            Training2Parameters        = _configurationManager.GetTraining2Parameters();

            try
            {
                var learningFacade = new LearningFacade(DataProviderConfiguration, GlobalTrainerConfiguration, SkipPhaseRequest, this);
                AvailableCategories = new ObservableCollection <Category>(learningFacade.GetAvailableCategories());

                ProgramState = ProgramState.ConfiguringTraining;
            }
            catch (Exception e)
            {
                const string errorMessage = "Problem with creating new training configuration.";

                LogWriteLine($"{errorMessage} Error: {e.Message}");
                NLogLogger.Error(e, errorMessage);
            }
        }
        private async void StartTraining()
        {
            if (IsCategoriesSelectionInvalid())
            {
                LogWriteLine("You cannot start a training until at least 2 categories are selected.");
                return;
            }

            ProgramState = ProgramState.TrainingInProgress;

            var learningFacade = new LearningFacade(DataProviderConfiguration, GlobalTrainerConfiguration, SkipPhaseRequest, this);
            var categories     = GetSelectedCategories();

            var trainingParameters = new TrainingParameters
            {
                Training1Parameters = Training1Parameters,
                Training2Parameters = Training2Parameters,
                SelectedCategories  = categories.ToList(),
            };

            try
            {
                _cts = new CancellationTokenSource();
                _classifierFacade = await learningFacade.RunTrainingForSelectedCategories(trainingParameters, _cts.Token);

                ProgramState = ProgramState.ClassifierReady;
            }
            catch (Exception e)
            {
                const string errorMessage = "Problems during training.";

                LogWriteLine($"{errorMessage} Error: {e.Message}");
                NLogLogger.Error(e, errorMessage);

                ReturnToInitialWithSaving();
            }
        }