이번 글에서는 머신러닝 분류(Classification)의 기본이 되는 결정트리에 대해 소개한다.
결정트리(Decision Tree)
결정 트리는 트리 기반의 분류 규칙을 만드는 것이다. 분류 알고리즘은 feature를 이용하여 label을 예측하는 형식으로 이루어 지는데, 결정트리는 feature의 값을 특정 기준으로 나누며 label을 분류한다.
유전자의 발현량을 feature로 이용하여 방광암 환자와 정상인을 분류하는 분류기를 가정해보자. CALD1,JAZF1 유전자는 방광암 발병 환자에게서 높은 발현량을 가지는 것으로 알려져 있다. 이를 이용하여 다음과 같은 결정 트리를 생성할 수 있다.
먼저 CALD1의 발현량을 기준으로 나눈다. CALD1의 발현량이 8 이하일 경우 0(Neagtive)로 분류하였고, 8 이상일 경우 JAZF1을 기준으로 한 번 더 분류한다. JAZF1이 6 이하일 경우 0(Neagtive)로 분류하였고 6이상일 경우 1(positive)로 분류하였다.
이렇게 feature를 특정 규칙을 이용하여 분류하는 작업을 반복하고, 분류의 마지막에는 특정 label값을 반환한다. 'CALD1발현량 >8'과 같이 데이터를 분류하는 노드를 규칙 노드라고 하고, 규칙노드의 결과로 더이상 분류하지 않고 label값을 반환하면 이를 리프 노드라고 한다.
결정 트리의 분류 성능을 높이기 위해 가장 중요한 것은 feature를 어떠한 기준으로 나눌것이냐이다. 만약 CALD1의 발현량이 방광암 발병과 매우 높은 연관성을 가져서, 실제로 8 이하인 경우 모두 Negative였다면 해당 규칙 노드는 분류 성능이 높다고 할 수 있다. 그러나 만약 방광암과는 연관이 없는 유전자의 발현량을 기준으로 규칙노드를 생성한다면 어떠한 값을 기준으로 분류한다고 하더라도 Negative와 Positive를 잘 분류해내지 못할 것이다.
따라서 결정트리는 분류 기준을 정하기 위해 '균일도'와 '지니 계수'라는 개념을 이용한다. 균일도란 같은 같은 label끼리 묶여있는 정도를 나타낸다. 100개의 바둑알이 흰 바둑알과 검은 바둑알로 구성되어 있다고 가정할 때 흰 바둑알이 99개, 검은 바둑알이 1개 있다면 이는 균일도가 높은 데이터셋이다. 반대로, 흰 바둑알이 50개, 검은 바둑알이 50개일 경우 무작위로 하나를 뽑았을 때 어떤 색의 바둑알일 지 예측하기 어렵다. 이렇게 여러 label이 섞여있는 데이터셋을 균일도가 낮다고 표현한다.
결정트리는 균일도가 높은 데이터셋으로 분류할 수 있도록 규칙 노드를 생성한다. 그림과 같이 A규칙을 이용하면 0이 80%, 1이20%인 데이터셋과 0이 20%, 1이 80%인 데이터 셋으로 분류할 수 있다고 가정하고, B규칙을 이용하면 0이 60%, 1이 40%인 데이터셋과 0이 40%, 1이 60%인 데이터셋으로 나눌 수 있다고 가정하자. 좋은 분류기를 만들기 위해서는 어떤 규칙을 사용해야 할까? 당연히 A규칙이 두 label을 더 잘 분류하고 있으므로 A규칙을 사용해야 한다. 즉, A규칙으로 분류한 두 데이터셋의 균일도가 B규칙을 이용한 것보다 높으므로 A규칙을 사용한다고 얘기할 수 있다.
지니계수는 경제학에서 불평등 지수를 나타낼때 사용하는 계수이다. 0이 가장 평등하고 1로 갈수록 불평등하다. 머신러닝에서는 지니계수가 낮을수록 데이터 균일도가 높은 것으로 해석해 지니 계수가 낮은 속성을 기준으로 분할한다.
결정 트리의 장단점
장점
- 쉽고 직관적이다.
- 피처 스케일링이나 정규화 등의 전처리의 영향이 크지 않다.
단점
- 과적합으로 알고리즘의 성능이 떨어진다.
트리 구조의 분류 모델의 장점은 피처 스케일링과 정규화 같은 전처리 작업이 필요하지 않다는 것이다. 반면 단점으로는 과적합이 있다. 모든 데이터 상황을 만족하는 완벽한 규칙은 실제로 만들 수 없는 경우가 더 많음에도 불구하고 결정 트리는 정확도를 높이기 위해 계속해서 조건을 추가하며 트리의 깊이가 커지고, 결과적으로 학습 데이터셋에 과적합 되어 성능이 떨어지는 결과를 초래한다. 이러한 단점을 극복하기 위하여 결정 트리를 응용한 앙상블(Ensemble) 기법이 탄생하게 되었다.
결정 트리 파라미터
결정 트리는 많은 하이퍼 파라미터(hyper parameter)를 가진다. 다음 파라미터들은 사용자가 정하여 Classifier에 전달할 수 있다.
- min_sample_split: 노드를 분할하기 위한 최소한의 샘플 데이터 수. 만약 해당 값이 5라면 분류 이후 데이터가 4개만 남은 노드의 경우 더 이상 분할을 진행하지 않고 리프 노드가 된다. 과적합을 제어하는 데 사용된다.
- min_sample_leaf: 리프 노드가 되기 위한 최소한의 샘플 데이터 수. min_sample_split과 마찬가지로 과적합을 제어한다.
- max_features: 분할을 위해 고려할 최대 피처 개수. 디폴트는 None이며, 이 경우 모든 feature를 이용하여 트리를 분할한다.
- max_depth: 트리의 최대 깊이를 규정. 만약 해당 값이 5라면 규칙 노드를 5번 거치면 리프 노드가 되어 더 이상 분할하지 않는다. 과적합을 제어하는 데 사용된다.
- max_leaf_nodes: 리프 노드의 최대 개수
결정 트리 과적합
'Machine Learning > Classification' 카테고리의 다른 글
세 가지 결정 이론(오분류 비율 최소화, 기대 손실 최소화, 거부 옵션) (0) | 2023.01.27 |
---|---|
스태킹 앙상블 (Stacking Ensemble) (0) | 2022.08.05 |
부스팅(Boosting) - XGBoost, LightGBM (0) | 2022.08.04 |
배깅(Bagging) - 랜덤 포레스트(Random Forest) (2) | 2022.08.02 |
Ensemble Learning - Voting(보팅) (1) | 2022.08.02 |