sklearn 多类 roc auc 分数
sklearn multiclass roc auc score
如何在 sklearn 中获取 multi-class classification 的 roc auc 分数?
二进制
# this works
roc_auc_score([0,1,1], [1,1,1])
多class
# this fails
from sklearn.metrics import roc_auc_score
ytest = [0,1,2,3,2,2,1,0,1]
ypreds = [1,2,1,3,2,2,0,1,1]
roc_auc_score(ytest, ypreds,average='macro',multi_class='ovo')
# AxisError: axis 1 is out of bounds for array of dimension 1
看了官方documentation,还是没能解决
roc_auc_score 在多标签情况下需要具有形状 (n_samples, n_classes) 的二进制标签指示符,这是回到 one-vs-all 时尚的方式。
要轻松做到这一点,您可以使用 label_binarize (https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.label_binarize.html#sklearn.preprocessing.label_binarize)。
对于您的代码,它将是:
from sklearn.metrics import roc_auc_score
from sklearn.preprocessing import label_binarize
# You need the labels to binarize
labels = [0, 1, 2, 3]
ytest = [0,1,2,3,2,2,1,0,1]
# Binarize ytest with shape (n_samples, n_classes)
ytest = label_binarize(ytest, classes=labels)
ypreds = [1,2,1,3,2,2,0,1,1]
# Binarize ypreds with shape (n_samples, n_classes)
ypreds = label_binarize(ypreds, classes=labels)
roc_auc_score(ytest, ypreds,average='macro',multi_class='ovo')
通常,这里的 ypreds 和 yest 变成:
ytest
array([[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1],
[0, 0, 1, 0],
[0, 0, 1, 0],
[0, 1, 0, 0],
[1, 0, 0, 0],
[0, 1, 0, 0]])
ypreds
array([[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 1, 0, 0],
[0, 0, 0, 1],
[0, 0, 1, 0],
[0, 0, 1, 0],
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 1, 0, 0]])
如何在 sklearn 中获取 multi-class classification 的 roc auc 分数?
二进制
# this works
roc_auc_score([0,1,1], [1,1,1])
多class
# this fails
from sklearn.metrics import roc_auc_score
ytest = [0,1,2,3,2,2,1,0,1]
ypreds = [1,2,1,3,2,2,0,1,1]
roc_auc_score(ytest, ypreds,average='macro',multi_class='ovo')
# AxisError: axis 1 is out of bounds for array of dimension 1
看了官方documentation,还是没能解决
roc_auc_score 在多标签情况下需要具有形状 (n_samples, n_classes) 的二进制标签指示符,这是回到 one-vs-all 时尚的方式。
要轻松做到这一点,您可以使用 label_binarize (https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.label_binarize.html#sklearn.preprocessing.label_binarize)。
对于您的代码,它将是:
from sklearn.metrics import roc_auc_score
from sklearn.preprocessing import label_binarize
# You need the labels to binarize
labels = [0, 1, 2, 3]
ytest = [0,1,2,3,2,2,1,0,1]
# Binarize ytest with shape (n_samples, n_classes)
ytest = label_binarize(ytest, classes=labels)
ypreds = [1,2,1,3,2,2,0,1,1]
# Binarize ypreds with shape (n_samples, n_classes)
ypreds = label_binarize(ypreds, classes=labels)
roc_auc_score(ytest, ypreds,average='macro',multi_class='ovo')
通常,这里的 ypreds 和 yest 变成:
ytest
array([[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1],
[0, 0, 1, 0],
[0, 0, 1, 0],
[0, 1, 0, 0],
[1, 0, 0, 0],
[0, 1, 0, 0]])
ypreds
array([[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 1, 0, 0],
[0, 0, 0, 1],
[0, 0, 1, 0],
[0, 0, 1, 0],
[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 1, 0, 0]])