sklearn
estimadores implementan métodos para hacer más fácil para que usted pueda guardar propiedades capacitado pertinente de un estimador. Algunos estimadores implementan __getstate__
métodos mismos, pero otros, como el GMM
sólo tiene que utilizar el base implementation, que simplemente guarda los objetos diccionario interior:
def __getstate__(self):
try:
state = super(BaseEstimator, self).__getstate__()
except AttributeError:
state = self.__dict__.copy()
if type(self).__module__.startswith('sklearn.'):
return dict(state.items(), _sklearn_version=__version__)
else:
return state
El método recomendado para guardar su modelo de disco consiste en usar el módulo pickle
:
from sklearn import datasets
from sklearn.svm import SVC
iris = datasets.load_iris()
X = iris.data[:100, :2]
y = iris.target[:100]
model = SVC()
model.fit(X,y)
import pickle
with open('mymodel','wb') as f:
pickle.dump(model,f)
Sin embargo, debe guardar datos adicionales para que pueda entrenar a su modelo en el futuro, o sufrir graves consecuencias (como estar encerrado en una versión antigua de sklearn).
Desde el documentation:
Con el fin de reconstruir un modelo similar con versiones futuras de scikit-learn, metadatos adicionales sería salvo a lo largo del escabeche modelo:
Los datos de entrenamiento, por ejemplo, una referencia a una instantánea inmutable
El código fuente de Python utilizada para generar el modelo
Las versiones de scikit-learn y sus dependencias
La validación cruzada puntuación obtenida en los datos de entrenamiento
Esto es especialmente cierto para Ensemble estimadores que se basan en el módulo tree.pyx
escrito en Cython (como IsolationForest
), ya que crea un acoplamiento a la implemen ción, que no se garantiza que sea estable entre las versiones de sklearn. Ha visto cambios hacia atrás incompatibles en el pasado.
Si sus modelos se vuelven muy grandes y la carga se convierte en una molestia, también puede utilizar la más eficiente joblib
. A partir de la documentación:
En el caso específico de la scikit, puede ser más interesante utilizar el reemplazo de JOBLIB de pickle
(joblib.dump
& joblib.load
), que es más eficiente en los objetos que llevan grandes conjuntos numpy internamente como es a menudo el caso de armarios scikit-learn estimadores, pero sólo puede salmuera en el disco y no a una cadena:
funciona como un encanto! Estaba tratando de usar np.savez y cargarlo todo el tiempo y eso nunca me ayudó. Muchas gracias. – Kartos