机器学习——归一化没有理论最大值的特征
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 之间,就像神经网络的输出一样。
对没有理论最大值的特征进行归一化/标准化的最佳方法是什么?
例如,股票价值一直在 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 之间,就像神经网络的输出一样。