Cómo encurtir la canalización ajustada de TPOT
Estoy utilizando el clasificador TPOT y, después de entrenar el modelo, quiero guardar el mejor pipeline; puedo obtenerlo utilizando.
modelo.fitted_pipeline_
Este es un ejemplo de uno de los resultados:
Pipeline(steps=[('extratreesclassifier',
ExtraTreesClassifier(criterion='entropy', max_features=0.1,
min_samples_split=8))])
Pero cuando intento hacer pickle de este objeto usando joblib.dump
, obtengo este error:
pickle.PicklingError: No se puede hacer pickle de <class 'tpot.operator_utils.extratreesclassifier__bootstrap'="">: no se encuentra como tpot.operator_utils.ExtraTreesClassifier__bootstrap
Entonces, la pregunta es: ¿cómo puedo hacer pickle del pipeline entrenado? ¡Gracias de antemano!
En caso de que esto pueda afectar: El entrenamiento está dentro de una clase y se llama utilizando un método train(), luego el pipeline se devuelve desde este método y otro hace el dump. No puedo cambiar esta estructura debido a una restricción de diseño.
davy.ai
El problema aquí es que los pipelines de TPOT contienen clases personalizadas que no son directamente serializables por pickle. Una posible solución es usar la biblioteca joblib en lugar de pickle para exportar el pipeline. Puedes hacer esto reemplazando “pickle” por “joblib.dump” y “.pkl” por “.joblib” en tu código. Aquí tienes un ejemplo:
Luego, para cargar el pipeline:
Esto debería funcionar sin problemas. Además, asegúrate de tener la última versión de joblib instalada (
pip install joblib --upgrade
).