Vowpal Wabbit - 精确召回 f 测量
Posted
技术标签:
【中文标题】Vowpal Wabbit - 精确召回 f 测量【英文标题】:Vowpal Wabbit - precision recall f-measure 【发布时间】:2015-08-11 08:16:33 【问题描述】:您通常如何从 Vowpal Wabbit 中针对分类问题创建的模型获得准确率、召回率和 f-measure?
是否有任何可用的脚本或程序通常用于 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-measure?
另外,如果这是一个多标签分类问题(每个实例可以有多个目标标签,vw 也可以处理),您提出的脚本或程序是否能够处理这些问题?
【问题讨论】:
【参考方案1】:鉴于每个示例都有一对“预测值与实际值”,您可以使用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 约定,因此您可能需要在切换时来回转换两个。
【讨论】:
【参考方案2】:对于二元分类,我建议使用标签 +1(打网球)和 -1(不打网球)和 --loss_function=logistic
(尽管 --oaa 2
和标签 1 和 2 can be used 也是如此)。大众然后报告逻辑损失,这可能比准确度/精度/召回/f1(取决于应用程序)更具信息性/有用的评估措施。如果您想要 0/1 损失(即“一减精度”),请添加 --binary
。
对于精度、召回率、f1-score、auc 和其他度量,您可以使用 arielf 的答案中建议的 perf 工具。
对于标准的多类分类(每个示例一个正确的类),使用--oaa N --loss_function=logistic
,VW 将报告 0/1 损失。
对于多标签多类分类(每个示例允许更多正确标签),您可以使用--multilabel_oaa N
(或将每个原始示例转换为 N 个二分类示例)。
【讨论】:
以上是关于Vowpal Wabbit - 精确召回 f 测量的主要内容,如果未能解决你的问题,请参考以下文章