反关闭序言:我已阅读问题“difference between penalty and loss parameters in Sklearn LinearSVC library”,但我发现那里的答案不够具体。因此,我正在重新表述问题:
我熟悉 SVM 理论,我正在 Python 中试验 LinearSVC 类。然而,documentation关于 penalty
的含义不是很清楚和 loss
参数。我侦察到 loss
指的是对违反margin的点的惩罚(通常在目标函数中用希腊字母xi或zeta表示),而penalty
是确定类边界的向量的范数,通常用 w 表示。谁能证实或否认这一点?
如果我猜对了,那么penalty = 'l1'
将导致向量 w 的 L1 范数最小化,就像在 LASSO 回归中一样。这与 SVM 的最大间隔思想有何关系?谁能指出我关于这个问题的出版物?在original paper describing LIBLINEAR我找不到任何关于 L1 惩罚的引用。
另外,如果我的猜测是正确的,为什么LinearSVC不支持penalty='l2'
的组合?和 loss='hinge'
(SVC 中的标准组合)当 dual=False
时?尝试时,我得到了
ValueError: Unsupported set of arguments
最佳答案
虽然很晚了,但我会尽力给出我的答案。根据doc ,这里是 LinearSVC
考虑的原始优化问题:
,phi
是单位矩阵,假定 LinearSVC
仅解决线性问题。
实际上,这只是 LinearSVC
承认的可能问题之一(它是 L2-regularized, L1-loss 在LIBLINEAR 论文的条款)而不是默认条款(即 L2-regularized,L2-loss)。
LIBLINEAR 论文对第 2 章中所谓的 loss
给出了更一般的表述,然后它还进一步阐述了附录(A2)中所谓的 penalty
+A4).
基本上,它声明 LIBLINEAR 旨在解决以下具有不同loss
函数的无约束优化 pb xi(w;x,y)
(它们是 铰链
和 squared_hinge
); LIBLINEAR 中模型的默认设置不考虑偏置项,这就是为什么从现在开始您将看不到对 b
的任何引用(关于此有很多帖子)。
- > ,
hinge
或 L1-loss - > 、
squared_hinge
或 L2-loss。
关于penalty
,基本上这代表了所用向量w
的范数。附录详细阐述了不同的问题:
- L2 正则化,L1 损失(
penalty='l2'
,loss='hinge'
): - L2 正则化,L2 损失(
penalty='l2'
,loss='squared_hinge'
),LinearSVC
中的默认值: - L1 正则化,L2 损失(
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
范数的最小化如何与最大边距的概念相关。
关于python - LinearSVC中 `penalty`和 `loss`的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68819288/