1-BIN-301, 2-AIN-501 Methods in Bioinformatics

Website moved to https://fmfi-compbio.github.io/mbi/


CI05

Z MBI
Prejsť na: navigácia, hľadanie

MinHash

Motivácia: Pri zostavovaní genómov pomocou overlap-layout-consensus frameworku na nájdenie prekryvov medzi čítaniami treba vykonať O(N^{2}) lokálnych zarovnaní medzi každou dvojicou čítaní (kde N je počet čítaní), pričom každé zarovnanie trvá O(L^{2}) (kde L je dĺžka čítaní). Prirodzeným spôsobom zníženia časových nárokov je obmedzenie zarovnávaní iba medzi "sľubnými" dvojicami čítaní. Ako však také dvojice nájsť?


Odbočka do analýzy web-stránok: Podobnosť textov

Majme množinu webových stránok (webová stránka je postupnosť slov). Chceme nájsť medzi nimi dvojice podobných. Ako môžeme definovať podobnosť dvoch textov?

Jeden zo spôsobov ako to spraviť je pozrieť sa na množstvo slov, spoločných pre jednotlivé dvojice stránok. Očakávame, že čím viac spoločných slov majú, tým sú podobnejšie. Túto mieru podobnosti formalizuje matematický pojem Jaccardovej miery podobnosti.

Nech U je univerzum slov a nech A,B\subseteq U sú jeho podmnožinami (t.j. množiny slov dvoch textov). Potom Jaccardova miera podobnosti J(A,B) je definovaná nasledovne:

J(A,B):={\dfrac  {|A\cap B|}{|A\cup B|}}

Táto miera nadobúda hodnotu 0 iba prípade, ak množiny sú disjunktné, a hodnotu 1 iba v prípade, že množiny sú totožné. Inak sa jej hodnota nachádza na otvorenom intervale (0,1), a čím viac spoločných slov majú, tým je jej hodnota vyššia.

Potom otázku "Ktoré dvojice textov sú podobné?" môžeme preformulovať napríklad ako "Ktoré dvojice textov majú Jaccardovu mieru podobnosti vyššiu ako \alpha ?", kde \alpha \in (0,1) je nejaká prahová hodnota.

Exaktný výpočet Jaccardovej miery podobnosti nie je vždy dostatočne rýchly pre účely konkrétnej aplikácie, takže logickým riešením je pokúsiť sa jej hodnotu vypočítať iba približne (t.j. aproximovať).

Aproximácia Jaccardovej miery: MinHash

Nech je daná množina A=\{a_{1},a_{2},\ldots ,a_{n}\}\subseteq U. Nech h:U\to {\mathbb  {R}} je injektívna náhodná hashovacia funkcia (t.j. bez kolízií). Potom minimálny hash množiny minHash_{h}(A) je definovaný nasledovne:

minHash_{h}(A):=\min\{h(a_{1}),h(a_{2}),\ldots ,h(a_{n})\}=\min _{{1\leq k\leq n}}h(a_{k})

Keďže h je náhodná hashovacia funkcia, tak sa na hodnotu minHash(A) môžeme pozerať ako na náhodnú premennú, ktorá reprezentuje rovnomerne náhodný výber prvku z množiny A.

Nech X je náhodná premenná, ktorá nadobúda hodnotu 1, ak minHash_{h}(A)=minHash_{h}(B), a inak hodnotu 0. Potom Pr[X=1]=J(A,B)

Potom

E(X)=0\cdot Pr[X=0]+1\cdot Pr[X=1]=Pr[X=1]=J(A,B).

Z toho vyplýva, že náhodná premenná X je nevychýleným odhadom Jaccardovej miery. Je to však veľmi nepohodlný odhad, lebo namiesto celej škály hodnôt od 0 po 1 vracia len dve možnosti.

V štatistike základnou mierou kvality nevychýleného odhadu slúži jeho variancia Var(X)=E(X^{2})-(E(X))^{2}. Spočítajme si postupne obe hodnoty.

E(X^{2})=0^{2}\cdot Pr[X=0]+1^{2}\cdot Pr[X=1]=Pr[X=1]=J(A,B)
(E(X))^{2}=(J(A,B))^{2}

