Нормализация имеет различные значения в зависимости от контекста, и иногда этот термин вводит в заблуждение. Я думаю, что sklearn использует термины взаимозаменяемо для обозначения корректировки значений, измеренных в разных масштабах, по условно общей шкале (например, между 0 и 1), а не для изменения данных таким образом, чтобы они следовали нормальному распределению (кроме от StandardScaler, который это делает).
Насколько я понимаю, в sklearn они отличаются входом, с которым они работают и как, и где они могут быть использованы.
Я предполагаю, что с Normalization
вы имеете в виду sklearn.preprocessing.Normalizer
.
Итак, основное отличие состоит в том, что sklearn.preprocessing.Normalizer
масштабирует выборки в единицу нормы (длину вектора), в то время как sklearn.preprocessing.StandardScaler
масштабирует показывает в единицу дисперсии после вычитания жадный. Таким образом, первый работает с строками , а второй - с столбцами .
В частности,
sklearn.preprocessing.normalize
"масштабирует входные векторы индивидуально до единичной нормы (длины вектора). '. Его можно применять к строкам (установив параметр axis
в 1) и к элементам / столбцам (установив параметр axis
до 0) .Он использует одну из следующих норм: l1
, l2
или max
для нормализации каждой ненулевой выборки (или каждой ненулевой функции, если ось равна 0). Примечание: Термин норма здесь относится к математическому определению. Для получения дополнительной информации см. здесь и здесь .
sklearn.preprocessing.Normalizer
"нормализует выборки индивидуально к единице нормы." . Он ведет себя точно так же, как sklearn.preprocessing.normalize
, когда axis=1
. В отличие от normalize
, Normalizer
выполняет нормализацию с использованием API-интерфейса Transformer (например, как часть предварительной обработки sklearn.pipeline.Pipeline).
sklearn.preprocessing.StandardScaler
"стандартизирует функции путем удаления среднего значения и масштабирования до единичной дисперсии ". Он не использует норму вектора, скорее он вычисляет z-показатель для каждого объекта.
Эта интересная статья исследует больше различий между ними.
Давайте для удобства воспользуемся norm='max'
:
from sklearn.preprocessing import normalize, Normalizer, StandardScaler
X = [[1, 2],
[2, 4]]
# Normalize column based on the maximum of each column (x/max(column))
normalize(X, norm='max', axis=0)
# Normalize column based on the maximum of each row (x/max(row))
normalize(X, norm='max', axis=1)
# Normalize with Normalizer (only rows)
Normalizer(norm='max').fit_transform(X)
# Standardize with StandardScaler (only columns)
StandardScaler().fit_transform(X)
from sklearn.pipeline import Pipeline
pipe = Pipeline([('normalization_step', normalize())] # NOT POSSIBLE
pipe = Pipeline([('normalization_step', Normalizer())] # POSSIBLE
pipe = Pipeline([('normalization_step', StandardScaler())] # POSSIBLE
pipe.score(X, y) # Assuming y exists
Вышеупомянутые строки кода преобразуют данные следующим образом:
# Normalize with normalize, axis=0 (columns)
[[0.5, 0.5],
[1. , 1. ]]
# Normalize with normalize, axis=1 (rows)
[[0.5, 1],
[0.5, 1. ]]
# Normalize with Normalizer (rows)
[[0.5, 1],
[0.5, 1. ]]
# Standardize with StandardScaler (columns)
[[-1, -1],
[1, 1. ]]