LinearSVC中“penalty”和“loss”的含义

Posted

技术标签:

【中文标题】LinearSVC中“penalty”和“loss”的含义【英文标题】:Meaning of `penalty` and `loss` in LinearSVC 【发布时间】:2021-10-19 11:26:17 【问题描述】:

反关闭序言:我已阅读问题“difference between penalty and loss parameters in Sklearn LinearSVC library”,但我发现那里的答案不够具体。因此,我正在重新提出问题:

熟悉 SVM 理论,我正在 Python 中试验 LinearSVC 类。但是,documentation 对penaltyloss 参数的含义还不是很清楚。我认为loss 是指对违反边距的点的惩罚(通常在目标函数中用希腊字母 xizeta 表示),而penalty 是确定类边界的向量范数,通常用 w 表示。任何人都可以确认或否认这一点吗?

如果我的猜测是正确的,那么penalty = 'l1' 将导致向量 wL1-范数最小化,例如套索回归。这与 SVM 的最大边际概念有何关系?谁能指出我关于这个问题的出版物?在original paper describing LIBLINEAR 中,我找不到任何对 L1 惩罚的参考。

另外,如果我的猜测是正确的,为什么当dual=False 时LinearSVC 不支持penalty='l2'loss='hinge' 的组合(SVC 中的标准组合)?尝试时,我得到了

ValueError:不支持的参数集

【问题讨论】:

【参考方案1】:

虽然很晚,但我会尽力给出答案。根据doc,这是LinearSVC 考虑的原始优化问题: ,phi 是恒等矩阵,因为LinearSVC 只解决线性问题。

实际上,这只是LinearSVC 承认的可能问题之一(它是 LIBLINEAR 论文中的 L2-regularizedL1-loss ) 而不是默认的(L2-regularized, L2-loss)。 LIBLINEAR 论文对第 2 章中称为 loss 的内容给出了更一般的表述,然后进一步详细说明了附录 (A2+A4) 中称为 penalty 的内容。

基本上,它表明 LIBLINEAR 旨在使用不同的loss 函数xi(w;x,y)(即hingesquared_hinge)解决以下无约束优化pb; LIBLINEAR 中模型的默认设置不考虑偏差项,这就是为什么从现在开始您将看不到任何对 b 的引用(关于此的 SO 上有很多帖子)。

hingeL1-losssquared_hingeL2-loss

对于penalty 而言,基本上这代表了使用的向量w 的规范。附录详细阐述了不同的问题:

L2-正则化L1-losspenalty='l2'loss='hinge'): L2-regularized, L2-loss (penalty='l2', loss='squared_hinge'), 默认在LinearSVC: L1-regularized, L2-loss (penalty='l1', loss='squared_hinge'):

相反,如文档中所述,LinearSVC 不支持 penalty='l1'loss='hinge' 的组合。据我所知,该论文没有具体说明原因,但我找到了一个可能的答案here(在 Arun Iyer 的答案中)。

最终,penalty='l2'loss='hinge'dual=False 的组合实际上不受here 中指定的支持(它只是未在 LIBLINEAR 中实现)或here;不确定是否是这种情况,但在附录 B 之后的 LIBLINEAR 论文中,它指定了已解决的优化 pb(在 L2-regularized 的情况下,L1-loss 似乎是双重的)。

对于一般 SVC pbs 的理论讨论,我发现that chapter 非常有用;它显示了w 范数的最小化与最大边距的概念之间的关系。

【讨论】:

以上是关于LinearSVC中“penalty”和“loss”的含义的主要内容,如果未能解决你的问题,请参考以下文章

使用GridSearchCV时跳过禁止参数组合

使用 GridSearchCV 时跳过禁止的参数组合

scikit中LinearSVC缩减后如何获取选中的特征

sklearn中的SGDClassifier

为 LinearSVC 计算 scikit 中每个样本 x 的概率估计 P(y|x)

随机梯度下降分类器和回归器