마이크로바이옴 데이터를 가지고 기계학습 모델에 학습시켰을 때 경험상 나타나는 가장 큰 문제는 과적합입니다.
샘플의 수가 충분하지 않은 점 (사람의 분변에서 데이터를 얻는데 백 명, 천명 단위의 데이터를 얻는 게 쉽지 않습니다.) + 데이터 특성상 feature 의 수가 상당히 많은 것 그중 대부분이 0 또는 그에 가까운 아주 작은 값을 갖는다는 점 등이 주요한 이유라고 생각됩니다.
그래서 마이크로바이옴 데이터만으로는 성능 좋은 모델을 만들기 어렵다고 생각하였고 mass spec 사용해서 확보한 대사체 데이터를 함께 사용했을때 조금 더 좋은 예측모델을 만들 수 있지 않을까 생각하여해 보기로 했습니다.
일단 데이터를 전처리 하는 과정에서 몇개의 분기점들이 있었는데 그것들을 중심으로 결과를 보여드리겠습니다.
1. 대부분의 값이 0인 feature 를 제거
feature table 상에 있는 모든 feature 는 적어도 하나의 샘플에서 0 보다 높은 값을 가지고 있습니다. 즉, 모든 값이 0 인 feature 는 잡히지 않습니다. 그러나, [0, 0, 0, 0, 0, 0.001] 과 같은 feature 는 여전히 포함되어 있고 모델을 만드는 데에 있어 복잡도만 증가시킬 뿐 의미 있는 데이터는 아니라고 생각하였습니다.
2. scaling 수행
사실 RF 를 사용할 때에는 스케일링이 별다른 차이를 만들어내지 못합니다. 일반적으로 그렇게 알려져 있고 경험상으로도 RF 기준으로는 별 차이가 없었습니다. 물론 트리 기반 알고리즘을 주로 테스트해 볼 예정이지만, 스케일링을 수행한 것과 수행하지 않은 것을 비교해 보는 건 어렵지 않으니 standscaling 같이 정도는 해서 결과를 비교해 보았습니다.
3. train_test_split
데이터셋을 나눌 때 정석은 아래와 같이 train - test 를 분리하고 train 에서 하이퍼파라미터를 수정할 수 있도록 다시 한번 train - validation 으로 분리하는 것입니다.
그러나 데이터 특성상 많은 n 수를 확보하기 어려웠고 이번에 학습시키는 데이터도 50명 이 조금 넘어 사실 학습시키기에는 많이 부족합니다. 그래서 train - validation - test 로 나누기에는 학습시킬 수 있는 데이터가 너무 적다고 생각했고 과적합에 대한 경향을 확인할 수 있도록 최소한으로만 데이터 분리를 수행하였습니다. (train 0.8 - test 0.2)
+ 이와 같은 데이터 전처리를 수행해였고 1) 마이크로바이옴 데이터만으로 학습시켰을 때 성능과 2) 마이크로바이옴 데이터와 대사체 데이터를 함께 학습시켰을 때 성능을 비교하였습니다.
1. only microbiome data
1-1. no scaler
accuracy (training data) | accuracy (test data) | F1 score | |
RandomForest | 0.9104 | 0.2353 | 0.2330 |
DecisionTree | 1.0000 | 0.2941 | 0.3044 |
GradientBoost | 0.9851 | 0.2941 | 0.2984 |
1-2. standard scaler
accuracy (training data) | accuracy (test data) | F1 score | |
RandomForest | 0.9104 | 0.2353 | 0.2330 |
DecisionTree | 1.0000 | 0.3529 | 0.3669 |
GradientBoost | 0.9851 | 0.2941 | 0.2984 |
2. microbiome + metabolite data
2-1. no scaler
accuracy (training data) | accuracy (test data) | F1 score | |
RandomForest | 0.9851 | 0.7059 | 0.6825 |
DecisionTree | 0.9701 | 0.7647 | 0.7500 |
GradientBoost | 1.0000 | 0.8824 | 0.8786 |
2-2. standard scaler
accuracy (training data) | accuracy (test data) | F1 score | |
RandomForest | 0.9851 | 0.7059 | 0.6825 |
DecisionTree | 0.9701 | 0.8824 | 0.8667 |
GradientBoost | 1.0000 | 0.8824 | 0.8786 |
어쨌든 분류에서 트리 기반 알고리즘들이 성능이 가장 높을 것이라고 생각해서 트리 기반으로 진행했더니 스케일링은 그렇게 큰 영향은 없습니다.
그러나 대사체 데이터를 함께 학습시켰을 때 성능이 눈에 띄게 증가하는 부분 (특히, 테스트 데이터의 정확도) 이 생각보다 효과가 좋았습니다. 물론 여전히 과적합이 조금은 남아있지만 정확도가 예상했던 것보다 더 극적으로 증가해서 대사체 데이터가 무척이나 중요하다는 것을 확인하였습니다.
알고리즘에서는 decision tree 가 성능이 전반적으로 괜찮았는데 RF 보다도 과적합이 심하지 않았고 F1 score 도 그렇게 낮지 않았습니다. 그렇다면 SHAP 같은 설명가능 인공지능 알고리즘을 사용하는 것도 괜찮은 것 같습니다. 어쨌든 학습된 모델을 해석하는 데 있어 상당히 직관적으로 확인할 수 있기 때문에 나중에 코드 한번 확인해 보고 추가해 보면 어떤 미생물 또는 대사체가 주요 결정 요인이었는지를 쉽게 확인할 수 있을 것 같습니다.
+ (이전 biom format 을 다룬 글에서 잠깐 언급했던 것과 같이 대사체 데이터를 biom format 으로 변경해서 QIIME2 상에서 머신러닝 수행이 가능합니다. 파이썬에서 코드 작성해서 수행하는 것만큼 자유도가 높지는 않지만 간단한 코드로 결과를 빠르게 받아볼 수 있어 파이썬이 익숙하지 않은 분들도 쉽게 해 보실 수 있을 것입니다.)
'[머신러닝]' 카테고리의 다른 글
마이크로바이옴을 사용한 대사체 예측 - LOCATE (0) | 2024.07.13 |
---|---|
[머신러닝] q2-sample classifier (0) | 2023.12.17 |
[머신러닝] 모델에 학습시키기 위한 마이크로바이옴 데이터의 형식 (0) | 2023.11.29 |
[머신러닝] CNN 을 사용한 마이크로바이옴 데이터의 분류 (T2D vs healthy) (1) | 2023.11.26 |
실제 데이터로 머신러닝 모델 만들기 : 2 (1) | 2023.09.17 |