【问题标题】:Why LinearSVC works so bad on this dataset?为什么 LinearSVC 在这个数据集上效果这么差?
【发布时间】:2019-09-18 12:25:39
【问题描述】:

我刚刚生成了一个数据集,从散点图中我认为这些散点是完全可分离的。但我真的不知道为什么 Linear SVC-sklearn 工作得非常糟糕。数据集散点图和SVC结果如下:

scatter plot Linear SVC result

我使用的代码是这样的

from sklearn.svm import LinearSVC    
svc = LinearSVC()    
model = svc.fit(X, y)

谁能帮我解决这个问题?我真的认为 SVM 应该有更好的结果。

数据集 csv 文件在这里: data csv file

前两列分别是x和y,第三列是数据标签。

【问题讨论】:

  • 提供数据集可以让其他人重现问题并测试潜在的解决方案。
  • 我对堆栈溢出很陌生。我只是发布了这个数据集的谷歌驱动器链接。谢谢!

标签: python scikit-learn svm


【解决方案1】:

假设您的数据居中,请将您的 fit_intercept 设置为 False。通过增加错误的成本(C=100),您可能会在减少正则化的情况下做得更好:

svc = LinearSVC(fit_intercept=False, C=100)

【讨论】:

  • 行得通!非常感谢。你能花点时间解释一下为什么我们在这里不需要 fit_intercept 吗?我看到很多例子只设置了C值。
  • 它与拦截被纳入优化的方式有关,它被添加为一个特性并与其余部分一起规范化。我总是更喜欢通过尽可能集中数据进行显式预处理,有时我不这样做时会得到令人讨厌的结果(尤其是使用 PCA)。
  • 没错,我得到的数据是经过 PCA 处理的。你的回答真的很有帮助。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 2011-06-02
  • 2021-11-17
  • 2021-10-01
  • 2013-05-20
  • 2020-02-23
  • 1970-01-01
相关资源
最近更新 更多