我正在尝试使用 Lib Linear 对某些 2D 点进行线性 SVM 分类(我使用简单的 python gui 为 2 个类添加点,然后绘制分隔类的线),但即使我使用的是偏差选项(-B 1) 对于训练,我得到的偏差非常接近于零(分隔线几乎穿过原点)。
我还尝试简单地训练 2 点集:
-1 1:10 2:30
+1 1:10 2:80
但我仍然得到一个非常小的偏差(一条穿过原点的线,而不是我认为应该是的 XY 平面中的水平线)。这是我的输出向量 w:
0.2003362041634111,
-0.03465897160331861,
0.0200336204163411
我做错了什么?
最佳答案
我不确定你做错了什么。
来自 liblinear 常见问题解答:
Q: Is LIBLINEAR gives the same result as LIBSVM with linear kernel?
They should be very similar. However, sometimes the difference may not be small. Note that LIBLINEAR does not use the bias term b by default. If you observe very different results, try to set -B 1 for LIBLINEAR. This will add the bias term to the loss function as well as the regularization term (w^Tw + b^2). Then, results should be closer.
这表明 liblinear 试图使偏差项尽可能小。如果它可以将其设置为零并且仍然获得良好的训练集准确性,那么它就会。
没有特别充分的理由认为正则化偏差将提供更好的分类器,因此许多其他学习系统不属于正则化项。然而,在具有非常高维度的“现实世界”问题中,数据也很可能是可分离的,而不需要偏差项,因此对其进行正则化不会造成任何损害,并且更容易实现。
关于machine-learning - Lib线性偏差非常接近于零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7289985/