猿问

精度分数与指标公式不匹配

如何根据此混淆矩阵手动计算分数?

在这种情况下,精度分数应该是多少?tp / (tp + fp) 转换为 99% (102 / 103)。对?但准确率只有98.36%。如果以下分数正确,为什么精度分数不匹配?(准确率正确率为 94.73% (162/171)

http://img.mukewang.com/61530dcd00012d8403960096.jpg

我从以下地方得到了这个例子:

https://towardsdatascience.com/grid-search-for-model-tuning-3319b259367e


更新:

如果我想获得如图所示的输出,标签顺序应该是什么?

http://img1.mukewang.com/61530dd70001ff3e07960280.jpg

慕容708150
浏览 176回答 2
2回答

潇湘沐

问题是,是,TP和FP在你的困惑矩阵交换。如本二元分类示例中所述,标签解释如下:真阴性 expected=0, predicted=0真阳性 expected=1, predicted=1假阴性 expected=1, predicted=0假阳性 expected=0, predicted=1对于您的示例,这将是:##              TN       TP       FN       FPexpected =  [0]*102 + [1]*60 + [1]*8 + [0]*1predicted = [0]*102 + [1]*60 + [0]*8 + [1]*1 print ("precision " + '{:.16f}'.format(precision_score(expected, predicted)))print ("recall    " + '{:.16f}'.format(recall_score(expected, predicted)))print ("accuracy  " + '{:.16f}'.format(accuracy_score(expected, predicted)))precision 0.9836065573770492recall    0.8823529411764706accuracy  0.9473684210526315因此,这些措施符合预期。该混淆矩阵是记录在这里根据定义,混淆矩阵等于已知在组中但预测在组中的观察数量。因此,在二元分类中,真负数为 C 0,0,假负数为 C 1,0,真正数为 C 1,1,假正数为 C 0,1。这导致以下结果:results = confusion_matrix(expected, predicted)print('TN ' ,results[0][0])print('TP ' ,results[1][1])print('FN ' ,results[1][0])print('FP ' ,results[0][1])print(results)TN  102TP  60FN  8FP  1[[102   1] [  8  60]]所以测量再次是可以的,只是混淆矩阵中的位置不是通常的TP左上角的位置。补救方法很简单,只需手动交换TP和TN(results[0][0],results[1][1]) = (results[1][1],results[0][0])print(results)[[ 60   1] [  8 102]]

Smart猫小萌

从你提到的博客中,您可以看到真正的正数(正数通常表示为 1)是第四象限。我知道常见的混淆矩阵示例会将真阳性作为第一象限,但在博客中它是相反的。因此,精度分数计算将是 60/61 = 0.9836。
随时随地看视频慕课网APP

相关分类

Python
我要回答