机器学习——归一化没有理论最大值的特征

Machine learning - normalizing features with no theoretical maximum value

对没有理论最大值的特征进行归一化/标准化的最佳方法是什么?

例如,股票价值一直在 0-1000 美元之间的趋势并不意味着它不能进一步上涨,那么正确的做法是什么?

我考虑过在更高的最大值(例如 2000)上训练模型,但感觉不对,因为没有数据可用于 1000-2000 范围,我认为这会引入偏差

TL;DR:使用 z-scores,可能采用对数,可能采用逆 logit,可能根本不归一化。

如果您希望安全地规范化,请使用单调映射,例如:

要将 (0, inf) 映射到 (-inf, inf),您可以使用 y = log(x)

要将 (-inf, inf) 映射到 (0, 1),您可以使用 y = 1 / (1 + exp(-x))(反逻辑)

要将(0, inf)映射到(0, 1),可以使用y = x / (1 + x)(对数后反logit)

如果您不关心边界,请使用线性映射:y=(x - m) / s,其中 m 是特征的平均值,s 是其标准差。这称为标准缩放,有时称为 z 评分。

您应该问自己的问题:为什么要正常化?。你打算用你的数据做什么?将其用作输入功能?还是以此为目标进行预测?

对于输入特征,不对其进行归一化是可以的,除非您对模型系数(如 Ridge 或 Lasso)进行正则化,如果所有系数都是在相同比例下(即标准缩放后)。

对于目标特征,有时不对其进行归一化也是可以的。

加法模型(如线性回归或梯度提升)有时在 对称分布 时效果更好。股票价值(以及一般的货币价值)的分布通常向右倾斜,因此取对数更方便。

最后,如果您使用具有 sigmoid 激活函数的神经网络预测您的特征,它是 固有有界的 。在这种情况下,您可能希望目标也受到限制。为此,您可以使用 x / (1 + x) 作为目标:如果 x 始终为正,则该值将始终介于 0 和 1 之间,就像神经网络的输出一样。