来自predict.gbm的multiclass.roc

时间:2014-03-20 17:35:02

标签: r roc gbm

我很难理解如何使用multiclass.roc函数(' pROC' packagage)格式化和利用predict.gbm(' gbm'包)的输出。

我使用多项gbm来预测验证数据集,其输出似乎是属于每个因子级别的每个数据点的概率。 (如果我错了,请纠正我)

preds2 <- predict.gbm(density.tc5.lr005, ProxFiltered, n.trees=best.iter, type="response")

> head(as.data.frame(preds2))
      1.2534     2.2534     3.2534      4.2534       5.2534
1 0.62977743 0.25756095 0.09044278 0.021497259 7.215793e-04
2 0.16992912 0.24545691 0.45540153 0.094520208 3.469224e-02
3 0.02633356 0.06540245 0.89897614 0.009223098 6.474949e-05

因子水平为1-5,不确定为什么是小数加法

我正在尝试使用multilass.roc来计算由Hand and Till(2001)定义的多级AUC,但我不确定如何在其所需的单个向量中提供预测值。

如果有必要的话,我可以尝试编写一个例子,虽然我认为这对某些人来说是常规的,但是作为一个新手,我错过了一些东西。

2 个答案:

答案 0 :(得分:2)

按原样传入响应变量,并使用最可能的预测变量候选者:

multiclass.roc(ProxFiltered$response_variable, apply(preds2, 1, function(row) which.max(row)))

答案 1 :(得分:0)

另一种方法是定义一个自定义评分函数 - 例如两个类的概率之间的比率,并自己进行平均:

names(preds2) <- 1:5
aucs <- combn(1:5, 2, function(X) {
    auc(roc(ProxFiltered$response_variable, preds2[[X[1]]] / preds2[[X[2]]], levels = X))
})
mean(aucs)

另一个(更好的)选择是将您的问题转换为非二元问题,即与真实类相关的最佳预测(或某些加权最佳预测)?