Энтузиасты часто не понимают, когда нам нужно использовать стандартизацию столбцов, а нам нужно делать нормализацию столбцов. Этот поток представляет собой небольшую попытку смягчить путаницу, возникшую среди энтузиастов.

Почему мы вообще заботимся о нормализации или стандартизации данных? Ответ таков:

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

Нормализация: делает переменные сопоставимыми друг с другом. Причина возникновения проблемы в том, что измерения, выполненные с использованием таких шкал измерения, как номинальный, порядковый, интервал и коэффициент, не являются уникальными. Например, вы можете измерять температуру как по Фаренгейту, так и по Цельсию. Оба действительны, но дают разные числа. Если вы хотите знать, теплее ли в Дели или Шимле в данный день, и один из них составляет 68 градусов по Фаренгейту, а другой - 25 градусов по Цельсию, вы не можете просто сказать, что 68 больше, чем 25, поэтому в Дели теплее. Вместо этого вам нужно уменьшить измерения до одного и того же масштаба, а затем сравнить. Нормализация - это процесс сокращения измерений до «нейтрального» или «стандартного» масштаба.

Следовательно, чтобы иметь методологию, полностью независимую от шкалы измерения, используется нормализация.

x_ normalized = (x - x min) / (x max - x мин)

где:

x_normalized = нормализованный вектор после расчета

x = распределение x в характеристике x,

x min = минимальное значение x в распределении

x max = максимальное значение x в распределении

Стандартизация: он преобразует функции, из любого распределения, так что он будет иметь нулевое среднее значение и единичную дисперсию. другими словами :

Xnew = (x - среднее (D)) / стандартное отклонение (D)

где,

Xnew = стандартизованное значение функции x

D = набор всех значений признака x

Геометрически стандартизация столбцов означает сжатие точек данных таким образом, чтобы средний вектор приходил в начало координат, а дисперсия (путем сжатия или расширения) по любой оси была бы 1 в преобразованном пространстве.

Стандартизация столбцов часто называется средним центрированием и масштабированием дисперсии (сжатие / расширение).

Имейте в виду, что: только потому, что преобразованное распределение имеет среднее значение 0 и дисперсию 1 , не следует делать вывод, что оно будет следовать распределению Гаусса. если стандартизовано гауссово распределение, то стандартизованное распределение будет соответствовать гауссовскому распределению. Но если стандартизировано любое другое распределение, оно будет следовать распределению, которое будет ТОЛЬКО иметь среднее значение 0 и дисперсию 1.

использование нормализации вместо стандартизации:

  1. Нормализация - это лучше, если мы хотим, чтобы все результирующие значения находились в интервале [0,1], поскольку стандартизация может привести к любому значению, как положительному, так и отрицательному. .

использование стандартизации вместо стандартизации:

  1. Стандартизация лучше, когда у нас есть выбросы, поскольку выбросы будут иметь большие отрицательные или положительные значения, в то время как выбросы будут иметь значения около 0. Нормализация (с использованием min и max) в случае данных с выбросами может привести к выбросам, имеющим значения, близким к 0 и 1, и большинство выбросов будет сосредоточено в небольшой полосе значений.

Обратная сторона нормализации:

Нормализация минимум-максимум имеет один важный недостаток: она не позволяет легко справиться с выбросами. Предположим, у нас есть 99 значений от 0 до 30, и одно значение - 110, тогда все 99 значений будут преобразованы в значение от 0 до 0,4. Эти данные так же сжаты, как и раньше!

код на Python для нормализации столбцов:

# без выбросов:

a = np.arange (1,31)
a_norm = [(x - np.mean (a)) / np.std (a) for x in a]
print (np.mean (np .array (a_norm)))

1.4802973661668754e-17

# с выбросами:

a1 = np.append (a, 110) # добавляется экстремальный выброс
a_norm_outlier = [(x - np.mean (a1)) / np.std (a1) для x в a1]
print (np.mean (np.array (a_norm_outlier)))

8.59527502935605e-17