작성: 2023-04-24
수정: 2024-08-19, 2024-12-06 (NB의 한계 추가)
🟦 개요
생물학에서 가장 많이 사용되는 유전자 검색 알고리즘은 BLAST(BLASTn, BLASTp, BLASTx)입니다. 그러나 QIIME2의 classifier는 naive bayes(Wang Q et al., Appl Environ Microbiol, 2007/ Bokulich NA et al., Microbiome , 2018) 알고리즘을 사용합니다.
왜 우리는 BLAST를 사용하지 않고 classifier를 사용할까요? 이유는 대용량 데이터를 처리하기 위해서 빠른 속도와 정확성을 제공하기 때문입니다.
먼저 naive bayes를 왜 쓰게 되었는지 알아봅시다.
🟦 베이즈 정리란 무엇인가?
베이즈 정리를 알아보기 위해서는 가능도(우도, likelihood)를 먼저 이해해야 합니다. 가능도란 어떤 조건이 주어졌을 때, 그 모델에서 해당 관측 값이 시행될 확률을 말합니다.
| 가능도(우도, likelihood)란?
어떤 조건이 주어졌을 때, 그 모델에서 해당 관측 값이 시행될 확률을 말합니다.
만약 열이 났을 때, 열이 나는 환자가 독감일 확률을 살펴봅시다
열이 남 | 열이 안 남 | 합계 | |
독감 | 10 | 0 | 10 |
안걸림 | 40 | 50 | 90 |
합계 | 50 | 50 | 100 |
우리는 열이 날 때, 독감의 가능성 P(독감|열이 남)을 알고 싶어 합니다. 이를 가능도 함수라고 합니다.
표에서 보면 P(독감|열이남) 는 50 명 중 10명을 뜻하니, 즉 0.2 값을 가집니다.
- 독감에 걸릴 확률 P(독감) = 10/100 = 0.1
- 열이 날 확률 P(열) = 50/100 = 0.5
- 독감이 걸렸을 때, 열이 난 확률 P(열|독감) = 10/10 = 1
- 열이 났을 때, 독감일 확률 P(독감|열) = 10/50 = 0.2
이때 우리는 P(독감|열)*P(열)과 P(열|독감)*P(독감)의 값이 모두 0.1 임을 알 수 있습니다.
이를 수식으로 정리하면, P(독감|열이 남) P(열) = P(열|독감) P(독감)입니다.
이를 이항 정리 하면 아래와 같습니다.
$$ P(독감|열이 남) = \frac {P(열|독감) P(독감)}{P(열)} $$
| 베이즈 안 정리
자 이렇게 정리된 식을 베이즈안 정리라고 합니다. 다시 확인해 볼까요?
$$ P(A|B) = \frac{P(A, B)}{P(B)} → P(A, B) = P(A|B) P(B) $$
$$ P(B|A) = \frac{P(A, B)}{P(A)} → P(A, B) = P(B|A) P(A) $$
$$ P(A,B) = P(A|B) P(B) = P(B|A) P(A) $$
$$ P(A|B) = \frac {P(B|A) P(A)}{P(B)} $$
이를 그림으로 쉽게 알아봅시다.
각 요소는 아래와 같습니다.
이를 식으로 정리하면 아래와 같습니다.
즉, P(A|B) P(B) = P(B|A) P(A) 값을 가집니다.
각 요소를 살펴봅시다.
즉, 독감에 의한 열이 많이 날 것을 주장할 때,
- 사후 확률(Posterior probability)이란 사건이 일어난 후(열) 그 원인(독감)에 의한 것일 확률입니다. 우리의 주장에 대한 확률(신뢰도)을 말합니다.
- 사전확률(Prior probability)이란 알고자 하는 정보(독감)를 고려한 정보가 아닌 열이 난 결과를 고려한 값입니다.
- 가능도(Likelihood)는 독감일 때, 열이 날 확률을 말합니다.
- Marginal probability(= Evidance )는 사건(열)이 일어날 확률을 말하며, 분모 값임으로 확률의 크기에 영향을 미칩니다.
🟦 Naive Bayes 분류란 무엇인가?
만약 여러 사람들이 열, 기침, 비염 증상이 있다고 할 때, 독감일 확률은 어떻게 될까요?
이를 모두 합한 확률을 계산하기 어려우니 각 결과가 독립적인 시행이라고 가정해 봅시다. 그렇다면 아래와 같이 계산할 수 있습니다.
추가적으로 열, 기침, 비염을 가진 사람이 폐렴일 확률도 이과 비슷하게 구할 수 있습니다.
그렇다면 우리는 열, 기침, 비염증상이 나타난 사람이 독감인지 혹은 폐렴인지 알고 싶습니다. 이때 더 높은 사후확률을 가진 쪽으로 판명하게 됩니다. 이렇게 나이브 베이즈를 활용하여 분류를 할 수 있습니다(양유진, 2019).
🟦 그래서 이 알고리즘이 왜 서열의 분류에 사용되는가?
초기 분류 알고리즘은 nearest-neighbor을 사용하였습니다. 그러나 데이터베이스가 작기 때문에 상위 수준에서만 분류가 이루어졌습니다. 이후 2002년 세균 분류를 위한 임시 위원회에서(Stackebrandt E et al., International journal of systematic and evolutionary microbiology, 2002) 박테리아 분류에 rRNA을 사용해야 한다고 명시하였습니다.
이후 2005년 The Ribosomal Database Project (RDP-II)에서 박테리아의 16S rRNA을 기반으로 서열 데이터를 제공하였고 (Cole JR et al., Nucleic acids research, 2005), 엄청난 양의 서열을 처리하기 위한 방법으로 Naive Bayes Classifier 방법을 제시하였습니다 (Wang Q et al., Appl Environ Microbiol, 2007).
| Naive Bayes (NB)을 활용한 계통분류 방법을 살펴보자
full-length에 근접한 16S rRNA 23,095개의 RDP 서열을 사용하여 Naive Bayes 분류기의 정확도를 예측하였습니다.
이때 각 서열은 8 word의 검색 단위를 가지며, 이는 6, 7, 8, 9w 중 가장 메모리 요구가 낮기 때문이라고 합니다. 또한 Naïve Bayesian assignment를 통한 결과의 검정은 Bootstrap confidence estimation을 사용했습니다. 이는 100번 재검정 수행한 후에 더 많이 할당된 값을 답으로 선택하며, QIIME2에서 기본 confidence를 0.7로 설정되어 있습니다.
분류 결과 full-length에 근접한 16S rRNA서열은 각 phylum, class, order, family와 genus에서 99.5%, 98.8%, 97.8%, 95.1%, 및 91.9% 정확도를 보였습니다 (Wang Q et al., Appl Environ Microbiol, 2007).
미생물 분석 이후 생성된 feature 서열이 (ASV or OTU)가 어떤 계통과 일치하는지 알아보고자 한다.
특정 sequence 가 특정 Genus일 확률은 P(Genus|sequence)입니다.
만약 TTCAG라는 서열이 Genus일 확률을 구할 때 이에 대한 베이즈 정리는 아래와 같습니다.
실제 8 word로 잘리지만 예제에서는 2 word로 2조각씩 잘라서 그 Genus에 해당하는지의 확률을 계산해 봅시다.
이때 NB의 가정은 아래와 같습니다.
1. 모든 Genus는 같은 사전 확률을 가지고 있다 ▶ P(Genus) 제외 가능
2. Total probability를 알 필요가 없다 ▶ P(TTCAG) 제외 가능
그러므로 우리가 알아야 할 것은 각 word로 잘린 서열이 해당 Genus에 속하는지만 알면 됩니다.
만약 g1와 g1에서 TTCAG 서열의 아래와 같다면 사후 확률을 아래와 같습니다.
결과적으로 서열 "TTCAG"는 사후확률이 더 높은 G2에 해당할 가능성이 높습니다.
🟦 Classifier 알고리즘 비교
이 NB 알고리즘이 QIIME2의 기본 분류기로 선택된 것은 아래 논문에 자세히 적혀있습니다. 기존에 많이 사용되던 BLASTn 알고리즘에 비해 정확도가 높고 실행 속도가 빠르기 때문입니다.
또한 BLAST는 오분류율도 매우 높습니다. 이는 BLAST의 서열에서 Type material이 아닌 서열로 분류를 한다면, 전문성이 떨어지기 때문입니다.
이러한 이유로 QIIME은 시간 효율적인 측면에서 강력한 naive bayes 분류기를 사용하고 있습니다.
🟦 Naive Bayes classifier의 한계
1. 모든 계통이 동일한 사전 확률을 가진다고 가정하는 것의 위험성
QIIME2 분석을 하다 보면 이상한 종이 분류될 때가 있습니다. 이와 같은 경험을 한 여러 QIIME2 사용자에 대해서, 개발자는 아래와 같이 말하였습니다.
That said, one thing you can do to try to improve resolution of your classification is to use environment-weighted taxonomy classifiers.
...
Note that the readytowear project provides weights that can be used to train classifiers for different environment. That is the approach that I would recommend in response to your Q2. This approach doesn't get around the limited information in the sequences, but includes additional externally derived information about what organisms are most likely to be found in the environment that you're working in.
모든 미생물의 사전확률이 동일하지 않습니다. 그러므로 더 많이 나타나는 종은 더 높은 사전확률을 가지도록 한 분류기를 weighted classifier(혹은 Bespoke)라고 합니다.
그러나 이러한 방법은 연구가 많이 되지 않은 샘플에서는 높은 에러율을 보입니다.
관련 classifier를 만드는 튜토리얼은 아래 자세하게 나와있습니다.
2. Confidence의 기준
기존 Naive bayesian assignment는 confidence를 0.7로 설정하고 있습니다. 만약 하나의 서열이 s__Clostridioides_difficile와 s__Clostridioides_difficile_R20291로 100번 중 각각 50번씩 매치되었다면, 결과적으로 어떤 종으로 분류될까요?
s__Clostridioides_difficile으로 분류될 것 같지만, 결과는 g__Clostridioides로 분류됩니다.
Confidence가 기준값(0.7) 이하라면 상위 수준으로 분류하게 됩니다
물론 즉 유사한 서열이 많을 때는 confidence값을 낮추는 것도 하나의 방법입니다. 그러나 이에 대해서 명확한 기준이 없다는 것이 단점입니다.
3. 완벽하지 않은 데이터베이스
SILVA, RDP, Greengene2등의 데이터베이스는 사람이 큐레이션 하여 생성됩니다. 그러나 이 때문에 완벽하지 않습니다.
SILVA의 경우 138.2 미만 버전으로는 업데이트되지 않은 계통 이름을 쓰기도 하고, Genus에 Family이름이 존재하기도 합니다.
또한 16S full-length의 길이보다 현저히 적은 서열이 데이터베이스에 존재하기도 합니다.
이를 모두 같은 확률로 훈련한다면 일부 에러가 발생하곤 합니다.
SILVA 사용 후 서열이 g__Deep_Sea_Euryarchaeotic_Group(DSEG)로 분류되었음
이를 해결하기 위하여 QIIME2 개발진은 데이터베이스를 훈련 전에 필터링 과정이 필요하다고 말합니다.
관련 튜토리얼은 아래에 있으며, 저는 이 과정을 꼭 수행하도록 권장드립니다.
🟦 더 나은 분류 방법은 없는가?
Naive bayes를 통한 서열 분류 방법은 2007( Wang Q et al., Appl Environ Microbiol)년에 소개되었습니다. 그 이후 Randomforest 등을 사용한 머신러닝 알고리즘도 상당수 제안되었습니다.
궁극적으로 모든 미생물이 배양되고 모든 DNA 서열이 얻어졌다면, 단순한 알고리즘인 Nearest neihbor을 이용해 모든 서열을 분류하는 방법이 유용할 것이라고 Dan knight교수님은 말했습니다. 또한 향후에는 DNA 뿐만 아니라 전사된 후에 2차 구조를 이용한 계통분류 방법도 발전할 것이라고 말합니다.
출처
- Wang, Q., Garrity, G. M., Tiedje, J. M., & Cole, J. R. (2007). Naive Bayesian classifier for rapid assignment of rRNA sequences into the new bacterial taxonomy. Applied and environmental microbiology, 73(16), 5261–5267. https://doi.org/10.1128/AEM.00062-07
- Bokulich, N.A., Kaehler, B.D., Rideout, J.R. et al. Optimizing taxonomic classification of marker-gene amplicon sequences with QIIME 2’s q2-feature-classifier plugin. Microbiome 6, 90 (2018). https://doi.org/10.1186/s40168-018-0470-z
- Cole, J. R., Chai, B., Farris, R. J., Wang, Q., Kulam, S. A., McGarrell, D. M., Garrity, G. M., & Tiedje, J. M. (2005). The Ribosomal Database Project (RDP-II): sequences and tools for high-throughput rRNA analysis. Nucleic acids research, 33(Database issue), D294–D296. https://doi.org/10.1093/nar/gki038
- https://forum.qiime2.org/t/how-is-the-confidence-calculated-with-taxa-assignments/179/2
- Microbiome Discovery 6: Assigning Taxonomy
- https://www.mathsisfun.com/data/bayes-theorem.html
- 양유진, 인공지능 & 빅데이터 with 생물정보, 아이콕스 (2019)
- https://shawnbaek.tistory.com/14
- Kaehler, B. D., Bokulich, N. A., McDonald, D., Knight, R., Caporaso, J. G., & Huttley, G. A. (2019). Species abundance information improves sequence taxonomy classification accuracy. Nature communications, 10(1), 4643. https://doi.org/10.1038/s41467-019-12669-6
- https://forum.qiime2.org/t/using-q2-clawback-to-assemble-taxonomic-weights/5859
- Chaudhary, N., Sharma, A. K., Agarwal, P., Gupta, A., & Sharma, V. K. (2015). 16S classifier: a tool for fast and accurate taxonomic classification of 16S rRNA hypervariable regions in metagenomic datasets. PloS one, 10(2), e0116106. https://doi.org/10.1371/journal.pone.0116106