如何在R中的二进制h2o GBM中为每个类获取不同的变量重要性?
classification
machine-learning
r
8
0

我正在尝试使用带有h2o的GBM来解决分类问题,以代替逻辑回归(GLM)。数据中的非线性和相互作用使我认为GBM更合适。

我已经运行了基准GBM(请参见下文),并将AUC与Logistic回归的AUC进行了比较。 GBM的性能要好得多。

在经典的线性逻辑回归中,人们将能够看到每个预测变量(x)对结果变量(y)的方向和影响。

现在,我想以相同的方式评估GBM估算的可变重要性。

如何获得两个(两个)类别中每个类别的变量重要性?

我知道变量的重要性与逻辑回归中的估计系数不同,但这将帮助我了解哪个预测变量会影响哪个类别。

其他人也提出了类似的问题 ,但提供的答案不适用于H2O对象。

任何帮助深表感谢。

example.gbm <- h2o.gbm(
  x = c("list of predictors"), 
  y = "binary response variable", 
  training_frame = data, 
  max_runtime_secs = 1800, 
  nfolds=5,
  stopping_metric = "AUC")
参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

AFAIS,机器学习方法越强大,解释其背后发生的事情就越复杂。

GBM方法的优点(如您已经提到的)也给理解模型带来了困难。当GBM模型使用不同的值范围时,尤其是数值变量,某些值可能会产生积极影响,而另一些值会产生负面影响。

对于GLM ,如果未指定任何交互,则数字变量将是单调的,因此您可以检查其正面或负面影响。

现在总的观点很困难,有什么方法可以分析模型?我们可以从两种方法开始:

部分依赖图

h2o提供h2o.partialplot ,它给出每个变量的部分(即边际)效果,可以将其视为:

library(h2o)
h2o.init()
prostate.path <- system.file("extdata", "prostate.csv", package="h2o")
prostate.hex <- h2o.uploadFile(path = prostate.path, destination_frame = "prostate.hex")
prostate.hex[, "CAPSULE"] <- as.factor(prostate.hex[, "CAPSULE"] )
prostate.hex[, "RACE"] <- as.factor(prostate.hex[,"RACE"] )
prostate.gbm <- h2o.gbm(x = c("AGE","RACE"),
                       y = "CAPSULE",
                       training_frame = prostate.hex,
                       ntrees = 10,
                       max_depth = 5,
                       learn_rate = 0.1)
h2o.partialPlot(object = prostate.gbm, data = prostate.hex, cols = "AGE")

在此处输入图片说明

个体分析仪

LIME包[ https://github.com/thomasp85/lime]提供了检查每个观察值的变量贡献的功能。幸运的是,这个r包已经支持h2o了。

在此处输入图片说明

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号