我使用joblib.dump来存储机器学习模型(21个班级)。 当我调用模型并使用保持集测试它时,我得到一个值,我不知道它是什么度量标准(精度,精度,召回等)?!! 0.952380952381
所以我计算了混淆矩阵和FP,FN,TN,TP。 我使用了此Link
我还从Github找到了一些代码。
我比较了两个结果(1和2)。两者都给出了Accuracy = 0.995464852608的相同值。但是这个结果与上面的结果不同!!!
有什么想法吗?我是否正确计算了TP,FP,TN,FN?
MY CONFUSION MATRIX
[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0]
[0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]]
我的代码
#Testing with the holdout set
print(loaded_model.score(x_oos, y_oos))
0.952380952381 <------IS IT ACCURACY?
#Calculating the Confusion matrix
cm = confusion_matrix(y_oos, y_oos_pred)
cm_normalized = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
#Calculating values according to link 2.
FP = cm.sum(axis=0) - np.diag(cm)
FN = cm.sum(axis=1) - np.diag(cm)
TP = np.diag(cm)
TN = (21 - (FP + FN + TP)) #I put 21 because I have 21 classes
# Overall accuracy
ACC = np.mean((TP+TN)/(TP+FP+FN+TN))
print(ACC)
0.995464852608 <----IT IS DIFFERENT FROM THE ABOVE ONE.
答案 0 :(得分:0)
你的例子有点令人困惑。如果你提供一些数字,它会更容易理解和回答。例如,只打印cm
会非常有用。
话虽如此。解构sklearn.metrics.confusion_matris
的方法如下(对于二进制分类):
true_neg, false_pos, false_neg, false_pos = confusion_matrix(y_oos, y_oos_pred).ravel()
对于多个班级,我认为结果更接近你所拥有的,但总和的值。像这样:
trues = np.diag(cm).sum()
falses = (cm.sum(0) - np.diag(cm)).sum()
然后你可以用以下方法计算准确度:
ACC = trues / (trues + falses)
**更新**
从您编辑的问题我现在可以看到,在您的混淆矩阵中,您有21个样本,其中20个正确分类。在这种情况下,您的准确性是:
$ \ frac {20} {21} = 0.95238 $
这是model_score
方法打印的值。所以你正在测量准确性。你只是没有正确地再现它。
n.b 对不起乳胶,但希望有一天StackOverflow会实现它。
答案 1 :(得分:0)
两者都是准确性。
第一个是整体准确度:All_True_Positives / All_classes(20/21)。
第二个是每个班级的平均准确度。所以我们将所有这些值相加并除以21。 [0.9524 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.9524 1 1 1]