открытие старых солений xgboost с новой версией xgboost У объекта 'XGBClassifier' нет атрибута 'kwargs' - PullRequest
0 голосов
/ 25 июня 2019

Я использовал xgboost версии 0.6, когда мариновал некоторые объекты. Теперь я обновился до версии 0.82, и когда я пытаюсь распаковать старые модели, я получаю:

AttributeError: у объекта 'XGBClassifier' нет атрибута 'kwargs'

Мне бы очень хотелось использовать эти модели, не переучивая их, есть ли способ открыть эти соленья?

1 Ответ

1 голос
/ 25 июня 2019

Новый xgboost требует, чтобы у объектов был атрибут "kwargs", которого нет у старых моделей.Один из способов решить эту проблему - перейти на старую версию xgboost, открыть их, добавить в каждую модель модель. Kwargs = None, а затем сохранить их снова, теперь они должны работать ...

Другой обходной путь -взломать файл рассола.Вы загрузите соленье в виде строки, добавите необходимый атрибут, а затем загрузите соленье:

import re
xg_str = open('path_to_old_model.pkl').read()
kwargs_value= "kwargs'\np8\nNsS'"
new_xgboost = re.sub('colsample_bylevel', kwargs_value+"""colsample_bylevel""", xg_str)
new_model = pkl.loads(new_xgboost)

. Это добавит "None" в качестве self.kwargs для ваших моделей.regex находит, где объявлены атрибуты объекта, путем поиска известного атрибута в модели «colsample_bylevel», а затем добавляет перед ним еще один атрибут.

Чтобы увидеть, как pickle кодирует атрибуты, вы можете создать любой класс с некоторыми атрибутами.и применить pkl.dumps к экземпляру.если это короткий класс, его будет довольно легко прочитать, вот как я понял, что «kwargs» \ np8 \ nNsS »означает« kwargs = None ».

Сработало для меня!Я уверен, что это может помочь с подобными проблемами обратной совместимости с соленьями, но не обязательно с этим конкретным атрибутом.

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