7

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

假设我有 3 个特征,其值范围为:

  1. 3 - 5。

  2. 0.02 - 0.05

  3. 10-15。

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

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

如何在训练期间对值进行归一化,以考虑“野外值”超过模型在训练期间“看到”的最高(或最低)值的可能性?模型将如何对此做出反应,以及当这种情况发生时我如何使其正常工作?

4

2 回答 2

8

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

于 2013-12-11T00:50:46.920 回答
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 之间的相对值。

于 2013-12-10T22:48:04.113 回答