Sklearn LinearSVC库中惩罚参数与损失参数的区别
我对支持向量机(SVM)理论不是很熟悉,现在在用Python中的LinearSVC类:
http://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC
我想知道“惩罚参数”和“损失参数”有什么区别?
1 个回答
在机器学习中,损失函数用来衡量你解决问题的质量,而惩罚函数则是对你的解决方案施加一些限制。
具体来说,假设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-hinge 和 L2-hinge 损失函数。L1-hinge: V(f(X),y) = max(0,1 - y1*f(x1)) + ... + max(0,1 - yn*f(xn))
,而 L2 则类似,但使用平方项。你可以在Coursera 上的 Andrew Ng 机器学习课程找到一个很好的机器学习入门。