Модели GAM в H2o от R - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь скопировать пример модели GAM в документации h2o - GAM , однако я получаю следующую ошибку:

*Error: water.exceptions.H2OModelBuilderIllegalArgumentException: Illegal argument(s) for GAM model: GAM_model_R_1586448366888_1.  Details: ERRR on field: knots formation: knots not sorted in ascending order. Knots at index 0: 1,000000.  Knots at index 1: 0,000000*

Я не знаю, почему возникает ошибка, я скопировал и вставил точно такой же код, как в примере.

Сценарий, который я запускаю, тот же, что и в примере документации h2o.

Это код:

# create frame knots
knots1 <- c('-1.99905699', '-0.98143075', '0.02599159', '1.00770987', '1.99942290')
frameKnots1 <- as.h2o(knots1)
knots2 <- c('-1.999821861', '-1.005257990', '-0.006716042', '1.002197392', '1.999073589')
frameKnots2 <- as.h2o(knots2)
knots3 <- c('-1.999675688', '-0.979893796', '0.007573327', '1.011437347', '1.999611676')
frameKnots3 <- as.h2o(knots3)

# import the dataset
h2o_data <- h2o.importFile("https://s3.amazonaws.com/h2o-public-test-data/smalldata/glm_test/multinomial_10_classes_10_cols_10000_Rows_train.csv")

# Convert the C1, C2, and C11 columns to factors
h2o_data["C1"] <- as.factor(h2o_data["C1"])
h2o_data["C2"] <- as.factor(h2o_data["C2"])
h2o_data["C11"] <- as.factor(h2o_data["C11"])

# split into train and test sets
h2o_data.splits <- h2o.splitFrame(data=h2o_data, ratios=.8)
train <- h2o_data.splits[[1]]
test <- h2o_data.splits[[2]]

# Set the predictor and response columns
predictors <- colnames(train[1:2])
response <- 'C11'

# specify the knots array
numKnots <- c(5,5,5)

# build the GAM model
gam_model <- h2o.gam(x=predictors,
                     y=response,
                     training_frame = train,
                     family='multinomial',
                     gam_columns=c("C6","C7","C8"),
                     scale=c(1,1,1),
                     num_knots=numKnots,
                     knot_ids=c(h2o.keyof(frameKnots1), h2o.keyof(frameKnots2), h2o.keyof(frameKnots3)))

Спасибо.

1 Ответ

1 голос
/ 09 апреля 2020

Проблема в том, что вы сохраняете местоположения узлов в виде строк (извините, это была ошибка, демонстрационный код на странице Руководства пользователя GAM - мы исправим это). Если вы измените первые строки своего кода (удалите кавычки вокруг цифр), он будет работать:

# create frame knots
knots1 <- c(-1.99905699, -0.98143075, 0.02599159, 1.00770987, 1.99942290)
frameKnots1 <- as.h2o(knots1)
knots2 <- c(-1.999821861, -1.005257990, -0.006716042, 1.002197392, 1.999073589)
frameKnots2 <- as.h2o(knots2)
knots3 <- c(-1.999675688, -0.979893796, 0.007573327, 1.011437347, 1.999611676)
frameKnots3 <- as.h2o(knots3)
...