1

でトレーニングされた回帰モデルから 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

相互運用性のため、引き続き使用したいと思いますcaretsome_glm生産されたものを受け入れられるcaret形式に変換する方法はありますか? pmml()または、glm()pmml 機能が必要な場合は、構造を使用する必要がありますか?

4

1 に答える 1

1

を設定model$call[[1]]すると、pmml機能が正常に動作します。

したがって、あなたの場合、次のことを行います。

library('pmml')

some_glm$finalModel$call[[1]] <- "glm"
pmml(some_glm$finalModel)
于 2016-04-21T22:04:29.480 に答える