Bayesian Optimization 관련 질문드립니다.
823
작성한 질문수 23
안녕하세요! 항상 좋은 강의 잘 듣고 있습니다 :)
다름이 아니라 수업을 들으며, 베이지안 최적화 방법을 통한 하이퍼 파라미터 튜닝 과정에서 헷갈리는 부분이 있어서 질문 올리게 되었습니다.
선생님이 예시로 보여주신 코드처럼 iteration을 수행할 때마다, 하이퍼 파라미터를 입력받아 학습하고 rmse 값을 반환하는 함수를 생성해주고자 합니다.
그런데 랜덤포레스트 모델에서 베이지안 최적화(cross validation 수행)을 하고자 할 때, 만약 평가 지표를 RMSE를 사용하고자 한다면 아래와 같이 코드를 작성하면 되는 것인가요?
구글링을 좀 해보니 함수 반환 값을 "return -mean_rmse"와 같이 뒤에 -1 을 곱해서 rmse 값을 최소화 해주어야 한다는 글을 몇 개 보았는데, 어떤 것이 맞는 건지 헷갈리네요...
즉, return 값에 "mean_rmse"를 해주는 것이 맞는지, 아니면 "-mean_rmse"를 해주는 것이 맞는지 궁금합니다.
rf_bayes_params = {
'max_depth': (6, 12),
'min_samples_leaf': (8, 18),
'min_samples_split': (8, 20)
}
def rf_eval(max_depth, min_samples_leaf, min_samples_split):
params = {
# n_estimators 값은 100으로 고정
'n_estimators': 100,
# 호출 시, 실수형 값들이 들어오므로 정수형 하이퍼 파라미터는 정수형으로 변경해줘야 함
'max_depth': int(round(max_depth)),
'min_samples_leaf': int(round(min_samples_leaf)),
'min_samples_split': int(round(min_samples_split))
}
rf = RandomForestRegressor(**params, n_jobs = -1, random_state = 1021)
# Cross Validation
neg_mse_scores = cross_val_score(rf, X_features, y_target, # CV를 수행할 것이므로, 전체 학습 데이터 셋을 사용
scoring = 'neg_mean_squared_error',
cv = 3)
rmse_scores = np.sqrt(-1 * neg_mse_scores)
mean_rmse = np.mean(rmse_scores)
return mean_rmse
rf_bayes = BayesianOptimization(f = rf_eval, pbounds = rf_bayes_params, random_state = 1021)
rf_bayes.maximize(init_points = 5, n_iter = 25)
rf_bayes.res
답변 2
1
안녕하십니까
Bayesian optimization은 object 함수를 최대화(maximize) 또는 최소화(minimize) 할 수 있는 방향성으로 최적화 할 수 있습니다.
정확도, ROC-AUC 같은 지표는 maximize 할 수 있어야 하고, RMSE 같은 지표는 minimize 해야 합니다(왜냐하면 rmse 오류에 대한 지표 이므로 최소화 해야 합니다). maximize형태의 지표를 사용하려면 maximize()를 minimize 형태의 지표를 사용하려면 minimize() 호출합니다. 따라서 여기에 맞춰서 objective 함수가 만들어져야 합니다.
사이킷런의 cross_val_score()에서 neg_mean_squared_error는 MSE에 -1을 곱한 값을 반환합니다. MSE는 양수인데 클수록 나쁜 지표입니다. 사이킷런은 지표값이 큰 값은 좋은 지표로 일괄 처리하므로 이를 위해 MSE*-1 값을 제공합니다.
maximize() 는 큰 값으로 유도하므로 neg_mean_squared_error로, 만일 -1*neg_mean_squared_error(즉 양수 오류) 이라면 minimize()로 최적화 유도 해야 합니다.
감사합니다.
안녕하세요 열심히 수강중인 학생입니다
0
60
2
정수 인덱싱
0
68
2
넘파이 오류
0
85
2
11강 numpy의 axis 축 질문 드립니다.
0
85
2
Kaggle 에서 Santander customer satisfaction data 를 다운로드 되지가 않습니다.
0
77
2
Feature importances 를 보여주는 barplot 이 그래프로 안보여져요.
0
70
2
타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.
0
75
2
타이타닉 csv 파일이 주피터 화면에 보이지 않습니다.
0
64
2
5강 강의 오류가 있어요.
0
84
1
실무에서 LTV 관련 모델 선택 질문입니다!
0
72
2
14강 강의 듣는중에 궁금한게 있어서 질문합니다~
0
69
3
파이썬 다운그레이 후 사이킷런 재설치
0
117
2
좋은 강의 감사합니다.
0
72
2
scoring 함수 음수값
0
67
2
6번 강의에 사이킷런, 파이썬, 아나콘다 각각 버전 일치 안 시키고 진행해도 강의 따라가 지나요?
0
100
2
분류 평가 정확도 예측
0
76
2
안녕하세요. 강의 들으면서 업무에 적용하고 싶은 수강생입니다.
0
98
1
카카오톡 채널 있나요
0
106
1
혹시 강의에서 사용하시는 ppt 받을 수 있는건가요
0
189
2
pca 스케일링 관련하여 질문드립니다.
0
100
2
주피터 대신 구글 코랩
0
172
2
강의에서 사용하는 pdf or ppt자료는 따로 없는 건가요?
0
146
2
실루엣 스코어..
0
84
2
float64 null 값 처리 방법
0
102
2





