목차
베이지안 최적화 기반의 HyperOpt를 이용한 하이퍼 파라미터 튜닝
- Grid Search 단점
하이퍼 파라미터의 개수가 많을 경우 최적화 수행 시간이 오래 걸림
1. 베이지안 최적화
목적 함수 식을 제대로 알 수 없는 블랙 박스 형태의 함수에서 최대 또는 최소 함수 반환 값을 만드는 최적 입력값을 가능한 적은 시도를 통해 빠르고 효과적으로 찾아주는 방식
f 반환 값은 최대/최소로 하는 x,y 값을 찾아내는 것. 함수 식 복잡, 입력값 개수 많거나 범위 넓으면 순차적으로 입력값 대입해서는 짧은 시간 안에 최적 입렵값 찾을 수 X
→ 베이지안 최적화
베이지안 확률에 기반을 두고 있는 최적화 기법.
베이지안 추론은 ,,
추론 대상의 사전확률과 실험을 통하여 얻은 추가적인 정보를 토대로 사후 확률을 추론하는 방법. 사전 확률에 우도 곱한 것에 비례함. 새로운 증거를 관찰한 바탕으로 사전 믿음을 갱신.
⇒ 사전확률분포와 우도함수로부터 사후확률분포를 추론 하는 방법
- 베이지안 최적화
= 새로운 데이터 입력 받았을 때 최적 함수를 예측하는 사후 모델을 개선해 나가면서 최적함수 모델을 만들어냄.
1. 대체 모델
획득 함수로부터 최적 함수를 예측할 수 있는 입력값을 추천 받은 뒤 이를 기반으로 최적 함수 모델을 개선해 나감
2. 획득 함수
개선된 대체 모델을 기반으로 최적 입력값 계산
입력값 = 하이퍼파라미터
즉, 대체 모델은 획득 함수가 계산한 하이퍼 파라미터를 입력받으면서 점차적으로 개선되며, 개선된 대체 모델을 기반으로 획득 함수는 더 정확한 하이퍼 파라미터를 계산할 수 있게 됨.
STEP 1
최초에는 랜덤하게 하이퍼 파라미터 샘플링, 성능 결과 관측.

검은색 원 = 특정 하이퍼 파라미터가 입력되었을 때 관측된 성능 지표 결괏값
주황색 사선 = 찾아야할 목표 최적 함수
STEP 2
관측된 값을 기반으로 대체 모델은 최적 함수를 추정

파란색 실선 = 대체 모델이 추정한 최적함수
옅은 파란색 영역 = 예측된 함수의 신뢰 구간, 추정된 함수의 결괏값 오류 편차 의미, 추정 함수의 불확실성 나타냄
최적 관측 값 = y축 value에서 가장 높은 값을 가질 때의 하이퍼 파라미터
STEP 3
추정된 최적함수를 기반으로 획득 함수는 다음으로 관측할 하이퍼 파라미터 값을 계산함.
획득 함수는 이전의 최적 관측값보다 더 큰 최댓값을 가질 가능성이 높은 지점을 찾아서 다음에 관측할 하이퍼 파라미터를 대체 모델에 전달

STEP 4
획득 함수로부터 전달된 하이퍼 파라미터를 수행하여 관측된 값을 기반으로 대체 모델은 갱신되어 다시 최적 함수를 예측 추정함

