什么时候应该使用 LinearSVC 或 SVC?
When should one use LinearSVC or SVC?
根据我的研究,我发现了三个相互矛盾的结果:
谁能解释一下何时使用 LinearSVC
与 SVC(kernel="linear")
?
似乎 LinearSVC 比 SVC 稍微好一点,而且通常更挑剔。但是,如果 scikit
决定花时间实施线性分类的特定案例,为什么 LinearSVC
不会优于 SVC
?
从数学上讲,优化 SVM 是一个凸优化问题,通常具有唯一的最小值。这意味着这个数学优化问题只有一个解。
结果的差异来自几个方面:SVC
和 LinearSVC
应该优化相同的问题,但实际上所有 liblinear
估计器都会对截距进行惩罚,而 libsvm
那些没有(IIRC)。这会导致不同的数学优化问题,从而导致不同的结果。可能还存在其他细微差别,例如缩放比例和默认损失函数(编辑:确保在 LinearSVC
中设置 loss='hinge'
)。接下来,在多类分类中,liblinear
默认执行一对一,而 libsvm
默认执行一对一。
SGDClassifier(loss='hinge')
与其他两个的不同之处在于它使用随机梯度下降而不是精确梯度下降,并且可能不会收敛到相同的解决方案。然而,获得的解决方案可能会更好地泛化。
在SVC
和LinearSVC
之间,一个重要的决策标准是LinearSVC
倾向于越快收敛样本的数量。这是因为线性内核是一个特例,它在 Liblinear 中进行了优化,但在 Libsvm 中没有进行优化。
实际问题出在 scikit 方法 的问题中,他们将 SVM 称为 而不是 SVM 。 LinearSVC 实际上是最小化铰链损失的平方,而不仅仅是铰链损失,此外,它惩罚偏差的大小( 不是 SVM),更多细节请参考其他问题:
那么使用哪一个呢?它纯粹是特定问题。由于没有免费的午餐定理,所以不可能说 "this loss function is best, period"。有时平方损失会更好,有时正常铰链。
根据我的研究,我发现了三个相互矛盾的结果:
谁能解释一下何时使用 LinearSVC
与 SVC(kernel="linear")
?
似乎 LinearSVC 比 SVC 稍微好一点,而且通常更挑剔。但是,如果 scikit
决定花时间实施线性分类的特定案例,为什么 LinearSVC
不会优于 SVC
?
从数学上讲,优化 SVM 是一个凸优化问题,通常具有唯一的最小值。这意味着这个数学优化问题只有一个解。
结果的差异来自几个方面:SVC
和 LinearSVC
应该优化相同的问题,但实际上所有 liblinear
估计器都会对截距进行惩罚,而 libsvm
那些没有(IIRC)。这会导致不同的数学优化问题,从而导致不同的结果。可能还存在其他细微差别,例如缩放比例和默认损失函数(编辑:确保在 LinearSVC
中设置 loss='hinge'
)。接下来,在多类分类中,liblinear
默认执行一对一,而 libsvm
默认执行一对一。
SGDClassifier(loss='hinge')
与其他两个的不同之处在于它使用随机梯度下降而不是精确梯度下降,并且可能不会收敛到相同的解决方案。然而,获得的解决方案可能会更好地泛化。
在SVC
和LinearSVC
之间,一个重要的决策标准是LinearSVC
倾向于越快收敛样本的数量。这是因为线性内核是一个特例,它在 Liblinear 中进行了优化,但在 Libsvm 中没有进行优化。
实际问题出在 scikit 方法 的问题中,他们将 SVM 称为 而不是 SVM 。 LinearSVC 实际上是最小化铰链损失的平方,而不仅仅是铰链损失,此外,它惩罚偏差的大小( 不是 SVM),更多细节请参考其他问题:
那么使用哪一个呢?它纯粹是特定问题。由于没有免费的午餐定理,所以不可能说 "this loss function is best, period"。有时平方损失会更好,有时正常铰链。