Tengo un objeto que contiene dos scikit-learn , un IsolationForest y un RandomForestClassifier , que me gustaría decapar y luego descifrar y usar para producir predicciones. Además de los dos modelos, el objeto contiene un par de StandardScaler y un par de listas de Python.
Decapar este objeto usando joblib no es problemático, pero cuando trato de desempaquetarlo más tarde, obtengo la siguiente excepción:
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/(...)/python3.5/site-packages/joblib/numpy_pickle.py", line 578, in load obj = _unpickle(fobj, filename, mmap_mode) File "/home/(...)/python3.5/site-packages/joblib/numpy_pickle.py", line 508, in _unpickle obj = unpickler.load() File "/usr/lib/python3.5/pickle.py", line 1039, in load dispatch[key[0]](self) KeyError: 0 La misma aplicación encurte y desencurte el objeto, por lo que las versiones de scikit-learn , joblib y otras bibliotecas son las mismas. No estoy seguro de por dónde empezar a depurar, dado el vago error. ¿Alguna idea o sugerencia?
La solución a esto fue bastante banal: sin darme cuenta, estaba usando la versión de joblib en sklearn.externals.joblib para el decapado, pero una versión más nueva de joblib para decapar el objeto. El problema se resolvió cuando usé la versión más nueva de joblib para ambas tareas.
Conmigo, sucedió que exporté el modelo usando from sklearn.externals import joblib e intenté cargar usando import joblib .
La mía fue interesante. Estaba trabajando con git-lfs y, por lo tanto, los archivos se habían cambiado y joblib no podía abrirlos. Así que necesitaba ejecutar git lfs pull para obtener archivos reales. Entonces, si está utilizando versiones compatibles de joblib, ¡asegúrese de que sus archivos no se modifiquen de alguna manera!