Как применять стандартизацию для обучения и тестирования наборов данных - PullRequest
0 голосов
/ 27 июня 2018

Допустим, у меня есть 10 набор классов объектов X формы [100, 10] и y целевой набор данных формы [100, 1]. Например, после разделения двух с sklearn.model_selection.train_test_split я получил:

  • X_train: [70, 10]
  • X_test: [30, 10]
  • y_train: [70, 1]
  • y_test: [30, 1]

Как правильно применять стандартизацию?

Я пробовал с:

from sklearn import preprocessing
scaler = preprocessing.StandardScaler()

scaler.fit(X_train)

X_train_std = scaler.transform(X_train)
X_test_std = scaler.transform(X_test)

но тогда, если я пытаюсь предсказать, используя модель, когда я пытаюсь инвертировать масштабирование для просмотра MAE, у меня появляется ошибка

from sklearn import linear_model
lr = linear_model.LinearRegression()
lr.fit(X_train_std, y_train)
y_pred_std = lr.predict(X_test_std)

y_pred = scaler.inverse_transform(y_pred_std) # error here


У меня есть еще один вопрос. Так как у меня есть целевые значения, я должен использовать

scaler = preprocessing.StandardScaler()

X_train_std = scaler.fit_transform(X_train, y_train)
X_test_std = scaler.transform(X_test)

вместо первого блока кода?


Нужно ли применять преобразование также к наборам данных y_train и y_test? Я немного запутался

1 Ответ

0 голосов
/ 27 июня 2018

StandardScaler предполагается использовать только в матрице признаков X.

Так что все методы fit, transform и inverse_transform просто нуждаются в вашем X.

Обратите внимание, что после подгонки модели вы можете получить доступ к следующим атрибутам:

  1. mean_: среднее значение каждой функции в X_train
  2. scale_: стандартное отклонение каждой функции в X_train

Метод transform делает (X[i, col] - mean_[col] / scale_[col]) для каждого образца i. Принимая во внимание, что inverse_transform метод (X[i, col] * scale_[col] + mean_[col]) для каждого образца i.

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