我对SVM理论不太熟悉,我在python中使用这个LinearSVC类:
http://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC
我想知道惩罚和损失参数之间的区别是什么?
在机器学习中,损失函数测量解决方案的质量,而惩罚函数对您的解决方案施加一些限制.
具体来说,让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规范可以是,同样可以定义L2规范.这里,f1,...,fm是模型的系数.您最初不了解它们,这些是通过机器学习算法从您的数据中学习的值.R(f)=|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相似但是平方项.您可以在Coursera上找到Andrew Ng在机器学习课程中对ML的一个很好的介绍