【问题标题】:R automatically apply the preprocessing realized on a dataset to a new datasetR 自动将在数据集上实现的预处理应用到新数据集
【发布时间】:2017-05-10 10:08:21
【问题描述】:

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

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

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

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

有人知道怎么做吗?

【问题讨论】:

  • 把你的预处理步骤放在一个函数中?
  • 这就是我的想法。但是,有时我必须加载数据集,应用所有内容,等等,有时我必须检索一些值然后应用(例如,如果我想用平均值替换 NA,我必须在初始时检索平均值数据集,不计算要替换的新数据集中的平均值。这意味着我将必须创建几个函数,以及一个调用 Rdata 中创建的函数的函数,我不确定如何处理它。

标签: r automation feature-engineering


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 非常感谢,这是一个很好的答案!我会努力实现的。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2022-11-17
    • 2023-04-04
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2023-03-15
    • 2019-09-21
    相关资源
    最近更新 更多