Новый 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 ».
Сработало для меня!Я уверен, что это может помочь с подобными проблемами обратной совместимости с соленьями, но не обязательно с этим конкретным атрибутом.