이전에서 포스팅한 내용에서 중요도(feature_importance)를 0.5까지 잘라서 시행했다.
#폐암
features=['LUNG','STOMA','COLON','LIVER','LUNG','PROST','THROI','BREAC','RECTM']
y_df =df['LUNG']
#X_df =df.drop(features, axis=1)
X_df =df[['AGE_B','GOT_B','SBP_B','LDL_B','HDL_B','DBP_B','CHO_B','WT_B','FBS_B','GPT_B']]
X_train, X_test, y_train, y_test = train_test_split(X_df, y_df, test_size=0.2, random_state=156)
print(X_train.shape, X_test.shape)
DMatrix : 넘파이 입력 파라미터를 받아서 만들어지는 XGBoost만의 전용 데이터 세트
주요 입력 파라미터는 data(피처 데이터 세트)와 label
(분류: 레이블 데이터 세트/회귀: 숫자형인 종속값 데이터 세트)
판다스의 DataFrame으로 데이터 인터페이스를 하기 위해서는 DataFrame.values를 이용해 넘파이로 일차변환 한 뒤에 DMatrix 변환을 적용
dtrain = xgb.DMatrix(data=X_train, label = y_train)
dtest = xgb.DMatrix(data=X_test, label=y_test)
params = {'max_depth' : 3,
'eta' : 0.1,
'objective' : 'binary:logistic',
'eval_metric' : 'logloss',
'early_stoppings' : 100 }
num_rounds = 500
wlist = [(dtrain, 'train'), (dtest,'eval')]
# 하이퍼 파라미터와 early stopping 파라미터를 train() 함수의 파라미터로 전달
xgb_model = xgb.train(params = params, dtrain=dtrain, num_boost_round=num_rounds, evals=wlist)
pred_probs = xgb_model.predict(dtest)
print('predict() 수행 결과값을 10개만 표시, 예측 확률 값으로 표시됨')
print(np.round(pred_probs[:10], 3))
# 예측 확률이 0.5보다 크면 1, 그렇지 않으면 0으로 예측값 결정해 리스트 객체인 preds에 저장
preds = [ 1 if x > 0.5 else 0 for x in pred_probs]
print('예측값 10개만 표시: ', preds[:10])
혼동행렬, 정확도, 정밀도, 재현율, F1, AUC 불러오기
def get_clf_eval(y_test, y_pred):
confusion = confusion_matrix(y_test, y_pred)
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
F1 = f1_score(y_test, y_pred)
AUC = roc_auc_score(y_test, y_pred)
print('오차행렬:\n', confusion)
print('\n정확도: {:.4f}'.format(accuracy))
print('정밀도: {:.4f}'.format(precision))
print('재현율: {:.4f}'.format(recall))
print('F1: {:.4f}'.format(F1))
print('AUC: {:.4f}'.format(AUC))
get_clf_eval(y_test, preds)
하지만 위에 결과값과 보다시피 정밀도, 재현율, F1의 경우 0, AUC가 0.5가 나오는 터무니없는 결과값이 나왔다.
xgb_model = xgboost.XGBRegressor(n_estimators=100, learning_rate=0.08, gamma=0, subsample=0.75,
colsample_bytree=1, max_depth=7)
print(len(X_train), len(X_test))
xgb_model.fit(X_train,y_train)
xgboost.plot_importance(xgb_model)
위 그림과 같이 AGE_B가 가장 중요하고 GOT_B,SBP_B 순으로 XGBoost에서 중요함을 볼 수 있다.
하지만.. 잘못 시도한 코드인 것 같아 처음부터 다시 시작하기로 마음먹었다..
'연구 활동 > 폐암 예측 프로젝트' 카테고리의 다른 글
[2022 동계 인턴십]암예측 5 (0) | 2022.02.19 |
---|---|
[2022 동계 인턴십] WinSCP 사용법! (0) | 2022.02.19 |
[2022 동계 인턴십]암예측3 (0) | 2022.01.12 |
[동계인턴십] 암 예측 2 (0) | 2022.01.11 |
[2022 동계인턴십] 암 예측 (0) | 2022.01.10 |