Как я могу извлечь RandomForest из R для использования в производстве?

У меня есть успешная модель randomforest, и я хочу интегрировать ее в другое программное обеспечение, я знаю, что могу использовать некоторые библиотеки (например, fastRF в Java или DecisionForest ALGLIB для других языков), но как я могу использовать «модель», обученную в R? Я должен переобучить его на новый язык?

Другой вид - как-то извлечь его, но я не знаю, как это сделать...

Любая помощь будет оценена

заранее спасибо


person nanounanue    schedule 17.03.2012    source источник
comment
Запоздалый ответ, но эта ветка электронной почты может оказаться полезной тебе.   -  person nalzok    schedule 12.10.2019


Ответы (2)


Взгляните на пакет pmml, который генерирует PMML для различных моделей, включая RandomForest. Основной пример:

#?randomForest
library(randomForest)
library(pmml)
set.seed(131)
ozone.rf <- randomForest(Ozone ~ ., data=airquality, mtry=3,importance=TRUE, na.action=na.omit)
print(ozone.rf)
ozone.rf.pmml <- pmml(ozone.rf)
person Paolo    schedule 19.03.2012
comment
Спасибо за ваш ответ @Paolo, но после того, как у меня есть файл PMML, как я могу его выполнить? - person nanounanue; 20.03.2012
comment
Если ответ был для вас полезен, буду признателен за голосование! ;-) Что касается вашего вопроса, вам нужно проверить, можете ли вы импортировать модель pmml на языке, который вы будете использовать для развертывания. - person Paolo; 20.03.2012
comment
Ты прав! пост был полезен, позвольте мне проголосовать. Не могли бы вы порекомендовать мне какой-нибудь язык или программное обеспечение, поддерживающее PMML? В очередной раз благодарим за помощь. - person nanounanue; 20.03.2012
comment
Еще раз привет @Paolo, я попытался найти решение (PMML), и все работает нормально, используя ваш пример (набор данных Ozone) или набор данных радужной оболочки. Но я читал документацию по библиотеке pmml в Cran (cran. r-project.org/web/packages/pmml/index.html), и там ничего не сказано о поддержке randomForest, только о деревьях решений (которые являются частью --дерева леса-- the randomFoest, так что можно с уверенностью предположить, что библиотека pmml делает свою часть работы? Спасибо (еще раз) за ваше время - person nanounanue; 23.03.2012
comment
Я предлагаю связаться с авторами (вы можете увидеть контакт, используя packageDescription(pmml) ) и узнать подробности. Другой вариант — опросить людей на stats.stackexchange.com . Удачи! - person Paolo; 23.03.2012
comment
Я только что прочитал статью PMML: Открытый стандарт для совместного использования моделей (The R Journal Vol. 1/1, май 2009 г.), и они поддерживают randomForest, как вы и сказали... Спасибо за все! - person nanounanue; 23.03.2012
comment
Пожалуйста! Если никто не предложит эффективного решения, вы можете выбрать этот ответ в качестве выбранного на свой вопрос ;-) - person Paolo; 23.03.2012
comment
Я отмечу этот ответ как правильный, просто позвольте мне попробовать библиотеку jpmml для выполнения pmml, если это сработает, это будет ответ :) - person nanounanue; 24.03.2012

Объект randomForest содержит всю информацию о каждом дереве в объекте. Каждое дерево не особенно сложно, хотя и может запутать.

iris.rf <- randomForest(Species ~ ., data=iris, importance=TRUE,
                         proximity=TRUE)
> names(iris.rf$forest)
  [1] "ndbigtree"  "nodestatus" "bestvar"    "treemap"    "nodepred"  
  [6] "xbestsplit" "pid"        "cutoff"     "ncat"       "maxcat"    
  [11] "nrnodes"    "ntree"      "nclass"     "xlevels"   

Чтобы понять, как использовать лес вне R, вам придется просмотреть исходный код. Загрузите исходный пакет randomForest, распакуйте tar.gz и посмотрите в каталоге src. В rf.c вы увидите функцию classForest (и для регрессии посмотрите на regForest в regrf.c). Посмотрите на функцию R predict.randomForest, чтобы увидеть, как она вызывается. Возможно, вам придется использовать getAnywhere("predict.randomForest"), чтобы увидеть его в R.

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

person rjad    schedule 18.03.2012
comment
Спасибо за ваш ответ @rjad, так что, если я правильно понимаю, ваша рекомендация - переобучить случайный лес в новом программном обеспечении, верно? - person nanounanue; 20.03.2012
comment
Я думаю, что если это просто сделать, это будет самый простой подход. Было бы полезно, если бы вы дали некоторые подробности о том, на каком языке вы хотите работать. Но см. также предложение Паоло ниже. - person rjad; 20.03.2012
comment
Я пытаюсь реализовать это (желательно) на Java, но и на C++ тоже может работать. Спасибо еще раз :) - person nanounanue; 20.03.2012
comment
У меня была ужасная орфографическая ошибка в последнем посте (извините, английский не мой основной язык), я хотел сказать: я сделал это в ALGLIB, так что если кому-то нужен код (на самом деле очень простой) Я мог бы поделиться этим ... Еще раз спасибо - person nanounanue; 24.03.2012