728x90
반응형
Decision Tree (결정 트리)
- 분류와 회귀 문제에 널리 사용하는 모델
- 결정에 다다르기 위해 예/아니오 질문을 이어 나가면서 학습
- 결정 트리의 학습은 정답에 가장 빨리 도달하는 예/아니오 질문(테스트) 목록을 학습한다는 뜻
- 트리 만들기는 모든 리프 노드가 순수 노드가 될 때까지 진행
- 모델이 매우 복잡해지고 훈련 데이터에 과대 적합(overfitting)됨
- 적절한 리프 노드의 샘플 개수와 트리의 깊이에 제한을 둬서 과대 적합 방지해야 함
- 과대 적합(overfitting)을 막기 위해 사전 가지치기(pre-pruning)와 데이터 포인트가 적은 노드를 삭제하거나 병합하는 방법 사용
장점
- 수학적인 지식이 없어도 결과를 해석하고 이해하기 쉽다
- 수치 데이터 및 범주 데이터에 모두 사용 가능하다
단점
- overfitting의 위험이 높다
- 학습 시 적절한 리프 노드의 샘플 개수와 트리의 깊이에 제한을 둬서 학습 데이터에 너무 모델이 치우지지 않게 주의해야 한다
Pre-Pruning
- 트리의 최대 깊이나 리프의 최대 개수를 제한하거나 노드가 분할하기 위한 포인트의 개수를 지정하는 것
- Scikit-learn 패키지에서는 pre-pruning만 지원
장점
- 만들어진 모델을 쉽게 시각화할 수 있어서 비전문가도 이해하기 쉽다
- 데이터 스케일에 구애 받지 않는다
단점
- 사전 가지치기를 사용해도 과대 적합되는 경향이 있어 일반적 성능이 좋지 않으며 새로운 데이터를 예측할 능력이 부족한다.
Information Entropy (정보 엔트로피)
Entropy (엔트로피)
- 불확실성을 수치적으로 표현한 값
Information gain (정보 이득)
- 질문 이전의 엔트로피에서 질문 이후의 엔트로피를 뺀 값
- 불확실성이 줄어 든 정보
질문 후의 정보 이득 = 질문 전의 엔트로피 - 질문 이후 엔트로피
Gain(T,X) = Entropy(T) - Entropy(T,X)
Gini Coefficient (지니 계수)
특징이 항상 이진 분류로 나뉠 때 사용
지니 계수가 높을수록 순도가 높음
- 순도가 높다는 뜻은 한 그룹에 모여있는 데이터들의 속성들이 많이 일치한다는 뜻
Hyper Parameter
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(max_depth=4,
min_samples_split=2,
min_samples_leaf=2,
random_state=70)
max_depth
- 트리의 최대 한도 깊이
- default는 None. 완벽히 클래스 결정값이 될 때까지 깊이를 계속 키우거나 노드가 가지는 데이터 개수가 min_samples_split보다 작아질 때까지 계속 분할
- 깊이가 깊어지는 min_samples_split 설정대로 최대 분할하여 과적합할 수 있으므로 적당한 값으로 제어
min_samples_split
- 자식 노드를 갖기 위한 최소한의 데이터 개수
- 노드를 분할하기 위한 최소한의 샘플 데이터 수로 과적합 제어에 사용
- defaultsms 2, 작게 설정할수록 분할되는 노드가 많아져 과적합 가능성이 증가
min_sample_leaf
- 리프 노드의 최소 데이터 개수
- 과적합 제어 용도
- 비대칭적 데이터의 경우 특정 클래스의 데이터가 극도로 작을 수 있어 이 경우에는 작게 설정
max_features
- 최적의 분할을 위해 고려할 최대 feature 개수
- default는 None으로 데이터 세트의 모든 feature를 사용하여 분할
max_leaf_nodes
- 리프 노드 최대 개수
random_state
- 동일한 정수를 입력했을 때 학습 결과를 항상 같게 만들어주는 파라미터
시각화
- gini: 불순도 척도. 0일 경우 모든 샘플이 하나의 레이블을 가지며, 1에 가까울수록 여러 레이블이 한 노드에 존재함
- samples: 노드 안에 들어 있는 데이터의 개수
- value: 레이블별 데이터의 개수
- class: 레이블
References
728x90
반응형
'Machine Learning > Supervised Learning' 카테고리의 다른 글
[Supervised Learning][Classification] SVM(Support Vector Machine) (0) | 2021.03.24 |
---|---|
[Supervised Learning] Ensemble (0) | 2021.03.24 |
[Supervised Learning][Regression] Linear Regression (0) | 2021.03.24 |
[Supervised Learning][Classification] KNN(K-Nearest Neighbor) (0) | 2021.03.24 |
[Supervised Learning][Classification] Logistic Regression (0) | 2021.03.01 |