我正在尝试从使用R获得的随机森林模型生成PMML。我使用randomForest软件包4.6-12和最后一个版本的PMML for R.但每次我尝试生成PMML时都会获得错误。这是代码:
data_train.rf <- randomForest( TARGET ~ ., data = train, ntree=100, na.action=na.omit, importance=TRUE)
pmml_file = pmml(data_train.rf)
[1] "Now converting tree 1 to PMML"
Error in append.XMLNode(rfNode, splitNode) : object 'splitNode' not found
我还没有找到问题的根源,有什么想法吗? 提前谢谢,
阿尔瓦罗
答案 0 :(得分:0)
看起来变量splitNode
尚未在“pmml”包中初始化。初始化路径取决于拆分变量的数据类型(例如,数字,逻辑,因子)。请参阅“pmml”包中的/R/pmml.randomForest.R
文件的源代码。
那么,train
data.frame对象中的列是什么?
或者,您可以试用r2pmml package,因为它在处理randomForest
模型类型方面要好得多。
答案 1 :(得分:0)
pmml代码假设变量的数据类型是数字,简单逻辑或因子。如果您使用的数据是其他类型,它将无法工作;以DateTime为例。 如果您的问题可以重现,这将有所帮助;理想情况下,您将提供您使用的数据集。如果没有,至少它的一个样本或它的描述......可能总结一下。 您还应该考虑直接通过电子邮件发送软件包维护人员。
答案 2 :(得分:0)
我可能已经找到了这个问题的根源。在我的数据集中,我有大约500000个事件和30个变量,其中10个变量是因子,其中一些变量具有弱填充水平,在某些情况下只有1个事件。
我构建了几个随机森林模型,每次都包含模型的额外变量。我开始在模型中添加数值变量而没有生成PMML的问题,对于所有级别大量填充的分类变量也是如此,当我尝试包含弱填充级别的分类变量时我得到了错误:
Error in append.XMLNode(rfNode, splitNode) : object 'splitNode' not found
我认为问题的根源在于,在某些情况下,当构建一个水平较弱的树时,没有分裂,因为只有一个案例,尽管randomForest
包知道如何处理在这些情况下,pmml
包不会。
答案 3 :(得分:0)
我的测试表明,当分类变量的级别数超出randomForest函数允许的最大数量时,会出现此问题。林子列表中定义的拆分不再是分类对象的拆分定义所需的正整数。减少修复问题的级别数。