scikit-learn 中的 SVM 选项

机器算法验证 机器学习 支持向量机 Python scikit-学习
2022-03-25 22:46:07

只是对 scikits SVM 类中的两个选项感到好奇。

有谁知道scale_Cshrinking做什么?不幸的是,文档中没有太多内容。

2个回答

我意识到这是一个非常古老的问题,但我今天遇到了同样的事情,并找到了这个文件第 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 文档中。