【问题标题】:Is scaling of feature values in LibSVM necessary?LibSVM 中的特征值是否需要缩放?
【发布时间】:2012-08-05 08:31:02
【问题描述】:

如果我有 200 个特征,并且每个特征的值可以从 0 到无穷大,我是否应该在继续训练 LibSVM 之前将特征值缩放到 [0-1] 范围内是吗?

现在,假设我确实对值进行了缩放,并且在训练模型之后,如果我得到一个带有其值或特征的向量作为输入,我如何在分类之前对输入测试向量的这些值进行缩放?

谢谢 阿布舍克S

【问题讨论】:

  • 您是否尝试使用未缩放的数据?除了缩放数据之外,它还会给出其他结果吗?
  • 是的,我刚刚做了一个有和没有缩放的实验。我看到性能随着缩放而提高。感谢您指出。这很有用! :)

标签: machine-learning data-mining svm libsvm


【解决方案1】:

如果你有无限的特征值,你无论如何都不能使用 LIBSVM。

更实际地,缩放通常很有用,因此内核不必处理大量数字,所以我会说去做它并缩放。不过,这不是必需的。

正如 cmets 中所暗示的 Anony-Mousse,尝试在有和没有缩放的情况下运行实验,以便可以看到差异。

现在,假设我确实对值进行了缩放,并且在训练模型之后,如果我得到一个带有其值或特征的向量作为输入,我如何在分类之前对输入测试向量的这些值进行缩放?

您无需再次扩展。您已经在预训练步骤(即数据处理)中这样做了。

【讨论】:

  • 如果您投反对票,请说明原因,以便我们从中学习。
  • -1:在不理解问题的情况下回答:1)“您不需要再次缩放...”-您应该缩放从未知实例中提取的值-而不是重新缩放原因的训练数据。 2)“所以内核不必处理大量数字”???对于计算机来说,实数是大是小并不重要。当特征之间的值范围差异很大时 - 例如 F1 [0.0001-0.001] 和 F2[100000-2000000000]
【解决方案2】:

您应该存储用于训练的特征值范围。然后,当您从未知实例中提取特征值时,使用特定范围进行缩放。

使用公式(此处为范围 [-1.0 , 1.0]):

double scaled_val = -1.0 + (1.0 - -1.0) * (extracted_val - vmin)/(vmax-vmin);

libsvm 网站上提供的Guide 很好地解释了缩放:

"2.2 缩放 在应用 SVM 之前进行缩放非常重要。 Sarle 的神经网络的第 2 部分 常见问题解答 Sarle (1997) 解释了这一点的重要性,大多数考虑也适用 到支持向量机。缩放的主要优点是避免更大数字中的属性 范围在较小的数字范围内占主导地位。另一个好处是避免 计算过程中的数值困难。因为内核值通常取决于 特征向量的内积,例如线性核和多项式核, 大的属性值可能会导致数值问题。我们推荐线性 将每个属性缩放到范围 [-1; +1] 或 [0; 1]。 当然,我们必须使用相同的方法来扩展训练和测试 数据。”

【讨论】:

    猜你喜欢
    • 2021-09-10
    • 2021-08-03
    • 2016-04-03
    • 2012-02-14
    • 2020-05-31
    • 2021-12-19
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多