如果我有 200 个特征,并且每个特征的值可以从 0 到无穷大,我是否应该在继续训练 LibSVM 之前将特征值缩放到 [0-1] 范围内?
现在,假设我确实缩放了这些值,并且在训练模型之后,如果我得到一个带有其值或特征的向量作为输入,我如何在分类之前缩放输入测试向量的这些值?
谢谢阿布舍克 S
如果我有 200 个特征,并且每个特征的值可以从 0 到无穷大,我是否应该在继续训练 LibSVM 之前将特征值缩放到 [0-1] 范围内?
现在,假设我确实缩放了这些值,并且在训练模型之后,如果我得到一个带有其值或特征的向量作为输入,我如何在分类之前缩放输入测试向量的这些值?
谢谢阿布舍克 S
您应该存储用于训练的特征值的范围。然后,当您从未知实例中提取特征值时,使用特定范围进行缩放。
使用公式(此处为范围 [-1.0 , 1.0]):
double scaled_val = -1.0 + (1.0 - -1.0) * (extracted_val - vmin)/(vmax-vmin);
libsvm 网站上提供的指南很好地解释了缩放:
“2.2 缩放 在应用 SVM 之前缩放非常重要。Sarle 的神经网络常见问题解答 Sarle (1997) 第 2 部分解释了这一点的重要性,并且大多数考虑因素也适用于 SVM。缩放的主要优点是避免更大数值范围内的属性占主导地位数值范围较小的那些。另一个好处是避免计算过程中的数值困难。因为核值通常取决于特征向量的内积,例如线性核和多项式核,较大的属性值可能会导致数值问题。我们推荐线性将每个属性缩放到 [-1; +1] 或 [0; 1] 的范围。当然,我们必须使用相同的方法来缩放训练和测试数据。”
如果您有无限的特征值,那么无论如何您都无法使用 LIBSVM。
更实际地,缩放通常很有用,因此内核不必处理大量数字,所以我会说去做它并缩放。不过,这不是一个要求。
正如 Anony-Mousse 在评论中暗示的那样,请尝试在有和没有缩放的情况下运行实验,以便您看到差异。
现在,假设我确实缩放了这些值,并且在训练模型之后,如果我得到一个带有其值或特征的向量作为输入,我如何在分类之前缩放输入测试向量的这些值?
您无需再次扩展。您已经在预训练步骤(即数据处理)中做到了这一点。