我有一个随机森林模型,我想更好地理解它。
为了举例,假设我们有一片蓝莓灌木丛。我们感兴趣的是预测单个灌木丛中所有蓝莓的收获中特定灌木丛中腐烂蓝莓的产量。
每个灌木都有一个识别名称:bush_name,例如'bush001',我们希望根据每个灌木进行预测。例如,我想知道 Bush025 是否在 2/2/22 生产了腐烂的浆果。
为了本示例,输入位于具有以下虚拟结构的 df 中:
train_data <- data.frame(date = c("2022-01-01", "2022-01-07", "2022-02-09", "2022-05-01", "2022-11-01", "2022-11-02"),
bush_name = c("bush001", "bush001", "bush001", "bush043", "bush043", "bush043"),
bugs = c(2, 0, 1, 0, 3, 1),
has_rotten_berry = c(1, 0, 0, 1, 1, 0),
berry_count = c(12, 1, 7, 100, 14, 4),
weather = c(1, 0, 2, 0, 1, 1))
我已经建立了一个随机森林模型,并进行了以下高级设置:
library(agua)
library(parsnip)
library(h2o)
h2o.init(nthreads = -1)
model_fit <- rand_forest(mtry = 10, trees = 100) %>%
set_engine("h2o") %>%
set_mode("classification") %>%
fit(has_rotten_berry ~ .,
data = train_data) %>%
step_dummy(bush_name) %>%
step_zv(all_predictors()) %>%
step_normalize(all_predictors())
训练后我确实收到了这条消息:
Warning message:
In .h2o.processResponseWarnings(res) :
Dropping bad and constant columns: [bush_name].
我想知道的是:
当我尝试预测训练模型中的新数据时,似乎我只能使用我已经训练过的灌木丛的 Bush_names 输入新的测试数据。 我假设该模型正在创建特定于灌木丛的预测是否正确?因此必须在训练中输入新的灌木丛信息才能输出这些新灌木丛的未来预测?
示例:我种植了一种新灌木,bush700,它不存在于原始训练数据集中。如果我尝试使用新的灌木丛数据进行预测,但训练数据中不存在该数据,则会向我传达一条消息:数据中存在新的级别。所以我假设因为这些预测似乎是特定于灌木丛的,并且我们无法为新添加的灌木丛获得任何新的灌木丛预测。
这个假设正确吗?
谢谢您,对于可能令人困惑的隐喻,我深表歉意。也欢迎您对模型可能有的任何其他反馈。
该警告表示您的列“bush_name”被检测为错误或常量,并且在训练期间不会使用。因此,结果预测并非基于此专栏。
如果该列不错或恒定(bush_name 数据在您的示例中看起来不错),则将其用于训练模型,并且结果预测基于其值(级别)。
如果您在测试数据中添加一些未知级别,模型将创建预测,但预测可能不如训练数据集中的值那么好。这就是我们发出警告的原因。但是,该模型将为未知级别的数据创建一些预测。