为啥 LinearSVC 在这个数据集上效果这么差?

Posted

技术标签:

【中文标题】为啥 LinearSVC 在这个数据集上效果这么差?【英文标题】: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,第三列是数据标签。

【问题讨论】:

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

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

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

【讨论】:

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

以上是关于为啥 LinearSVC 在这个数据集上效果这么差?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 LinearSVC 不能做这个简单的分类?

python使用matplotlib对比多个模型的在训练集上的效果并使用柱状图进行可视化:基于交叉验证的性能均值(mean)和标准差(std)进行可视化分析使用标准差信息添加误差区间条yerr

过拟合及解决方案

机器学习中用来防止过拟合的方法有哪些?

sklearn多分类模型评测(LR, linearSVC, lightgbm)

为啥这个 Iris 数据集上的 silhouette_score 总是返回 0?