2016-03-28 2 views
0

Кто-нибудь знает, как выяснить, что происходит внутри модели gbm в R?Извлечение модели из GBM в R

Предположим, мы хотели видеть, как предсказать Petal.Length в радужной оболочке. Просто держать его просто я побежал:

tg=gbm(Petal.Length~.,data=iris) 

Это работает и при запуске:

summary(tg) 

Тогда вы получите:

Hit <Return> to see next plot: 
         var rel.inf 
Petal.Width Petal.Width 67.39 
Species   Species 32.61 
Sepal.Length Sepal.Length 0.00 
Sepal.Width Sepal.Width 0.00 

Это имеет смысл интуитивно. При запуске pretty.gbm.tree(tg) Вы получаете:

SplitVar SplitCodePred LeftNode RightNode MissingNode ErrorReduction Weight Prediction 
0  2 0.8000000000  1   2   3  184.6764  75 0.0001366667 
1  -1 -0.0022989091  -1  -1   -1   0.0000  22 -0.0022989091 
2  -1 0.0011476604  -1  -1   -1   0.0000  53 0.0011476604 
3  -1 0.0001366667  -1  -1   -1   0.0000  75 0.0001366667 

Так ясно GBM думает, что вы расщепляется переменной # 2 и получить обратно три отдельных регрессий. Я предполагаю, что SplitVar==2 является Petal.Width, так как порядок вы видите в str(iris) имеет смысл.

Но какие данные отсутствуют? iris не имеет недостающих данных. И как мы видим, что происходит в каждом из трех узлов, которые были созданы?

Предположим, я хотел закодировать это на C++ для производства, я не понимаю, как можно было бы знать, что кодировать, не зная, что вы должны делать что-то по-другому в зависимости от того, Petal.Width >.8.

Спасибо,

Джош

+1

Документация 'gbm.object' [в справочном руководстве] (https://cran.r-project.org/web/packages/gbm/gbm.pdf) выглядит довольно подробно. – Gregor

+0

Как вы можете использовать это, чтобы получить базовую модель? Я пробовал такие вещи, как 'attr (tg," trees ")' и просто получил 'NULL' – JoshK

+0

Я не уверен, почему вы используете' attr'. Это просто список. Используйте 'tg $ trees' и' tg $ c.splits', или 'tg [[" trees "]]' и 'tg [[" c.splits "]]'. – Gregor

ответ

0

Смотрите функцию gbm2sas в пакете mlmeta, который использует метапрограммирование для преобразования объекта R в формате SAS.

Формат SAS похож на C++, поэтому его легко читать и легко взламывать на C++.

+0

Спасибо, это прекрасно! – JoshK

+0

@ user2925417: Добро пожаловать. Возможно, вы могли бы отметить это как ответ :) – Andrew

+0

сделано, так много. – JoshK

Смежные вопросы