python - onehotencoder - sklearn
Python scikit-learn: clasificador entrenado de exportación (3)
Estoy usando un DBN (red de creencias profunda) de nolearn basado en scikit-learn.
Ya he creado una red que puede clasificar mis datos muy bien, ahora estoy interesado en exportar el modelo para la implementación, pero no sé cómo (estoy entrenando el DBN cada vez que quiero predecir algo). En matlab
solo exportaría la matriz de peso y la importaría en otra máquina.
¿Alguien sabe cómo exportar el modelo / la matriz de peso que se importará sin necesidad de volver a entrenar a todo el modelo?
Decapado / descosido tiene la desventaja de que solo funciona con las versiones de python correspondientes (principales y posiblemente también versiones menores) y sklearn, versiones de la biblioteca de joblib.
Existen formatos de salida descriptivos alternativos para modelos de aprendizaje automático, como el desarrollado 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 .
Así que tienes 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 colmena usando jpmml (por supuesto, tienes más opciones).
La sección 3.4. La persistencia del modelo en la documentación de scikit-learn cubre casi todo.
Además de sklearn.externals.joblib
ogrisel señalado, muestra cómo usar el paquete pickle 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 pueden no cargarse en otra versión.
Puedes usar:
>>> from sklearn.externals import joblib
>>> joblib.dump(clf, ''my_model.pkl'', compress=9)
Y luego, en el servidor de predicción:
>>> from sklearn.externals import joblib
>>> model_clone = joblib.load(''my_model.pkl'')
Esto es básicamente un pickle de Python con un manejo optimizado para grandes matrices numpy. Tiene las mismas limitaciones que el cambio de código pickle wrt normal: si la estructura de clase del objeto pickle cambia, es posible que ya no pueda desapilar el objeto con las 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 necesite escribir su propia capa IO (por ejemplo, utilizando herramientas de serialización de formato binario como búferes de protocolo o avro o una representación ineficaz pero portátil text / json / xml como PMML ) .