분석시각화 대회 코드 공유 게시물은
내용 확인 후
좋아요(투표) 가능합니다.
Python 튜토리얼
Lv4 튜닝 3/6 python 파이썬 XGBoost 튜닝
안녕하세요. 🧓 이번 시간에는 Bayesian Optimization 을 이용해 XGBoost 모델을 튜닝 해보도록 하겠습니다.
튜닝에 앞서 XGBoost의 하이퍼 파라미터를 알아 보겠습니다.
*파라미터 명 옆의 괄호 안의 값들은 기본값입니다.
XGBoost 파라미터중 과적합을 방지하는 gamma, max_depth, subsample 3가지 파라미터를 튜닝 해보도록 하겠습니다.
------------------------------------------------------------------------------------------------------------
# X에 학습할 데이터를, y에 목표 변수를 저장해주세요
X = train.drop(columns = ['index', 'quality'])
y = train['quality']
# XGBoost의 하이퍼 파라미터의 범위를 dictionary 형태로 지정해주세요
## Key는 XGBoost hyperparameter이름이고, value는 탐색할 범위 입니다.
xgb_parameter_bounds = {
'gamma' : (0,10),
'max_depth' : (1,3), # 나무의 깊이
'subsample' : (0.5,1)
}
# 함수를 만들어주겠습니다.
# 함수의 구성은 다음과 같습니다.
# 1. 함수에 들어가는 인자 = 위에서 만든 함수의 key값들
# 2. 함수 속 인자를 통해 받아와 새롭게 하이퍼파라미터 딕셔너리 생성
# 3. 그 딕셔너리를 바탕으로 모델 생성
# 4. train_test_split을 통해 데이터 train-valid 나누기
# 5 .모델 학습
# 6. 모델 성능 측정
# 7. 모델의 점수 반환
def xgb_bo(gamma,max_depth, subsample):
xgb_params = {
'gamma' : int(round(gamma)),
'max_depth' : int(round(max_depth)),
'subsample' : int(round(subsample)),
}
xgb = XGBClassifier(**xgb_params)
X_train, X_valid, y_train, y_valid = train_test_split(X,y,test_size = 0.2, )
xgb.fit(X_train,y_train)
score = accuracy_score(y_valid, xgb.predict(X_valid))
return score
# 이제 Bayesian Optimization을 사용할 준비가 끝났습니다.
# "BO_xgb"라는 변수에 Bayesian Optmization을 저장해보세요
BO_xgb = BayesianOptimization(f = xgb_bo, pbounds = xgb_parameter_bounds,random_state = 0)
# Bayesian Optimization을 실행해보세요
BO_xgb.maximize(init_points = 5, n_iter = 5)
# 튜닝된 파라미터를 바탕으로 test 데이터 셋 예측
#학습
xgb_tune =XGBClassifier(gamma = 4.376,max_depth = 3, subsample = 0.9818)
xgb_tune.fit(X,y)
#예측
pred = xgb_tune.predict(test.drop(columns = ['index'] ))
#정답파일 내보내기
sub = pd.read_csv('data/sample_submission.csv')
sub['quality'] = pred
sub.to_csv('tune_xgb.csv',index = False)
------------------------------------------------------------------------------------------------------------
↩️ 오늘의 파이썬 리스트
#데이콘_101 #AI #머신러닝 #딥러닝 #파이썬 #파이선 #데이터분석 #데이터사이언티스트 #코랩 #Python #colab #kaggle #pandas #numpy #sckit-learn # read_csv #Bayesian #Optimization #bayesianoptimization #베이지안옵최적화
done
✅
done
✅
하나 여쭤볼게 있습니다.
함수 부분에서 왜 int(round()) 이 두가지 함수로 파라미터를 처리하는걸까요?
round()는 반올림하는 함수 아닌가요?
✅
done
✅
✅
✅
✅
done
done
Done
감마에서 해당값보다 손실이 크게 감소할 때 분리한다고했는데
손실감소가 클 때는 분할을 해야한다는건가요?
✅
Invalid classes inferred from unique values of `y`
데이콘(주) | 대표 김국진 | 699-81-01021
통신판매업 신고번호: 제 2021-서울영등포-1704호
서울특별시 영등포구 은행로 3 익스콘벤처타워 901호
이메일 dacon@dacon.io | 전화번호: 070-4102-0545
Copyright ⓒ DACON Inc. All rights reserved
done