对于具有如此宽范围值的LSTM模型(使用Tensorflow)进行数据标准化的最佳方法是什么?

问题描述 投票:0回答:1

我是机器学习的新手,所以仍然想将概念围绕在脑海中,如果我的问题可能不够准确,请记住这一点。

我正在使用带有LSTM层的Tensorflow JS模型构建时间序列预测(RNN)。

每隔几百毫秒(以随机间隔)对所使用的数据集执行ping操作。但是,所产生的数据可以在很宽的范围内,例如收到的大多数数据将具有值20、40、45等。然而,有时该值在最末端将达到75,000。

因此数据范围在1到75,000之间。

[当我使用标准的最小/最大方法对该数据进行归一化以产生0-1之间的值时,大多数数据请求的归一化数据将占据许多小的有效小数位。例如:“ 0.0038939328722009236”

所以我的问题是:

1)这个最小值/最大值是标准化此类数据的最佳方法吗?

2)RNN模型在这么多有效的小数位数和精度下是否能很好地工作?

3)我也应该规范输出标签吗? (其中将有1个输出)

更新

我刚刚在Google快速课程中发现了一个很好的资源,可以为ML准备数据。建议的一种技术是在极端情况下“剪切”数据。以为我会在此处添加以供参考:https://developers.google.com/machine-learning/data-prep

javascript tensorflow machine-learning normalization
1个回答
0
投票

经过更多研究之后,我认为我现在有一个不错的解决方案;

我将执行两个步骤,第一步是使用“分位数存储”(有时也称为“ binning”参考:https://developers.google.com/machine-learning/data-prep/transform/bucketing。]]

有效地,它涉及将值范围划分为较小的子集范围,并将整数值应用于每个较小的值范围。例如初始范围是1到1,000,000,可以细分为100k。因此1到100,000将是范围1,100,001到200,000将是范围2。

为了使每个存储桶范围内的样本均匀分布,由于我的数据集偏斜,我修改了子集范围,以便它们在每个“存储桶”范围内捕获大致相同的样本。例如,上面示例的第一个范围可以是1到1,000,而不是1到100,000。下一个范围范围是1,001至2,000。第三个可能是2,001至10,000,依此类推。

在我的用例中,我最终得到22个不同的存储范围。下一步是我自己的修改,因为我不想拥有22个不同的功能(如链接中所建议)。取而代之的是,我将标准的最小/最大缩放比例应用于这些存储分区范围,从而仅需要1个功能。这为我提供了0到1之间的归一化数据的最终结果,可以完美地处理偏斜的数据集。

现在我得到的最低归一化值(0除外)是0.05556。

希望这对其他人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.