【问题标题】:Converting rpart model into PMML (using 'pmml' package)将 rpart 模型转换为 PMML(使用“pmml”包)
【发布时间】:2019-06-23 17:42:18
【问题描述】:

当我尝试将 rpart 模型转换为 pmml 时出现以下错误:

Fehler in if (ff$nsurrogate[parent_ii] > 0) { :   
    Fehlender Wert, wo TRUE/FALSE nötig ist
    (Missing value where TRUE / FALSE is needed)

这个错误可以通过下面的代码重现:

library(rpart)
library(pmml)
df <- structure(list(a = structure(c(15L, 1L, 13L, 8L, 11L, 25L, 6L, 
                                     24L, 27L, 9L, 2L, 18L, 28L, 14L, 5L, 17L, 20L, 21L, 16L, 7L, 
                                     22L, 19L, 23L, 26L, 3L, 10L, 12L, 4L), .Label = c("013", "018", 
                                                                                       "063", "073", "122", "173", "212", "216", "296", "355", "410", 
                                                                                       "415", "423", "428", "453", "481", "534", "586", "678", "701", 
                                                                                       "735", "746", "778", "812", "818", "855", "864", "998"), class = "factor"), 
                     y = c(1.029993, 0.95987, 0.95987, 0.95987, 0.95987, 0.95987, 
                           0.95987, 0.969903, 0.95987, 0.860644, 0.95987, 0.969903, 
                           0.900669, 0.95987, 0.95987, 0.95987, 1.12018, 0.95987, 0.95987, 
                           0.95987, 0.95987, 0.880656, 0.95987, 0.939858, 0.95987, 0.939858, 
                           0.95987, 0.95987)), row.names = c(NA, -28L), class = "data.frame")

model <- rpart(y ~ a, df, control = rpart.control(minsplit = 1, minbucket = 2, cp=-1))
pmml.rpart(model)

会话信息() R 版本 3.5.1 (2018-07-02) 平台:x86_64-redhat-linux-gnu(64位) 运行于:Red Hat Enterprise Linux

矩阵产品:默认 BLAS/LAPACK:/usr/lib64/R/lib/libRblas.so

语言环境: [1] LC_CTYPE=de_DE.UTF-8 LC_NUMERIC=C LC_TIME=de_DE.UTF-8 LC_COLLATE=de_DE.UTF-8 LC_MONETARY=de_DE.UTF-8
[6] LC_MESSAGES=de_DE.UTF-8 LC_PAPER=de_DE.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=de_DE.UTF-8 LC_IDENTIFICATION=C

附加的基础包: [1] stats graphics grDevices utils datasets methods base

其他附加包: [1] pmml_1.5.7 XML_3.98-1.16 rpart_4.1-13

通过命名空间加载(未附加): [1] compiler_3.5.1 magrittr_1.5 tools_3.5.1 yaml_2.2.0 stringi_1.2.4 stringr_1.3.1

【问题讨论】:

  • 那么,我们的回答有帮助吗?
  • 要求是长成一棵不修剪的完整树。这就是我们使用“cp=-1”的原因。但这是创建 pmml 的问题。 “cp=0”对树有同样的效果,“pmml.rpart”对我有用。

标签: r rpart pmml


【解决方案1】:

目前df$a 是一个因素,考虑到行数等于因素级别的数量,这实际上没有意义。解决这个问题

df$a <- as.numeric(as.character(df$a))

也允许运行

pmml.rpart(model)

【讨论】:

    【解决方案2】:

    考虑改用r2pmml 包:https://github.com/jpmml/r2pmml

    以上代码原样转换成功,生成的PMML模型文件更小、更干净且可证明正确:

    library("r2pmml")
    r2pmml(model, "model.pmml")
    

    【讨论】:

      猜你喜欢
      • 2019-06-05
      • 1970-01-01
      • 2022-10-23
      • 2019-10-13
      • 2016-11-03
      • 2016-07-13
      • 2017-10-14
      • 2019-02-22
      • 2018-06-20
      相关资源
      最近更新 更多