Scikit learn 为什么SVC、NuSVC和LinearSVC产生非常不同的结果?

Scikit learn 为什么SVC、NuSVC和LinearSVC产生非常不同的结果?,scikit-learn,svm,Scikit Learn,Svm,我正在做一项分类任务——根据推特用户的推特对其进行地理定位 我使用sklearn的SVC、NuSVC和LinearSVC以及bag of words模型做了很多实验。准确度分别为35%、60%和80%。SVC和LinearSVC之间的差异是令人震惊的两倍以上 我不太清楚为什么会发生这种情况。这可能是因为过度装配或不足装配?为什么分类器之间存在如此大的差异?一般来说,非线性核比线性核更适合建模更复杂的函数,但这取决于数据、选择的超参数(例如惩罚和核)以及您如何评估结果 LinearSVC 与SVC

我正在做一项分类任务——根据推特用户的推特对其进行地理定位

我使用sklearn的SVC、NuSVC和LinearSVC以及bag of words模型做了很多实验。准确度分别为35%、60%和80%。SVC和LinearSVC之间的差异是令人震惊的两倍以上


我不太清楚为什么会发生这种情况。这可能是因为过度装配或不足装配?为什么分类器之间存在如此大的差异?

一般来说,非线性核比线性核更适合建模更复杂的函数,但这取决于数据、选择的超参数(例如惩罚和核)以及您如何评估结果

LinearSVC

与SVC类似,参数为kernel='linear',但采用liblinear而不是libsvm实现,因此它在惩罚函数和损失函数的选择方面具有更大的灵活性,并且应该更好地扩展到大量样本

资料来源:

SVC

该实现基于libsvm。拟合时间复杂度与样本数成二次关系,因此很难扩展到超过10000个样本的数据集

资料来源:


首先,您应该测试一个
LinearSVC
模型,因为它只有几个超参数,应该会给出第一个结果。之后,您可以尝试训练一组
SVC
模型,并选择最好的。为此,我建议制作一个超过
C
内核
伽马
coef0
tol
,一般来说,非线性内核比线性函数更适合建模更复杂的函数,但它取决于数据、所选的超参数(例如惩罚和内核)以及你如何评估你的结果

LinearSVC

与SVC类似,参数为kernel='linear',但采用liblinear而不是libsvm实现,因此它在惩罚函数和损失函数的选择方面具有更大的灵活性,并且应该更好地扩展到大量样本

资料来源:

SVC

该实现基于libsvm。拟合时间复杂度与样本数成二次关系,因此很难扩展到超过10000个样本的数据集

资料来源:

首先,您应该测试一个
LinearSVC
模型,因为它只有几个超参数,应该会给出第一个结果。之后,您可以尝试训练一组
SVC
模型,并选择最好的。为此,我建议使用
C
kernel
degree
gamma
coef0
tol