Project/드림학기제_Machine Learning 암 발병률 예측

전립선암 진단 모델

진성01 2022. 7. 11. 11:49

1) Data 준비

 

NCBI에서 제공하는 오픈소스 microarray 데이터셋으로 진행하였다(GSE62872). 이 데이터셋은 정상인 160, 전립선암에 걸린 환자 264명의 전립선 조직 생검 마이크로 어레이 결과이다. 이 연구에서GPL19370 microarray chip사용하였으며, 20254 probe를 통해 암 세포에서 어떤 유전자가 발현되는지 알 수 있다.

 

2) 알고리즘 설계

 

데이터셋을 불러온 후 데이터의 형식을 살펴보았다. 우선 환자의 idcolumn 이름으로 설정되어 있고, 발현 유전자의 이름이 행방향으로 설정되어 있다. 데이터셋의 행과 열 방향이 반대로 되어있기 때문에 전치행렬로 바꾸어 주어야 하고, 환자 ID는 학습에 필요 없기 때문에 지워준다.

 

전치행렬로 바꾸고 학습에 필요 없는 피처는 제거하였다. null값이 존재하는지 확인한 결과 0개로 누락 값은 없었다. 데이터는 424개의 환자 데이터와 20254개의 유전자 발현양으로 구성되어 있었다. 데이터를 전처리 하는 과정에서 모든 데이터의 타입이 object형으로 변경되었다. 따라서 모두 float형으로 바꾸는 작업을 수행하였다.

 

다음으로 레이블을 붙이는 작업을 수행했다. 해당 데이터를 다운받은 NCBI에서 몇 번째까지 환자의 데이터이고, 일반인의 데이터인지 확인한 후 환자의 경우 1 일반인의 경우 0으로 레이블링 하였다. 그 이후 데이터를 다시 확인해 본 결과 column명이 유전자가 아닌 날짜로 되어있는 column이 확인되었다. 이는 해당 실험에서 기준으로 삼은 유전자의 발현량이 아니기 때문에 모든 날짜 column은 제거하였다.

 

26column까지가 날짜 column이므로 제거하였다. 전처리가 완료된 데이터셋을 csv파일로 저장하였다.

 

학습 데이터와 테스트 데이터로 나누고 오버샘플링을 적용하였다. 오버샘플링을 적용한 이유는 환자 데이터셋이 일반인 데이터셋보다 월등히 많았기 때문이고, 또한 데이터셋의 양이 적기 때문이다. 오버샘플링 적용 결과 데이터셋이 339개에서 422개로 증가하였다.

 

 

다음으로 성능지표 산출 함수를 정의하였다. 이진 분류의 경우 정확도 이외에도 여러가지 성능지표가 존재한다. 따라서 모든 지표를 한 번에 계산할 수 있도록 하기 위해 get_clf_eval 함수를 선언하였다. 해당 함수에서는 오차행렬, 정확도, 정밀도, 재현율, F1 score를 산출한다.

 

다음으로 랜덤 포레스트 모델을 구현하였다. 임시 성능을 확인하고 feature importance를 산출하기 위하여 사용했고, 결정트리 개수는 1000개 최대 깊이는 100으로 설정하였다. 이를 성능지표 함수를 이용해서 성능을 확인한 결과 정확도 83.53%를 기록하였다.

 

이렇게 생성한 랜덤 포레스트 모델의 feature importance를 추출하였다. 랜덤 포레스트의 결정트리를 생성할 때 분류기준으로 많이 선택될수록 feature importance가 높은 값을 가진다. 따라서 레이블을 잘 분류하는 기준일수록 feature importance가 높게 나타난다.

 

앞서 랜덤 포레스트 모델에 사용한 데이터셋은 column이 약20000개로 매우 많았다. 따라서 feature importance 산출을 통해 중요 변수 5000개만을 이용하여 데이터셋을 재정의하였다. 마찬가지로 오버샘플링 등 필요 전처리를 수행한 후 LightGBM모델을 이용하여 학습하였다. 결정트리의 개수는 500, 학습률은 0.1, 최대 깊이는 100으로 설정하였으며, 100개의 트리를 생성하는동안 성능이 개선되지 않았다면 조기 종료할 수 있도록 코드를 작성하였다. 그 그 결과 정확도는 82.35%가 산출되었다.

 

학습 데이터셋과 테스트 데이터셋을 고정시켜 학습할 경우 데이터셋이 적기 때문에 성능지표의 값이 튈 수 있다. 따라서 SKFold를 이용하여 교차검증 하였다. 5번의 교차검증의 평균은 83.25%로 해당 데이터셋에서는 랜덤 포레스트 모델이 근소하게 더 좋은 결과를 나타냈다.