V-fold 交叉验证(也称为 k-fold 交叉验证)将数据随机分成大小大致相等的 V 组(称为 "folds")。分析数据的重采样由 V-1 个折叠组成,而评估集包含最终折叠。在基本的 V-fold 交叉验证(即无重复)中,重新采样的次数等于 V。
参数
- data
-
一个 DataFrame 。
- v
-
数据集的分区数。
- repeats
-
重复 V-fold 分区的次数。
- strata
-
data
中的变量(单个字符或名称)用于进行分层抽样。如果不是NULL
,则每次重新采样都会在分层变量中创建。数字strata
被分为四分位数。 - breaks
-
给出对数值分层变量进行分层所需的箱数的单个数字。
- pool
-
用于确定特定组是否太小的数据比例,是否应合并到另一个组中。我们不建议将此参数降低到默认值 0.1 以下,因为分层组太小存在危险。
- ...
-
这些点用于将来的扩展,并且必须为空。
值
带有类 vfold_cv
、 rset
、 tbl_df
、 tbl
和 data.frame
的 tibble。结果包括一列数据分割对象和一个或多个标识变量。对于单个重复,将有一个名为 id
的列,其中包含带有折叠标识符的字符串。对于重复,id
是重复编号,还有一个名为 id2
的附加列
包含折叠信息(重复内)。
细节
如果重复多次,每次都会进行基本的V-fold交叉验证。例如,如果 v = 10
使用 3 次重复,则总共有 30 个分割:分别生成 3 组,每组 10 个。
使用 strata
参数,在分层变量内进行随机抽样。这有助于确保重采样与原始数据集具有相同的比例。对于分类变量,采样是在每个类别内单独进行的。对于数字分层变量,strata
被分为四分位数,然后用于分层。低于总数10%的地层合并在一起;有关更多详细信息,请参阅make_strata()
。
例子
vfold_cv(mtcars, v = 10)
#> # 10-fold cross-validation
#> # A tibble: 10 × 2
#> splits id
#> <list> <chr>
#> 1 <split [28/4]> Fold01
#> 2 <split [28/4]> Fold02
#> 3 <split [29/3]> Fold03
#> 4 <split [29/3]> Fold04
#> 5 <split [29/3]> Fold05
#> 6 <split [29/3]> Fold06
#> 7 <split [29/3]> Fold07
#> 8 <split [29/3]> Fold08
#> 9 <split [29/3]> Fold09
#> 10 <split [29/3]> Fold10
vfold_cv(mtcars, v = 10, repeats = 2)
#> # 10-fold cross-validation repeated 2 times
#> # A tibble: 20 × 3
#> splits id id2
#> <list> <chr> <chr>
#> 1 <split [28/4]> Repeat1 Fold01
#> 2 <split [28/4]> Repeat1 Fold02
#> 3 <split [29/3]> Repeat1 Fold03
#> 4 <split [29/3]> Repeat1 Fold04
#> 5 <split [29/3]> Repeat1 Fold05
#> 6 <split [29/3]> Repeat1 Fold06
#> 7 <split [29/3]> Repeat1 Fold07
#> 8 <split [29/3]> Repeat1 Fold08
#> 9 <split [29/3]> Repeat1 Fold09
#> 10 <split [29/3]> Repeat1 Fold10
#> 11 <split [28/4]> Repeat2 Fold01
#> 12 <split [28/4]> Repeat2 Fold02
#> 13 <split [29/3]> Repeat2 Fold03
#> 14 <split [29/3]> Repeat2 Fold04
#> 15 <split [29/3]> Repeat2 Fold05
#> 16 <split [29/3]> Repeat2 Fold06
#> 17 <split [29/3]> Repeat2 Fold07
#> 18 <split [29/3]> Repeat2 Fold08
#> 19 <split [29/3]> Repeat2 Fold09
#> 20 <split [29/3]> Repeat2 Fold10
library(purrr)
data(wa_churn, package = "modeldata")
set.seed(13)
folds1 <- vfold_cv(wa_churn, v = 5)
map_dbl(
folds1$splits,
function(x) {
dat <- as.data.frame(x)$churn
mean(dat == "Yes")
}
)
#> [1] 0.2649982 0.2660632 0.2609159 0.2679681 0.2669033
set.seed(13)
folds2 <- vfold_cv(wa_churn, strata = churn, v = 5)
map_dbl(
folds2$splits,
function(x) {
dat <- as.data.frame(x)$churn
mean(dat == "Yes")
}
)
#> [1] 0.2653532 0.2653532 0.2653532 0.2653532 0.2654365
set.seed(13)
folds3 <- vfold_cv(wa_churn, strata = tenure, breaks = 6, v = 5)
map_dbl(
folds3$splits,
function(x) {
dat <- as.data.frame(x)$churn
mean(dat == "Yes")
}
)
#> [1] 0.2656250 0.2661104 0.2652228 0.2638396 0.2660518
相关用法
- R rsample validation_set 创建验证拆分以进行调整
- R rsample validation_split 创建验证集
- R rsample initial_split 简单的训练/测试集分割
- R rsample populate 添加评估指标
- R rsample int_pctl 自举置信区间
- R rsample rset_reconstruct 使用新的 rset 子类扩展 rsample
- R rsample group_mc_cv 小组蒙特卡罗交叉验证
- R rsample group_vfold_cv V 组交叉验证
- R rsample rolling_origin 滚动原点预测重采样
- R rsample reverse_splits 反转分析和评估集
- R rsample group_bootstraps 团体自举
- R rsample labels.rset 从 rset 对象中查找标签
- R rsample get_fingerprint 获取重采样的标识符
- R rsample bootstraps 引导抽样
- R rsample reg_intervals 具有线性参数模型的置信区间的便捷函数
- R rsample clustering_cv 集群交叉验证
- R rsample initial_validation_split 创建初始训练/验证/测试拆分
- R rsample get_rsplit 从 rset 中检索单个 rsplit 对象
- R rsample loo_cv 留一交叉验证
- R rsample complement 确定评估样本
- R rsample slide-resampling 基于时间的重采样
- R rsample as.data.frame.rsplit 将 rsplit 对象转换为 DataFrame
- R rsample labels.rsplit 从 rsplit 对象中查找标签
- R rsample mc_cv 蒙特卡罗交叉验证
- R rsample tidy.rsplit 整洁的重采样对象
注:本文由纯净天空筛选整理自Hannah Frick等大神的英文原创作品 V-Fold Cross-Validation。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。