X XGBoost的部分依赖图

时间:2017-09-21 13:19:37

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

我在稀疏矩阵上运行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,而不是在分类变量上显示一行
  2. 为什么在这个例子中模型预测正确的值,但数值变量上的PDP是平的
  3. 我希望有人发布一些代码,演示如何在上面的示例中实现交叉验证和/或网格搜索(假设数据更大)
  4. 非常感谢

1 个答案:

答案 0 :(得分:0)

您似乎需要通过将plot设置为FALSE并创建自己的图来从局部输出数据。我建议将geom_crossbar用于分类变量。我在Github上的pdp中研究了部分函数的代码,有一个cats参数,您应该在其中命名分类变量,但是据我所见,在函数中的任何地方都没有使用它。对于交叉验证和网格搜索,请使用尖号。 This是学习方法的重要资源。