使用 joblib 存储模型时使用什么分数指标?
What score metric is used when using joblib to store a model?
我已经使用joblib.dump存储了一个机器学习模型(21类)。
当我调用模型并使用保留集对其进行测试时,我得到一个值,我不知道它是什么指标(准确度、精确度、召回率等)?!!
0.952380952381
所以我计算了混淆矩阵和FP、FN、TN、TP。
我使用了这个
中的信息
我还从 Github 中找到了一些代码。
我比较了两个结果(1 和 2)。两者都给出相同的精度值 = 0.995464852608。但是这个结果和上面的不一样!!!
有什么想法吗?我是否正确计算了 TP、FP、TN、FN?
我的混淆矩阵
[[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.
你的例子有点令人困惑。如果您提供一些数字,将更容易理解和回答。例如,只打印 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 对不起乳胶,但希望有一天 Whosebug 会实现它。
两者都是准确度。
第一个是整体准确率:All_True_Positives/All_classes (20/21).
第二个是每个 class 的平均准确度。所以我们将所有这些值相加并除以 21。
[0.9524 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.9524 1 1 1]
我已经使用joblib.dump存储了一个机器学习模型(21类)。 当我调用模型并使用保留集对其进行测试时,我得到一个值,我不知道它是什么指标(准确度、精确度、召回率等)?!! 0.952380952381
所以我计算了混淆矩阵和FP、FN、TN、TP。 我使用了这个
中的信息
我还从 Github 中找到了一些代码。
我比较了两个结果(1 和 2)。两者都给出相同的精度值 = 0.995464852608。但是这个结果和上面的不一样!!!
有什么想法吗?我是否正确计算了 TP、FP、TN、FN?
我的混淆矩阵
[[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.
你的例子有点令人困惑。如果您提供一些数字,将更容易理解和回答。例如,只打印 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 对不起乳胶,但希望有一天 Whosebug 会实现它。
两者都是准确度。
第一个是整体准确率:All_True_Positives/All_classes (20/21).
第二个是每个 class 的平均准确度。所以我们将所有这些值相加并除以 21。 [0.9524 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.9524 1 1 1]