您通常如何从在 Vowpal Wabbit 中创建的分类问题模型中获得精度、召回率和 f 度量?
是否有任何可用的脚本或程序通常用于 vw 的输出?
使用 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 度量?此外,如果这是一个多标签分类问题(每个实例可以有 1 个以上的目标标签,vw 也可以处理),您建议的脚本或程序是否能够处理这些?
最佳答案
鉴于每个示例都有一对“预测与实际”值,您可以使用 Rich Caruana's KDD perf
utility 来计算这些(以及许多其他)指标。
在多类的情况下,您应该简单地将每个正确分类的案例视为成功,而将每个类别不匹配视为正确预测的失败。
这是二进制案例的更详细的方法:
# 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} 约定进行二进制分类,而 perf
使用 {0, 1} 约定,因此在两者之间切换时可能需要来回转换。关于machine-learning - Vowpal Wabbit - 精确召回 f-measure,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30513056/