我一直在玩一些SVM实现,我很想知道 - 将特征值标准化以适应一个范围的最佳方法是什么? (从0到1)
假设我有3个特征,其值的范围为:
3 - 5.
0.02 - 0.05
10-15。
如何将所有这些值转换为[0,1]范围?
如果在训练期间,我将遇到的1号特征的最高值是5,并且在我开始在更大的数据集上使用我的模型之后,我会偶然发现高达7的值?然后在转换范围内,它将超过1 ...
如何在训练期间对值进行标准化,以解释“野外值”超过训练期间“看到”模型的最高(或最低)值的可能性?如果发生这种情况,模型将如何对此作出反应以及如何使其正常工作?
答案 0 :(得分:7)
通过将矢量转换为单位矢量来规范化矢量。这将对SVM的特征的相对值进行训练,而不是幅度。归一化算法适用于具有任何值的向量。
要转换为单位向量divide each value by the length of the vector。例如,[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之间的相对值。
答案 1 :(得分:7)
除了缩放到Tim提供的单位长度方法外,standardization最常用于机器学习领域。请注意,当您的测试数据出现时,使用训练样本的平均值和标准差来进行此缩放更有意义。如果您有大量的训练数据,可以安全地假设它们服从正态分布,因此新测试数据超出范围的可能性不会那么高。有关详细信息,请参阅此post。