SVM 中的成本参数 C 是什么意思?我的意思是,如果 C 很大,是否意味着“我不能容忍错误的分类”?
在实验中找到最佳参数时,如何确定范围和步长?
顺便问一下,决定哪个参数更好的标准是什么?交叉验证的错误数量或我们从 SVM 获得的支持向量的数量?
SVM 中的成本参数 C 是什么意思?我的意思是,如果 C 很大,是否意味着“我不能容忍错误的分类”?
在实验中找到最佳参数时,如何确定范围和步长?
顺便问一下,决定哪个参数更好的标准是什么?交叉验证的错误数量或我们从 SVM 获得的支持向量的数量?
什么是C?
SVM 训练解决的优化问题有两个术语:
C 只是这些对术语的重要性之间的平衡。如果 C 高,则对 (2) 给予很大的权重,如果 C 较低,则对 (1) 给予很大的权重。
如果我只是想要准确的结果,为什么不把 C 设置得很高呢?
术语 (1) 防止过度拟合(非常擅长对训练数据进行分类,但对未见过的测试数据进行分类非常糟糕)
好的,我只想要准确的结果,为什么我不把 C 设置得很低呢?
术语 (2) 确保训练优化关注训练数据,您不仅需要“简单”(在 L2 意义上)的权重,还需要正确分类训练数据的简单权重。
概括:
训练 SVM 是两个方面的平衡。C 是损失项相对于正则化项的相对重要性。
-C 表示您如何容忍分类错误(松弛变量)。为了找到更好的模型,我想我们必须设置一个大的阈值并进行交叉验证。
就这样吧。SVM 中的 C 参数是误差项的惩罚参数。您可以将其视为算法必须满足的正确分类程度或SVM必须满足的优化程度。
对于更大的 C 值,SVM 优化器无法对任何单点进行错误分类。是的,正如您所说,SVM 优化器的容差对于较高的 C 值很高。但对于Smaller C,SVM 优化器至少允许有一定的自由度,以满足最佳超平面!
SVC(C=1.0, kernel='rbf', degree=3, gamma='auto')
--> 低容错 RBF 内核
SVC(C=1000.0,kernel='linear',degree=3,gamma='auto')
-->高容错线性内核
参考:http ://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC