목차
1. 서론
2. 결정트리
3. 앙상블
4. XGBoost
1. 서론
facenet과 c3d를 활용해 feature extractor를 구현했는데 이것을 classify하기 위해 XGBoost를 사용해보기로 하였다. 사실 XGBoost는 앙상블 기법을 활용하기 위한 수단이다. 따라서 앙상블 기법을 이해해야 하고 이를 위해선 결정트리부터 이해해야 한다.
2. 결정트리
개념
결정트리를 비유하자면 스무고개와 비슷하다. 질문을 통해 데이터셋을 분류하는 방식이다.
예를 들어 강아지, 고양이를 구분해보자. 눈동자가 어떻게 생겼는데 꼬리는 어떻게 생겼는지 다양한 질문을 통해 분류할 수 있을 것이다. 이렇게 여러가지 질문으로 데이터를 분류하는 기법을 결정트리 알고리즘이라고 한다. 추가로 컴퓨터는 최대한 적은 질문을 통해 정확하게 분류하는 것을 목표로 한다.
구조
Root Node: 분류 대상
Decision Node: 어떤 기준을 통해 분류되는 노드
Leaf Node: 더 이상 분류되지 않는 최종 노드
Gini 계수: 0~1 사이값을 가지고 0으로 갈수록 잘 분할되었다고 해석
결정트리 알고리즘의 단점은 과적합되기 쉽다는 점이다. 데이터를 정확하게 분류하기 위해 만든 기준이 새로운 데이터에는 맞지 않을 수 잇기 때문이다. => 하이퍼 파라미터 튜닝을 통한 과적합 방지
하이퍼파라미터 튜닝
min_samples_split: 노드들 분할하기 위한 최소한의 샘플 데이터 수 => 높은 값을 부여 시 분할이 되지 않아 과적합 방지
max_depth: 트리 최대 깊이 => 깊이가 깊어질수록 과적합 위험
max_features: 고려할 피처 개수(none: 전체 피쳐, sqrt: sqrt(전체 피쳐개수), log: log2(전체 피처개수))
3. 앙상블
개념
하나의 알고리즘을 이용해서 여러 모델을 학습시키는 것을 뜻한다.
예를 들어 1000개의 개와 고양이 사진을 분류한다고 해보자. 그리고 결정트리 10개의 트리 모델을 만들것이다. 강아지 사진을 하나 넣었다고 하자. 8개의 트리에서는 '강아지'라고 판단했고 2개의 트리에서는 '고양이'라고 판단했다. 그럼 투표방식에 따라 '강아지'라고 판단하는 것이다.
하나의 알고리즘으로 여러개의 모델을 만듦녀 결과가 다 동일할 것아닌가? 그렇기에 데이터를 매번 다르게 해주거나 모델을 변화시켜야 한다.
데이터를 매번 다르게 해주는것 => 배깅(Bagging, Bootstrap Aggregating)
모델을 변화시키는 작업 => 부스팅(Boosting)
4. XGBoost(Extreme Gradient Boosting)
개념
앙상블 부스팅 기법의 한 종류로 이전 모델의 오류를 순차적으로 보완해나가는 방식으로 모델을 형성한다. 이전 모델에서의 실제값과 예측값의 오차를 훈련데이터에 투입하고 gradient를 이용하여 오류를 보완하는 방식이다.
파라미터
- General Parameters
- booster: gbtree(트리 기반 모델) gblinear(선형 모델)
- Booster Parameters
- n_estimators: 트리 개수
- early_stopping_rounds: 최대한 몇 개의 트리를 완성해볼 것인지, valid loss에 더 이상 진전이 없으면 멈춤, 과적합 방지 가능
- learning_rate: 이전 결과를 얼마나 반영할건지, 일반적으로 (0.01~ 0.2)
- min_child_weight:: child에서 필요한 모든 관측치에 대한 가중치의 최소 합
- max_depth: 트리의 최대 깊이
- gamma: 트리에서 추가적으로 가지를 나눌지를 결정할 최소 손실 감소 값
- subsample: 각 트리마다 데이터 샘플링 비율
- colsample: 각 트리마다 feautre 샘플링 비율
- reg_lambda: L2 regularization 가중치
- reg_alpha: L1 regularization 가중치
- scale_pos_weight: 데이터가 불균형할때 사용
- Learning Task Paraemters
- objective : 목적함수(binary:logistic: 이진 분류를 위한 로지스틱 회귀 예측된 확률 반환, multi:softmax: softmax를 사용한 다중 클래스 분류, 확률이 아닌 예측된 클래스 반환, multi:softprob: softmax와 같지만 각 클래스에 대한 예상 확률 반환)
- eval_metric
- seed: 나중에 재현할 때 같은 값을 출력하기 위해 시드값 고저