【问题标题】:how do I set missing values using PmmlTransformation in r如何在 r 中使用 PmmlTransformation 设置缺失值
【发布时间】:2015-07-22 00:55:12
【问题描述】:

我在 r 中有一个数据框,其中有一些 NA 值。如何使用 pmmlTransformations 为这些字段设置缺失值处理。我已经看到您可以在转换数据(规范化、字段映射等)时设置缺失值处理,但我想知道如何只设置缺失值而不必对数据进行规范化。

    library(pmml)
    library(pmmlTransformations)

    df <- data.frame(id=1:5, y=1:5, x=c(2,4,3,NA,8))
    dataBox <- WrapData(df)

    # update the wrapped data to set x=1 when it its NA

    fit <- glm(formula=y~x, data = dataBox$data)

    pmml(fit, transforms=dataBox)

在此先感谢

安德鲁

【问题讨论】:

    标签: r pmml


    【解决方案1】:

    如果您只想将missingValueReplacement=1 属性添加到PMML 文档中的所有MiningField 元素,则将unknownValue = 1 附加到您的pmml::pmml.glm 函数调用:

    library(pmml)
    df <- data.frame(id=1:5, y=1:5, x=c(2,4,3,NA,8))
    # Set missing values to 1 before training a GLM model
    df$x[is.na(df$x)] = 1
    fit <- glm(formula=y~x, data = df)
    # Encode information about the missing value transformation into the PMML document
    pmml = pmml.glm(fit, unknownValue = 1)
    saveXML(pmml, "glm.pmml")
    

    当然,unknownValue 参数似乎已被弃用,但它完全可以满足您的需求,而无需启动复杂的转换序列。

    【讨论】:

    • 我检查了生成的 pmml,似乎 x 和 y 的 missingValueReplacement="1" 都不是我想要实现的。我可以想象会有一段时间我需要为多个字段设置缺失值。因此,最好将它们设置为不同的值。
    • 如果你查看pmml::.pmmlMiningSchema函数的源代码,很容易看出你可以为unknownValue参数传递一个data.frame而不是一个标量值。这样每个字段都可以有自己的 missingValueReplacement 值。
    【解决方案2】:

    您可以使用 unknownValue 参数: pmml.glm(glm, transforms = dataBox, unknownValue = 0) 但这将应用于您的所有变量,包括您的目标变量。

    我编写了一个修复程序,允许为每个变量指定替换值: https://github.com/guleatoma/pmml

    使用这个版本的包你可以这样做:

    pmml.glm(glm, transforms = dataBox, unknownValue = list("x1" = 0, "x2" = 100))

    【讨论】:

      猜你喜欢
      • 2016-11-10
      • 2022-06-11
      • 2012-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      • 2013-04-28
      • 2017-06-23
      相关资源
      最近更新 更多