Если минимальная-максимальная нормализация - это всего лишь разновидность масштабирования, то почему среднее значение не равно нулю после этого масштабирования? - PullRequest
0 голосов
/ 13 мая 2019

Я выполнил нормализацию 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

Ответы [ 2 ]

1 голос
/ 13 мая 2019

В общем случае, если x является случайной величиной, а y = bx+c, то ( ссылка )

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

Таким образом, среднее значение у зависит от среднего значения x, а также альфа и бета, как показано в приведенных выше уравнениях.

Я хочу добавить, почему стандартизация данных дает данные со средним нулем. enter image description here

1 голос
/ 13 мая 2019

Нормализация обычно означает масштабирование переменной, чтобы иметь значения между new_min и new_max (в вашем случае, это между -1 и 1), в то время как стандартизация преобразует данные, чтобы иметь среднее значение от нуля до стандартного отклонения 1.

Для Экземпляра предположим, что вы хотите масштабировать переменные между (0, 1), то есть new_min = 0 и new_max = 1.Тогда как в этом случае среднее будет 0?Нет отрицательного значения для отмены положительного значения.

...