similitud distancia coseno calculo arrays r distance similarity cosine

arrays - distancia - calculo de similitud de coseno



Encuentra similitud coseno entre dos matrices (6)

Me pregunto si hay una función incorporada en R que pueda encontrar la similitud de coseno (o distancia de coseno) entre dos matrices

Actualmente, implementé mi propia función, pero no puedo evitar pensar que R ya debería venir con una.


Este tipo de preguntas surgen todo el tiempo (para mí, y como lo demuestra la lista de preguntas SO etiquetadas con r : otras también):

¿hay una función, ya sea en el núcleo R o en cualquier paquete R, que hace x? y de ser así,

¿Dónde puedo encontrarlo entre los paquetes +2000 R en CRAN?

respuesta corta: pruebe el paquete sos cuando surjan este tipo de preguntas

Una de las respuestas anteriores dio coseno junto con un enlace a su página de ayuda. Probablemente esto es exactamente lo que quiere el OP. Cuando mira la página enlazada a, ve que esta función está en el paquete lsa .

Pero, ¿cómo encontraría esta función si no supiera en qué Paquete buscarla?

siempre puedes probar las funciones de ayuda estándar de R (">" a continuación solo significa la línea de comando R):

> ?<some_name> > ??<some_name> > *apropos*<some_name>

si estos fallan, entonces instale y cargue el paquete sos , entonces

***findFn***

findFn también tiene un alias de "???", aunque no lo uso a menudo porque no creo que puedas pasar argumentos que no sean el nombre de la función

Para la pregunta aquí, prueba esto:

> library(sos) > findFn("cosine", maxPages=2, sortby="MaxScore")

Los argumentos adicionales pasados ​​en ("maxPages = 2" y "sortby =" MaxScore ") solo limitan el número de resultados devueltos, y especifican cómo se clasifican los resultados, respectivamente, es decir," encuentre una función llamada ''coseno'' o que tiene el término ''coseno'' en la descripción de la función, solo devuelve dos páginas de resultados y ordénelos por puntuación de relevancia descendente "

La llamada findFn anterior devuelve un marco de datos con nueve columnas y los resultados como filas, representados como HTML.

Escaneando la última columna, Descripción y Enlace , elemento (fila) 21, se encuentra:

Medidas Cosinas (Matrices)

este texto es también un enlace; al hacer clic en él, se accede a la página de ayuda para esa función en el Paquete que contiene esa función, en otras palabras

utilizando findFn , puede encontrar rápidamente la función que desea aunque no tenga idea de en qué paquete se encuentra



Parece que ya hay algunas opciones disponibles, pero acabo de encontrar una solución idiomática que me gusta, así que pensé en agregarla a la lista.

install.packages(''proxy'') # Let''s be honest, you''ve never heard of this before. library(''proxy'') # Library of similarity/dissimilarity measures for ''dist()'' dist(m, method="cosine")


Si tiene una matriz de productos de puntos, puede usar esta función para calcular la matriz de similitud de coseno:

get_cos = function(S){ doc_norm = apply(as.matrix(dt),1,function(x) norm(as.matrix(x),"f")) divide_one_norm = S/doc_norm cosine = t(divide_one_norm)/doc_norm return (cosine) }

La entrada S es la matriz del producto de puntos. Simplemente, S = dt %*% t(dt) , donde dt es su conjunto de datos.

Esta función es básicamente dividir el producto de puntos por las normas de los vectores.



Tomando el comentario de Jonathan Chang, escribí esta función para imitar dist. No hay paquetes adicionales para cargar.

cosineDist <- function(x){ as.dist(1 - x%*%t(x)/(sqrt(rowSums(x^2) %*% t(rowSums(x^2))))) }