您通常如何从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}的惯例,因此在两者之间切换时,您可能需要进行转换。