R自动将数据集上实现的预处理应用到新数据集

R automatically apply the preprocessing realized on a dataset to a new dataset

我正在寻找一种方法来编写一个函数,该函数可以在另一个脚本中自动加载脚本的一部分。

这是我的问题:我创建了一个脚本,对数据集执行预处理,然后应用 xgboost。

我需要将此脚本中实现的预处理(例如:创建新变量、用均值替换 NA - 保持初始数据集的均值)自动应用到新数据集。这对用户来说应该是完全透明的(没有复制粘贴,只有一个带有新集合的函数和模型的 Rdata 作为参数输入)。

我的想法是 "store" 将脚本的预处理部分作为 Rdata 中的一个对象,然后当我在新脚本中加载该对象时,预处理将应用于新数据集。

有没有人知道如何做到这一点?

听起来您正试图在 R 中实现稳定的管道:将大数据预测实现的所有预处理、转换和预测步骤保存在一个地方。

虽然我目前建议使用专用流水线工具并使用它来调用 R 脚本,但有一些 R 包试图提供流水线语法,例如 flowr.

在您执行 xgboost 时,您可以通过 sparklyr 利用 Spark-ML 的管道语法作为中间解决方案,但它仍在积极开发中,因此可能还没有完全按预期工作。

保存广告共享管道的开放标准是pmml,大多数框架都有办法导出管道到pmmlRpmml 包),但不能 导入 它们。

eta:为了完整性,您还可以尝试将每个训练模型的必要数据结构和训练模型对象包装到 S4 class 中并定义(高度具体)preprocess()transform()predict() 方法。我这样做是为了私人使用,但对我来说,它有点太像胶带和绑带的感觉,不能把它暴露给客户。

我的回答显然有点晚了,但也许像我这样的其他人正在研究他们的管道并偶然发现了这个问题。我建议尝试 ProjectTemplate 包。它提供了为新的 R 自动构建目录结构的功能 项目,使用这种结构,它自动进行数据加载、预处理、库 导入等(例如,对于标准分析,我还有用于可视化、模型构建和自动报告的脚本,我只是 运行 使用 ProjectTemplate)。管道非常高效,因为您可以在每一步 cache() 对象,然后只需从您停止的地方重新 运行 重新编写相同的代码。它也是非常可定制的。