0

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

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

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

我的想法是将带有预处理的脚本部分“存储”为 Rdata 中的对象,然后当我在新脚本中加载此对象时,预处理将应用于新数据集。

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

4

2 回答 2

1

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

于 2018-12-24T17:52:14.237 回答
1

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

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

正如您所做的那样,xgboost您可能能够利用Spark-ML's 管道语法 viasparklyr作为中间解决方案,但它仍在非常积极地开发中,因此可能尚未完全按预期工作。

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

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

于 2017-05-16T09:13:44.373 回答