Vowpal Wabbit – 精确度、召回率和F-measure

您通常如何从Vowpal Wabbit创建的分类模型中获取精确度、召回率和F-measure?

是否有常用的脚本或程序可以用于处理vw的输出以获取这些指标?

为了举一个简单的例子,我们使用playtennis.txt中的以下数据:

2 | sunny 85 85 false2 | sunny 80 90 true1 | overcast 83 78 false1 | rain 70 96 false1 | rain 68 80 false2 | rain 65 70 true1 | overcast 64 65 true2 | sunny 72 95 false1 | sunny 69 70 false1 | rain 75 80 false1 | sunny 75 70 true1 | overcast 72 90 true1 | overcast 81 75 false2 | rain 71 80 true

我用以下命令创建模型:

vw playtennis.txt --oaa 2 -f playtennis.model --loss_function logistic

然后,我用以下命令在训练数据上获取训练模型的预测和原始预测:

vw -t -i playtennis.model playtennis.txt -p playtennis.predict -r playtennis.rawp

从这里开始,鉴于有训练数据playtennis.txt和在训练数据上的预测playtennis.predict,您通常使用哪些脚本或程序来获取精确度、召回率和F-measure?

另外,如果这是一个多标签分类问题(每个实例可以有多个目标标签,vw也可以处理这种情况),您提出的脚本或程序是否能够处理这些情况?


回答:

鉴于您对每个示例都有一对“预测与实际”值,您可以使用Rich Caruana的KDD perf 工具来计算这些(以及许多其他)指标。

在多类别的情况下,您应该简单地将每一个正确分类的案例视为成功,而将每一个类别不匹配视为预测错误的失败。

以下是二元情况下的更详细的操作步骤:

# 将标签提取到*.actual(正确)文件中$ cut -d' ' -f1 playtennis.txt > playtennis.actual# 将实际值与预测值并排粘贴(+清理尾随零)$ paste playtennis.actual playtennis.predict | sed 's/\.0*$//' > playtennis.ap# 将原始(1,2)类别转换为二元(0,1):$ perl -pe 's/1/0/g; s/2/1/g;' playtennis.ap > playtennis.ap01# 运行perf以确定精确度、召回率和F-measure:$ perf -PRE -REC -PRF -file playtennis.ap01PRE    1.00000   pred_thresh  0.500000REC    0.80000   pred_thresh  0.500000PRF    0.88889   pred_thresh  0.500000

请注意,正如Martin提到的,vw在二元分类中使用{-1, +1}的惯例,而perf使用{0, 1}的惯例,因此在两者之间切换时,您可能需要进行转换。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注