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) неспособной учиться на других.
Давайте посмотрим, как работает класс 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
© Лена Капаца. Все права защищены.