¿Es la correlación el mejor algoritmo para encontrar similitud entre múltiples vectores?

Primero, solo quiero mencionar que una matriz 1D es simplemente un vector.

En este ejemplo, simplemente tomaría la Suma de las diferencias absolutas

En tu ejemplo:

Fan A: [“Batman Begins”: 7, “Primer”: 9.3]
Fan B: [“Batman Begin”: 8.5, “Primer”: 6]
Entrada: [“Batman Begin”: 6.5, “Primer”: 7]

Similitud de entrada al ventilador A = | 7-6.5 | + | 9.3-7 | = 0.5 + 2.3 = 2.8
Similitud de entrada al ventilador B = | 8.5-6.5 | + | 6-7 | = 2 + 1 = 3

Entonces la entrada está ‘más cerca’ del Fan A.

Esta es en realidad la distancia de Manhattan entre los vectores.

También puedes probar la distancia euclidiana

Entonces en este caso:

Similitud de entrada con el ventilador A = sqrt ((7-6.5) ^ 2 + (9.3-7) ^ 2) = 2.35372045919
Similitud de entrada con el ventilador B = sqrt ((8.5-6.5) ^ 2 + (6-7) ^ 2) = 2.2360679775

Entonces, con esta métrica, B en realidad está un poco más cerca.
(Nota: si usa esto, ya que solo está comparando las respuestas, puede omitir las raíces cuadradas para una buena optimización).

Pero para este ejemplo, me quedaría con la primera métrica porque los componentes en realidad no tienen nada que ver entre sí.

La correlación de Pearson está perfectamente bien.

Si centra sus datos (resta la media), entonces el coseno entre (A, B) es el mismo que la correlación.

Coseno (A, B) = A B / | A | | B |

Si centra sus datos y los normaliza (norma de cada vector = 1), entonces el producto interno entre A y B es una buena medida de similitud.