Wprowadzenie do podobieństwa jaro – winklera (definicja i przykład)
W statystyce podobieństwo Jaro-Winklera jest sposobem pomiaru podobieństwa między dwoma ciągami znaków.
Podobieństwo Jaro (sim j ) pomiędzy dwoma ciągami znaków definiuje się jako:
sim j = 1/3 * ( m /|s 1 | + m/|s 2 | + (mt)/m )
Złoto:
- m : Liczba pasujących znaków
- Dwa znaki s 1 i s 2 uważa się za pasujące, jeśli są takie same i nie dalej niż [max(|s 1 |, |s 2 |) / 2] – 1 znak od siebie.
- |s 1 | , |s 2 | : Długość odpowiednio pierwszego i drugiego ciągu
- t : Liczba transpozycji
- Obliczane jako liczba pasujących znaków (ale w innej kolejności) podzielona przez 2.
Podobieństwo Jaro-Winklera (sim w ) definiuje się jako:
sim w = sim jot + lp(1 – sim jot )
Złoto:
- sim j : Podobieństwo Jaro pomiędzy dwoma ciągami znaków, s 1 i s 2
- l : Długość wspólnego przedrostka na początku ciągu (maks. 4 znaki)
- p : Współczynnik skalowania wskazujący, jak bardzo wynik jest korygowany w górę, aby mieć wspólne przedrostki. Zwykle definiuje się to jako p = 0,1 i nie powinno przekraczać p = 0,25.
Podobieństwo Jaro-Winklera między dwoma ciągami znaków zawsze mieści się w przedziale od 0 do 1, gdzie:
- Wartość 0 oznacza brak podobieństwa między ciągami
- 1 wskazuje, że ciągi są dokładnie zgodne
Uwaga : Odległość Jaro-Winklera będzie zdefiniowana jako 1 – sim w .
Poniższy przykład pokazuje, jak w praktyce obliczyć podobieństwo Jaro-Winklera między dwoma ciągami znaków.
Przykład: obliczenie podobieństwa Jaro-Winklera pomiędzy dwoma strunami
Załóżmy, że mamy następujące dwa ciągi:
- Kanał 1 (s 1 ): mysz
- Kanał 2 (s 2 ): wyciszenie
Najpierw obliczmy podobieństwo Jaro między tymi dwoma ciągami:
sim j = 1/3 * ( m /|s 1 | + m/|s 2 | + (mt)/m )
Złoto:
- m : Liczba pasujących znaków
- Dwa znaki s 1 i s 2 uważa się za pasujące, jeśli są takie same i nie dalej niż [max(|s 1 |, |s 2 |) / 2] – 1 znak od siebie.
W tym przypadku [max(|s 1 |, |s 2 |) / 2] – 1 oblicza się jako 5/2 – 1 = 1,5. Zdefiniowalibyśmy trzy litery jako odpowiadające: m, u, e. Zatem m = 3 .
- |s 1 | , |s 2 | : Długość odpowiednio pierwszego i drugiego ciągu
W tym przypadku |s 1 | = 5 i |s 1 | = 4 .
- t : Liczba transpozycji
- Obliczane jako liczba pasujących znaków (ale w innej kolejności) podzielona przez 2.
W tym przypadku istnieją trzy pasujące znaki, ale są już w tej samej kolejności, więc t = 0 .
Zatem obliczylibyśmy podobieństwo Jaro w następujący sposób:
sim j = 1/3 * (3/5 + 3/4 + (3-0)/3) = 0,78333.
Następnie obliczmy podobieństwo Jaro-Winklera (sim w ) w następujący sposób:
sim w = sim jot + lp(1 – sim jot )
W tym przypadku obliczylibyśmy:
sim w = 0,78333 + (1)*(0,1)(1 – 0,78333) = 0,805.
Podobieństwo Jaro-Winklera pomiędzy dwoma łańcuchami wynosi 0,805 .
Ponieważ ta wartość jest bliska 1, mówi nam to, że te dwa ciągi są bardzo podobne.
Możemy potwierdzić, że jest to poprawne, obliczając podobieństwo Jaro-Winklera między dwoma ciągami w R:
library (stringdist) #calculate Jaro-Winkler similarity between 'mouse' and 'mute' 1 - stringdist("mouse", "mute", method = "jw", p= 0.1 ) [1] 0.805
Odpowiada to wartości, którą obliczyliśmy ręcznie.
Dodatkowe zasoby
Poniższe samouczki wyjaśniają, jak obliczyć inne metryki podobieństwa:
Wprowadzenie do odmienności Braya-Curtisa
Wprowadzenie do indeksu podobieństwa Jaccarda