哪种方法最适合标准化/标准化没有理论最大值的特征?
例如股票价值一直在0-1000美元之间的趋势并不意味着它不能进一步上涨,那么正确的方法是什么?
我考虑过以更高的最大值训练模型(例如2000),但感觉不对,因为没有数据可用于1000-2000范围,我认为这会引入偏差
答案 0 :(得分:4)
TL; DR:使用z分数,可能记录日志,可能采取逆logit,也许根本不进行标准化。
如果您希望安全标准化,请使用单调映射,例如:
要将(0, inf)
映射到(-inf, inf)
,您可以使用y = log(x)
要将(-inf, inf)
映射到(0, 1)
,您可以使用y = 1 / (1 + exp(-x))
(反向logit)
要将(0, inf)
映射到(0, 1)
,您可以使用y = x / (1 + x)
(日志后反向logit)
如果您不关心边界,请使用线性映射:y=(x - m) / s
,其中m
是要素的平均值,s
是其标准偏差。这称为标准缩放,有时称为z-评分。
你应该问自己的问题:为什么要正常化?。你打算怎么处理你的数据?用它作为输入功能?或者将其用作预测目标?
对于输入要素,保持未归一化是正常的,除非您对模型系数(如Ridge或Lasso)进行正则化,如果所有系数都在相同的范围内,则效果最佳(也就是说,在标准缩放之后。)
对于目标功能,将其保持非标准化有时也可以。
添加模型(如线性回归或梯度增强)有时可以更好地使用对称分布。股票价值的分布(以及一般的货币价值)通常偏向右侧,因此记录日志会使它们更方便。
最后,如果您使用具有S形激活功能的神经网络预测您的特征,则具有固有的界限。在这种情况下,您可能希望目标也受限制。为实现此目的,您可以使用x / (1 + x)
作为目标:如果x
始终为正,则此值将始终介于0和1之间,就像神经网络的输出一样。