Я работаю над исследованием населения по странам на основе этого набора данных: https://www.kaggle.com/tanuprabhu/population-by-country-2020
Я узнал, что лучше всего нормализовать набор данных перед тренировкой, поэтому я нормализовал данные с помощью sklearn.preprocessing MinMaxScaler. Я приступил к обучению модели с использованием нормализованного набора данных перед сохранением модели.
Затем я хотел выполнить прогнозы на новых данных. Поэтому я создал входной файл в формате, аналогичном набору обучающих данных. Новые входные данные имеют только 2 строки (по сравнению с обучающим набором данных, который имеет 200 строк).
Проблема, с которой я сталкиваюсь, заключается в том, что из-за небольшого количества данных в новом наборе данных minmaxscaler возвращает 1 и 0. 1 соответствует большему числу, а 0 — меньшему. Когда я ввожу эти входные данные в модель, она дает мне прогноз, который слишком далек от ожидаемого значения.
Я также попытался применить mixmaxscaler к новым данным, передать их в модель, а затем инвертировать результат. Тем не менее, я получил значение, которое слишком далеко от ожидаемого значения.
Я также пытался обучить модель без применения mixmaxscalar. Я получил лучший результат в этой модели, но прогнозируемый результат очень хорошо реагирует только тогда, когда я изменил определенные столбцы с большими значениями. Столбцы с меньшими значениями не дают очень хорошего отклика, в то время как в реальном мире я знаю, что этот фактор весьма важен для прогнозируемого результата.
Где я ошибся? Приветствуется любой пример кода для обработки ввода для обученной модели.
Небольшое (или большое...) количество выборок в новом наборе данных не должно играть абсолютно никакой роли в масштабировании, за исключением случаев, когда вы совершаете ошибку, переустанавливая свой скейлер в новые данные вместо того, чтобы использовать уже подогнанный скейлер для их преобразования. . Это совсем не очевидно (есть веская причина, по которой мы просим код, а не такие словесные описания).
Чтобы проверить, что происходит, я предлагаю вам взять ряд ваших тренировочных данных перед их масштабированием. Примените скаляр, а затем используйте результат в качестве данных для прогноза. Вы должны получить тот же прогнозируемый результат, что и значение результата данных поезда. Когда вы применяете скалярный взгляд, чтобы увидеть, генерирует ли он те же значения, что и в обучающих данных для этой строки. Убедитесь, что вы используете скаляр, который подходит для тренировочного набора. Не подгоняйте скаляр к новым данным, просто используйте его для преобразования данных.
Большое спасибо, Джерри, за указание на мою ошибку. Мне удалось решить эту проблему. Извлеченный урок: для обучения я должен использовать «fit_transform». Позже, для ввода в модель, я должен использовать «преобразование». Используйте 'inverse_transform, если необходимо
Рад помочь. Если вы хотите узнать больше, вы можете найти несколько отличных видео на youtube.com/playlist?list=PLs_CQl4mUvI7Z9HnwoeOS5EUu9gyvekjK.
Вы заглядывали на datascience.stackexchange.com или даже на ai.stackexchange.com?