¿Cómo calcular la similitud de Jaccard en R?

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *