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

在R环境中无法将XGBoost模型导出为PMML格式的问题求助

解决XGBoost模型导出PMML的两类常见错误

一、pmml包的输入特征名错误

你遇到的错误:

Error in pmml.xgb.Booster(bst, input_feature_names = colnames(as.matrix(dev_samp[, : Input feature names required at present version. Try using colnames function on Matrix, matrix or xgb.DMatrix$data

其实是因为pmml包的XGBoost导出函数更依赖模型自身携带的feature_names属性,而非你手动传入的input_feature_names参数。虽然单独调用colnames(as.matrix(dev_samp[,1:2]))能得到正确列名,但训练模型时直接传入as.matrix(dev_samp[,1:2])并没有把列名绑定到XGBoost模型对象上,导致函数无法识别特征名。

修复方案:

先给训练用的特征矩阵明确设置列名,再训练模型,让XGBoost自动把列名存入模型的feature_names属性:

library(xgboost)
library(pmml)

dev_samp = data.matrix(mtcars[,c(4,6,9)])
# 提取训练特征并设置列名(对应mtcars第4、6列的实际列名)
train_features <- as.matrix(dev_samp[,1:2])
colnames(train_features) <- c("hp", "wt")

set.seed(123)
bst <- xgboost(data = train_features, label = dev_samp[,3], 
               max_depth=2, eta=0.2, nrounds=2, 
               colsample_bytree = 0.5, lambda = 0.3, 
               objective = "binary:logistic", eval_metric = "error")

# 此时无需手动传入input_feature_names,pmml函数会自动读取模型的feature_names
pmod <- pmml(bst, output_label_name = colnames(dev_samp)[3])

二、r2pmml包的JPMML转换失败错误

你用r2pmml时遇到的错误:

Error in .convert(tempfile, file, converter, converter_classpath, verbose) : The JPMML-R conversion application has failed (error code 1). The Java executable should have printed more information about the failure into its standard output and/or standard error streams

大概率是手动构建的fmap格式有问题(比如把特征名转成了因子类型,不符合JPMML的要求),或者模型的标签/特征信息没有正确传递。其实r2pmml不需要手动构建特征映射表,只要模型携带正确的特征名和标签信息就能自动处理。

修复方案:

改用xgb.DMatrix封装训练数据,明确传入特征名和标签,避免手动构建fmap的麻烦:

library(xgboost)
library(r2pmml)

# 保留原始数据框格式,方便处理列名和标签
dev_samp <- mtcars[,c(4,6,9)]
# 二分类任务建议把标签转成因子,确保r2pmml正确识别分类类型
dev_samp$am <- as.factor(dev_samp$am)

# 用xgb.DMatrix封装训练数据,明确指定特征名和数值型标签(0/1)
dtrain <- xgb.DMatrix(data = as.matrix(dev_samp[,1:2]), 
                      label = as.integer(dev_samp$am) - 1, 
                      feature_names = colnames(dev_samp)[1:2])

set.seed(123)
bst <- xgboost(data = dtrain, max_depth=2, eta=0.2, nrounds=2, 
               colsample_bytree = 0.5, lambda = 0.3, 
               objective = "binary:logistic", eval_metric = "error")

# 直接调用r2pmml,指定必要参数即可
r2pmml(bst, "XGBoostModel2.pmml", 
       input_feature_names = colnames(dev_samp)[1:2], 
       response_name = "am", 
       response_levels = c("0", "1"))

额外排查点:

如果还是报错,检查你的Java环境:在R中运行system("java -version"),确保Java版本是1.8(即JDK 8)及以上。r2pmml依赖JPMML工具链,旧版本Java可能会导致兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:47:40