【问题标题】:LIBLINEAR is very sensitive to C parameterLIBLINEAR 对 C 参数非常敏感
【发布时间】:2013-06-09 13:30:07
【问题描述】:

我从 LIBLINEAR 得到不同的结果,它是 scikit-learn for python 的包装器。前者对 C 参数非常敏感(在我的情况下,质量在默认设置 C=1 时非常低,并且在增加 C 时急剧增加),这与文档中的说明和 scikit-learn 包装器相反行为。这可能是什么原因?

【问题讨论】:

    标签: libsvm


    【解决方案1】:

    我不熟悉 scikit-learn 文档所说的内容,但您描述的行为是预期的。

    当您谈论“质量”时,我猜您指的是训练错误和性能错误。您可能知道,参数 C 是模型为每个错误分类“支付”的惩罚成本。从这个意义上说,人们可以认为,如果 C 越高,您会告诉算法尽可能挑剔,并根据提供的参数尽可能地调整数据,因此高 C 往往更接近于过度拟合训练放。

    那么,这是一件好事吗?好吧,这取决于,一般来说,如果您将 C 值增加太多,那么您可能会遭受过度拟合,并且在一般性能错误的情况下做得很差。但是,C 值通常会随您的数据以及 /(如果您)对其执行规范化的方式而变化。我总是不得不更改为 C 的默认值,因为它从未对我有用。有时使用 C=10,有时使用 C=100。找到此问题的一个好方法是使用交叉验证来搜索适用于您的数据集的值。

    【讨论】:

    • 我在问为什么在内部使用 LIBLINEAR 的 LIBLINEAR 和 scikit-learn 中的结果可能不同。 LIBLINEAR 文档说质量应该相当稳定,C 不应该对其产生太大影响。 scikit-learn 是不是这样,而不是 LIBLINEAR 本身。
    • @lizarisk 您能否提供说明的文档部分?我只能找到 L1 L2 正则化逻辑回归的这个提取“C:浮动,可选(默认 = 1.0)指定正则化的强度。它越小,正则化越大”(scikit-learn.org/stable/modules/generated/…)这基本上就是我说。你还可以提供一些关于你到底在做什么的细节吗?您正在使用的参数?等等……
    • 在 LIBLINEAR 论文的最后,第 L5 节:“LIBLINEAR 中的求解器对 C 不是很敏感。一旦 C 大于某个值,得到的模型具有相似的性能。对此的理论证明Keerthi 和 Lin (2003) 的定理 3 中的结果。”
    • @lizarisk 嗯,这是真的“一旦大于某个值”,但该值通常远离 C=1,并且模型对 C 的变化很敏感,直到你达到那个门槛。让我感兴趣的是,您报告了包装器和原始实现的不同结果,它们至少应该是接近的。您能告诉我们您在双方都使用什么(liblinear 和 scikit-learn)吗?有可能是因为两个模型的参数并不真正相等。
    • C=1 对于 scikit-learn 来说已经足够大了。我在 scikit-learn 和 LIBLINEAR 中使用具有默认参数的 LinearSVC,具有相似的参数。
    猜你喜欢
    • 2021-03-09
    • 2021-12-22
    • 2010-12-20
    • 2015-09-07
    • 2011-11-03
    • 2011-11-09
    • 2021-02-16
    • 2011-01-15
    • 2014-02-16
    相关资源
    最近更新 更多