es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for 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:

    import joblib
    
    # entrena tu modelo y obtén el pipeline
    ...
    pipeline_entrenado = modelo.pipeline_entrenado_
    
    # exporta el pipeline usando joblib
    joblib.dump(pipeline_entrenado, 'mi_pipeline.joblib')
    

    Luego, para cargar el pipeline:

    # carga el pipeline usando joblib
    pipeline_cargado = joblib.load('mi_pipeline.joblib')
    

    Esto debería funcionar sin problemas. Además, asegúrate de tener la última versión de joblib instalada (pip install joblib --upgrade).

Comments are closed.