获取由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)