Сохранить (мариновать) Scipy KDE - PullRequest
0 голосов
/ 05 декабря 2018

Как я могу засолить или сохранить скудный кде для дальнейшего использования?

import scipy.stats as scs
from sklearn.externals import joblib

kde = scs.gaussian_kde(data, bw_method=.15)
joblib.dump(kde, 'test.pkl')

Я пробовал выше и получил эту ошибку:

PicklingError: Can't pickle <function gaussian_kde.set_bandwidth.<locals>.<lambda> at 0x1a5b6fb7b8>: it's not found as scipy.stats.kde.gaussian_kde.set_bandwidth.<locals>.<lambda>

1 Ответ

0 голосов
/ 05 декабря 2018

Похоже, у joblib возникли проблемы с методом set_bandwith, я думаю, из-за функции lambda в методе - здесь обсуждается лямбда-засолка .

with open('test.pkl', 'wb') as fo:  
    joblib.dump(lambda x,y: x+y, fo)

PicklingError: Can't pickle <function <lambda> at 0x7ff89495d598>: it's not found as __main__.<lambda>

cloudpickle и укроп оба работают, насколько я могу судить:

import cloudpickle
import dill

with open('test.cp.pkl', 'wb') as f:
    cloudpickle.dump(kde, f)  

with open('test.dill.pkl', 'wb') as f:
    dill.dump(kde, f)

with open('test.cp.pkl', 'rb') as f:
    kde_cp = cloudpickle.load(f)

with open('test.dill.pkl', 'rb') as f:
    kde_dill = dill.load(f)

Проверьте некоторые данные:

import numpy as np

print(np.array_equal(kde.dataset, kde_cp.dataset))
True
print(np.array_equal(kde.dataset, kde_dill.dataset))
True
print(np.array_equal(kde_cp.dataset, kde_dill.dataset))
True

kde.pdf(10) == kde_cp.pdf(10) == kde_dill.pdf(10)
array([ True])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...