[머신러닝]

마이크로바이옴 + 대사체 데이터 기계학습

" " 2024. 1. 21. 15:34

마이크로바이옴 데이터를 가지고 기계학습 모델에 학습시켰을 때 경험상 나타나는 가장 큰 문제는 과적합입니다.

 

샘플의 수가 충분하지 않은 점 (사람의 분변에서 데이터를 얻는데 백 명, 천명 단위의 데이터를 얻는 게 쉽지 않습니다.) + 데이터 특성상 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 으로 분리하는 것입니다.

 

https://kantschants.com/split-dataset-into-train-test-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 상에서 머신러닝 수행이 가능합니다. 파이썬에서 코드 작성해서 수행하는 것만큼 자유도가 높지는 않지만 간단한 코드로 결과를 빠르게 받아볼 수 있어 파이썬이 익숙하지 않은 분들도 쉽게 해 보실 수 있을 것입니다.)