介绍在我最近的一个项目中,事务监控系统生成了大量误报警报(然后由调查小组手动调查这些警报)。我们被要求使用机器学习来自动关闭那些错误警报。机器学习模型的评估标准是一个度量负预测值(Negative Predicted Value),表示在模型的总负预测中,有多少个案例是正确识别的。 NPV = True Negative / (True Negative + False Negative) 我会快速显示混淆矩阵,下面是jupyter笔记本的输出。在二分类模型中,target=1是欺诈交易,target=0是非欺诈交易。 cm = confusion_matrix(y_test_actual, y_test_pred)print(cm)----- Output -----[[230, 33] [24, 74] 根据解释混淆矩阵的不同方式,你会得到90%或76%的NPV。因为: TN = cm[0][0] 或者 cm[1][1] 也就是 230 或者 74 FN = cm[1][0] 也就是 24 维基百科表示我参考了维基百科中的混淆矩阵表示法。 这张来自维基百科的图片显示,预测的标签位于水平面,而实际的标签位于垂直面。这意味着: TN = cm[1][1] ie. 76 FN = cm[1][0] ie. 24 NPV=76% Sklearn表示法Scikit-learn文档说Wikipedia和其他参考文献可能对axes使用不同的约定:https:///stable/modules/generated/sklearn.metrics.confusion_matrix.html#sklearn.metrics.confusion_matrix 他们认为维基百科和其他参考文献可能会使用不同的坐标轴惯例。 我们已经看到,如果对轴使用错误的约定,度量可能会偏的非常厉害。 如果你通读文档,会发现这个示例:
这里,他们将矩阵输出展平。在我们的例子中,这意味着: TN = cm[0][0] ie. 230 FN = cm[1][0] ie. 24 NPV = 90% 理解混淆矩阵的结构清楚地理解混淆矩阵的结构是非常重要的。尽管你可以直接使用公式计算大多数标准指标,如准确度、精确度、召回率等。许多时候,你需要计算诸如NPV、假正例率、假反例率等指标,这些指标在现成的软件包中是不可用的。 现在,如果我让你为混淆矩阵选择正确的选项,那就是混淆矩阵的输出。你会选哪一个? 你的答案是“A”是因为维基百科是这么说的,还是“C”是因为sklearn文档是这么说的? 让我们看看考虑一下这些是你的y_true 和y_pred 值。 y_true = [0, 1, 0, 1, 0, 1, 0]y_pred = [1, 1, 1, 0, 1, 0, 1] 我们可以计算如下: TP (True Positive) = 1 FP (False Positive) = 4 TN (True Negative) = 0 FN (False Negative) = 2 对于二分类的经典机器学习模型,主要是运行以下代码来获得混淆矩阵。
如果我们把它填回混淆矩阵,我们得到如下的混淆矩阵: cm = confusion_matrix(y_true, y_pred)print (cm)--- Output ---[[0,4] [2,1]] which translates to this: predicted 0 1 ----- ----- 0| 0 | 4 actual ----- ----- 1| 2 | 1 TN (True Negative) = cm[0][0] = 0 FN (False Negative) = cm[1][0] = 2 TP (True Positive) = cm[1][1] = 1 FP (False Positive) = cm[0][1] = 4 但是,如果要添加一个简单的参数“labels”。
TP (True Positive) = cm[0][0] = 1 FP (False Positive) = cm[1][0] = 4 TN (True Negative) = cm[1][1] = 0 FN (False Negative) = cm[0][1] = 2 结论:下面是sklearn的混淆矩阵的默认输出的正确表示。水平轴上的真实标签和垂直轴上的预测标签。 1.默认输出: # 1.默认输出confusion_matrix(y_true, y_pred) 2.通过添加labels参数,可以获得以下输出:
Github链接:https://github.com/samarth-agrawal-86/data_scientist_toolkit |
|
来自: taotao_2016 > 《AI》