获取由caret::train生成的glm类型模型的pmml表示

获取由caret::train生成的glm类型模型的pmml表示,r,r-caret,pmml,R,R Caret,Pmml,我正试图从使用method='glm'在caret中训练的回归模型中生成PMML。示例模型: library('caret') data('GermanCredit') set.seed(123) train_rows <- createDataPartition(GermanCredit$Class, p=0.6, list=FALSE) train_x <- GermanCredit[train_rows, c('Age','ForeignWorker','Housing

我正试图从使用
method='glm'
caret
中训练的回归模型中生成PMML。示例模型:

library('caret')

data('GermanCredit')

set.seed(123)

train_rows <- createDataPartition(GermanCredit$Class, p=0.6, list=FALSE)

train_x <- GermanCredit[train_rows, c('Age','ForeignWorker','Housing.Own',
                                      'Property.RealEstate','CreditHistory.Critical') ]
train_y <- as.integer( GermanCredit[train_rows, 'Class'] == 'Good' )

some_glm <- train( train_x, train_y, method='glm', family='binomial', 
                   trControl = trainControl(method='none') )

summary(some_glm$finalModel)
它使用公式界面在基本glm中工作:

some_glm_base <- glm(Class ~ Age + ForeignWorker + Housing.Own + 
                     Property.RealEstate + CreditHistory.Critical, 
                     data=GermanCredit[train_rows, ], family="binomial")
pmml(some_glm_base) # works

some_glm_base如果设置
model$call[[1]]
pmml
功能将正常工作

因此,在您的情况下,您希望:

library('pmml')

some_glm$finalModel$call[[1]] <- "glm"
pmml(some_glm$finalModel)
library('pmml'))

一些_glm$finalModel$call[[1]]您是否阅读了警告消息?警告消息:在train.default(train_x,train_y,method=“glm”,family=“binomial”):您正在尝试进行回归,并且您的结果只有两个可能的值。如果您正在尝试进行分类,请使用2级因子作为结果列在查看了
pmml.glm
代码和
some_glm
对象的结构之后,这项工作似乎毫无希望,除非您能够找到一个函数,将插入符号glm对象的内容映射到
stats::glm
object@42-我看到了警告,但我没有做分类,只是在二进制o上进行回归utcome。(这几乎是一样的,但我只想要目标类的概率,而不是类预测。)有一个r2pmml包。我从GitHub的源代码安装了版本0.4.3和所需的依赖项(但它没有帮助页面)。我在尝试转换时出错:
r2pmml(有些“train rf.pmml”).jnew(“org/jpmml/rexp/Main”)中出现错误:java.lang.UnsupportedClassVersionError:org/jpmml/rexp/Main:Unsupported major.minor version 51.0
。我在Mac电脑上(使用最新的java),所以其他操作系统的用户可能想试一试。问题是,
caret::train()
将“公式接口”调用转换为“矩阵接口”在执行任何工作之前调用(可能是出于性能原因)。我尝试了您的解决方案,但在.pmmlDataDictionary(field,weights=weights,transformed=transforms)中发现以下
错误:功能不支持字符类。支持的类:数值、逻辑、因子。
library('pmml')

some_glm$finalModel$call[[1]] <- "glm"
pmml(some_glm$finalModel)