Sklearn LinearSVC库中惩罚和损失参数之间的差异

时间:2014-07-30 17:10:28

标签: python scikit-learn svm libsvm liblinear

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

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

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

1 个答案:

答案 0 :(得分:7)

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

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

通常使用L1和L2规范并直观地理解损失函数(参见 * )。 L1范数V(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是平方根。

对于惩罚函数,它用于对您的解决方案 f 施加一些约束 R(f)。 L1范数可以是R(f)=|f1| + ... + |fm|,类似地,您可以定义L2范数。这里, f1,...,fm 是模型的系数。您最初并不了解它们,这些是通过机器学习算法从您的数据中学习的值。

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

* 这不是支持向量机的工作方式,但可能会让您了解这些术语的含义。例如,在SVM中,使用L1铰链损失和L2铰链损失函数。的 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的良好介绍