如何使用 vowpal wabbit 训练 L2 正则化 L1 铰链损失 SVM?

计算科学 优化 机器学习 支持向量机
2021-12-04 11:35:32

我正在尝试使用 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
1个回答

我相信大众有一个 loss_function=hinge 的错误。我总是看到 bfgs 的第一次迭代显示导数 = 0 问题。对于 sgd,它似乎没有报告此异常,但我倾向于不相信它。推测误差是由铰链损失函数的不可微性引起的(逻辑和最小二乘都是平滑的)。