You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中导入SPSS Modeler导出的含CompoundPredicate的CHAID PMML模型有新进展吗?

在R中导入含CompoundPredicate的SPSS Modeler CHAID PMML模型解决方案

针对你用partykit导入SPSS Modeler导出的CHAID PMML时遇到的CompoundPredicate not yet implemented错误,目前有几个可行的解决方向,以及一些最新进展:

1. 用xml2手动解析重构模型

partykit对复杂谓词的支持有限,但可以配合XML解析工具自己处理CompoundPredicate节点:

  • 先用xml2::read_xml()加载你的PMML文件
  • 定位到CHAID树里的CompoundPredicate节点,提取里面的子条件(比如And/Or逻辑下的多个简单判断)
  • 把这些条件合并成R能识别的表达式(比如用&连接And逻辑的条件),再手动组装成partykit支持的constparty模型结构

2. 试试r2pmml的开发版

r2pmml原本是用来把R模型转成PMML的,现在开发版加了反向解析功能,专门适配过SPSS导出的CHAID模型:

  • 先装开发版:devtools::install_github("jpmml/r2pmml")
  • 导入模型:model <- r2pmml::parse_pmml("你的模型文件.pmml")
  • 注意这个功能还在迭代,遇到特殊情况可以去项目仓库提反馈

3. 写脚本修改PMML结构

针对SPSS导出的PMML格式,批量把CompoundPredicate转换成partykit能识别的结构:

  • 比如把<CompoundPredicate booleanOperator="And">下的多个条件合并成一个表达式,替换掉原节点
  • 示例代码片段:
    library(xml2)
    pmml_doc <- read_xml("chaid_model.pmml")
    # 找到所有CompoundPredicate节点
    compound_nodes <- xml_find_all(pmml_doc, "//CompoundPredicate")
    for(node in compound_nodes){
      op_type <- xml_attr(node, "booleanOperator")
      # 提取每个子条件
      simple_preds <- xml_find_all(node, ".//SimplePredicate")
      cond_list <- lapply(simple_preds, function(p){
        paste0(xml_attr(p, "field"), " ", xml_attr(p, "operator"), " ", xml_attr(p, "value"))
      })
      # 合并成逻辑表达式
      combined_cond <- paste(cond_list, collapse = ifelse(op_type == "And", " & ", " | "))
      # 这里可以根据partykit的要求替换节点内容,或者直接生成可用的表达式
    }
    # 保存修改后的PMML再用partykit导入
    write_xml(pmml_doc, "modified_chaid.pmml")
    

最新进展说明

截至2024年,partykit官方还没正式支持CompoundPredicate,但社区有用户提交了相关PR,你可以关注项目的GitHub仓库动态;另外r2pmml的反向解析功能一直在优化,对SPSS CHAID的支持越来越完善,优先试试这个。

内容的提问来源于stack exchange,提问作者Mojoesque

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 14:59:58