StandardScaler - Лена Капаца
StandardScaler by Лена Капаца July 21, 2021

StandardScaler – класс Scikit-learn, подвергающий передаваемый объект Стандартизации (Standartization). Каждый стандартизованный элемент Признака (Feature) вычисляется следующим образом:

$$x_{i,станд.} = \frac{x_i - μ}{σ}, где$$
$$x_{i,станд.}\space{–}\space{стандартизованный}\space{элемент}\space{признака,}$$
$$x_i\space{–}\space{исходный}\space{элемент,}$$
$$μ\space{–}\space{среднее}\space{арифметическое,}$$
$$σ\space{–}\space{стандартное}\space{отклонение}$$

Вычисление Среднего арифметического (Mean) и Стандартного отклонения (Standard Deviation) происходят независимо для каждого признака. Затем эти Статистики (Statistics) сохраняются для последующего использования с помощью преобразования.

Стандартизация набора данных является общим требованием для многих Алгоритмов (Algorithm) Машинного обучения (ML): они могут "вести себя плохо", если отдельные признаки не выглядят как нормально распределенные данные (например, по Гауссу с нулевым средним и единичной дисперсией).

Например, многие элементы, используемые в Целевой переменной (Target Variable) алгоритма, такие как ядро ​​Машина опорных векторов (SVM), предполагают, что все функции сосредоточены вокруг нуля ​​и имеют дисперсию того же порядка. Если характеристика имеет Дисперсию (Variance), которая на порядок больше, чем у других, она может доминировать над целевой переменной и сделать Модель (Model) неспособной учиться на других.

sklearn.preprocessing.StandardScaler

Давайте посмотрим, как работает класс StandardScaler. Импортируем его из модуля preprocessing:

import sklearn
from sklearn.preprocessing import StandardScaler

Создадим небольшой датасет, состоящий из пар значений – нулей и единиц, инициируем инструмент стандартизации и передадим ему данные:

data = [[0, 0], [0, 0], [1, 1], [1, 1]]
scaler = StandardScaler()
print(scaler.fit(data))

Система отображает стандартные настройки стандартизатора: например, в целях резервирования объект data копируется:

StandardScaler(copy=True, with_mean=True, with_std=True)

Посмотрим, чему равно среднее:

print(scaler.mean_)

Статистика равноудалена от крайних значений:

[0.5 0.5]

Вызовем функцию transform, которая и выполнит трансформацию:

print(scaler.transform(data))

Повторим: StandardScaler преобразует значения таким образом, что из каждого Наблюдения (Observation) каждого признака вычитается среднее арифметическое и результат делится на стандартное отклонение этого признака. Выведем наш список:

[[-1. -1.]
 [-1. -1.]
 [ 1.  1.]
 [ 1.  1.]]

Ноутбук, не требующий дополнительной настройки на момент написания статьи, можно скачать здесь.

Автор оригинальной статьи: scikit-learn

© Лена Капаца. Все права защищены.