sklearn多分类求AUC,多分类report

目录

1.多分类求AUC

2.多分类sklearn report:


注意:logits和score不同,二者关系是:score=softmax(logits)或sigmod(logits),而logits定义如下:一件事情发生的概率比上它不发生的概率,然后再做log运算

 

而下述内容中的y_score均是指score

1.多分类求AUC

一般调用sklearn的roc_auc_score方法,

roc_auc_score(y_true, y_score, *, average="macro", sample_weight=None,
                  max_fpr=None, multi_class="raise", labels=None):

但是该方法在多分类计算时,有两个要求:

1.y_score的维度需要和标签种类数一致。而在二分类问题中,可以直接取y_score的第二维,如果多分类也这样会报错。AxisError: axis -1 is out of bounds for array of dimension 0。

见例子:(10条消息) sklearn(二)计算auc:使用sklearn.metrics.roc_auc_score()计算多分类的auc_凝眸伏笔的博客-CSDN博客_sklearn 计算auchttps://blog.csdn.net/pearl8899/article/details/109830350?spm=1001.2101.3001.6650.9&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-9.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-9.pc_relevant_aa&utm_relevant_index=10

2.在满足1之后,还需要保证同一节点的的几个维度之和=1,即需要做softmax。因为y_score在几种分类可能性之和并不为1,这也会使得该函数报错。ValueError: Target scores need to be probabilities for multiclass roc_auc, i.e. they should sum up t。

总结多分类AUC代码如下:

val_auc = roc_auc_score(labels[val_idx].cpu(), th.softmax(logits_gnn.data[val_idx].cpu(),dim=1),multi_class='ovo')

2.多分类sklearn report:

使用sklearn的classification_report时注意,y_pred需要是1d array,即经过argmax()

target_names=['{}'.format(i) for i in range(num_classes)]
report = classification_report(labels[test_idx].cpu().detach().numpy(), torch.argmax(logp[test_idx],dim=1).cpu().detach().numpy(), target_names=target_names, digits=4)


版权声明:本文为yimenren原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。