Как передать нормализованные новые данные в сохраненную модель обученной нейронной сети, а затем инвертировать результат?

Я работаю над исследованием населения по странам на основе этого набора данных: https://www.kaggle.com/tanuprabhu/population-by-country-2020

Я узнал, что лучше всего нормализовать набор данных перед тренировкой, поэтому я нормализовал данные с помощью sklearn.preprocessing MinMaxScaler. Я приступил к обучению модели с использованием нормализованного набора данных перед сохранением модели.

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

Проблема, с которой я сталкиваюсь, заключается в том, что из-за небольшого количества данных в новом наборе данных minmaxscaler возвращает 1 и 0. 1 соответствует большему числу, а 0 — меньшему. Когда я ввожу эти входные данные в модель, она дает мне прогноз, который слишком далек от ожидаемого значения.

Я также попытался применить mixmaxscaler к новым данным, передать их в модель, а затем инвертировать результат. Тем не менее, я получил значение, которое слишком далеко от ожидаемого значения.

Я также пытался обучить модель без применения mixmaxscalar. Я получил лучший результат в этой модели, но прогнозируемый результат очень хорошо реагирует только тогда, когда я изменил определенные столбцы с большими значениями. Столбцы с меньшими значениями не дают очень хорошего отклика, в то время как в реальном мире я знаю, что этот фактор весьма важен для прогнозируемого результата.

Где я ошибся? Приветствуется любой пример кода для обработки ввода для обученной модели.

Вы заглядывали на datascience.stackexchange.com или даже на ai.stackexchange.com?

Eyeslandic 21.12.2020 06:37

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

desertnaut 21.12.2020 12:48
Udacity Nanodegree Capstone Project: Классификатор пород собак
Udacity Nanodegree Capstone Project: Классификатор пород собак
Вы можете ознакомиться со скриптами проекта и данными на github .
1
2
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы проверить, что происходит, я предлагаю вам взять ряд ваших тренировочных данных перед их масштабированием. Примените скаляр, а затем используйте результат в качестве данных для прогноза. Вы должны получить тот же прогнозируемый результат, что и значение результата данных поезда. Когда вы применяете скалярный взгляд, чтобы увидеть, генерирует ли он те же значения, что и в обучающих данных для этой строки. Убедитесь, что вы используете скаляр, который подходит для тренировочного набора. Не подгоняйте скаляр к новым данным, просто используйте его для преобразования данных.

Большое спасибо, Джерри, за указание на мою ошибку. Мне удалось решить эту проблему. Извлеченный урок: для обучения я должен использовать «fit_transform». Позже, для ввода в модель, я должен использовать «преобразование». Используйте 'inverse_transform, если необходимо

Armi 22.12.2020 02:47

Рад помочь. Если вы хотите узнать больше, вы можете найти несколько отличных видео на youtube.com/playlist?list=PLs_CQl4mUvI7Z9HnwoeOS5EUu9gyvekjK‌​.

Gerry P 22.12.2020 12:14

Другие вопросы по теме