我试图使模型适合二元分类并预测属于这些类的值的概率。
我的第一个问题是我无法解释结果。我有一套训练集,其中labels=0
和labels=1
(不是-1 and +1
)。
我运行模型:
vw train.vw -f model.vw --link=logistic
下一步:
vw test.vw -t -i model.vw -p pred.txt
然后我有一个文件pred.txt
,其中包含以下值:
0.5
0.5111
0.5002
0.5093
0.5
我不明白什么意思是0.5? pred.txt
中的所有值约为0.5。我编写了脚本并从结果中扣除了0.5。我明白这一点:
0
0.111
0.002
0.093
0
这是我想要的概率吗?
这是我的第二个问题 - 我有不平衡的目标类。我有95%的阴性(0)和5%阳性结果(1)。我怎么能规定大众造成类的不平衡,比如{class 0:0.1, class 1:0.9}
?
或者在准备数据集时应该这样做?
答案 0 :(得分:3)
对于VW中的二进制分类,标签需要转换(从0和1)到-1和+1,例如,与sed -e 's/^0/-1/'
。
除了--link=logistic
之外,如果您想将预测解释为概率,还需要使用--loss_function=logistic
。
对于不平衡的类,您需要使用importance weighting并使用您选择的某个外部评估指标(例如AUC或F1)调整保持集(或交叉验证)的重要性权重常量。
另见:
Calculating AUC when using Vowpal Wabbit
Vowpal Wabbit Logistic Regression
How to perform logistic regression using vowpal wabbit on very imbalanced dataset