规范化SVM的特征值

use*_*273 7 machine-learning range normalization svm feature-selection

我一直在玩一些SVM实现,我想知道 - 将特征值标准化以适应一个范围的最佳方法是什么?(从0到1)

假设我有3个功能,其值范围为:

  1. 3 - 5.

  2. 0.02 - 0.05

  3. 10-15.

如何将所有这些值转换为[0,1]的范围?

如果在训练期间,我将遇到的特征编号1的最高值为5,并且在我开始在更大的数据集上使用我的模型之后,我会偶然发现高达7的值?然后在转换范围内,它将超过1 ......

如何在训练期间对值进行标准化,以解释"野外值"超过训练期间"看到"模型的最高(或最低)值的可能性?如果发生这种情况,模型将如何对此作出反应以及如何使其正常工作?

Tim*_*Tim 7

您可以通过将矢量转换为单位矢量来规范化矢量.这将对SVM的特征的相对值进行训练,而不是幅度.归一化算法将适用于具有任何值的向量.

要转换为单位矢量,请将每个值除以矢量的长度.例如,矢量的[4 0.02 12]长度为12.6491.然后归一化的矢量[4/12.6491 0.02/12.6491 12/12.6491]= [0.316 0.0016 0.949].

如果"在野外"我们遇到[400 2 1200]它的向量将归一化到与上面相同的单位向量.特征的大小被归一化"抵消",并且我们留下0到1之间的相对值.


len*_*310 7

除了缩放到Tim提供的单位长度方法之外,标准化最常用于机器学习领域.请注意,当您的测试数据出现时,使用训练样本的平均值和标准差来进行此缩放更有意义.如果您有大量的训练数据,可以安全地假设它们遵循正态分布,因此新测试数据超出范围的可能性不会那么高.有关详细信息,请参阅此帖子.