В общем случае, если x
является случайной величиной, а y = bx+c
, то ( ссылка )
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
Таким образом, среднее значение у зависит от среднего значения x
, а также альфа и бета, как показано в приведенных выше уравнениях.
Я хочу добавить, почему стандартизация данных дает данные со средним нулем.