Saltar al contenido

Python scikit-learn: exportar clasificador entrenado

No olvides que en la informática cualquier problema casi siempere suele tener diversas soluciones, pero nosotros aquí mostramos la mejor y más óptimo.

Solución:

Primero, instale joblib.

Puedes usar:

>>> import joblib
>>> joblib.dump(clf, 'my_model.pkl', compress=9)

Y luego, en el servidor de predicciones:

>>> import joblib
>>> model_clone = joblib.load('my_model.pkl')

Esto es básicamente un encurtido de Python con un manejo optimizado para matrices de números grandes. Tiene las mismas limitaciones que el cambio de código de pickle wrt normal: si la estructura de clases del objeto pickle cambia, es posible que ya no pueda deshacer el objeto con nuevas versiones de nolearn o scikit-learn.

Si desea una forma robusta a largo plazo de almacenar los parámetros de su modelo, es posible que deba escribir su propia capa de E / S (por ejemplo, utilizando herramientas de serialización de formato binario como búferes de protocolo o avro o una representación ineficiente pero portátil de texto / json / xml como PMML) .

El decapado / despegado tiene la desventaja de que solo funciona con versiones de python coincidentes (versiones principales y posiblemente también menores) y sklearn, versiones de la biblioteca joblib.

Existen formatos de salida descriptivos alternativos para los modelos de aprendizaje automático, como los desarrollados por el Grupo de minería de datos, como el lenguaje de marcado de modelos predictivos (PMML) y el formato portátil para análisis (PFA). De los dos, PMML es mucho mejor compatible.

Por lo tanto, tiene la opción de guardar un modelo de scikit-learn en PMML (por ejemplo, usando sklearn2pmml), y luego implementarlo y ejecutarlo en java, spark o hive usando jpmml (por supuesto, tiene más opciones).

La sección 3.4. La persistencia del modelo en la documentación de scikit-learn cubre prácticamente todo.

Además de sklearn.externals.joblib ogrisel señaló, muestra cómo usar el paquete de pepinillos regular:

>>> from sklearn import svm
>>> from sklearn import datasets
>>> clf = svm.SVC()
>>> iris = datasets.load_iris()
>>> X, y = iris.data, iris.target
>>> clf.fit(X, y)  
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.0,
  kernel='rbf', max_iter=-1, probability=False, random_state=None,
  shrinking=True, tol=0.001, verbose=False)

>>> import pickle
>>> s = pickle.dumps(clf)
>>> clf2 = pickle.loads(s)
>>> clf2.predict(X[0])
array([0])
>>> y[0]
0

y da algunas advertencias, como que los modelos guardados en una versión de scikit-learn podrían no cargarse en otra versión.

Si sostienes alguna desconfianza y capacidad de refinar nuestro enunciado eres capaz de escribir una aclaración y con gusto lo interpretaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *