В машинном обучении одним из важных методов, который необходимо изучить, является стандартизация, которая находится в разделе Масштабирование функций. Сначала посмотрите определение этого тяжелого слова «Масштабирование функций»:

Масштабирование признаков — это метод стандартизации независимых признаков, присутствующих в данных в фиксированном диапазоне.

Итак, основной ключевой момент этого определения заключается в том, что вы преобразуете свои числовые характеристики в небольшой диапазон, например, от 0 до 1 или от -1 до +1 и т. д.Но вопрос в том, почему?

Давайте посмотрим на набор данных Реклама в социальных сетях (здесь нас интересуют только 2 функции — Возраст и Расчетная зарплата). Этот набор данных выглядит следующим образом:

Здесь диапазон столбца EstimatedSalary намного выше, чем диапазон столбца Age. Теперь, если вы используете алгоритм KNN, где расстояние рассчитывается между строками. В качестве примера я вычисляю расстояние первых двух строк:

Здесь 256 исходит из столбца «Возраст», а 10 * 10⁶ исходит из столбца «Расчетная зарплата», что намного выше, чем 256. Вот почему в алгоритмах, подобных KNN, где рассчитывается расстояние, функции большого диапазона (здесь ») будет доминировать, и алгоритм не будет работать. А Масштабирование функций помогает добиться этого, фиксируя диапазоны столбцов.

В целом Feature Scaling бывает 2 типов:

  1. Стандартизация/нормализация Z-оценки (в центре внимания этой статьи)
  2. Нормализация (обсудим эту тему в другой статье)

Сначала посмотрите формулу Стандартизации:

Используя приведенное выше уравнение, вы можете преобразовать числовые признаки в небольшой диапазон. Среднее значение столбцов «Возраст» и «Расчетная зарплата» составляет 37,655 и 69742,5 соответственно. Стандартное отклонение этих столбцов составляет 10,482877 и 34096,96 соответственно. Теперь для первой строки масштабированные значения возраста и масштабированной расчетной заработной платы будут

Вот как выполняется стандартизация. Хорошо, что нам не нужно реализовывать формулу самостоятельно. Scikit-Learn может справиться с этим, используя приведенный ниже код.

from sklearn.preprocessing import StandardScaler
# create a scaler object
scaler = StandardScaler()
# Transform the independent features (X)
X_transformed = scaler.fit_transform(X)

После стандартизации результат выглядит так:

Геометрический вид:

Мы преобразовали 2 функции. Теперь посмотрим, что изменилось:

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

Другим важным изменением является то, что стандартное значение обеих функций изменено на 1.0. При стандартизации среднее становится равным 0, поэтому его такженазывают центрированием среднего.

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

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

Если вы применяете алгоритмы машинного обучения, такие как LogisticRegression, как к масштабированному, так и к немасштабированному набору данных, вы увидите, что модель масштабированного набора данных работает хорошо. Нет потерь, если вы выполняете масштабирование для каждого алгоритма, но некоторые алгоритмы могут дать вам гораздо лучший результат. Например, масштабирование не повлияет на алгоритм DecisionTree.

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

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

Надеюсь, вы можете понять эту стандартизацию. Коды для этой статьи вы можете найти здесь.

Большое спасибо.