Как я могу подогнать данные теста с помощью шкалы min max при загрузке модели? - PullRequest
0 голосов
/ 28 февраля 2019

Я делаю модель с автоматическим кодировщиком. Я сохранил модель, до которой я масштабировал данные, используя min max scaler.

X_train = df.values
scaler = MinMaxScaler()
X_train_scaled = scaler.fit_transform(X_train)

После этого я установил модель и сохранил ее как файл 'h5'Теперь, когда я даю тестовые данные, после загрузки сохраненной модели, естественно, она также должна масштабироваться.

Поэтому, когда я загружаю модель и масштабирую ее, используя

X_test_scaled  = scaler.transform(X_test)

, это даетошибка

NotFittedError: This MinMaxScaler instance is not fitted yet. Call 'fit' with appropriate arguments before using this method.

Таким образом, я дал X_test_scaled = scaler.fit_transform(X_test) (что я догадывался, что это глупо) действительно дал результат (после загрузки сохраненной модели и теста), который был другим, когда я тренировался и проверял это вместе,Сейчас я сохранил около 4000 моделей для своих целей (поэтому я не могу тренироваться и сохранять все заново, так как это стоит много времени, поэтому я хочу выход).

Есть ли способ масштабировать тест?преобразовав данные так, как я их обучил (возможно, сохраняя масштабированные значения, я не знаю). Или можно удалить накипь модели, чтобы я мог проверить модель на немасштабированных данных.

Если янедооценка или переоценка любой точки, пожалуйста, дайте мне знать в комментариях!

1 Ответ

0 голосов
/ 28 февраля 2019
X_test_scaled  = scaler.fit_transform(X_test)

будет масштабироваться X_test с учетом минимального и максимального значений функций в X_test и , а не X_train.

Причина, по которой исходный код не работал, заключается в том, что вы, вероятно, не сохранили scaler после подгонки его к X_train или перезаписали его каким-либо образом (например, путем его повторной инициализации).Вот почему ошибка была выдана, поскольку scaler не был привязан ни к каким данным.

Когда вы затем вызываете X_test_scaled = scaler.fit_transform(X_test), вы подгоняете scaler к X_test и одновременно преобразуете X_test, чтоИменно поэтому код был в состоянии выполнить, но этот шаг неверен, как вы уже догадались.

То, что вы хотите, это

X_train = df.values
scaler = MinMaxScaler()
X_train_scaled = scaler.fit_transform(X_train)

# Save scaler
import pickle as pkl
with open("scaler.pkl", "wb") as outfile:
    pkl.dump(scaler, outfile)

# Some other code for training your autoencoder
# ...

Затем в вашем тестовом сценарии

# During test time
# Load scaler that was fitted on training data
with open("scaler.pkl", "rb") as infile:
    scaler = pkl.load(infile)
    X_test_scaled = scaler.transform(X_test)  # Note: not fit_transform.

Обратите внимание, что вам не нужно повторно устанавливать объект scaler после загрузки его с диска.Он содержит всю информацию (коэффициенты масштабирования и т. Д.), Полученную из данных обучения.Вы просто позвоните на X_test.

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