Использование стандартизации в sklearn конвейере - PullRequest
0 голосов
/ 04 января 2019

Я использую Standardscaler для нормализации своего набора данных, то есть я превращаю каждую функцию в z-счет, вычитая среднее значение и деля на Std.

Я хотел бы использовать Standardscaler в конвейере sklearn иМне интересно, как именно преобразование применяется к X_test.То есть в приведенном ниже коде, когда я запускаю pipeline.predict(X_test), я понимаю, что StandardScaler и SVC() запускаются на X_test, но что именно Standardscaler использует в качестве среднего значения и StD?Те из X_Train или он вычисляет их только для X_test?Что если, например, X_test состоит только из 2 переменных, нормализация будет выглядеть совсем иначе, чем если бы я нормализовал X_train и X_test в целом, верно?

steps = [('scaler', StandardScaler()),
     ('model',SVC())] 
pipeline = Pipeline(steps)
pipeline.fit(X_train,y_train)
y_pred = pipeline.predict(X_test)

1 Ответ

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

Sklearn pipeline будет применяться transformer.fit_transform() при вызове pipeline.fit() и transformer.transform() при вызове pipeline.predict().Таким образом, для вашего случая StandardScaler будет соответствовать X_train, а затем означает и stdev из X_train будет использовано для масштабирования X_test.

Преобразование X_train действительно выглядело бы иначе, чем преобразование X_train и X_test.Степень разницы будет зависеть от степени разницы в распределениях между X_train и X_test вместе взятых.Однако, если случайным образом разделить из того же исходного набора данных и иметь разумный размер, распределения X_train и X_test, вероятно, будут аналогичными.

Независимо от этого важно обращаться с X_test так, как если быон не в выборке, чтобы быть (надеюсь) надежной метрикой для невидимых данных.Поскольку вы не знаете о распределении невидимых данных, вам следует сделать вид, что вы не знаете о распределении X_test, включая среднее и stdev .

...