Результат h2o AutoML сбивает с толку - PullRequest
0 голосов
/ 01 сентября 2018

Я использую AutoML в своем коде Java, и я использую AUC в качестве своего sort_metric. После 20-минутной тренировки я получил резюме ниже:

09-01 09:51:05.872 127.0.0.1:54321       18273  FJ-1-9    INFO: 09:51:05.869 Info  ModelTraining    Built: 1 models for search: DeepLearning hyperparameter search 1
09-01 09:51:05.872 127.0.0.1:54321       18273  FJ-1-9    INFO: 09:51:05.869 Info  ModelTraining    New leader: DeepLearning_grid_0_AutoML_20180901_092939_model_0, AUC: 0.9170303558590623
09-01 09:51:05.872 127.0.0.1:54321       18273  FJ-1-9    INFO: 09:51:05.869 Info  ModelTraining    DeepLearning hyperparameter search 1 complete
09-01 09:51:05.872 127.0.0.1:54321       18273  FJ-1-9    INFO: 09:51:05.869 Info  ModelTraining    AutoML: out of time; skipping DL hyperparameter search
09-01 09:51:05.872 127.0.0.1:54321       18273  FJ-1-9    INFO: 09:51:05.870 Info  ModelTraining    AutoML: out of time; skipping DL hyperparameter search
09-01 09:51:05.872 127.0.0.1:54321       18273  FJ-1-9    INFO: 09:51:05.870 Info  ModelTraining    StackedEnsemble builds skipped due to the exclude_algos option.
09-01 09:51:05.872 127.0.0.1:54321       18273  FJ-1-9    INFO: 09:51:05.870 Info  Workflow         AutoML: build done; built 2 models
09-01 09:51:05.872 127.0.0.1:54321       18273  FJ-1-9    INFO: Leaderboard for project my.proj (models sorted in order of AUC, best first):
09-01 09:51:05.872 127.0.0.1:54321       18273  FJ-1-9    INFO: #                                            model_id       auc   logloss  mean_per_class_error      rmse       mse
09-01 09:51:05.872 127.0.0.1:54321       18273  FJ-1-9    INFO: 0  DeepLearning_grid_0_AutoML_20180901_092939_model_0  0.917030  0.273277              0.147665  0.189239  0.035812
09-01 09:51:05.872 127.0.0.1:54321       18273  FJ-1-9    INFO: 1  DeepLearning_0_AutoML_20180901_092939               0.937039  0.150729              0.214383  0.193596  0.037479
09-01 09:51:05.872 127.0.0.1:54321       18273  FJ-1-9    INFO: 2  DeepLearning_0_AutoML_20180901_092936               0.958391  0.127028              0.181791  0.179389  0.032180

Кажется, что "DeepLearning_0_AutoML_20180901_092936" является лучшим, потому что он имеет наибольшее значение AUC, но на самом деле "DeepLearning_grid_0_AutoML_20180901_092939_model_0" является первым, и AtuoML.leader () также возвращает модель "DeepLearning_grid_0_AutoML_20180901_092939_model_0". Так какой из них лучше?

Вот коды для запуска AutoML:

    AutoMLBuildSpec autoMLBuildSpec = new AutoMLBuildSpec();

    autoMLBuildSpec.input_spec.training_frame = frame._key;
    autoMLBuildSpec.input_spec.response_column = "class";
    autoMLBuildSpec.input_spec.sort_metric = "AUC";

    autoMLBuildSpec.build_control.balance_classes = true;
    autoMLBuildSpec.build_control.class_sampling_factors = new float[2];
    autoMLBuildSpec.build_control.class_sampling_factors[0] = 1.0f;
    autoMLBuildSpec.build_control.class_sampling_factors[1] = 1.0f;
    autoMLBuildSpec.build_control.nfolds = nfolds;
    autoMLBuildSpec.build_control.keep_cross_validation_models = true;
    autoMLBuildSpec.build_control.keep_cross_validation_predictions = true;
    autoMLBuildSpec.build_control.project_name = "my.proj";
    HyperSpaceSearchCriteria.RandomDiscreteValueSearchCriteria randomDiscreteValueSearchCriteria = new HyperSpaceSearchCriteria.RandomDiscreteValueSearchCriteria();
    randomDiscreteValueSearchCriteria.set_max_runtime_secs(Double.parseDouble(autoModelRuntimeSeconds));
    randomDiscreteValueSearchCriteria.set_stopping_metric(ScoreKeeper.StoppingMetric.AUTO);
    randomDiscreteValueSearchCriteria.set_stopping_tolerance(0.0);
    autoMLBuildSpec.build_control.stopping_criteria = randomDiscreteValueSearchCriteria;

    AutoMLBuildSpec.AutoMLBuildModels autoMLBuildModels = new AutoMLBuildSpec.AutoMLBuildModels();
    autoMLBuildModels.exclude_algos = new AutoML.algo[4];
    autoMLBuildModels.exclude_algos[0] = AutoML.algo.DRF;
    autoMLBuildModels.exclude_algos[1] = AutoML.algo.GBM;
    autoMLBuildModels.exclude_algos[2] = AutoML.algo.GLM;
    autoMLBuildModels.exclude_algos[3] = AutoML.algo.StackedEnsemble;

    autoMLBuildSpec.build_models = autoMLBuildModels;

    logger.info("begin training ...");
    AutoML aml = AutoML.makeAutoML(Key.make(), new Date(), autoMLBuildSpec);
    AutoML.startAutoML(aml);
    AutoML.startAutoML(autoMLBuildSpec).get();
    logger.info("training finished.");

    for (Model model: aml.leaderboard().getModels()) {
            logger.info("========================================================================================================");
            logger.info("model key: {}", model._key);
            logger.info("_scoring_history");
            logger.info(model._output._scoring_history.toString(10, true));
            logger.info("model auc: {}", Utils.doubleToString(model.auc(), 6));
            logger.info("========================================================================================================");
    }
    logger.info("leader model scoring history:");
    logger.info(aml.leader()._output._scoring_history.toString(10, true));

1 Ответ

0 голосов
/ 03 сентября 2018

пожалуйста, попробуйте указать метрику в нижнем регистре, чтобы сортировка списка лидеров сортировалась в порядке убывания при использовании «auc» (мы, похоже, не приводим в исполнение дело на нашей стороне, я подал заявку JIRA чтобы исправить это):

autoMLBuildSpec.input_spec.sort_metric = "auc";

также к вашему сведению, вам не нужно «запускать» automl 2 раза. В основном

AutoML aml = AutoML.makeAutoML(Key.make(), new Date(), autoMLBuildSpec);
AutoML.startAutoML(aml);
AutoML.startAutoML(autoMLBuildSpec).get();

можно заменить просто

AutoML.startAutoML(autoMLBuildSpec).get();

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...