什么是“单位”标准差?

机器算法验证 神经网络 正常化 数据预处理
2022-04-01 06:29:35

将用于训练神经网络的数据归一化为零均值和“单位”标准差以减少爆炸和消失梯度效应等是一种常见的做法。

“单位”标准在这里是什么意思?一个例子真的很有帮助。

1个回答

这意味着您正在将数据特征从其原始单位(英里、美元、经过时间...)转换为标准偏差单位。正如您所要求的,下面是一个非常简单的示例:

假设您想从两个特征来预测房价:卧室数量(整数单位)和大小(平方米单位),如下面的虚构数据:

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.]

正如预期的那样。