将用于训练神经网络的数据归一化为零均值和“单位”标准差以减少爆炸和消失梯度效应等是一种常见的做法。
“单位”标准在这里是什么意思?一个例子真的很有帮助。
将用于训练神经网络的数据归一化为零均值和“单位”标准差以减少爆炸和消失梯度效应等是一种常见的做法。
“单位”标准在这里是什么意思?一个例子真的很有帮助。
这意味着您正在将数据特征从其原始单位(英里、美元、经过时间...)转换为标准偏差单位。正如您所要求的,下面是一个非常简单的示例:
假设您想从两个特征来预测房价:卧室数量(整数单位)和大小(平方米单位),如下面的虚构数据:
import numpy as np
X = np.array([[1, 65],[3, 130],[2, 80],[2, 70],[1, 50]])
请注意,每个特征都有非常不同的均值和标准差
print("mean={}, std{}".format(X.mean(axis=0), X.std(axis=0))
输出:mean=[ 1.83333333, 78.33333333]), std=[ 0.68718427, 24.94438258])
注意到特征大小的均值和标准值比卧室数量大 30 倍以上,这会在某些算法计算(如神经网络、svm、knn 等)中产生失真,其中具有较大值的某些特征完全支配具有较小值的其他特征。为了解决这个问题,一种常见且非常有效的做法是将数据转换为均值为零的标准差单位,即减去均值并除以标准差,如下所示:
X_t = (X - X.mean(axis=0))/X.std(axis=0)
变量X_t(X 转换)包含单位标准差中的特征,均值为零,打印X_t您得到:
array([[-1.21267813, -0.53452248],
[ 1.69774938, 2.07127462],
[ 0.24253563, 0.06681531],
[ 0.24253563, -0.33407655],
[-1.21267813, -1.13586028],
[ 0.24253563, -0.13363062]])
看看这两个特征中的数字如何具有相同的大小。如果你X_t现在打印平均值和标准,你会得到
mean=[ 1.11022302e-16 2.08166817e-16], std=[ 1. 1.]
正如预期的那样。