IIC2613-Inteligencia-Artificial-2022-1 / Syllabus

Repositorio base del curso, donde se publicarán enunciados, ayudantías y se resolverán dudas.
24 stars 7 forks source link

[T3] cambiar dimensiones de un vector, parte 2. #89

Closed ignacioarteaga99 closed 2 years ago

ignacioarteaga99 commented 2 years ago

Hola, en la actividad 4 de la parte 2 estoy intentando entrenar mi clasificador SVM con los datos del data frame , pero me tira el siguiente error al intentar hacer el fit:

ValueError: setting an array element with a sequence.

Entiendo que esto puede deberse a que el vector (que ocupa cada "casilla" de la columna a trabajar) puede tener dimensiones que no son manejables por el modelo. ¿Estoy bien o me equivoco en esto último? De hecho el error dice:


TypeError Traceback (most recent call last) TypeError: only size-1 arrays can be converted to Python scalars

The above exception was the direct cause of the following exception:

ValueError Traceback (most recent call last)

Estoy tratando de ver cómo hacer un resize de estos vectores para que pasen de 300 a 1 y pueda trabajar con ellos, pero no encuentro referencias ni documentación que me lo permita. Si tienen algún link a explorar feliz que me ayuden en ese sentido. Tampoco sé si estoy abordando bien este problema. Gracias!

aamedinaj commented 2 years ago

Hola, primero que todo el método fit trabaja bien con matrices y vectores (arrays 2d y 1d, respectivamente), así que si le estas pasando pandas.DataFrame's intenta convertirlos a arrays.

Por otra parte, siendo ya un array de numpy. Estos tienen el método .reshape() para modificar cómo se distribuyen las dimensiones.

Por último, se supone que cada texto va a ser convertido en un vector n-dimensional (por lo que entiendo en tu caso n=300). Y este vector va a tener asociado un label numérico (1d). Y esto se repetite para cada noticia que uses. Entonces deberías estar trabajando con una matriz de (n_noticias)×(dimensión_de_vector) y un vector de (n_noticias).

No sé si esto responde tu pregunta

ignacioarteaga99 commented 2 years ago

No entiendo muy bien cómo usar el reshape, al hacer lo siguiente: lista_vectores[1].reshape(1,1)

Me tira el siguiente error: ValueError Traceback (most recent call last) ~\AppData\Local\Temp/ipykernel_2932/3363269672.py in ----> 1 lista_vectores[1].reshape(1,1)

ValueError: cannot reshape array of size 300 into shape (1,1)

FeBalla commented 2 years ago

Tal como decía Pavel, no es necesario que lo conviertas a un dataframe, ya que realmente el verlo de forma tabular no te va a aportar nada más, porque la interpretación es compleja. Respecto al tamaño del vector, hay que tener cuidado con una cosa: no es lo mismo reducir el tamaño del vector de spaCy modificando la codificación; a redimensionar un arreglo cualquiera.

Cambiar la dimensión de un vector de spaCy implica aumentar/reducir las dimensiones del vector doc2vec del texto, lo que permitiría tener más/menos información de su contenido a cambio de un costo computacional. Por otra parte, redimensionar un vector de numpy no te permitiría pasar de un vector de 300 columnas a uno de 100.

El método reshape de numpy se usa para cambiar la distribución del contenido de un vector, como pasar de un vector fila a un vector columna, o de un vector cualquiera a una matriz. Dicho esto, son cosas diferentes e intuyo que, en tu caso, ninguna de las 2 opciones es realmente lo que necesitas. Probablemente, te bastaría con guardar los vectores en un arreglo y ya tendrías tu dataset :)

BrunoFarfan commented 2 years ago

Hola! Tengo el mismo error: TypeError: only size-1 arrays can be converted to Python scalars

Estoy buscando cómo solucionarlo, pero la verdad no encuentro mucho y por lo que comprendo, el error nace de que le estamos pasando un vector y no un solo número, pero eso es lo que sale en las instrucciones de la tarea, o me equivoco?

FeBalla commented 2 years ago

Hola! Tengo el mismo error: TypeError: only size-1 arrays can be converted to Python scalars

Estoy buscando cómo solucionarlo, pero la verdad no encuentro mucho y por lo que comprendo, el error nace de que le estamos pasando un vector y no un solo número, pero eso es lo que sale en las instrucciones de la tarea, o me equivoco?

Probablemente estén cometiendo algún error en el dataset que están creando. Cuando se usa el método fit de los modelos de sklearn, le pasas X e Y. Tu X debería ser un arreglo con varios vectores de spaCy, correspondientes a tus textos procesados y codificados.