【问题标题】:R Partial Dependence Plots for XGBoostXGBoost 的 R 部分依赖图
【发布时间】:2018-03-02 20:56:18
【问题描述】:

我在稀疏矩阵上运行了 XGBoost,并试图显示一些部分依赖图。我一直在使用 PDP 包,但愿意接受建议。下面的代码是我正在尝试做的一个可重现的示例。

# load required packages
require(matrix)
require(xgboost)
require(pdp)

# dummy data
categorical <- c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B')
numerical <- c(1, 2, 3, 4, 1, 2, 3, 4)
target <- c(100, 200, 300, 400, 500, 600, 700, 800)
data <- data.frame(categorical, numerical, target)

# create sparse matrix and run xgb
data.sparse = sparse.model.matrix(target~.-1,data)
data.xgb <- xgboost(data=data.sparse, label=data$target, nrounds=100)

# attempt to create partial dependence plots
partial(data.xgb, pred.var="numerical", plot=TRUE, rug=TRUE, train=data, type="regression")
partial(data.xgb, pred.var="categorical", plot=TRUE, rug=TRUE, train=data, type="regression")
partial(data.xgb, pred.var="categoricalA", plot=TRUE, rug=TRUE, train=data.sparse, type="regression")
partial(data.xgb, pred.var="categoricalB", plot=TRUE, rug=TRUE, train=data.sparse, type="regression")

# confirm the model is making sensible predictions despite pdp looking odd
chk <- data[2,]
chk.sparse = sparse.model.matrix(target~.-1,chk)
chk.pred <- predict(data.xgb, chk.sparse)
print(chk.pred) # gives expected values e.g. 199.9992 for second row

问题

  1. 如何为分类变量显示 PDP,以便在一个图表上看到 A 和 B,而不是为分类 A 显示一条线
  2. 为什么在此示例中模型预测正确的值而数值变量的 PDP 是平坦的
  3. 我希望有人发布一些代码,演示如何在上面的示例中实现交叉验证和/或网格搜索(假设数据更大)

非常感谢

【问题讨论】:

    标签: r plot sparse-matrix cross-validation xgboost


    【解决方案1】:

    看来您必须通过将 plot 设置为 FALSE 来输出部分数据并创建自己的图。我推荐 geom_crossbar 用于分类变量。我在Github 上查看了 pdp 中部分函数的代码,并且有一个 cats 参数,您应该在其中命名分类变量,但据我所见,它在函数中的任何地方都没有使用。对于交叉验证和网格搜索,请使用插入符号。 This 是一个很好的学习资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 2019-10-04
      • 1970-01-01
      • 2023-04-04
      • 2021-08-14
      • 1970-01-01
      • 2017-12-09
      相关资源
      最近更新 更多