Antecedentes: recién estoy comenzando con scikit-learn, y leo al final de la página sobre joblib, versus pickle .
puede ser más interesante usar el reemplazo de pickle de joblib (joblib.dump & joblib.load), que es más eficiente en big data, pero solo puede hacer pickle en el disco y no en una cadena
Leí estas preguntas y respuestas sobre Pickle, casos de uso comunes para pickle en Python y me pregunto si la comunidad aquí puede compartir las diferencias entre joblib y pickle. ¿Cuándo debería uno usar uno sobre otro?
python
pickle
scikit-learn
msunbot
fuente
fuente
Joblib
másPickle
? ¿Alguna desventaja deJoblib
eso que deberíamos considerar? Me acabo de enterarJoblib
recientemente y me parece interesante.¡Gracias a Gunjan por darnos este script! Lo modifiqué para los resultados de 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
fuente
Me encontré con la misma pregunta, así que probé esta (con Python 2.7) ya que necesito cargar un archivo pickle grande
#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
La salida para esto es
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
Según este joblib funciona mejor que el módulo cPickle y Pickle de estos 3 módulos. Gracias
fuente