R多类/多项分类ROC使用multiclass.roc(包'pROC')

时间:2015-01-22 13:00:46

标签: r roc multinomial proc-r-package

我很难理解multiclass.roc参数应该是什么样子。 这是我的数据的快照:

> head(testing.logist$cut.rank)
[1] 3 3 3 3 1 3
Levels: 1 2 3
> head(mnm.predict.test.probs)
              1            2          3
9  1.013755e-04 3.713862e-02 0.96276001
10 1.904435e-11 3.153587e-02 0.96846413
12 6.445101e-23 1.119782e-11 1.00000000
13 1.238355e-04 2.882145e-02 0.97105472
22 9.027254e-01 7.259787e-07 0.09727389
26 1.365667e-01 4.034372e-01 0.45999610
> 

我尝试用:

调用multiclass.roc
multiclass.roc(
        response=testing.logist$cut.rank,
        predictor=mnm.predict.test.probs,
        formula=response~predictor
        )

但我自然会收到错误:

Error in roc.default(response, predictor, levels = X, percent = percent,  : 
  Predictor must be numeric or ordered.

当它是二元分类问题时,我知道'预测变量'应该包含概率(每个观察一个)。但是,在我的情况下,我有3个类,所以我的预测器是一个行列表,每个行有3列(或3个值的子列表)对应于每个类的概率。 有谁知道我的“预测器”应该是什么样子而不是它现在的样子?

1 个答案:

答案 0 :(得分:0)

pROC包并不是真正设计用于处理这种情况,您可以获得多个预测(作为每个类的概率)。通常,您会评估您的P(class = 1)

multiclass.roc(
    response=testing.logist$cut.rank,
    predictor=mnm.predict.test.probs[,1])

然后再用P(class = 2)和P(class = 3)再做一次。或者更好,确定最可能的类:

predicted.class <- apply(mnm.predict.test.probs, 1, which.max)
multiclass.roc(
    response=testing.logist$cut.rank,
    predictor=predicted.class)

multiclass.roc视为一种有时可能有用的玩具,但最有可能无法满足您的需求。