我在试着计算以下公式:
auc = roc_auc_score(gt, pr, multi_class="ovr")
其中gt
是包含0到41之间的值的大小为3470208的列表(全部为整数),并且pr
是大小为3470208(相同大小)的列表,其中每个列表的大小为42,并且在每个位置中的概率总和为1。
但是,我得到了以下错误:
ValueError: Number of classes in y_true not equal to the number of columns in 'y_score'
我有点迷惑,因为y_true (gt)
中的类数是42,因为我有一个从0到41的整数列表。
既然pr
是一个大小为42的列表的列表,那么我认为它应该可以工作。
帮助将不胜感激!
3条答案
按热度按时间p1iqtdky1#
确保所有介于0和41之间(包括0和41)的整数都存在于gt中。
举个简单的例子:
因为integer/label 2在gt1中不存在,所以它抛出一个错误。换句话说,* gt1中的类数 *(3)是 * 不等于pr1中的列数 *(4)。
whlutmcx2#
roc_auc_score方法有一个labels参数,可用于指定缺失的标签。
不幸的是,这只适用于multi_class=“ovo”模式,而不适用于“ovr”模式。
在本例中,y_true中只存在一个类,因为roc_auc_score函数迭代每个类(标识为类A),并将它们与其他类(标识为类B)进行比较。对于类2,y_true数组等于[B,B,B],因此只有一个类,无法计算ROC AUC分数。
5rgfhyps3#
获取唯一值
唯一值= np.唯一(预测)
获取列表形式的唯一值
类标签=唯一值列表()
查找ROC AUC分数
rocAucScore=roc_auc_score(真实值,预测概率,多类别=卵,标签=类别标签)