我正在尝试使用 vowpal-wabbit 训练 L2 正则化 L1 铰链损失 SVM。
我使用以下命令对splice数据集进行训练和测试:
time vw --passes 10 -c --loss_function hinge -f model.txt -d train_vw.txt --l1 0 --l2 1
time vw -t -i model.txt -p out.txt -d test_vw.txt
perf -ACC -files test.labels out.txt -t 0.5
结果是48%的准确率,太可怕了!在拼接上,其他 SVM,例如 liblinear,提供大约 84% 的准确度。
如果我移除该--l2 1位,或将其减少到--l2 0.001大约,那么我的准确度还可以,至少 81% 左右。我期望 --l2 参数等效于C其他 SVM 的参数。我错了吗?--l2如果是,该参数与标准CSVM 参数之间的关系是什么?
使用的代码的完整详细信息:
cat train_svmlight.txt | sed -e "s/^+1 /1 |f /" | sed -e "s/^-1 /-1 |f /" > train_vw.txt
cat test_svmlight.txt | sed -e "s/^+1 /1 |f /" | sed -e "s/^-1 /-1 |f /" > test_vw.txt
time vw --passes 10 -c --loss_function hinge -f model.txt -d train_vw.txt --l1 0 --l2 1
time vw -t -i model.txt -p out.txt -d test_vw.txt
cat test_vw.txt | cut -d ' ' -f 1 | sed -e 's/^-1/0/' > test.labels
perf -ACC -files test.labels out.txt -t 0.5