Кто-нибудь знает, как выяснить, что происходит внутри модели 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
.
Спасибо,
Джош
Документация 'gbm.object' [в справочном руководстве] (https://cran.r-project.org/web/packages/gbm/gbm.pdf) выглядит довольно подробно. – Gregor
Как вы можете использовать это, чтобы получить базовую модель? Я пробовал такие вещи, как 'attr (tg," trees ")' и просто получил 'NULL' – JoshK
Я не уверен, почему вы используете' attr'. Это просто список. Используйте 'tg $ trees' и' tg $ c.splits', или 'tg [[" trees "]]' и 'tg [[" c.splits "]]'. – Gregor