我不是很熟悉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范数可以是R(f)=|f1| + ... + |fm|
,同样你可以定义L2范数。在这里, f1,……、fm为模型系数。你一开始不知道它们,这些是机器学习算法从你的数据中学习到的值。
最终,总成本函数为V(f(X),y) + lambda*R(f)
。我们的目标是找出能使代价函数最小化的f。然后这个f将被用来预测新的看不见的物体。为什么我们需要惩罚函数?事实证明,惩罚函数可以给你的解增加一些很好的性质。例如,当你有太多的特征时,L1范数通过生成稀疏解来帮助防止过拟合。
*这不是支持向量机的工作原理,但可能会让您对这些术语的含义有所了解。例如SVM中分别使用l1 -铰损失函数和l2 -铰损失函数。 L1-hinge :V(f(X),y) = max(0,1 - y1*f(x1)) + ... + max(0,1 - yn*f(xn))
和L2相似,但有平方项。您可以在Coursera上的机器学习课程中找到Andrew Ng对ML的很好的介绍