使用tidymodels工作流预测测试集时出现“列中缺少数据”错误

最近我在学习使用tidymodels构建机器学习工作流,但在使用工作流对测试集进行预测时,出现了“列中缺少数据”的错误,但我确信训练集和测试集中都没有缺失数据。以下是我的代码和示例:

# 关于数据的信息:测试集中的Primary_type有几个新的级别
str(train_sample)
tibble [500,000 x 3] (S3: tbl_df/tbl/data.frame)
 $ ID          : num [1:500000] 6590508 2902772 6162081 7777470 7134849 ...
 $ Primary_type: Factor w/ 29 levels "ARSON","ASSAULT",..: 16 8 3 3 28 7 3 4 25 15 ...
 $ Arrest      : Factor w/ 2 levels "FALSE","TRUE": 2 1 1 1 1 2 1 1 1 1 ...
str(test_sample)
tibble [300,000 x 3] (S3: tbl_df/tbl/data.frame)
 $ ID          : num [1:300000] 8876633 9868538 9210518 9279377 8707153 ...
 $ Primary_type: Factor w/ 32 levels "ARSON","ASSAULT",..: 3 7 31 7 2 8 7 2 31 18 ...
 $ Arrest      : Factor w/ 2 levels "FALSE","TRUE": 1 1 1 1 2 1 1 1 2 2 ...
# 设置配方
rec <- recipe(Arrest ~ ., data = train_sample) %>%
   update_role(ID, new_role = "ID") %>%
   step_novel(Primary_type)
# 设置模型
rf_model <- rand_forest(trees = 10) %>%
  set_engine("ranger", seed = 100, num.threads = 12, verbose = TRUE) %>%
  set_mode("classification")
# 设置工作流
wf <- workflow() %>%
   add_recipe(rec) %>%
   add_model(rf_model)
# 拟合训练数据
wf_fit <- wf %>% fit(train_sample)
# 预测测试数据
wf_pred <- wf_fit %>% predict(test_sample)

预测时出现了以下错误:

ERROR:Missing data in columns: Primary_type.

然而,当我单独使用prep()bake()构建工作流时,预测不会出现错误:

# 单独设置工作流
train_prep <- prep(rec, training = train_sample)
train_bake <- bake(train_prep, new_data = NULL)
test_bake <- bake(train_prep, new_data = test_sample)
# 拟合baked的训练数据
rf_model_fit <- rf_model %>% fit(Arrest ~ Primary_type, train_bake)
# 预测baked的测试数据
rf_model_pred <- rf_model_fit %>% predict(test_bake) # 没有缺失数据错误

我发现两个baked数据集中的Primary_type的级别是相同的,这意味着step_novel()生效了。

# 比较baked数据集之间的级别
identical(levels(train_bake$Primary_type), levels(test_bake$Primary_type))
[1] TRUE

那么,为什么在工作流中预测失败,而单独进行时成功呢?缺失数据是如何产生的?非常感谢。


回答:

我建议你查看关于“步骤顺序”的建议,特别是关于处理分类数据级别的部分。你应该在其他因子处理操作之前使用step_novel()

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注