Problema con get_params() en taller 2

Problema con get_params() en taller 2

de Sofia Pomies Oddo -
Número de respuestas: 3

Buenas tardes, en la parte 4 del taller 2 , al cargar los datos a comet, me da el siguiente error:

image.png
 
 
 
 El error parece venir del get_params()
 
 
image%20%281%29.png
 
Mi pipeline consiste de :
1- un primer pipeline que usa CountVectorizer()
2- luego un ColumnTransformer para aplicar el CountVectorizer a la columna "review"
3- un pipeline "completo" que tiene como primer step el ColumnTransformer del paso 2 y un siguiente paso de LogisticRegression()
 
¿Tienen idea porque podria surgirme este error?
 
 
 
 
 
 
 
En respuesta a Sofia Pomies Oddo

Re: Problema con get_params() en taller 2

de Sara Silva -

Buenas,

Creo que hay varias razones por las cuales te puede pasar eso, esencialmente te está diciendo que el nombre que le pusiste a tu column transformer no es válido, en este caso "0". Sin ver tu pipe2 no puedo darme cuenta si es esto pero te podría pasar si definiste tu ColumnTransformer así por ejemplo:

text_transformer = ColumnTransformer(
transformers=[
('0', CountVectorizer(), 'review')
]
)

Si no te suena nada de esto y no podés solucionar contame cómo definiste tu ColumnTransformer!

Saludos

En respuesta a Sara Silva

Re: Problema con get_params() en taller 2

de Sofia Pomies Oddo -

Buenas,

Mi pipeline es el siguiente:

image.png

Cualquier cosa yo voy el jueves y lo vemos ahí.

Saludos,

En respuesta a Sofia Pomies Oddo

Re: Problema con get_params() en taller 2

de Sara Silva -
Buenas,

Estuve viendo... La verdad tenés un error bastante particular jaja, me costó encontrar por dónde iba. Voy a hacerte un spoiler por si no te interesa toda la explicación del código, pero igual abajo te explico con un poco más de profundidad. En definitiva tener metido un ColumnTransformer adentro de un Pipeline te va a dar problemas si querés hacer el exp.log_parameters(Pipeline.get_params()), si querés hacerlo igual tenés que loggear los parámetros a mano a comet. Para eso te creas un diccionario a mano como el que te da Pipeline.get_params() pero todo con strings y listo, sobre esto si tenés alguna duda preguntá mañana. Ahora paso a explicarte por qué pasa esto, la cuestión medio a alto nivel es la siguiente:

- Si te fijás en tu diccionario de get_params() tenés uno de los ejementos que tiene como key "vectorizador" y como value ColumnTransformer(transformers=[('limp', CountVectorizer(), 'review')]) (fijate que, importante, no lo guarda como string entre "" sino que como el objeto ColumnTransformer).

- Lo que pasa internamente en la función de Comet es que va a ir recorriendo cada uno de los elementos del diccionario de parámetros y se fija varias cosas sobre cada key y cada value. Entre ellas, se fija si el value es una lista, y para eso trata de iterar sobre él en algún momento. Es decir va a tratar de hacer value[0], value[1] ... etc. Esto en la mayoría de los casos, ya sea si el value es un string, un número... entre otras cosas, no es un problema para el código de Comet, lo maneja bien, simplemente avisa que no es una lista.

-De todas formas cuando ese value es el ColumnTransformer, tratar de hacer ColumnTransformer[0] para ver si es una lista da un tipo de error (ese KeyError que te da) que el código de Comet no está preparado para procesar y entonces en vez de simplemente avisar que no es una lista se rompe (podés probarlo vos misma, o sea hacer preprocesamiento[0] en tu código y ver que te da el mismo error).

Por ahí viene el asunto, yo mañana no voy a estar en clase, si te queda alguna duda preguntame por acá o después de turismo te puedo mostrar dónde se rompe, aunque quizás saber que esa combinación de elementos no va a funcionar ya te basta.

Saludos,
Sara