目录
注意: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。
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版权协议,转载请附上原文出处链接和本声明。