Cosine similarity en espacios vectoriales

Autor: | Última modificación: 12 de abril de 2024 | Tiempo de Lectura: 3 minutos
Temas en este post: ,

Algunos de nuestros reconocimientos:

Premios KeepCoding

¿Sabías que se puede aplicar cosine similarity en espacios vectoriales? En un ejercicio sobre espacios vectoriales realizado en otro post, modelamos algunos prototipos de coches en un espacio vectorial. Los datos que teníamos eran:

ModeloPrecio (€)Velocidad máximaTiempo de aceleración
Porsche Taycan110000280 km/h3.8 s
Tesla390000260 km/h3.5 s
BMW i360000160 km/h7 s

Con estos datos construimos un espacio vectorial para los tres modelos con las diferentes características que estos representaban:

Cosine similarity en espacios vectoriales
Cosine similarity en espacios vectoriales

Ahora, veamos un ejercicio de cosine similarity en espacios vectoriales y tratemos de medir la similitud entre los distintos coches que tenemos en nuestro espacio vectorial.

Cosine similarity en espacios vectoriales

Para este ejercicio de cosine similarity en espacios vectoriales vamos a hacer uso de la librería sklearn, que tiene implementado internamente el cosine similarity.

Lo primero que haremos será importar la librería que necesitamos. El StandardScaler es necesario, porque hay que estandarizar. También tendremos que definir el scaler, posteriormente le introduciremos x (esto lo hacemos con el .fit).

Hasta aquí lo único que hemos hecho es calcular la media y la varianza de nuestros datos. Ahora, con transform, se lo estaríamos aplicando a nuestros datos. Lo que hace transform es transformar los datos usando la media y la varianza calculada con anterioridad.

#cosine similarity en espacios vectoriales
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler ()

#scaler.fit (X) #Calcular media y varianza de nuestros datos por columna
#X_scaler = scaler.transform (X)

X_scaler = scaler.fit_transform (X)
print (X_scaler)

Si imprimimos esto, vemos cómo han cambiado bastante los datos.

[[1.13554995 0.88900089 -0.61028968]

[0.16222142 0.50800051 -0.79968993]

[-1.29777137 -1.3970014 1.40997962]]

Los datos de antes eran 110000, 90000, 60000, etc. Ahora vemos que casi todos los datos que nos han resultado están entre la media y apreciamos cómo el rango de valores es muy parecido.

Para calcular la similitud, vamos a usar cosine similarity en espacios vectoriales. Le vamos a introducir al cosine similarity, entre paréntesis, los valores escalados y los valores escalados, es decir, los valores escalados dos veces.

#cosine similarity en espacios vectoriales
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler ()

#scaler.fit (X) #Calcular media y varianza de nuestros datos por columna
#X_scaler = scaler.transform (X)

X_scaler = scaler.fit_transform (X)
print (X_scaler)
print ('\n')

#Calcular similitud
similarities = cosine_similarity (X_scaler, X_scaler)
print (similarities)

[[1. 0.74666083 -0.96296773]

[0.74666083 1. -0.89836063]

[-0.96296773, -0.89836063 1. ]]

Le hemos pasado dos parámetros que son la misma cosa. El primero lo que hará será imprimirnos una matriz.

Vamos a visualizarlo en una tabla:

ModelosTaycanTeslai3
Taycan10.746-0.624
Tesla0.7461-0.898
i3-0.9620.8981
cosine similarity en espacios vectoriales

Podemos ver que los modelos Taycan y Tesla son más parecidos entre ellos y que poco tienen de similitud el Taycan o el Tesla con el i3. Dada la anterior tabla, podemos observar que Taycan y Taycan, Tesla y Tesla e i3 e i3 son iguales, por eso la similitud es igual a 1.

Con esta función la similitud da entre -1 y 1, no entre 0 y 1, como se podría llegar a pensar.

Observamos que la similitud entre el Tesla y el Taycan es de 0.746, pero la similitud entre el Taycan y el i3 es -0.962; esto significa que es muy dispar. Asimismo, tenemos que la relación entre el Tesla y el i3 es -0.898, que también es muy dispar.

¿Cómo continuar?

Ahora que hemos visto cómo funciona la estructura de un espacio vectorial, puedes seguir aprendiendo sobre Big Data, una de las disciplinas más demandadas hoy en día. Para ello, entra a nuestro Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, la formación intensiva e íntegra en la que podrás adquirir todos los conocimientos teóricos y prácticos necesarios para adentrarte en el mercado laboral en poco tiempo. ¡Anímate a impulsar tu carrera laboral y solicita ya mismo más información!

Posts Relacionados

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado