слишком много значений для распаковки (ожидается 2) в jupyter

#python #pickle #jupyter-lab #bz2

Вопрос:

Я использую сжатый рассол, чтобы сохранить результаты поиска сетки sklearn, используя следующий код.

 import pickle
import bz2
from sklearn.model_selection import RandomizedSearchCV

search = RandomizedSearchCV(estimator, param_distributions=param_dist,
                                   cv = cv, 
                                   n_jobs = 6
                                   )
with bz2.open('gridsearch.bz2', 'wb') as f:
        pickle.dump(search, f)
 

Затем я использую следующий код для получения объекта поиска.

 with bz2.open('gridsearch.bz2', 'rb') as f:
    search = pickle.load(f)
 

Загрузка рассола работает, когда я запускаюсь в виртуальной среде в терминале, но при запуске кода в лаборатории jupyter она выдает следующую ошибку. Я проверил версию пикля. Как виртуальная среда, так и лаборатория jupyter используют pickle 4.0.

 ---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-11-06b38588a6ad> in <module>
---> 23 with bz2.open('gridsearch.bz2', 'rb') as f:
     24    search = pickle.load(f)

~/.pyenv/versions/3.7.4/lib/python3.7/site-packages/scipy/stats/_distn_infrastructure.py in __setstate__(self, state)
    623 
    624     def __setstate__(self, state):
--> 625         ctor_param, r = state
    626         self.__init__(**ctor_param)
    627         self._random_state = r

ValueError: too many values to unpack (expected 2)
 

Кстати, я также пытался использовать файл .pickle вместо bz2. Эта проблема все еще возникает. Мы будем признательны за любые замечания и предложения.

Комментарии:

1. Попробуйте сначала установить его в переменную, например: данные = рассол. загрузить(открыть(‘gridsearch.pickle’, ‘rb’))

2. Версия pickle может быть одинаковой, но используют ли обе среды одну и ту же версию scipy?