你好,我正在与sklearn合作,为了更好地理解度量,我遵循了以下precision_score示例:
from sklearn.metrics import precision_score
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
print(precision_score(y_true, y_pred, average='macro'))
我得到的结果如下:
0.222222222222
我知道sklearn按照以下步骤计算结果:
- 对于标签0,精度为tp/(tp+fp)=2/(2+1)=0.66
- 对于标签1,精度为0/(0+2)=0
- 对于标签2,精度为0/(0+1)=0
,最后sklearn通过所有三个标签计算平均精度:precision = (0.66 + 0 + 0) / 3 = 0.22
如果我们取这个参数,就会得到这个结果:
precision_score(y_true, y_pred, average='macro')
另一方面,如果我们取这个参数,改变平均值="微米":
precision_score(y_true, y_pred, average='micro')
然后我们得到:
0.33
如果我们取平均值="加权":
precision_score(y_true, y_pred, average='weighted')
然后我们得到:
0.22.
我不太明白当平均参数设置为"加权"或"微观"时,sklearn是如何计算这个指标的,如果有人能给我一个明确的解释,我真的很感激。
'micro'
:
通过将标签指示符矩阵的每个元素视为标签来全局计算度量。
'macro'
:
计算每个标签的指标,并找到它们的未加权平均值。此不考虑标签不平衡。
'weighted'
:
计算每个标签的指标,并找到它们的平均值,按支持度加权(每个标签的真实实例数)。
'samples'
:
计算每个实例的度量,并找到它们的平均值。
http://scikit-learn.org/stable/modules/generated/sklearn.metrics.average_precision_score.html
对于支持措施:http://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html
基本上是班级成员。
3.3.2.12.接收器工作特性(ROC)
函数roc_curve计算接收器工作特性曲线或roc曲线。引用维基百科:
"受试者工作特性(ROC),或简称ROC曲线,是一个图形图,说明二元分类器系统在判别阈值变化时的性能。它是通过绘制阳性中的真阳性分数(TPR=真阳性率)与阴性中的假阳性分数(FPR=假阳性率)来创建的,在各种阈值设置下。TPR也被称为敏感性,FPR是一减去特异性或真阴性率。">
TN/真阴性:病例为阴性,预测为阴性。
TP/真阳性:病例为阳性,预测为阳性。
FN/假阴性:病例为阳性,但预测为阴性。
FP/假阳性:病例为阴性,但预测为阳性#基本术语
confusion = metrics.confusion_matrix(expected, predicted)
print confusion,"n"
TN, FP = confusion[0, 0], confusion[0, 1]
FN, TP = confusion[1, 0], confusion[1, 1]
print 'Specificity: ', round(TN / float(TN + FP),3)*100, "n"
print 'Sensitivity: ', round(TP / float(TP + FN),3)*100, "(Recall)"