为啥 SVC、NuSVC 和 LinearSVC 会产生截然不同的结果?
Posted
技术标签:
【中文标题】为啥 SVC、NuSVC 和 LinearSVC 会产生截然不同的结果?【英文标题】:Why SVC, NuSVC and LinearSVC are producing very different results?为什么 SVC、NuSVC 和 LinearSVC 会产生截然不同的结果? 【发布时间】:2019-07-09 01:30:51 【问题描述】:我正在处理一项分类任务——根据 Twitter 用户的推文进行地理定位。
我使用 sklearn 的 SVC、NuSVC 和 LinearSVC 以及词袋模型进行了许多实验。准确度为 35%、60% 和 80%。 SVC 和 LinearSVC 的差距是一倍多,令人震惊。
我不太清楚为什么会发生这种情况。可能是因为过拟合还是欠拟合?为什么分类器之间的差异如此之大?
【问题讨论】:
【参考方案1】:一般来说,非线性内核比线性函数更适合建模更复杂的函数,但这取决于数据、选择的超参数(例如罚分和内核)以及您如何评估结果。
LinearSVC
与参数 kernel='linear' 的 SVC 类似,但根据 liblinear 而不是 libsvm 实现,因此它在选择惩罚和损失函数方面具有更大的灵活性,并且应该更好地扩展到大量样本。
来源:sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC
SVC
该实现基于 libsvm。拟合时间复杂度与样本数量成二次方,这使得很难扩展到具有超过 10000 个样本的数据集。
来源:sklearn.svm.SVC.html#sklearn.svm.SVC
首先你应该测试一个LinearSVC
模型,因为它只有几个超参数,应该会给你一个第一个结果。之后,您可以尝试训练一堆 SVC
模型并选择最好的。为此,我建议在 C
、kernel
、degree
、gamma
、coef0
和 tol
上创建一个 gridsearch。
【讨论】:
以上是关于为啥 SVC、NuSVC 和 LinearSVC 会产生截然不同的结果?的主要内容,如果未能解决你的问题,请参考以下文章
LinearSVC() 与 SVC(kernel='linear') 不同
LinearSVC 和 SVC(kernel="linear") 有啥区别?
scikit-learn 中的 SVC 和 LinearSVC 在啥参数下是等效的?