이런 식으로 step 3와 step4 를 특정 횟수만큼 반복하게 되면 대체 모델의 불확실성이 개선되고, 점차 정확한 최적 함수 추정이 가능하게 됨.
일반적으로 대체모델은 최적함수 추정할 때 가우시안 프로세스 쓰지만, HyperOPT는 트리 파르젠(TPE) 사용.
- HyperOPT 사용하기
1) 입력 변수명과 입력값의 검색 공간 설정
2) 목적 함수의 설정
3) 목적 함수의 반환 최솟값을 가지는 최적 입력값 유추
** HyperOPT는 다르게 목적 함수 반환 값의 최댓값이 아닌 최솟값을 가지는 최적 입력값을 유추함.-
-hp.quniform(label,low,high,q) : label 로 지정된 입력값 변수 검색 공간을 최솟값 low에서 최댓값 high까지 q의 간격을 가지고 설정.
-hp.unifrom(label,low,high) : 최솟값 low에서 최댓값 high까지 정규분포 형태의 검색 공간 설정
..
** 목적함수는 반드시 변숫값과 검색 공간을 가지는 딕셔너리 인자로 받고, 특정 값을 반환하는 구조로 만들어져야함.
ex) search_space = {’x’ : hp.quniform(’x’,-10,10,1)}
목적함수의 반환값은 숫자형 단일값 외에도 딕셔너리 형태로 반환할 수 있음. (그러려면 {’loss’:retval, ‘status’:STATUS_OK}와 같이 loss와 status 키 값을 설정해서 반환해야함.
3) 목적함수의 반환값이 최소가 될 수 있는 최적의 입력값을 베이지안 최적화 기반하여 찾기
→ fmin(objective, space, algo, max_evals, trials) 함수 사용
-algo : 베이지안 최적화 적용 알고리즘(기본적으로 tpe.suggest)
-max_evals : 최적 입력값을 찾기 위한 입력값 시도 횟수 → max_evals 값 늘릴수록 반환값이 최소에 근사하는 x,y 찾을 수 있음
-trials : 최적 입력값을 찾기 위해 시도한 입력값 및 해당 입력값의 목적 함수 반환값 결과를 저장하는 데 사용. Trials() 클래스를 객체로 생성한 변수명 입력
—> trials 객체의 results 속성에 파이썬 리스트로 목적 함수 반환값들이 저장되고, vals 속성에 fmin() 함수 수행시마다 입력되는 입력 변수값들을의 리스트가 딕셔너리 형태도 저장됨.
ex)
results → {’loss’ : 함수 반환값, ‘status’ : 반환 상태값}
vals → {’입력변수명’ : 개별 수행 시마다 입력된 값 리스트}
- HyperOPT 이용해서 XGBoost 최적화할 때 주의 사항
- HyperOPT는 입력값과 반환값이 모두 실수형이기 때문에 하이퍼 파라미터 입력 시 형변환을 해줘야함
- HyperOPT의 목적 함수는 최솟값을 반환할 수 있도록 최적화해야하기 때문에 성능값이 클수록 좋은 성능 지표일 경우(ex.accuracy) -1을 곱해줘야한다는 것.
- cross_val_score()를 XGBoost나 LightGBM에 적용할 경우 조기중단이 지원되지 않음 → KFold로 학습과 검증용 데이터 세트를 만들어서 직접 교차 검증을 수행해야함.
2. 언더 샘플링과 오버 샘플링
레이블이 불균형한 분포를 가진 데이터 세트를 학습시킬 때 예측 성능의 문제가 발생할 수 있는데, 이는 이상 레이블을 가지는 데이터 건수가 정상 레이블을 가진 데이터 건수에 비해 너무 적기 때문. → 이상레이블은 너무 적어서 제대로 다양한 유형을 학습하지 못하는 반면, 정상 레이블을 가지는 데이터 건수는 매우 많기 때문에 일방적으로 정상 레이블로 치우친 학습을 수행함.
- 언더 샘플링 = 많은 레이블을 가진 데이터 세트를 적은 레이블을 가진 데이터 세트 수준으로 감소
- 오버 샘플링 = 적은 레이블을 가진 데이터 세트를 많은 레이블을 가진 데이터 세트 수준으로 증식 ( 더 많이 쓰임)
오버 샘플링의 SMOTE 방법
원본 데이터 → K 최근접 이웃으로 데이터 신규 증식 대상 설정 → 신규 증식하여 오버 샘플링 완료
= 적은 데이터 세트에 있는 개별 데이터들의 K 최근접 이웃을 찾아서 이 데이터와 K개 이웃들의 차이를 일정 값으로 만들어서 기존 데이터와 약간 차이가 나는 새로운 데이터를 생성
** 반드시 학습 데이터 세트만 오버 샘플링 해야함. (검증 데이터 세트나 테스트 데이터 세트를 오버 샘플링할 경우 결국 원본 데이터 세트가 아닌 데이터 세트에서 검증, 테스트 수행하기 때문에 올바름 검증과 테스트가 될 수 없음.
**로지스틱 회귀모델의 경우 임계값 민감도가 너무 심해 재현율이 대폭 떨어지고, 정밀도가 높아짐.
**일반적으로는 재현율은 높아지고, 정밀도는 낮아짐 → 정밀도 지표보다는 재현율 지표 높이는게 목적일 때 적용.
- 데이터 분포도가 심하게 왜곡되어 있을 경우
- StandardScaler 사용해 피처를 정규 분포 형태로 변환
- 로그 변환
= 원래 값을 log 값으로 변환해 원래 큰 값을 상대적으로 작은 값으로 변환하기 때문에 데이터 분포도의 왜곡을 개선해줌.
3. 이상치 데이터 제거
- IQR 방식 적용 = 사분위 값의 편차를 이용하는 기법으로 박스 플롯 방식으로 시각화
- 사분위란?
전체 데이터를 값이 높은 순으로 정렬하고, 이를 1/4(25%)씩으로 구간을 분할하는 것을 지칭.
- 여기서 25% 구간인 Q1 ~ 75% 구간인 Q3의 범위를 IQR이라고 함

→ IQR에 1.5를 곱해서 생성된 범위를 이용해 최댓값과 최솟값을 결정한 뒤 최댓값을 초과하거나 최솟값에 미달하는 데이터를 이상치로 간주.
최댓값 = 3/4분위수(Q3) + IQR*1.5
최솟값 = 1/4분위수(Q1) - IQR*1.5
** 많은 피처들 중 결정값(레이블)과 가장 상관성이 높은 피처들 위주로 이상치 검출. (corr() 이용해 각 피처별로 상관도를 구한 뒤 시각화)
'Machine Learning > 분류' 카테고리의 다른 글
[파이썬 머신러닝 가이드] 분류 - 스태킹 앙상블 (3) | 2023.12.22 |
---|---|
[파이썬 머신러닝 가이드] 분류 - LightGBM (0) | 2023.12.22 |
[파이썬 머신러닝 가이드] 분류 - XGBoost (0) | 2023.12.22 |
[파이썬 머신러닝 가이드] 분류 - GBM (0) | 2023.12.22 |
[파이썬 머신러닝 가이드] 분류 - Random Forest (1) | 2023.12.22 |