2015-11-27 2 views
0

Я пытаюсь создать PMML из произвольной модели леса, которую я получил с использованием R. Я использую пакет RandomForest 4.6-12 и последнюю версию PMML для R. Но каждый раз Я пытаюсь сгенерировать PMML получить ошибку. Вот код:Проблема с генерацией PMML случайного леса в R

data_train.rf <- randomForest(TARGET ~ ., data = train, ntree=100, na.action=na.omit, importance=TRUE) 

pmml_file = pmml(data_train.rf) 
[1] "Now converting tree 1 to PMML" 
Error in append.XMLNode(rfNode, splitNode) : object 'splitNode' not found 

Мне не удалось найти причину проблемы, какие-либо мысли? Спасибо заранее,

Альваро

+0

Я голосую за то, чтобы закрыть этот вопрос не по теме, потому что он принадлежит сайту SO. – Dawny33

ответ

0

Похоже переменной splitNode не был инициализирован внутри пакета «PMML». Путь инициализации зависит от типа данных разделяемой переменной (например, числовой, логический, коэффициент). Пожалуйста, смотрите исходный код файла /R/pmml.randomForest.R внутри пакета «pmml».

Итак, каковы столбцы в вашем объекте data.frame train?

В качестве альтернативы вы можете попробовать r2pmml package, так как это намного лучше при обращении с типом модели randomForest.

0

Код pmml предполагает, что тип данных переменных является числовым, простым логическим или множителем. Это не будет работать, если данные, которые вы используете, - это другой тип; Например, DateTime. Это поможет, если ваша проблема будет воспроизводимой; в идеале вы бы предоставили набор данных, который вы использовали. Если нет, то, по крайней мере, образец его или описание его ... может быть, подытожим его. Вы также должны рассмотреть возможность отправки по электронной почте сторонних разработчиков пакетов.

+0

Привет, я проверил все переменные, и все они либо числовые, либо множители, либо двоичные, поэтому это не проблема. – ARB

0

Возможно, я нашел источник этой проблемы. В моем наборе данных у меня около 500000 событий и 30 переменных, 10 из этих переменных являются факторами, а некоторые из них имеют слабо заселенные уровни, в некоторых случаях имеющие всего одно событие.

Я построил несколько моделей Random Forest, каждый раз включая и дополнительную переменную для модели. Я начал добавлять к модели числовые переменные без проблемы для создания PMML, то же самое произошло для категориальных переменных со всеми уровнями, в значительной степени населенными, когда я пытался включить категориальные переменные с уровнями слабо заселенными. Я получил ошибку:

Error in append.XMLNode(rfNode, splitNode) : object 'splitNode' not found 

Я предполагаю, что возникновение проблемы заключается в том, что в некоторых ситуациях при построении дерева, где уровни слабо заполнены, нет разделения, поскольку существует только один случай, и хотя пакет randomForest знает, как обращаться с этими случаями, pmml упаковка нет.

0

Мои тесты показывают, что эта проблема возникает, когда количество уровней категориальной переменной выходит за пределы максимального числа, допускаемого функцией randomForest. Разделение, определенное в подсети леса, больше не является положительным целым числом, которое требуется по определению разделения для категориальных объектов. Уменьшение количества уровней устранило проблему.