为啥 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 在这个数据集上效果这么差?的主要内容,如果未能解决你的问题,请参考以下文章
python使用matplotlib对比多个模型的在训练集上的效果并使用柱状图进行可视化:基于交叉验证的性能均值(mean)和标准差(std)进行可视化分析使用标准差信息添加误差区间条yerr