Scikit learn LinearSVC()不同于SVC(kernel=';linear';)

Scikit learn LinearSVC()不同于SVC(kernel=';linear';),scikit-learn,libsvm,Scikit Learn,Libsvm,当数据偏移(不以零为中心)时,LinearSVC()和SVC(kernel='linear')会给出完全不同的结果。(编辑:问题可能是它不处理非规范化数据。) 这是我得到的结果: (left=LinearSVC(),right=SVC(kernel='linear')) sklearn.\uuuuu版本\uuuuu=0.17。但我也在Ubuntu 14.04中进行了测试,它附带了0.15 我曾想过报告这个bug,但它似乎太明显了,不可能是一个bug。我缺少什么?阅读文档,他们使用不同的底层实现

当数据偏移(不以零为中心)时,
LinearSVC()
SVC(kernel='linear')
会给出完全不同的结果。(编辑:问题可能是它不处理非规范化数据。)

这是我得到的结果:

(left=LinearSVC(),right=SVC(kernel='linear'))

sklearn.\uuuuu版本\uuuuu
=0.17。但我也在Ubuntu 14.04中进行了测试,它附带了0.15


我曾想过报告这个bug,但它似乎太明显了,不可能是一个bug。我缺少什么?

阅读文档,他们使用不同的底层实现
LinearSVC
使用liblinear,而
SVC
使用libsvm

仔细观察系数和截距,似乎
LinearSVC
将正则化应用于截距,而
SVC
没有

通过添加截距和缩放,我能够获得两者相同的结果

LinearSVC(loss='hinge', intercept_scaling=1000)

仔细看,似乎存在变量规模的优化问题。稍后我将扩展我的回答。谢谢。因此,如果我不想规范化我的数据集,而且我没有时间逐一进行,我应该坚持使用
SVC(kernel='linear')
,对吗?
SVC
似乎不那么挑剔:-)。对于任何梯度下降优化器,使用特征缩放和平均居中通常都是一个好主意。你为什么要逃避它?它可以通过
管道
标准缩放器
在scikit learn中轻松实现。只有当你试图自己解释系数时,它才会变得烦人。只是我们使用的是来自UCI的数据,我们想将我们的方法与使用线性核的SVC进行比较。但是,我们现在要对数据进行标准化,并且可以考虑使用<代码> SVC 进行最后的运行。code>LinearSVC自然要快得多。
LinearSVC(loss='hinge', intercept_scaling=1000)