【发布时间】:2021-10-15 00:18:40
【问题描述】:
我在尝试学习时间序列数据模型时遇到了困难。为此,我决定使用mlr3 框架,特别是mlr3tuning::AutoTuner 函数。整个设置如下所示:
at <- mlr3tuning::AutoTuner$new(
learner = mlr3::lrn("classif.xgboost"),
resampling = mlr3::rsmp("RollingWindowCV", window_size = 86400, horizon = 28800, folds = 24, fixed_window = F),
measure = mlr3::msr("classif.costs", costs = costs),
search_space = ps,
terminator = mlr3tuning::trm("clock_time", stop_time = as.POSIXct("2021-08-13 10:00:00")),
tuner = mlr3tuning::tnr("random_search")
)
我收到的错误消息如下所示:
Error in .__Archive__add_evals(self = self, private = private, super = super, :
Assertion on 'ydt[, self$cols_y, with = FALSE]' failed: Contains missing values (column 'classif.costs', row 1).
我尝试自己解决问题,这是我尝试过的方法:
-
起初我尝试了简单的解决方案,如果错误消息指出
msr("classif.costs", costs = costs)有问题,让我们将其更改为msr("classif.acc")。但它所做的一切都改变了错误消息中的measure。 -
其次,我确保我的火车组中没有
NA、NaN、Inf或-Inf,但下一次尝试也产生相同的错误消息。> df <- task$data() > sapply(df, function(x) sum(is.na(x))) %>% sum [1] 0 > sapply(df, function(x) sum(is.nan(x))) %>% sum [1] 0 > sapply(df, function(x) sum(is.infinite(x))) %>% sum [1] 0 -
最后,我在 mlr3 的 github 上遇到了一个类似的问题:Error on missing values without missing values 发现问题并描述为:非常不平衡的数据集导致一些交叉验证重采样不包括所有标签强>。所以我开始检查这是否也适用于我的问题:
-
首先是不平衡 - 所以数据是如此不平衡,但坦率地说,我认为它不会创建不完整(标签明智)的 cv 重采样组。
> df[[task$target_names]] %>% table . -1 0 1 133024 413200 123584 -
重采样本身 - 如果我们看一下重采样方案,就会清楚地看到,产生问题导致组的最高机会出现在测试组之一中。它们中的每一个都包含 28800 个观测值,但让我们来看看它们的全部。上面的代码表示每个主题都有完整的标签集。
免责声明
我知道这些是随机拆分的,但是经过数百次重复后,我仍然无法找到没有全套标签的那个。 em>> resample$instantiate(task) > rs <- resample$instance > sapply(1:24, function(x) df[[task$target_names]][rs$train[[x]]] %>% unique %>% length) [1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 > sapply(1:24, function(x) df[[task$target_names]][rs$test[[x]]] %>% unique %>% length) [1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
-
但我的思维过程可能有问题,重采样可能是我无法训练模型的问题。这个假设的唯一问题是错误发生在第 x 次评估。所以,问题出在其他地方,或者在每次调整评估中重新运行重新采样,直到它创建不完整的组并产生错误,这可能吗?
我确实尝试使用带有随机标签的虹膜集上的恒定超参数对此进行测试,但我的结果犹豫不决。所以我仍然在问一个问题我做错了什么?
无论如何,感谢您的任何回答, 干杯!
【问题讨论】:
标签: r machine-learning resampling mlr3