====== Variacije na Jaccarda ====== 4-5. februar 2022\\ [[vlado:work:2m:salton|Salton]] ===== Jaccard 1 ===== Obstaja nekaj posplošitev Jaccardove podobnosti J(x,y) na (nenegativne) realne vektorje. Morda najbolj znana je (Ružička)\\ J1(x,y) = ∑i min(xi,yi) / ∑i max(xi,yi)\\ Hitro lahko preverimo, da za dvojiška vektorja x in y velja ∑i min(xi,yi) = | X ∩ Y | in ∑i max(xi,yi) = | X ∪ Y |. Torej je res J1(x,y) = J(x,y).\\ Žal se ta mera ne obnese dobro za vektorje, ki vsebujejo negativne člene.\\ ===== Jaccard 2 ===== Druga posplošitev Jaccardove podobnosti je\\ J2(x,y) = x∙y / ( (x-y)2 + x∙y ) za x ≠ 0 in y ≠ 0; in J2(0,0) = 1. kjer je x∙y skalarni produkt. Zopet za dvojiška vektorja x in y velja x∙y = | X ∩ Y | ter (x-y)2 + x∙y = | X ∪ Y |. Za splošne realne vektorje veljajo lastnosti: * J2(x,y) = J2(y,x) * J2(x,y) ≤ 1 * J2(x,y) = 1 ⇔ x = y * J2(a.x,a.y) = J2(x,y) za a ∈ ℝ. Za nenegativna vektorja x in y je J2(x,y) ≥ 0. Toda v primeru y = -x dobimo * J2(x,-x) = -1/3 Če pogledamo nekoliko splošneje, dobimo J2(x,a.x) = a / ( (1-a)2 + a ) > f <- function(x) x/((1-x)**2+x) > curve(f(x), from=-3, to=3, xlab="x", ylab="y") {{vlado:work:pics:j2a.png?350}}\\ Zgleda, da je -1/3 najmanjša možna vrednost mere J2. Izkaže se, da to drži. Dokaz je kratek: veljavno neenakost 0 ≤ (x+y)2 preoblikujemo v -3 x∙y ≤ (x-y)2 + x∙y kar pomeni * J2(x,y) ≥ -1/3 ; enačaj velja ntk. x = -y . Mero J2 spravimo na interval [1,0] s pretvorbo\\ J3(x,y) = (3.J2(x,y) + 1)/4\\ Preizkusimo jo! > D <- matrix(1,nrow=44,ncol=44) > colnames(D) <- rownames(D) <- nam > Jv <- function(x,y) x %*% y / ((x-y) %*% (x-y) + x %*% y) > for(i in 1:43) for(j in (i+1):44) D[i,j] <- D[j,i] <- (3*Jv(W[,i],W[,j])+1)/4 > disD <- as.dist(1-D,diag=FALSE,upper=FALSE) > t <-hclust(disD,method="complete") > plot(t,hang=-1,cex=1,main="vector Jaccard / Complete") Za februarske podatke dobimo drevo združevanja {{vlado:work:pics:vjaccardcom.pdf}}, ki določa isto razvrstitev kot drevo dobljeno za Saltonovo kosinusno podobnost {{vlado:work:pics:saltonwcom.pdf}}.\\ Zakaj je temu tako mi še ni jasno. Monotona povezanost? Če izraz za J3 (poenostavimo) izrazimo s skalarnimi produkti, dobimo\\ J3(x,y) = ( (x+y)/2 )2/( (x-y)2 + x∙y ) ===== Manhattan-Jaccard ===== Poskusil sem še različnost, ki na Manhattanski razdalji uporabi Jaccardovo normalizacijo\\ MJ(x,y) = ∑i wi . |xi - yi| / | X ∪ Y | > MJ <- function(x,y) sum(w*abs(x-y))/sum(abs(x)+abs(y)>0) > for(i in 1:43) for(j in (i+1):44) D[i,j] <- D[j,i] <- MJ(P[,i],P[,j]) > diag(D) <- 0 > disD <- as.dist(D,diag=FALSE,upper=FALSE) > tm <-hclust(disD,method="complete") > plot(tm,hang=-1,cex=1,main="Manhattan-Jaccard / weighted / Complete") > S <- 1/(1 + D) > matrix2net(S,Net="MatJac.net") Dobimo razvrstitev {{vlado:work:pics:manjaccwcom.pdf}}, ki je precej podobna Saltonovi in posplošeni Jaccardovi J3. Tu je še ustrezno omrežje po dveh najbližjih sosedov {{vlado:work:pics:manjac.pdf}}. ===== Povezave ===== * [[https://stats.stackexchange.com/questions/483903/is-jaccard-similarity-distance-suitable-for-non-binary-quantitative-data|Is Jaccard similarity distance suitable for non binary quantitative data]] * [[https://apps.dtic.mil/sti/pdfs/AD1026967.pdf]] * [[https://en.wikipedia.org/wiki/Jaccard_index|Jaccard index]] * [[https://hal.archives-ouvertes.fr/hal-03410273/document|On similarity]] * [[https://www.leydesdorff.net/cosinevspearson/cosinevspearson.pdf]]