Tło: dopiero zaczynam pracę ze scikit-learn i czytam na dole strony o joblib i marynacie .
bardziej interesujące może być użycie zamiennika pickle z joblib (joblib.dump & joblib.load), który jest bardziej wydajny w przypadku dużych zbiorów danych, ale może tylko wytrawiać na dysku, a nie na łańcuchu
Czytałem te pytania i odpowiedzi na temat Pickle, Typowe przypadki użycia marynaty w Pythonie i zastanawiam się, czy społeczność tutaj może dzielić się różnicami między joblib i marynatą? Kiedy należy używać jednego nad drugim?
python
pickle
scikit-learn
msunbot
źródło
źródło
Joblib
ponadPickle
? Jakieś wady tegoJoblib
, co powinniśmy rozważyć? Właśnie o tymJoblib
niedawno słyszałem i brzmi to dla mnie interesująco.Dziękujemy Gunjan za udostępnienie nam tego scenariusza! Zmodyfikowałem go dla wyników Python3
#comapare pickle loaders from time import time import pickle import os import _pickle as cPickle from sklearn.externals import joblib file = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'database.clf') t1 = time() lis = [] d = pickle.load(open(file,"rb")) print("time for loading file size with pickle", os.path.getsize(file),"KB =>", time()-t1) t1 = time() cPickle.load(open(file,"rb")) print("time for loading file size with cpickle", os.path.getsize(file),"KB =>", time()-t1) t1 = time() joblib.load(file) print("time for loading file size joblib", os.path.getsize(file),"KB =>", time()-t1) time for loading file size with pickle 79708 KB => 0.16768312454223633 time for loading file size with cpickle 79708 KB => 0.0002372264862060547 time for loading file size joblib 79708 KB => 0.0006849765777587891
źródło
Natknąłem się na to samo pytanie, więc wypróbowałem to (z Pythonem 2.7), ponieważ muszę załadować duży plik marynaty
#comapare pickle loaders from time import time import pickle import os try: import cPickle except: print "Cannot import cPickle" import joblib t1 = time() lis = [] d = pickle.load(open("classi.pickle","r")) print "time for loading file size with pickle", os.path.getsize("classi.pickle"),"KB =>", time()-t1 t1 = time() cPickle.load(open("classi.pickle","r")) print "time for loading file size with cpickle", os.path.getsize("classi.pickle"),"KB =>", time()-t1 t1 = time() joblib.load("classi.pickle") print "time for loading file size joblib", os.path.getsize("classi.pickle"),"KB =>", time()-t1
Wynik tego jest
time for loading file size with pickle 1154320653 KB => 6.75876188278 time for loading file size with cpickle 1154320653 KB => 52.6876490116 time for loading file size joblib 1154320653 KB => 6.27503800392
Zgodnie z tym joblib działa lepiej niż moduł cPickle i Pickle z tych 3 modułów. Dzięki
źródło