以下是模型代码:
cb_spec <- boost_tree( mode = "classification", trees = 1000, tree_depth = tune(), min_n = tune(), mtry = tune(), learn_rate = tune()) %>% set_engine("catboost", loss_function = "Logloss", task_type = "GPU")
以下是数据预处理流程:
cb_rec <- recipe(covid_vaccination ~ ., data = cb_train) %>% step_unknown(all_nominal_predictors()) %>% #step_dummy(all_nominal_predictors(), one_hot = TRUE) %>% step_impute_median(all_numeric_predictors()) %>% step_nzv(all_predictors())
我将它们结合:
cb_wf <- workflow() %>% add_model(cb_spec) %>% add_recipe(cb_rec)
然后我尝试调整参数以找到最佳超参数:
cb_tune <- tune_grid( object = cb_wf, resamples = cb_folds, grid = cb_grid, metrics = metric_set(roc_auc), control = control_grid(verbose = TRUE))
我收到的错误信息如下:
在catboost.from_matrix(as.matrix(float_and_cat_features_data), : 不支持的标签类型,期望是双精度或整数类型。我已经确认类别变量已经被转换为因子类型。我的数据集中绝对没有字符类型的向量。
回答:
经确认,这是使用tidymodels进行catboost时出现的一个奇怪错误。请查看他们的GitHub问题列表以获取更多信息和当前的解决方法。