Как сериализовать большой классификатор случайных лесов - PullRequest
0 голосов
/ 21 сентября 2018

Я использую randomlestclassifier sklearn для прогнозирования набора классов.У меня более 26000 классов, поэтому размер классификатора превышает 30 ГБ.Я работаю на Linux с 64 ГБ оперативной памяти и 20 ГБ памяти.

Я пытаюсь протравить свою модель с помощью joblib, но она не работает, так как мне не хватает вторичного хранилища (я полагаю).Есть ли способ, которым это может быть сделано ??Может быть, какая-то техника сжатия или что-то еще ??

1 Ответ

0 голосов
/ 21 сентября 2018

Вы можете попробовать сжать рассол

compressed_pickle = StringIO.StringIO()
with gzip.GzipFile(fileobj=compressed_pickle, mode='w') as f:
    f.write(pickle.dumps(classifier))

Затем вы можете записать compressed_pickle в файл.

Чтобы прочитать его обратно:

with open('rf_classifier.pickle', 'rb') as f:
    compressed_pickle  = f.read()
rf_classifier = pickle.loads(zlib.decompress(compressed_pickle, 16 + zlib.MAX_WBITS))

РЕДАКТИРОВАТЬ

Похоже, что в версиях Python до 3.4 использовалось жесткое ограничение в 4 ГБ для размера сериализованного объекта.Последняя версия протокола Pickle (версия 4.0) не имеет этого ограничения, просто укажите версию протокола:

pickle.dumps(obj, protocol=4)

Для более старых версий Python, пожалуйста, обратитесь к этому ответу: _pickle в python3 не делаетРабота с большими объемами данных

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