La similitud de Jaccard , también llamada índice de Jaccard o coeficiente de Jaccard, es una medida simple para representar la similitud entre muestras de datos. La similitud se calcula como la relación entre la longitud de la intersección dentro de las muestras de datos y la longitud de la unión de las muestras de datos.
Se representa como –
J(A, B) = |A Ո B| / |A U B|
Se utiliza para encontrar la similitud o la superposición entre dos vectores binarios o vectores numéricos o strings. Se puede representar como J. También hay un término estrechamente relacionado asociado con la similitud de Jaccard que se denomina disimilitud de Jaccard o distancia de Jaccard. La distancia de Jaccard es una medida de la disimilitud entre las muestras de datos y se puede representar como (1 – J), donde J es la similitud de Jaccard.
Aplicaciones comunes de la similitud de Jaccard:
Jaccard Similarity se utiliza en múltiples aplicaciones de ciencia de datos y aprendizaje automático. Algunos de los casos de uso frecuentes que se encuentran en la vida real incluyen:
- Minería de texto: encontrar la similitud entre dos documentos de texto en función de la cantidad de términos utilizados en ambos documentos.
- Comercio electrónico: encontrar clientes similares a través de su historial de compras de una base de datos de ventas de miles de clientes y millones de artículos.
- Sistemas de recomendación: encontrar clientes similares en función de calificaciones y reseñas, por ejemplo, algoritmos de recomendación de películas, recomendación de productos, recomendación de dieta, recomendaciones de matrimonio, etc.
Fórmula y conceptos de similitud de Jaccard:
El valor de similitud de Jaccard varía de 0 a 1. Cuanto mayor sea el número, más similares serán los conjuntos de datos entre sí. Aunque es fácil de interpretar, es extremadamente sensible a conjuntos de datos de muestra más pequeños y puede dar resultados erróneos, por lo tanto, se debe tener cuidado al comprender los resultados.
Similitud de Jaccard para conjuntos numéricos:
Similitud de Jaccard (J) = (recuento de elementos comunes en ambos conjuntos) / (recuento de elementos en el primer conjunto + recuento de elementos en el segundo conjunto – recuento de elementos comunes en ambos conjuntos)
Donde (recuento de elementos en el primer conjunto + recuento de elementos en el segundo conjunto – recuento de elementos comunes en ambos conjuntos) = recuento de elementos únicos totales en ambos conjuntos.
Considerando A y B como dos conjuntos, se puede representar en forma simbólica como
J(A, B) = |A Ո B| / |A U B| = |A Ո B| / |A| + |B| - |A Ո B|
Ejemplo:
En este ejemplo, consideraremos que A y B son dos conjuntos respectivamente donde Conjunto A = {5, 10, 15, 20, 25, 30, 35,40, 45, 50} y Conjunto B = {10, 20, 30 , 40, 50, 60, 70, 80, 90, 100), A � B = { 10, 20, 30, 40, 50 } es decir, |A � B | = 5,AUB = {5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 60, 70, 80, 90, 100 } es decir, |AUB| = 15, por lo tanto, J(A, B) = |A � B| / |AUB| = 5/15 = 0,33333 y enunciarlo en lenguaje de programación R.
R
# Set A - numeric vector SetA <- c(5,10,15,20,25,30,35,40,45,50) # Set B - numeric vector SetB <- c(10,20,30,40,50,60,70,80,90,100) # Function for computing Jaccard Similarity jaccard_similarity <- function(A, B) { intersection = length(intersect(A, B)) union = length(A) + length(B) - intersection return (intersection/union) } # Jaccard Similarity between sets, A and B Jaccard_Similarity <- jaccard_similarity(SetA,SetB) Jaccard_Similarity # Jaccard Dissimilarity/Distance between sets, A and B Jaccard_Distance = 1 - Jaccard_Similarity Jaccard_Distance
Producción
Similitud de Jaccard para conjuntos binarios
Considerando A y B como dos vectores binarios,
Similitud de Jaccard (J) = (número de observaciones que son 1 en ambos vectores) / (número de observaciones que son 1 en ambos vectores + número de observaciones que son 0 para A y 1 para B + número de observaciones que son 1 para A y 0 para B)
La forma simbólica se convierte en
J(A, B) = a_11 / (a_11 + b_01 + c_10)
Donde a_11 = observaciones siendo 1 en ambos vectores
- b_01 = observaciones siendo 0 en A y 1 en B vector
- c_10 = observaciones siendo 1 en A y 0 en B vector
- d_00 = las observaciones son 0 en ambos vectores (no se requiere para el cálculo de la similitud de Jaccard)
Ejemplo:
Considere una tienda de comestibles que vende varios productos en la que el propietario de la tienda está interesado en descubrir la similitud entre dos clientes en función de las compras realizadas. Aquí 1 indica el producto que compraron los dos clientes y 0 indica que el producto no fue comprado por esos dos clientes.
|
Producto1 |
Producto2 |
Producto3 |
Producto4 |
Producto5 |
Producto6 |
Producto7 |
Producto8 |
Producto9 |
Producto10 |
---|---|---|---|---|---|---|---|---|---|---|
Cliente1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
Cliente2 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
R
# Install packages qvalue and jaccard and load # the library library(qvalue) library(jaccard) # Binary vectors A and B depicting purchase of # items by customers Binary_A <- c(0,1,0,0,0,1,0,0,1,1) Binary_B <- c(0,0,1,0,0,0,0,0,1,1) # Computing jaccard similarity between 2 binary # vectors A and B jaccard(Binary_A,Binary_B) # Computing jaccard distance between 2 binary # vectors A and B Jaccard_distance <- 1 - jaccard(Binary_A,Binary_B) Jaccard_distance
Producción
Similitud de Jaccard para conjuntos con strings
Similitud de Jaccard (J) = (número de strings coincidentes presentes en ambos conjuntos) / (número de strings en cualquiera de los conjuntos)
Considerando A y B como dos conjuntos, se puede representar en forma simbólica como
J(A, B) = |A Ո B| / |A U B|
Ejemplo :
Sean A y B dos conjuntos de strings donde
Establecer A = { ‘Juan’, ‘es’, ‘va’, ‘a’, ‘el’, ‘mercado’, ‘hoy’, ‘a’, ‘comprar’, ‘pastel’} y
Conjunto B = {‘Tim’, ‘is’, ‘at’, ‘the’, ‘shop’, ‘ya’, ‘for’, ‘comprando’, ‘two’, ‘cakes’}
Encuentre la similitud de Jaccard entre los dos conjuntos.
R
# Install package "bayesbio" and load the library library(bayesbio) # Two strings "String_A" and "String_B" as sets String_A < - c("John", "is", "going", "to", "the", "market", "today", "to", "buy", "cake") String_B < - c("Tim", "is", "at", "the", "shop", "already", "for", "buying", "two", "cakes") # Computing Jaccard similarity between strings word # by word # Note - value 0 denotes complete match and 1 denotes # no match as per "stringdist" function stringdist(String_A, String_B, method='jaccard') # Computing Jaccard similarity between strings overall jaccardSets(String_A, String_B) # Computing Jaccard distance jaccard_distance = 1 - jaccardSets(String_A, String_B) jaccard_distance
Producción
Publicación traducida automáticamente
Artículo escrito por ghoshsupriya2211 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA