是否需要在LibSVM中扩展特征值?

时间:2012-08-08 08:53:45

标签: machine-learning data-mining svm libsvm

如果我有200个特征,并且如果每个特征的值都在0到无穷大之间,我应该先将特征值缩放到[0-1]范围内,然后再继续训练LibSVM。它?

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

由于 Abhishek S

2 个答案:

答案 0 :(得分:3)

如果您有无限的功能值,那么无论如何都无法使用LIBSVM。

更实际的是,缩放通常很有用,因此内核不必处理大数,所以我会说它去扩展。但这不是必须的。

正如Anony-Mousse在评论中暗示的那样,尝试使用和不使用缩放运行实验,因此可以看到差异。

  

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

您无需再次缩放。您已经在预训练步骤(即数据处理)中完成了这项工作。

答案 1 :(得分: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)解释了这一点的重要性,大多数考虑因素也适用 到SVM。缩放的主要优点是避免使用更大数字的属性 范围主导较小数值范围。另一个优点是避免 计算过程中的数字困难。因为内核值通常依赖于 特征向量的内积,例如线性内核和多项式内核, 大的属性值可能会导致数值问题。我们建议线性 将每个属性缩放到范围[-1; +1]或[0; 1]。 当然,我们必须使用相同的方法来扩展训练和测试 数据“。