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] Redimencionar Vectores #95

Closed Jesusdelgad closed 2 years ago

Jesusdelgad commented 2 years ago

Hola no entiendo como redimensionar mi vector, se que se utiliza esto: https://spacy.io/api/vectors#resize pero no entiendo la documentación:(

aamedinaj commented 2 years ago

Si quieres redimensionar el vector que entrega spaCy por la actividad 3.4, hay otras técnicas, por ejemplo PCA, para llevar un vector de dimensión x a uno de dimensión y. Sin embargo, esto no es necesario, es solo una sugerencia por si tenían tiempo de experimentar. Puedes mantener el vector original y seguir adelante con ese. Espero que eso responda tu pregunta.

Jesusdelgad commented 2 years ago

Sii gracias Pavel , tengo una pequeña duda cuando dice "crea un nuevo set de datos que tenga la representación vectorial (doc2vec) de los textos." debo crear un nuevo data frame con la columna "doc2vec" solamente?, o debo agregar la columna "doc2vec" a la data frame de antes?, muchas gracias de antemano y gracias por la velocidad de la respuesta jajaja

aamedinaj commented 2 years ago

[inmediatamente después de responder me fui a acostar así que no pude mantener la velocidad]

lo del nuevo set es que, por ejemplo tu tenias 2 o 3 columnas que eran las noticias y su categoría, y lo estarías pasando a una matriz X (con tantas filas como noticias, y con tantas columnas como el vector de cada noticia) y un vector numérico y representando las categorías. Y eso se consideraría un nuevo dataset con el que trabajar.

Jesusdelgad commented 2 years ago

Jajaja no pasa nada, iwal me fui a dormir. Haber si entendi ,yo me quede solo con un columna de texto y sus categorías, debo agregar a esta data la columna de vectores de acuerdo al texto de cada fila cierto?

aamedinaj commented 2 years ago

No es necesario mantenerlas, lo que sea más cómodo para trabajarlas después. De hecho, ni siquiera es necesario mantenerlo en el mismo formato dataframe; X e y pueden ser arrays de numpy (matriz y vector, respectivamente).

Puedes, sin embargo, hacer lo que dices de agregarlo al dataframe original. Pero se recomienda separarlo de este para trabajarlo más cómodamente.

Lo importante es que después vas a tener que entrenar al modelo con estos nuevos matriz-vector, y por defecto recibe solo datos numéricos (así que conviene poco mezclarlos con los textos originales)

Jesusdelgad commented 2 years ago

Valee crack intentare hacer lo que me dices!

Jesusdelgad commented 2 years ago

Disculpa que te moleste de nuevo , pero ahora mismo tengo 2 columnas en mi base de datos, el texto y su categoría (numéricas), esta será mi matriz "X", ahora el vector "y", será mis categorías pero como representación vectorial?, es que ahí me confundí porque el enunciado dice que el vector debe ser de los textos o por lo menos eso entiendo yo: "crea un nuevo set de datos que tenga la representación vectorial (doc2vec) de los textos."

FeBalla commented 2 years ago

Hola Jesús,

Siguiendo en la misma línea de Pavel. Tu nuevo dataset debería tener 2 columnas: una con las features, digamos X; y otra con las etiquetas, digamos y. La columna de las etiquetas es evidente, pues es parte del dataset original (los números para cada categoría de noticia).

Para el caso de X, son simplemente los vectores que representan a tu texto usando spaCy. Esa representación de spaCy es la representación vectorial o doc2vec de un texto.

EDIT: De todos modos, no es necesario que lo veas como un dataframe de 2 columnas. Bastaría con tener un arreglo con los vectores para X y otro vector con las etiquetas para y.

Jesusdelgad commented 2 years ago

Claro comprendo, pero me surge otra duda que es lo que he estado intentado hacer durante toda la tarde pero no puedo , (había encontrado una forma pero llevaba 1 hora de ejecución), como logro separa cada número en cada columna de forma eficiente?, me imagine un diccionario u algo por el estilo pero no lo logro hacer:( P1

FeBalla commented 2 years ago

Podrías partir por crear un dataframe de 301 columnas: 300 para cada entrada del vector y 1 para la etiqueta. Luego, para agregar una fila, es fácil, podrías googlear y verás que hay un montón de formas de hacerlo directamente con arreglos.

Sin embargo, no te recomendaría hacerlo de esta manera, más que nada porque no te aporta mucho el hecho de tenerlo como dataframe, ya que no tienes una interpretación directa de las columnas.

Te recomendaría tener dos arreglos: X e y. Al arreglo X agrégale todos los vectores, mientras que el arreglo y es el de las etiquetas. Con eso bastaría con hacer model.fit(X, y) a tu SVM.

Jesusdelgad commented 2 years ago

Muchas gracias ahi logre sacar lo que me dijieron, se pasaron, hare una issue nueva es que me sale un error al momento de utilizar el SVC.