Почему стандартизатор и нормализатор требуют различного ввода данных? - PullRequest
0 голосов
/ 09 января 2019

Я пробовал следующий код и обнаружил, что StandardScaler(or MinMaxScaler) и Normalizer из sklearn обрабатывают данные очень по-разному. Эта проблема усложняет строительство трубопровода. Мне было интересно, является ли это несоответствие дизайна намеренным или нет.

from sklearn.preprocessing import StandardScaler, Normalizer, MinMaxScaler

Для Normalizer данные считываются «по горизонтали».

Normalizer(norm = 'max').fit_transform([[ 1., 1.,  2., 10],
                                        [ 2.,  0.,  0., 100],
                                        [ 0.,  -1., -1., 1000]])
#array([[ 0.1  ,  0.1  ,  0.2  ,  1.   ],
#       [ 0.02 ,  0.   ,  0.   ,  1.   ],
#       [ 0.   , -0.001, -0.001,  1.   ]])

Для StandardScaler и MinMaxScaler данные считываются «по вертикали».

StandardScaler().fit_transform([[ 1., 1.,  2., 10],
                                [ 2.,  0.,  0., 100],
                                [ 0.,  -1., -1., 1000]])
#array([[ 0.        ,  1.22474487,  1.33630621, -0.80538727],
#       [ 1.22474487,  0.        , -0.26726124, -0.60404045],
#       [-1.22474487, -1.22474487, -1.06904497,  1.40942772]])

MinMaxScaler().fit_transform([[ 1., 1.,  2., 10],
                              [ 2.,  0.,  0., 100],
                              [ 0.,  -1., -1., 1000]])
#array([[0.5       , 1.        , 1.        , 0.        ],
#       [1.        , 0.5       , 0.33333333, 0.09090909],
#       [0.        , 0.        , 0.        , 1.        ]])

1 Ответ

0 голосов
/ 09 января 2019

Это ожидаемое поведение, потому что StandardScaler и Normalizer служат разным целям. StandardScaler работает "вертикально", потому что это ...

Стандартизировать [s] функции путем удаления среднего значения и масштабирования до единичной дисперсии

[...] Центрирование и масштабирование выполняются независимо для каждой функции путем вычисления соответствующей статистики для выборок в обучающем наборе. Среднее и стандартное отклонение затем сохраняются для использования в последующих данных с использованием метода преобразования.

в то время как Normalizer работает «горизонтально», потому что это ...

Нормализовать [s] выборки индивидуально в единицу нормы.

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

Пожалуйста, ознакомьтесь с документами по scikit-learn (ссылки выше), чтобы получить больше информации, которая лучше соответствует вашим целям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...