Cómo calcular la similitud del coseno de 2 vectores cuando el elemento de cada vector tiene un rango diferente

¿Cómo encuentro la similitud de coseno entre dos vectores y cada elemento del vector tiene un rango diferente? Por ejemplo, cada vector tiene dos elementos, V = {v[0], v[1]}como {edad, altura}, donde la edad varía de 30 a 70, y la altura varía de 100 cm a 200 cm, v1 = {20, 175}, v2 = {35,192}se dan dos vectores de ejemplo .

Sé que la similitud de coseno ( sim) se define como sim = (v1 dot v2 ) / (|v1| * |v2|), donde punto es el producto escalar entre v1 y v2, | v | es la magnitud de un vector Pero esto se basa en la suposición de que cada elemento en el vector V tiene el mismo rango de datos y no se aplica cuando cada elemento tiene un rango diferente, como el caso que usé aquí.

Una cosa que se me ocurre es aplicar un vector de pesos W = {w[0],w[1]}a cada vector v1 y v2 aquí para normalizar cada elemento en el vector.

Es decir

weighted_sim = ( sum (w[i] * v1[i] * v2[i]) )  / sqrt ( (sum (w[i] *v1[i]^2 ) ) * ( sum (w[i] *v2[i]^2 ) ) )

Pero tengo dificultades para descifrar el vector de pesos W aquí.

¿Podría alguien ayudarme aquí? Muchas gracias.

Respuesta 1

Simplemente normalizaría ambas mediciones para ubicarlas en el rango [0,1]. Entonces la edad normalizada sería (real_age-30)/(70-30)y la altura normalizada sería (real_height-100)/(200-100). Observo que su vector de ejemplo V1tiene una edad de 20 años, que se encuentra fuera del rango que ha especificado.

Estos cálculos no le dan pesos que pueda aplicar a sus datos sin procesar mediante una simple multiplicación. Primero calcularía los vectores normalizados, luego la similitud del vector entre ellos.

Respuesta: 2

Antecedentes: mi objetivo es recopilar varias marcas de tiempo mientras ejecuto las pruebas JUnit 5 en un entorno Spring para crear una estadística de las duraciones de las diferentes tareas. (Repositorio para referencia) ...

Actualmente ejecutamos el tomcat 8.5 como servicio de Windows. ¿Cómo es posible pasar una propiedad de Java, es decir, a través del parámetro -D al inicio del servicio? podemos pasar un parámetro a través de ...

Tengo un cuadro de diálogo de selección de contenido filtrado y, en el menú Ver, tengo casillas de verificación que agregan un filtro adicional. Debe funcionar exactamente como la casilla de verificación "Mostrar recursos derivados" de "Abrir recurso ...

Los ejemplos en la documentación de AWS muestran cómo conectarse a AWS Neptune usando Gremlin de la siguiente manera: Cluster.Builder builder = Cluster.build (); builder.addContactPoint ("su-punto final de neptuno"); constructor....