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

R语言机器学习模型set.seed()设置方法及相关疑问

机器学习模型中set.seed()的最佳实践解答

核心结论先明确

所有包含随机化过程的机器学习模型(包括你用到的随机森林、GBM、BART)都需要设置set.seed()来保证结果可复现,因为这些模型的训练逻辑中都依赖随机抽样或随机决策:

  • 随机森林:bootstrap样本生成、特征随机选择
  • GBM:部分实现会用随机子样本训练基学习器、正则化环节的随机扰动
  • BART:树结构的随机初始化、节点分裂时的随机选择

最佳设置流程(针对你的场景)

你还未划分训练/测试集,这是整个流程中第一个需要固定随机性的环节,正确的流程应该是:

  1. 先固定数据集拆分的随机性
    在执行训练集与测试集拆分的代码前,必须设置一次种子。这是所有后续可复现性的基础——如果每次运行脚本拆分出的数据集都不一样,无论模型怎么设种子,最终结果都无法一致。

  2. 按需固定模型训练的随机性
    在每个模型训练代码前,根据需求设置种子:

    • 如果你需要每个模型的训练过程独立可复现(比如单独调试某一个模型时结果不变),可以给每个模型设置不同的种子;
    • 如果你只需要整个脚本的最终结果复现,也可以在脚本开头只设置一次种子,但要注意:部分模型训练函数会消耗大量随机数,可能导致后续随机步骤的结果和预期有偏差,因此更稳妥的方式是在关键随机步骤前单独设置。

你的代码优化示例

# 第一步:拆分数据集前设置种子,固定拆分结果
set.seed(123)
train_indices <- sample(nrow(dataset), size = floor(0.7 * nrow(dataset)))
train_data <- dataset[train_indices, ]
test_data <- dataset[-train_indices, ]

# 训练BART:设置独立种子保证该模型训练过程可复现
set.seed(456)
mod_BART <- bart(x.train = train_data[, preds_selected], y.train = train_data[, 1], keeptrees = TRUE)
summary(mod_BART)

# 训练GBM:设置独立种子
set.seed(789)
formula_GBM <- as.formula(paste("presence ~", paste(preds_selected, collapse = "+")))
mod_GBM <- gbm(formula_GBM, data = train_data, distribution="bernoulli") 

# 训练随机森林(示例)
set.seed(101)
mod_RF <- randomForest(formula_GBM, data = train_data, ntree = 500)

关于种子设置次数的问题

  • 仅在第一个模型前设置一次不够:因为你还未拆分数据集,拆分过程的随机性没被固定,而且后续模型训练会消耗随机数流,导致后续随机步骤的结果不可控。
  • 合理的设置次数:至少2次(数据集拆分前1次,每个模型训练前各1次);如果有交叉验证等额外随机步骤,也要在对应步骤前设置种子。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:27:46