Кросс-проверка по принципу «один-один-выход» в H2O - PullRequest
0 голосов
/ 25 февраля 2019

Я хотел бы проверить результат перекрестной проверки без проверки для моего довольно маленького значения df в h2o.Это мой ввод df: https://drive.google.com/file/d/1UiIkxlHCq1tJZNOH6hQD30gEMaPdmhgh/view?usp=sharing

Можно ли установить параметр nfolds (т.е. nfolds = nrow (df)) в h2o, чтобы получить такую ​​перекрестную проверку?Я не могу установить nfolds> 25 для nrow (df) = 69.

u$dc=as.factor(u$dc)
train <- as.h2o(u)
model <- h2o.gbm(x= colnames(train)[1:15],
                y="dc", training_frame=train,
                nfolds = 25,
                learn_rate = 0.06,
                ntrees = 90, max_depth = 3,   
                min_rows = 2,
                distribution = "bernoulli")

Я получаю исключение в приведенном выше коде:

Error: water.exceptions.H2OIllegalArgumentException:
     Not enough data to create 25 random cross-validation splits. Either reduce nfolds, specify a larger dataset

Он генерируется в ModelBuilder.java:

    at hex.ModelBuilder.cv_makeWeights(ModelBuilder.java:357)
    at hex.ModelBuilder.computeCrossValidation(ModelBuilder.java:276)
    at hex.ModelBuilder$1.compute2(ModelBuilder.java:207)
    at water.H2O$H2OCountedCompleter.compute(H2O.java:1263)
    at jsr166y.CountedCompleter.exec(CountedCompleter.java:468)
    at jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:263)
    at jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:974)
    at jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1477)
    at jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)

1 Ответ

0 голосов
/ 27 февраля 2019

Для предоставленного набора данных, который имеет 69 примеров, вам понадобятся следующие аргументы в вызове h2o.gbm:

nfolds = 69,
fold_assignment = "Modulo"

Например, этот полный кодовый блок запускает ваш пример с оставляющим одинперекрестная проверка и включает несколько дополнительных строк для подтверждения правильности назначения сгибов:

library(h2o)

h2o.init(strict_version_check = FALSE)

u$dc=as.factor(u$dc)
train <- as.h2o(u)
model <- h2o.gbm(x= colnames(train)[1:15],
                 y="dc", training_frame=train,
                 nfolds = 69,
                 fold_assignment = "Modulo",
                 keep_cross_validation_fold_assignment = TRUE, # keep track of fold assignment to confirm leave-one-out
                 learn_rate = 0.06,
                 ntrees = 90, max_depth = 3,   
                 min_rows = 2,
                 distribution = "bernoulli")

folds <- h2o.cross_validation_fold_assignment(model) # get fold assignments
print(folds, n = 69) # print all assignment for the 69 folds
print(h2o.dim(h2o.unique(folds))) # count the number of unique values
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...