我计划使用不同的预测变量集运行广义线性模型(glm)、套索回归(lasso)和随机森林(randomForest),以查看哪种模型组合效果最佳。我将进行 v 折交叉验证。为了一致地比较机器学习算法,每个机器学习算法必须使用相同的折叠。如果我在这里有误,请纠正我。
在 R 的 h2o 包中如何实现这一点?我是否应该在每个算法函数中设置
- fold_assignment = Modulo,如 h2o.glm()、h2o.randomForest() 等。
- 因此,训练集在不同的机器学习算法之间是否会以相同的方式分割?
如果我使用 fold_assignment = Modulo,如果我需要对结果进行分层呢?分层选项也在 fold_assignment 参数中吗?我不确定是否可以同时指定 Modulo 和 Stratified。
另外,如果我在每个模型中设置相同的 seed,它们是否会使用相同的折叠作为输入?
我在阅读 [Practical Machine Learning with H2O by Darren Cook] (https://www.oreilly.com/library/view/practical-machine-learning/9781491964590/ch04.html) 的第4章后产生了上述问题
此外,对于以下引用中的情景中站点级数据的泛化性:
例如,如果你有来自 K 个城市的观测(例如,用户交易),并且你想仅基于 K-1 个城市的用户构建模型,并在剩余的一个城市上验证它们(例如,如果你想研究对新城市的泛化性),你需要指定参数“fold_column”为城市列。否则,你将会有来自所有 K 个城市的行(用户)随机混合到 K 个折叠中,所有 K 个交叉验证模型都会看到所有 K 个城市,使验证变得不太有用(或完全错误,具体取决于数据的分布)。(来源)
在这种情况下,由于我们是按列进行交叉折叠,它在所有不同模型中是一致的,对吗?
回答:
确保为所有机器学习算法以相同的方式分割数据集(使用相同的种子)。为每个模型设置相同的种子并不会保证它们具有相同的交叉验证分配。为了确保它们是苹果对苹果的比较,创建一个折叠列(.kfold_column()
或 .stratified_kfold_column()
)并在训练时指定它,以便它们都使用相同的折叠分配。