python - LinearSVC中 `penalty`和 `loss`的含义

标签 python scikit-learn svm liblinear

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

熟悉 SVM 理论,我正在 Python 中试验 LinearSVC 类。然而,documentation关于 penalty 的含义不是很清楚和 loss参数。我侦察到 loss指的是对违反margin的点的惩罚(通常在目标函数中用希腊字母xizeta表示),而penalty是确定类边界的向量的范数,通常用 w 表示。谁能证实或否认这一点?

如果我猜对了,那么penalty = 'l1'将导致向量 wL1 范数最小化,就像在 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-regularizedL2-loss)。 LIBLINEAR 论文对第 2 章中所谓的 loss 给出了更一般的表述,然后它还进一步阐述了附录(A2)中所谓的 penalty +A4).

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

  • > , hingeL1-loss
  • > squared_hingeL2-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/

相关文章:

python - Mechanize 提交表单错误: Insufficient items with name '10427'

python - 通过 RandomizedLogisticRegression 查找选定的特征

python - 如何使用 Scikit Learn dictvectorizer 从 Python 中的密集数据帧中获取编码数据帧?

python - 如何为多类 svm 设置数据帧格式

python - 这个简单的 Python 列表的语法有什么问题?

Python3 - CSV 编写器按日期排序

python - 获取 map 返回所有 T/F 值以进行列表匹配

python - AffinityPropagation 聚类的输入格式

matlab - 将预计算的 chi2 内核与 libsvm (matlab) 一起使用时的错误结果

python - 使用 Scikit Learn SVM 为文本分类准备数据