Čiže Var(X)=J(A,B)-J^{2}(A,B). Aká je maximálna možná hodnota variancie?

Táto otázka je ekvivalentná otázke "Aké je maximum funkcie f(x)=x-x^{2} na intervale [0,1]?". Pre určenie extrémov hladkých funkcií treba nájsť korene jej prvej derivácie. Derivácia tejto funkcie je f'(x)=1-2x, jej koreň je hodnota 0.5. Hodnota funkcie v tomto bode je rovná 0.25. Čiže Var(X)\leq 0.25.

Ako môžeme tento odhad zlepšiť?

Jedna z možností je zobrať viacero nezávislých hashovacích funkcií h_{1},h_{2},\ldots ,h_{k}, a spočítať minHash_{{h_{1}}},\ldots ,minHash_{{h_{k}}} pre obidve množiny. Označme si príslušné náhodné premenné ako X_{1},X_{2},\ldots ,X_{k}. Každá z nich má strednú hodnotu E(X_{i})=E(X)=J(A,B) a rovnakú varianciu Var(X_{i})=Var(X)=J(A,B)-J^{2}(A,B).

Nech náhodná premenná Y_{k}:={\dfrac  {X_{1}+X_{2}+\ldots +X_{k}}{k}} je ich priemer. Potom jej stredná hodnota je rovná E(Y_{k})=E\left({\frac  {X_{1}+X_{2}+\ldots +X_{k}}{k}}\right)=k^{{-1}}E(X_{1}+X_{2}+\ldots +X_{k})=k^{{-1}}[E(X_{1})+E(X_{2})+\ldots +E(X_{k})]=k^{{-1}}kE(X)=E(X)=J(A,B). Čiže aj Y_{k} je nevychýleným odhadom Jaccardovej miery.

Pozrieme sa na jej varianciu: Var(Y_{k})=Var\left({\frac  {X_{1}+X_{2}+\ldots +X_{k}}{k}}\right)={\dfrac  {1}{k^{2}}}Var(X_{1}+X_{2}+\ldots +X_{k}){\overset  {*}{=}}{\dfrac  {1}{k^{2}}}[Var(X_{1})+\ldots Var(X_{k})]={\dfrac  {1}{k^{2}}}k\cdot Var(X)={\dfrac  {Var(X)}{k}}\leq {\dfrac  {1}{4k}}

(*) tento prechod je možný len kvôli tomu, že premenné X_{i} sú nezávislé.

Vidíme teda, že varianciu (resp. kvalitu) môžeme potlačiť na ľubovoľne malú postupným zvýšením počtu hashov.

Všimnite si, že premenná kY_{k} (t.j. nie priemer, ale súčet jednotlivých X_{i}) je súčtom nezávislých indikátorov s rovnakou distribúciou, a teda má binomické rozdelenie s parametrami n=k a p=J(A,B).

Druhá možnosť zlepšenia je nechať jednu hashovaciu funkciu, ale porovnávať nie 1, ale k najmenších hashov dvoch množín. Vedie to ku podobnému asymptotickému správaniu.

Návrat do porovnávania sekvencií

Ako "slová" použijeme všetky súvislé podreťazce fixnej dĺžky (dĺžka sa tradične označuje ako k) danej sekvencie. Tieto podreťazce sa tradične označujú ako k-mery. Potom na hľadanie dvoch podobných čítaní z množiny čítaní môžeme použiť minhash.

V prípade BLAST, t.j. lokálneho zarovnávania dvoch sekvencií sa ako texty berú okná (t.j. súvislé podreťazce väčšej dĺžky než k). Potom dvojice podobných okien plnia tú istú funkciu ako jadrá zarovnávania v klasickom BLASTe.


  • Li, Heng. "Minimap and miniasm: fast mapping and de novo assembly for noisy long sequences." Bioinformatics 32.14 (2016): 2103-2110. [1]
  • Roberts M, Hayes W, Hunt BR, Mount SM, Yorke JA. Reducing storage requirements for biological sequence comparison. Bioinformatics. 2004 Dec 12;20(18):3363-9. [2]