只是对 scikits SVM 类中的两个选项感到好奇。
有谁知道scale_C
和shrinking
做什么?不幸的是,文档中没有太多内容。
只是对 scikits SVM 类中的两个选项感到好奇。
有谁知道scale_C
和shrinking
做什么?不幸的是,文档中没有太多内容。
我意识到这是一个非常古老的问题,但我今天遇到了同样的事情,并找到了这个文件。第 7.3 节描述了在 libSVM 中实现的收缩(sklearn 的 SVM 是一个包装器),从以下有用的简介开始:
收缩技术通过暂时消除在 SMO 工作集中不太可能被选择的变量 α_i 来减小问题的规模,因为它们已经达到了它们的下限或上限(Joachims,1999)。然后 SMO 迭代继续对剩余变量进行。收缩减少了更新梯度向量所需的内核值的数量(参见算法 6.2,第 8 行)。因此提高了内核缓存的命中率。
所以基本上 libSVM 优化了拉格朗日乘数 α_i 的一个子集。由于其中许多在给定问题中通常为零,因此这通常是一种安全的启发式方法。在链接的文档中可以找到更多信息。
scale_C=True
表示 SVM 问题的 C 参数随样本数量而缩放。这是 libSVM 和 liblinear 中的默认设置,但是如果您使用大量不同数量的样本训练模型,则意味着单个 C 值不足以满足所有模型。因此,我们提倡使用scale_C=False
. 它记录在SVM 对象的参数列表中。
我必须承认,我不知道收缩启发式是什么,并且它没有正确记录在 libSVM 文档中。