如果最小-最大归一化只是一种重新缩放,那么为什么在重新缩放后均值不为零?
If min-max normalization is just a kind of rescaling then why mean is not zero after this rescaling?
我已经执行了 Min-Max 归一化,之后样本范围在 [-1,1] 中。由于这种归一化只是一种重新缩放,那么为什么新数据中的均值不为零呢?是我的代码有问题还是我的解释有问题?
data np.array([-3, 1,2])
print("data mean:" , data.mean())
#perform min-max normalization:
old_range = np.amax(data) - np.amin(data)
new_range = 2
new_min = -1
data_norm = ((data - np.amin(data)) / old_range)*new_range + new_min
print("data_norm:", data_norm)
print("mean after normalization: ", data_norm.mean())
#Result:
#data mean: 0.0
#mean after normalization: 0.60000001
规范化通常意味着将变量缩放到 new_min 和 new_max 之间的值(在您的情况下,它在 -1 和 1 之间),而标准化将数据转换为具有平均值零和 1 的标准偏差。
例如,假设您想在 (0, 1) 之间缩放变量,即 new_min=0 和 new_max=1。那么在这种情况下,均值如何为 0?没有负值可以抵消正值。
一般来说,如果 x
是一个随机变量并且 y = bx+c
那么 (reference)
mean(y) = mean(x)*b + c
std(y) = std(x)*b
variance(y) = variance(x)*b**2
x = np.array([-3, 1,2])
new_min = -1
new_max = 1
new_range = new_max - new_min
new_x = ((x-np.min(x))/(np.max(x)-np.min(x)))*new_range + new_min
print ("Mean: {0:.3}, std: {1:.3}, Var: {2:.3}".format(np.mean(new_x), np.std(new_x), np.var(new_x)))
alpha = new_range/(np.max(x)-np.min(x))
beta = np.min(x)*alpha - new_min
new_mean = np.mean(x)*alpha - beta
new_std = np.std(x)*alpha
new_var = np.var(x)*alpha*alpha
print ("Mean: {0:.3}, std: {1:.3}, Var: {2:.3}".format(new_mean,new_std,new_var))
输出:
Mean: 0.2, std: 0.864, Var: 0.747
Mean: 0.2, std: 0.864, Var: 0.747
所以 y 的平均值取决于 x
和 alpha 和 beta 的平均值,如上面的等式所示。
我想补充为什么数据标准化会产生均值为零的数据。
我已经执行了 Min-Max 归一化,之后样本范围在 [-1,1] 中。由于这种归一化只是一种重新缩放,那么为什么新数据中的均值不为零呢?是我的代码有问题还是我的解释有问题?
data np.array([-3, 1,2])
print("data mean:" , data.mean())
#perform min-max normalization:
old_range = np.amax(data) - np.amin(data)
new_range = 2
new_min = -1
data_norm = ((data - np.amin(data)) / old_range)*new_range + new_min
print("data_norm:", data_norm)
print("mean after normalization: ", data_norm.mean())
#Result:
#data mean: 0.0
#mean after normalization: 0.60000001
规范化通常意味着将变量缩放到 new_min 和 new_max 之间的值(在您的情况下,它在 -1 和 1 之间),而标准化将数据转换为具有平均值零和 1 的标准偏差。
例如,假设您想在 (0, 1) 之间缩放变量,即 new_min=0 和 new_max=1。那么在这种情况下,均值如何为 0?没有负值可以抵消正值。
一般来说,如果 x
是一个随机变量并且 y = bx+c
那么 (reference)
mean(y) = mean(x)*b + c
std(y) = std(x)*b
variance(y) = variance(x)*b**2
x = np.array([-3, 1,2])
new_min = -1
new_max = 1
new_range = new_max - new_min
new_x = ((x-np.min(x))/(np.max(x)-np.min(x)))*new_range + new_min
print ("Mean: {0:.3}, std: {1:.3}, Var: {2:.3}".format(np.mean(new_x), np.std(new_x), np.var(new_x)))
alpha = new_range/(np.max(x)-np.min(x))
beta = np.min(x)*alpha - new_min
new_mean = np.mean(x)*alpha - beta
new_std = np.std(x)*alpha
new_var = np.var(x)*alpha*alpha
print ("Mean: {0:.3}, std: {1:.3}, Var: {2:.3}".format(new_mean,new_std,new_var))
输出:
Mean: 0.2, std: 0.864, Var: 0.747
Mean: 0.2, std: 0.864, Var: 0.747
所以 y 的平均值取决于 x
和 alpha 和 beta 的平均值,如上面的等式所示。
我想补充为什么数据标准化会产生均值为零的数据。