Sklearn LinearSVC库中惩罚和损失参数的区别

Posted

技术标签:

【中文标题】Sklearn LinearSVC库中惩罚和损失参数的区别【英文标题】:difference between penalty and loss parameters in Sklearn LinearSVC library 【发布时间】:2014-09-22 10:54:04 【问题描述】:

我对 SVM 理论不是很熟悉,我在 python 中使用了这个 LinearSVC 类:

http://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC

我想知道惩罚和损失参数有什么区别?

【问题讨论】:

只有一个谷歌查询就可以找到很多文献。 This 有许多幻灯片,展示了 SVM 中正在发生的事情。 【参考方案1】:

在机器学习中,损失函数衡量解决方案的质量,而惩罚函数对解决方案施加一些限制。

具体来说,让 X 为您的数据,而 y 为您的数据标签。然后损失函数 V(f(X),y) 衡量您的模型 f 将数据映射到标签的程度。这里,f(X) 是预测标签的向量。

L1 和 L2 范数是常用且直观理解的损失函数(参见 *)。 L1 normV(f(X),y) = |f(x1) - y1| + ... + |f(xn) - yn|,其中 f(xi) - 第 i 个对象的预测标签,yi 是实际标签。 L2 范数V(f(X),y) = sqrt(|f(x1) - y1|^2 + ... + |f(xn) - yn|^2),其中 sqrt 是平方根。

至于penalty function,它用于对你的解f施加一些约束R(f)。 L1 范数可以是R(f)=|f1| + ... + |fm|,同样您可以定义 L2 范数。这里,f1,...,fm 是模型的系数。您最初并不知道它们,这些是机器学习算法从您的数据中学习的值。

最终,总成本函数为V(f(X),y) + lambda*R(f)。目标是找到 f 可以最小化您的成本函数。然后这个 f 将用于对新的看不见的对象进行预测。为什么我们需要惩罚函数?事实证明,惩罚函数可能会为您的解决方案添加一些不错的属性。例如,当您有太多特征时,L1 范数通过生成稀疏解决方案来帮助防止过度拟合。

* 这并不是支持向量机的工作原理,但可能会让您对这些术语的含义有所了解。例如,在 SVM 中,使用了 L1-hinge 损失和 L2-hinge 损失函数。 L1 铰链V(f(X),y) = max(0,1 - y1*f(x1)) + ... + max(0,1 - yn*f(xn)),和 L2 类似,但有平方项。你可以在Machine Learning class by Andrew Ng on Coursera中找到关于 ML 的很好的介绍

【讨论】:

谢谢。这很有帮助。 L2 norm 也有助于防止过拟合;但它会产生更小的绝对值而不是实际的零值。 您对损失函数的描述不正确。 SVM 中的损失是 hinge loss (l1): V(f(x), y) = max(0, 1 - f(x)*y);或前者的平方 (l2),它对错误预测的惩罚要强得多。

以上是关于Sklearn LinearSVC库中惩罚和损失参数的区别的主要内容,如果未能解决你的问题,请参考以下文章

当我将惩罚更改为 L1 时,为啥我的 linearSVC 会失败?

惩罚一类svm sklearn的错误?

sklearn:LinearSVC 和 OneSVM 的 AUC 分数

sklearn:评估 LinearSVC AUC

sklearn help之岭回归 ridge regression

class_weight 在 linearSVC 和 LogisticRegression 的损失函数中的作用