首页 > 解决方案 > Tidymodels:从训练和测试数据创建一个 rsplit 对象

问题描述

我正在尝试从 Scikit-Learn 跳转到 Tidymodels,并且由于 Julia Silge 和 Andrew Couch 的教程,大部分时间它相对轻松。但是,现在我被困住了。通常我会使用 initial_split(df, strata = x) 来获得一个拆分对象来使用。但这一次我得到了来自不同部门的测试和训练集,我担心这可能会成为常态。如果没有像 last_fit() 和 collect_predictions() 这样的拆分对象函数,则不起作用。

如何对提供的数据集进行逆向工程,使它们成为 rsplit 对象?或者,是否可以先将数据集绑定在一起,然后准确地告诉 initial_split() 应该去训练和测试哪些行?

我看到有人在https://community.rstudio.com/t/tidymodels-creating-a-split-object-from-testing-and-training-data-perform-last-fit/69885提出了同样的问题。Max Kuhn 说你可以对 rsplit 对象进行逆向工程,但我不明白怎么做。谢谢!

# Example data
train <- tibble(predictor = c(0, 1, 1, 1, 0, 1, 0, 0),
       feature_1 = c(12, 18, 15, 5, 20, 2, 6, 10),
       feature_2 = c(120, 98, 111, 67, 335, 123, 22, 69))

test <- tibble(predictor = c(0, 1, 0, 1),
       feature_1 = c(5, 13, 8, 9),
       feature_2 = c(132, 105, 99, 112))

标签: rtidymodels

解决方案


对拆分对象进行逆向工程可能意味着简单地查看rsplit对象的构造。根据包的实现,这可以像使用与使用initial_split. 这很可能是这里的情况,所以我们只需要重新创建对象并确保所有字段都可用。

然而,一种方法(可能是最简单的)是将两者结合起来data.frames并使用索引make_splits来重新创建原始拆分对

library(rsample)
library(dplyr)
combined <- bind_rows(train, test)
ind <- list(analysis = seq(nrow(train)), assessment = nrow(train) + seq(nrow(test)))
splits <- make_splits(ind, combined)
splits
<Analysis/Assess/Total>
<8/4/12>

推荐阅读