You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将嵌套重采样模型应用于置换数据集?

问题

我已经通过以下代码生成了嵌套重采样对象:

data<-read.csv("Data.csv", row.names=1)

data$factor<-as.factor(data$factor)

set.seed(123, "L'Ecuyer")

task = as_task_classif(data, target = "factor")

learner = lrn("classif.ranger", importance = "impurity", num.trees=10000)

measure = msr("classif.fbeta", beta=1)

terminator = trm("none")

resampling_inner = rsmp("repeated_cv", folds = 10, repeats = 10)

at = AutoFSelector$new(
  learner = learner,
  resampling = resampling_inner,
  measure = measure,
  terminator = terminator,
  fselect = fs("rfe", n_features = 1, feature_fraction = 0.5, recursive = FALSE),
  store_models = TRUE)

resampling_outer = rsmp("repeated_cv", folds = 10, repeats = 10)

rr = resample(task, at, resampling_outer)

我有一个factor变量被置换/随机化的.csv文件,希望利用上述嵌套重采样范式下的模型对该数据集进行预测,以此对比真实数据集与置换后数据集的模型性能差异。在生物研究场景中样本量通常较小,仅凭随机概率的预测准确率可能达到70%甚至更高,我想通过这种方式验证模型的实际预测性能。

请问如何利用已有的重采样对象rr实现这一操作?

解决方案

要利用已有的嵌套重采样对象rr评估置换后数据集的性能,可按以下步骤操作:

1. 加载并预处理置换后的数据集

首先读取置换后的数据集,转换为与原任务一致的分类任务对象:

# 加载置换后的数据集
permuted_data <- read.csv("Permuted_Data.csv", row.names=1)
permuted_data$factor <- as.factor(permuted_data$factor)

# 创建对应的分类任务,确保目标变量与原任务一致
permuted_task <- as_task_classif(permuted_data, target = "factor")

2. 提取嵌套重采样中的最优模型

由于你在AutoFSelector中设置了store_models = TRUE,可以从rr中提取每个外层折训练得到的带特征选择结果的最优模型:

# 提取所有外层折的AutoFSelector结果
fselect_results <- rr$learners

# 定义预测函数:用单个外层折的最优模型预测新数据集
predict_with_fold_model <- function(fselect_obj, new_task) {
  # 获取该折的最优训练模型
  best_learner <- fselect_obj$model$learner
  # 生成预测结果
  return(best_learner$predict(new_task))
}

3. 批量预测并计算置换后数据集的性能

遍历所有外层折的模型,对置换后数据集进行预测,再统计整体性能:

# 用每个外层折的模型预测置换后数据集
permuted_predictions <- lapply(fselect_results, predict_with_fold_model, new_task = permuted_task)

# 计算每个预测结果的F1值,再统计均值和标准差
permuted_performance <- sapply(permuted_predictions, function(pred) {
  pred$score(measure)
})

cat("置换后数据集的平均F1值:", mean(permuted_performance), "\n")
cat("置换后数据集的F1值标准差:", sd(permuted_performance), "\n")

4. 对比真实与置换数据集的性能

提取原嵌套重采样的性能结果,与置换后的结果进行对比:

# 获取原数据集的外层重采样性能
original_performance <- rr$score(measure)$classif.fbeta

# 输出原数据集的性能统计
cat("原数据集的平均F1值:", mean(original_performance), "\n")
cat("原数据集的F1值标准差:", sd(original_performance), "\n")

# 可视化对比(可选)
boxplot(
  list(原数据集=original_performance, 置换后数据集=permuted_performance),
  main="真实与置换数据集的模型性能对比",
  ylab="F1值"
)

注意事项

  • 每个外层折都训练了独立的特征选择和模型,因此需要用所有外层折的模型分别预测置换后数据,再取平均性能,结果更具统计可靠性。
  • 确保置换后的数据集特征列与原数据集完全一致,否则会导致预测失败。

内容的提问来源于stack exchange,提问作者abadgerw123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 14:25:23