我正在尝试Liblinear在一些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
我做错了什么?
答案 0 :(得分:1)
我不确定你做错了什么。
来自liblinear FAQ:
问:LIBLINEAR是否与具有线性内核的LIBSVM具有相同的结果?
它们应该非常相似。但是,有时差异可能不会 小。请注意,默认情况下,LIBLINEAR不使用偏置项b。 如果观察到非常不同的结果,请尝试为LIBLINEAR设置-B 1。 这会将偏差项添加到损失函数以及 正则化项(w ^ Tw + b ^ 2)。然后,结果应该更接近。
这表明liblinear试图使偏差项尽可能小。如果它可以将其设置为零并仍然获得良好的训练集准确度那么它将会。
没有特别好的理由可以想象,使偏见正规化将提供更好的分类器,许多其他学习系统也没有进入正则化术语。然而,在具有极高维度的“真实世界”问题中,数据也很可能在不需要偏差项的情况下是可分离的,因此对其进行规范化并没有任何危害,并且可以更容易实现。