获得 caret::train 生成的 glm 类型模型的 pmml 表示
obtain pmml representation of glm-type model produced by caret::train
我正在尝试从 caret
中使用 method='glm'
训练的回归模型生成 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)
关于 type='rf'
的相关 question 的一个未被接受的答案表明无法使用矩阵界面。
所以我无法使用矩阵或公式语法获取 pmml(我很确定无论如何都会产生相同的 finalModel
s):
library('pmml')
pmml(some_glm$finalModel)
# Error in if (model$call[[1]] == "glm") { : argument is of length zero
# Same problem if I try:
some_glm2 <- train( Class ~ Age + ForeignWorker + Housing.Own +
Property.RealEstate + CreditHistory.Critical,
data=GermanCredit[train_rows, ], family="binomial",
method='glm',
trControl = trainControl(method='none') )
pmml(some_glm2$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
为了互操作性,我想继续使用caret
。有没有办法将 caret
中生成的 some_glm
转换回 pmml()
可以接受的格式?或者如果我想要 pmml 功能,我是否被迫使用 glm()
结构?
如果您设置 model$call[[1]]
,pmml
函数将正常工作。
所以在你的情况下你会想要:
library('pmml')
some_glm$finalModel$call[[1]] <- "glm"
pmml(some_glm$finalModel)
我正在尝试从 caret
中使用 method='glm'
训练的回归模型生成 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)
关于 type='rf'
的相关 question 的一个未被接受的答案表明无法使用矩阵界面。
所以我无法使用矩阵或公式语法获取 pmml(我很确定无论如何都会产生相同的 finalModel
s):
library('pmml')
pmml(some_glm$finalModel)
# Error in if (model$call[[1]] == "glm") { : argument is of length zero
# Same problem if I try:
some_glm2 <- train( Class ~ Age + ForeignWorker + Housing.Own +
Property.RealEstate + CreditHistory.Critical,
data=GermanCredit[train_rows, ], family="binomial",
method='glm',
trControl = trainControl(method='none') )
pmml(some_glm2$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
为了互操作性,我想继续使用caret
。有没有办法将 caret
中生成的 some_glm
转换回 pmml()
可以接受的格式?或者如果我想要 pmml 功能,我是否被迫使用 glm()
结构?
如果您设置 model$call[[1]]
,pmml
函数将正常工作。
所以在你的情况下你会想要:
library('pmml')
some_glm$finalModel$call[[1]] <- "glm"
pmml(some_glm$finalModel)