Vowpal Wabbit - 精确召回 f 度量

Vowpal Wabbit - precision recall f-measure

您通常如何从在 Vowpal Wabbit 中创建的分类问题模型中获得精度、召回率和 f 度量?

是否有任何可用的脚本或程序通常用于大众的输出?

使用 playtennis.txt 中的以下数据制作一个最小示例:

2 | sunny 85 85 false
2 | sunny 80 90 true
1 | overcast 83 78 false
1 | rain 70 96 false
1 | rain 68 80 false
2 | rain 65 70 true
1 | overcast 64 65 true
2 | sunny 72 95 false
1 | sunny 69 70 false
1 | rain 75 80 false
1 | sunny 75 70 true
1 | overcast 72 90 true
1 | overcast 81 75 false
2 | 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 也可以处理),您建议的脚本或程序是否能够处理这些问题?

鉴于每个示例都有一对 'predicted vs actual' 值,您可以使用 Rich Caruana's KDD perf utility 来计算这些(以及许多其他)指标。

在 multi-class 的情况下,你应该简单地认为每个 正确 classified 案例是成功的,每个 class-不匹配未能正确预测。

这里有一个更详细的二进制案例的秘诀:

# get the labels into *.actual (correct) file
$ cut -d' ' -f1 playtennis.txt > playtennis.actual

# paste the actual vs predicted side-by-side (+ cleanup trailing zeros)
$ paste playtennis.actual playtennis.predict | sed 's/\.0*$//' > playtennis.ap

# convert original (1,2) classes to binary (0,1):
$ perl -pe 's/1/0/g; s/2/1/g;' playtennis.ap > playtennis.ap01

# run perf to determine precision, recall and F-measure:
$ perf -PRE -REC -PRF -file playtennis.ap01
PRE    1.00000   pred_thresh  0.500000
REC    0.80000   pred_thresh  0.500000
PRF    0.88889   pred_thresh  0.500000

请注意,正如 Martin 提到的,vw 使用 {-1, +1} 约定进行二进制 classification,而 perf 使用 {0, 1} 约定,因此在两者之间切换时,您可能需要来回翻译。

对于二进制 class化,我建议使用标签 +1(打网球)和 -1(不打网球)和 --loss_function=logistic(尽管 --oaa 2 和标签 1 和 2 can be used)。 VW 然后报告物流损失,这可能比 accuracy/precision/recall/f1 更 informative/useful 评估措施(取决于应用程序)。如果您想要 0/1 损失(即 "one minus accuracy"),请添加 --binary.

precision、recall、f1-score、auc等指标,可以使用arielf的回答中推荐的perf工具

对于标准 multi-class classification(每个示例一个正确的 class),使用 --oaa N --loss_function=logistic 并且 VW 将报告 0/1 损失。

对于多标签 multi-class classification(允许每个示例更正确的标签),您可以使用 --multilabel_oaa N(或将每个原始示例转换为 N 个二进制-class化验示例)。