이번에는 데이터를 총 3분류로 나누어서 진행했다.
data1은 암 관련 phenotype ( 예를 들어 성별, 음주량, 흡연량, 나이 등등)만 진행했을 때의 AUC값
data2는 KCPS의 genotype으로 유전적인 피처(16955개의 피처를 갖고있다.)로만 진행했을 때의 AUC값
data3은 phenotype에 genotype을 더했을 때의 AUC값을 구하려고 진행했다.
data1=pd.read_csv('./phenotype_1000.txt',engine="python",sep=" ")
data2=pd.read_csv('./KCPS_r2_0.01_1000.csv')


for i in range(2,15190):
data2.columns.values[i]=i
data2의 칼럼에 숫자를 부여하여 진행하였고, data1에서는 이전 포스팅에서의 feature_importance와 내가 생각했을 때 중요하다고 생각하는 변수를 넣었다.
data1=data1.loc[:,['LUNG','FID','AGE_B', 'SMOK_B', 'ALCO_B','EXER_B','HT_B', 'WT_B', 'WAIST_B', 'SBP_B', 'DBP_B', 'CHO_B','LDL_B', 'TG_B', 'HDL_B', 'FBS_B', 'GOT_B', 'GPT_B', 'GGT_B', 'URIC_B','BIL', 'WBC', 'CREAT','SEX1', 'CRC']]
data3의 경우는 data1과 data2를 합쳐 진행하였다.
data3 = pd.concat([data1,data2],axis=1)
y_df = data1.iloc[:, 0]
data1.drop('LUNG',axis=1,inplace=True)
X_df = data1
암 중 LUNG을 가지고 진행하였으며 전처리를 따로 하지 않고 진행해봤을 때의 AUC값을 비교하려고 한다.
train과 test값은 8:2로 나눴고, lasso를 사용하여 약 17000개의 피처 중 약 400개를 골랐다.

lasso = Lasso(alpha=0.001, max_iter=100000).fit(X_train, y_train)
print("훈련 세트의 정확도 : {:.2f}".format(lasso.score(X_train, y_train)))
print("테스트 세트의 정확도 : {:.2f}".format(lasso.score(X_test, y_test)))
print("사용한 특성의 수 : {}".format(np.sum(lasso.coef_ != 0)))
print("사용한 max_iter : {}".format(lasso.n_iter_))
뿐만 아니라 StratifiedKFold를 통해 한번 더 검증을 하였다.
진행된 모델로는 Random Forest, Decision Tree, Adaboost, XGBoost, LGBM으로 진행했다.

결과값은 이렇게 나왔으며 상당히 낮은 AUC값을 갖게되어 문제점을 생각해봤다.
문제점
첫번째 , Lasso를 진행했을 때, 최적의 alpha(여기서는 lambda를 뜻한다.)가 어떻게 나오는지에 대한 고민이 필요하다.
또한 방법론적으로 Clinical(phenotype에서의 피처)과 합친 후의 데이터프레임에서 train과 test를 분리 후 lasso를 구하는 것이 맞는지에 대한 고민이 필요하다.
두번째, 모델의 경우 option을 디폴트값으로 지정하고 진행을 하였지만, 앞으로는 어떤 option을 사용해야 하는지에 대한 고민이 필요하다.
이에 대해서 GridSearchCV를 써야하는지에 대한 고민을 하였다.
'연구 활동 > 폐암 예측 프로젝트' 카테고리의 다른 글
Optuna: A hyperparameter optimization framework (0) | 2022.02.20 |
---|---|
[2022 동계 인턴십]암예측 6 - 발표 및 문제점에 대한 피드백 (0) | 2022.02.19 |
[2022 동계 인턴십] WinSCP 사용법! (0) | 2022.02.19 |
[2022 동계 인턴십]암예측 4 (0) | 2022.02.16 |
[2022 동계 인턴십]암예측3 (0) | 2022.01.12 |