Масштабирование функций

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

Величина функции имеет значение, потому что:

  • На коэффициенты регрессии линейных моделей напрямую влияет масштаб переменной.
  • Переменные с большей величиной/большим диапазоном значений преобладают над теми, у которых меньшая величина/диапазон значений.
  • Градиентный спуск сходится быстрее, когда признаки находятся в одинаковых масштабах.
  • Масштабирование функций помогает сократить время поиска векторов поддержки для SVM.
  • Евклидовы расстояния чувствительны к величине объекта.
  • Некоторые алгоритмы, такие как PCA, требуют, чтобы функции были центрированы на 0.

Модели машинного обучения, затронутые масштабированием функций:

  • Линейная и логистическая регрессия
  • Нейронные сети
  • Опорные векторные машины
  • КНН
  • Кластеризация K-средних
  • Линейный дискриминантный анализ (LDA)
  • Анализ главных компонентов (PCA)

Существует несколько методов масштабирования функций, таких как

  • Стандартизация
  • Средняя нормализация
  • Масштабирование до минимального и максимального значений — MinMaxScaling
  • Масштабирование до максимального значения — MaxAbsScaling
  • Масштабирование по квантилям и медиане — RobustScaling
  • Нормализация к единичной длине вектора

но здесь я расскажу о важности стандартизации и нормализации.

Стандартизация

Стандартизация включает центрирование переменной на нуле и стандартизацию дисперсии до 1. Процедура включает вычитание среднего значения каждого наблюдения, а затем деление на стандартное отклонение:

z = (x — x_mean) / станд.

Результатом приведенного выше преобразования является z, который называется z-оценкой и показывает, на сколько стандартных отклонений данное наблюдение отклоняется от среднего значения. Z-оценка указывает положение наблюдения в распределении (в числах стандартных отклонений по отношению к среднему значению распределения). Знак z-показателя (+ или -) указывает, находится ли наблюдение выше (+) или ниже (-) среднего значения.

Форма стандартизированного (или нормализованного по z-оценке) распределения будет идентична исходному распределению переменной. Если исходное распределение является нормальным, то нормальным будет и стандартизированное распределение. Но если исходное распределение искажено, то стандартизированное распределение переменной также будет искажено. Другими словами, стандартизация переменной не нормализует распределение данных.

В двух словах, стандартизация:

  • центрирует среднее значение в 0
  • масштабирует дисперсию на 1
  • сохраняет форму исходного распределения
  • минимальные и максимальные значения различных переменных могут различаться
  • сохраняет выбросы

Подходит для алгоритмов, которым требуются функции с центром в нуле.

Код процесса стандартизации для масштабирования функций

# the scaler - for standardisation
from sklearn.preprocessing import StandardScaler

StandardScaler из scikit-learn удаляет среднее значение и масштабирует данные до единичной дисперсии. Кроме того, он запоминает и сохраняет параметры, необходимые для масштабирования. Таким образом, это лучший выбор для этой техники масштабирования признаков.

Начнем с загрузки набора данных:

# load the the Boston House price data
# this is how we load the boston dataset from sklearn
boston_dataset = load_boston()
# create a dataframe with the independent variables
data = pd.DataFrame(boston_dataset.data,
                      columns=boston_dataset.feature_names)
# add target
data['MEDV'] = boston_dataset.target
data.head()

Затем набор данных разделяется:

# let's separate the data into training and testing set
X_train, X_test, y_train, y_test = train_test_split(data.drop('MEDV', axis=1),data['MEDV'],
test_size=0.3,random_state=0)

Затем используется StandardScaler:

# standardisation: with the StandardScaler from sklearn
# set up the scaler
scaler = StandardScaler()
# fit the scaler to the train set, it will learn the parameters
scaler.fit(X_train)
# transform train and test sets
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)

Нормализация

Масштабирование до минимального и максимального значений — MinMaxScaling

Минимальное и максимальное масштабирование сжимает значения между 0 и 1. Оно вычитает минимальное значение из всех наблюдений, а затем делит его на диапазон значений:

Результатом приведенного выше преобразования является распределение, значения которого варьируются в диапазоне от 0 до 1. Но среднее значение не центрировано на нуле, а стандартное отклонение варьируется по переменным. Форма минимально-максимального масштабированного распределения будет аналогична исходной переменной, но дисперсия может измениться. Этот метод масштабирования также чувствителен к выбросам.

Вкратце, MinMaxScaling:

  • не центрирует среднее значение в 0
  • дисперсия варьируется по переменным
  • может не сохранить форму исходного дистрибутива
  • минимальное и максимальное значения равны 0 и 1.
  • чувствительные выбросы
# the scaler - for min-max scaling
from sklearn.preprocessing import MinMaxScaler

MinMaxScaling

MinMaxScaler из scikit-learn вычитает минимальное значение и масштабирует диапазон значений, отображая значения переменных от 0 до 1 с использованием MinMaxScaler в python: -

scaler = MinMaxScaler()
# fit the scaler to the train set, it will learn the parameters
scaler.fit(X_train)
# transform train and test sets
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)

Спасибо за чтение. Свяжитесь со мной в Linkedin