我正在使用Brain在包含正值和负值的特征集上训练神经网络。但是 Brain 需要介于 0 和 1 之间的输入值。标准化数据的最佳方法是什么?
如何将有符号整数数组缩放到 0 到 1 的范围?
数据挖掘
机器学习
神经网络
特征缩放
正常化
javascript
2021-09-21 01:29:23
4个回答
这称为基于单位的归一化。如果你有一个向量,你可以获得它的标准化版本,比如 , 通过做:
在数组中找到最大的正数和最小(最负)的数。将最小(最大负)数的绝对值添加到数组中的每个值。将每个结果除以最大数和最小数之差。
在此之前,您可能需要检查异常值。假设 99% 的数据位于 (-5, 5) 范围内,但一个小家伙取值 25.0。您的归一化数组将聚集在 (0, 0.3) 附近,这会导致神经网络学习出现问题。
假设您有一个向量/值数组v = [1, -2, 3]
minV = Math.min.apply(Math, v);;
for(var i=0; i<v.length; i++) {v[i] -= minV;}
maxV = Math.max.apply(Math, v);;
for(var i=0; i<v.length; i++) {v[i] /= ( maxV - minV );}
最后的输出将是v = [0.6, 0, 1]
. 解释:
推动整个值范围从 0 开始,这样我们就没有负数
将值除以范围的(最大值 - 最小值),使得最大值为 1