如何解决XG-Boost:predict...,predleaf = T-结果是什么意思?
我不确定xgboost
-> predict(...,predleaf=T)
的结果是什么。
当predleaf = TRUE时,输出为矩阵对象,其数目为 对应于树木数量的列。
但是,列中的数字代表什么?
最小示例:
library(ISLR)
library(xgboost)
auto = ISLR::Auto
auto$name<-NULL
auto$origin<-NULL
dtrain <- xgb.DMatrix(data=as.matrix(auto[,-1]),label=as.matrix(auto[,1]))
param <- list(booster = 'gbtree',objective = 'reg:squarederror',learning_rate = 0.1,set.seed = 2020)
xgb <- xgb.train(params = param,data = dtrain,nrounds = 4)
xgb_leaf <- data.frame(predict(xgb,dtrain,predleaf = T))
head(xgb_leaf)
X1 X2 X3 X4
1 6 9 11 15
2 6 11 11 15
3 6 11 11 15
4 6 11 11 15
5 6 11 11 15
6 6 11 11 13
因此,对于每棵树,每行/观测值都有一个数值。
我想这是在特定的树中行/观测所在的叶子的“数量”。这是正确的吗?
解决方法
很好的问题。我相信您的解释是正确的。我的理解是,用predleaf = T
打印的值代表与叶子相对应的节点。您可以通过使用xgb.model.dt.tree
,例如
#install.packages("ISLR")
library(ISLR)
library(xgboost)
options(max.print = 10000)
auto = ISLR::Auto
auto$name<-NULL
auto$origin<-NULL
dtrain <- xgb.DMatrix(data=as.matrix(auto[,-1]),label=as.matrix(auto[,1]))
param <- list(booster = 'gbtree',objective = 'reg:squarederror',learning_rate = 0.1)
xgb <- xgb.train(params = param,data = dtrain,nrounds = 4)
xgb_leaf <- data.frame(predict(xgb,dtrain,predleaf = T))
xgb_leaf
xgb_dt_tree <- data.frame(xgb.model.dt.tree(feature_names = NULL,model = xgb))
xgb_dt_tree
xgb_dt_tree
显示第一棵树在节点4、5、6、7和8处有叶子。xgb_leaf
中的X1列包含每个主题的其中一个值。第二棵树具有节点3、7、8、9、10、11和12,xgb_leaf
中的X2列仅包含这些值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。