如果min-max归一化只是一种重新缩放,那么为什么在重新缩放之后平均值不为零?

时间:2019-05-13 06:09:54

标签: python-3.x machine-learning normalization

我执行了最小-最大归一化,此后样本范围为[-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

2 个答案:

答案 0 :(得分:1)

归一化通常意味着缩放变量以使其值在new_min和new_max之间(在您的情况下,它介于-1和1之间),而标准化将数据转换为均值为零且标准偏差为1。

对于实例,假设您要在(0,1)之间缩放变量,即new_min = 0和new_max = 1。那么在这种情况下,平均值将为0怎么办?没有负值可以抵消正值。

答案 1 :(得分:1)

通常,如果x是随机变量,而y = bx+c那么(reference

mean(y) = mean(x)*b + c
std(y) = std(x)*b
variance(y) = variance(x)*b**2

enter image description here

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。

我想补充一下为什么数据标准化会产生均值为零的数据。 enter image description here