2014-10-11 5 views
3

Есть ли стандартный (или доступный) способ экспорта модели gbm в R? PMML будет работать, но при II попытке использовать библиотеку PMML, возможно, неправильно, я получаю сообщение об ошибке:Как экспортировать модель gbm в R?

Например, мой код выглядит примерно так:

library("gbm") 
    library("pmml") 

    model <- gbm(
     formula, 
     data = my.data, 
     distribution = "adaboost", 
     n.trees = 450, 
     n.minobsinnode = 10, 
     interaction.depth = 4, shrinkage=0.05, verbose=TRUE) 
    export <- pmml(model) 
    # and then export to xml 

И ошибка я получаю:

Error in UseMethod("pmml") : no applicable method for 'pmml' applied to an object of class "gbm" 

Я также пробовал прохождение в наборе данных. В любом случае, я мог бы жить с другим форматом, который я могу анализировать программно (я буду забивать на JVM), но PMML был бы замечательным, если бы был способ сделать эту работу.

+1

Оба из этих двух я нашел на GitHub сбрасывали модель GBM в виде обычного текста и сделал некоторые индивидуальные синтаксический потом. https://github.com/infnty/junkyard/blob/master/R/gbm-scorer.cc https://gist.github.com/shanebutler/5456942 – greeness

+1

Вы можете сериализовать структуры данных R с помощью пакета 'RProtoBuf'. См. Ответ на свой вопрос по CV: http://stats.stackexchange.com/questions/118616/generating-pmml-export-of-a-gbm-model-in-r – user1808924

+0

Обновление: вышеупомянутый совет был хорош. Я не нашел решение из коробки, поэтому я внедрил экспорт пользовательского текста, а затем реализовал оценку на основе этого экспорта в Scala. Если смогу, я открою исходный результат и опубликую здесь. –

ответ

3

Вы можете выполнить работу, используя r2pmml package. В настоящее время он поддерживает регрессию (то есть distribution = "gaussian") и двоичную классификацию (то есть distribution = "adaboost" или distribution = "bernoulli") типов моделей.

Ниже приведен пример кода для Auto MPG dataset:

library("gbm") 
library("r2pmml") 

auto = read.csv(file = "AutoNA.csv", header = TRUE) 

auto.formula = gbm(mpg ~ ., data = auto, interaction.depth = 3, shrinkage = 0.1, n.trees = 100, response.name = "mpg") 
print(auto.formula) 

r2pmml(auto.formula, "/tmp/gbm.pmml")