Scikit Learn Support Vector Classifier 是硬边距和软边距吗

Posted

技术标签:

【中文标题】Scikit Learn Support Vector Classifier 是硬边距和软边距吗【英文标题】:Is Scikit Learn's Support Vector Classifier hard margin or soft margin 【发布时间】:2021-09-18 20:19:11 【问题描述】:

我想知道下面来自 scikit learn 的支持向量分类器是硬边距还是软边距?

from sklearn import svm
clf = svm.SVC()

【问题讨论】:

【参考方案1】:

虽然很晚,但我不同意提供的答案,原因如下:

硬边距分类仅在数据是线性可分的情况下才有效(并注意SVC() 的默认选项是'rbf' 内核而不是线性内核); 硬边距分类器的原始优化问题具有以下形式: 另一方面,正如您从guide 中看到的那样,scikit-learn 中考虑的主要优化问题如下:

这个公式 - 在文献中确定了软边距分类器的优化问题 - 使其也适用于非线性可分离数据集,并介绍了:

zeta_i,衡量允许实例 i​​ 违反边距的数量(从第一个公式到第二个公式传递过程中,函数边距可以小于 1); 超参数C,这是对目标函数施加的“惩罚”的一部分,允许实例的功能余量小于 1。

最终,正如您在 sklearn doc 中看到的那样,超参数 C 必须严格为正,这强化了 SVC() 确实提供软边距分类的想法。 Here 是另一个 SO 参考。

【讨论】:

【参考方案2】:

我认为默认情况下它是硬边距,但也有软边距的规定。引用文档:

但是问题通常并不总是可以与超平面完美分离,因此我们允许一些样本与其正确的边距边界有一段距离。 惩罚项 C 控制该惩罚的强度,因此,它充当逆正则化参数(参见下面的注释)。

由于C默认设置为1,所以我们可以说默认的SVM实现是硬边距(但我们可以通过改变C的值来改变它)

【讨论】:

以上是关于Scikit Learn Support Vector Classifier 是硬边距和软边距吗的主要内容,如果未能解决你的问题,请参考以下文章

使用 scikit-learn Pipeline 和 GridSearchCV 时出错

使用 GridSearchCV scikit-learn 在管道中的 KMeans

使用 scikit learn 训练逻辑回归进行多类分类

使用 scikit-learn 进行文本分类:如何从 pickle 模型中获取新文档的表示

scikit-learn 入门练习

无法安装 scikit-learn