Я пытаюсь создать PMML из регрессионной модели, обученной caret
с method='glm'
. Пример модели:
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'
предполагает, что это не можно сделать с помощью матричного интерфейса.
Поэтому я не могу получить 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
. Есть ли способ преобразовать some_glm
, созданный в caret
, обратно в формат, который будет принимать pmml()
? Или я вынужден использовать конструкцию glm()
, если мне нужна функциональность pmml?
pmml.glm
и структуры объектаsome_glm
эти усилия кажутся безнадежными, если только вы не сможете найти функцию, которая отображает содержимое объекта caret-glm в структуру объектаstats::glm
. - person IRTFM   schedule 29.12.2015r2pmml(some_glm, "train-rf.pmml") Error in .jnew("org/jpmml/rexp/Main") : java.lang.UnsupportedClassVersionError: org/jpmml/rexp/Main : Unsupported major.minor version 51.0
. Я использую Mac (с последней версией Java), поэтому пользователи других ОС могут захотеть попробовать. - person IRTFM   schedule 29.12.2015caret::train()
преобразует вызовы интерфейса формулы в вызовы интерфейса матрицы перед выполнением какой-либо работы (вероятно, из соображений производительности). - person user1808924   schedule 29.12.2015r2pmml
- person C8H10N4O2   schedule 30.12.2015