머신러닝 분류 알고리즘 정리로 결정트리와 앙상블 학습에 대해 개념 정리로 어떠한 상황에 어떤 학습방법을 사용하는게 좋을까 라는 판단이 가능하도록 유도하는것이 목적인 정리
1. 결정트리
루트노드와 그아래 규칙 노드와 리프노드로 가지치기를 하듯 분류하는 알고리즘이다
결정트리의 올바른 방향은 지니계수가 작아지고 결정트리가 대칭을 유지하도록 데이터 전처리 및 엔지니어링 하는것이 바람직하다.
용어 정리
루트 노드 | 시작점 |
규칙 노드 | 가지 치기 규칙 |
리프 노드 | 분류 결정 값을 가짐 |
지니계수 | 정보이득 지수값 (값이 크면 불순도가 높음) |
파라미터
min_samples_split | 노드를 분할하기 위한 최소 샘플 데이터 수 |
min_samples_leaf | 리프 노드의 최소 샘플 데이터 수 |
max_features | 분할에 사용되는 최대 피쳐 수 (default는 모두사용) |
max_depth | 트리의 최대 깊이 설정 |
max_leaf_nodes | 리프 노드 최대 개수 |
활용 방안
- 결정 트리 시각화
- 피쳐별 중요도 (Featuer Importance) 시각화
- 산포도 기반 시각화
2. 앙상블 학습
앙상블 학습은 여러개의 알고리즘을 생성, 학습, 예측 값 처리 후 최종 결과를 도출하는 기법으로 방식에 따라 다음의 4가지로 구분한다. 쉽게보면 위의 결정트리가 학습 결과가 약한 모델이라면 이를 반복 혹은 계속적인 학습, 결합을 통해 강한 모델을 만드는 방식이다
- 보팅
다른 알고리즘을 여러개 병렬 연결하여 사용하는 방법이다
종류에 따라 하드 보팅, 소프트 보팅으로 나눌수 있으며 방법은 아래의 사진과 같다.
하드 보팅 | 다수결, 최빈값 |
소프트 보팅 | 확률값 평균 |
하드 보팅은 상황에 따라 약한 분류 모델의 다수표를 받아 선정될 수 있기에 약점이 존재하여 소프트 보팅이 주로 성능이 더 높음으로 판단된다.
- 배깅
개별 모델들이 서로 다른 샘플링 데이터를 훈련에 사용하여 병렬 연결하며 동일 알고리즘을 여러개 만들어서 소프트 보팅을 수행한다. 부스팅 모델에 비해 특수한 경우가 아니고선 성능이 좋을 확률이 낮음 EX) 랜덤 포레스트
샘플링 데이터는 위의 표처럼 중복된 샘플링일수 있음
- 부스팅
현재는 가장 강한 분류 모델로 여러개의 약한 분류기를 순차적으로 학습 및 예측을 수행하며 잘못 예측한 데이터에 가중치를 부여하여 오류를 개선하여 다음 학습에 반영하는 방식이다.
모델 종류
AdaBoost | 반복적인 가중치 계산을 통해 값들을 분류하며 성능 향상하는 방식 |
GBM (Gradient Boost Machine) | 1. Ada에서 가중치를 업데이트 하는 방식으로의 개선 2. 경사하강법 가중치 업데이트 방식 |
XGBoost | 1. GBM의 느린학습속도와 과적합을 보완 2. 병렬 학습 3. 조기학습종료 기능 4. 과적합 방지 파라미터 (L1,L2) |
LGBM | 비대칭형 분류 |
서드파티 | CatBoost |
XGBoost
- 파라미터
booster | 부스팅 알고리즘 | 트리기반 모델 : gbtree or dart 선형기반 모델 : gblinear dart : 과적합 방지를 위한 특정 비율 dropout 적용 |
objective | 훈련 목적 | 회귀 : reg:squarederror 이진분류 : binary:logistic 다중분류 : multi:softmax 확률값 다중분류 : multi:softprob |
eta | learning_rate 학습 비율 가중 |
부스팅을 반복 과정에서 모델 업데이트 비율 default : 0.3 범위 : 0 ~ 1 |
min_child_weight | 과적합 방지 | 범위 0 ~ 1 하위 노드의 최소 가중치의 합 (리프 노드까지의 모든가중치의 합에 대한 제한값) 값이 크면 과소적합 우려가있음 |
max_depth | 트리의 깊이 | 과적합 방지 분류가 깊어지면 메모리 사용량 증가로 학습 속도가 저하 |
max_leaf_nodes | 리프 노드의 최대 개수 | 리프 노드의 최대 개수 |
gamma | 노드 분할 시 최소 감소값 지정 | default 0 노드 분할시 필요한 최소 감소값을 지정 손실 감소가 gamma보다 크면 노드 분할 값이 클수록과대 적합 방지 효과 |
subsamplt | 데이터 샘플링 비율 | default 1 범위 0 ~ 1 (0.6~1 사용) 데이터의 샘플링 비율 |
colsample_bytree | 각 트리 샘플링 비율 | 각 트리 샘플링 비율 범위 0~1 default 1 |
lambda | 가중치에 대한 L2규제 조정값 | 가중치에 대한 L2규제 조정값 (릿지 알고리즘) default 1 값이 크면 과대적합 방지효과 |
alpha | 가중치에 대한 L1규제 조정값 | 가중치에 대한 L1규제 조정값 (라쏘 알고리즘) 값이 크면 과대적합 방지효과 default 1 |
scale_pos_weight | 불균형 데이터 가중치 조정값 | label값이 불균형할때 균형을 맞춤 |
random_state | 랜덤 시드값 | 랜덤 시드 |
LGBM
- 파라미터
- 스태킹
2단계를 통해 모델을 생성하는 방법으로 1차 모델의 예측 결과를 2차 모델의 훈련 데이터로 사용하는 형태
3. 앙상블 학습 시 추가 방안
그리드서치
- 하이퍼파라미터 튜닝
K폴드
- 데이터 분할 방식
'Python > 머신러닝' 카테고리의 다른 글
[XAI] XGBoost 분류 모델 시각화 (6) | 2024.08.28 |
---|---|
머신러닝 데이터 교차검증 python (0) | 2024.03.05 |
머신러닝 피쳐스케일링 python (0) | 2024.03.05 |