tak's data blog
Decision Tree(의사결정나무) 본문
벌써 5주차인데요 이번엔 Decision Tree(의사결정나무)에 대해서 다뤄보도록 하겠습니다!
기본 개념 및 구조
- Decision Tree(의사결정나무)는 데이터의 feature에서 패턴을 찾는 머신러닝 모델
- supervised learning model (지도학습 모델 중 하나)
- 분류, 회귀, 다중출력 작업이 가능하다.
- 매우 복잡한 데이터 셋도 학습 가능
- randomforest의 기본 구성 요소
(특정 feature를 바탕으로 작은 그룹들로 나누는 과정을 반복하여 더 이상 나눌 수 없는 지점(리프 노드)에 도달 시킨다.)
예측 단계에서 unlabeled 데이터를 의사결정나무에 통과시켜 리프노드에 도달하면, 해당 노드에서 제일 많이 포함된 label이 unlabeled 데이터의 label로 지정된다.
- 노드 : 데이터를 분류하는 각각의 단계들
- 루트노드 : 깊이가 0인 맨 꼭대기의 노드
- 리프노드 : 자식노드를 가지지 않는 노드 -> 추가적인 검사 진행되지 않는다.
결정 트리 모델 시각화 및 특징
Decision tree는 시각화가 가능하다. -> 결정 트리가 결과를 도출하는 과정을 확인 가능.
(export_graphviz() 활용)
- samples : 얼마나 많은 훈련 샘플들이 적용 되었는지 (훈련 샘플수)
- value : 노드에서 각 클래스에 얼마나 많은 훈련 샘플이 있는지
ex) class = setosa/ versicolor/ virginica -> 각 단계마다 클래스가 나누어지는데 클래스마다 샘플 수 확인 가능
- Gini 속성 : 불순도를 측정한 지수. 한 노드의 모든 샘플이 같은 클래스라면/ 이 노드를 순수(gini=0)하다고 한다.
결정 나무의 특성
장점 : 데이터 전처리가 거의 필요하지 않다.
(특성의 스케일을 맞추거나 평균을 원점에 맞추는 작업이 필요하지 않음. feature scaling이 불필요)
클래스 확률 예측
- 길이가 5cm이고 너비가 1.5cm인 꽃잎 리프노드의 깊이는 2
확률 = setosa : 0% (0/54) / versicolor : 90.7%(49/54) / virginica : 9.3%(5/54)
지니 불순도와 엔트로피
- criterion 매개변수를 'entropy'로 지정하여 엔트로피 불순도 사용 가능
- 지니 불순도와 큰 차이는 없다. 지니 불순도의 계산이 조금 빠르지만 지니 불순도는 가장 빈도 높은 클래스를 한쪽 가지로 고립시키는 반면 엔트로피는 조금 더 균형 잡힌 트리
CART 훈련 알고리즘
1. 훈련 세트를 하나의 특성 k의 임곗값 t_k를 사용해 두개의 subset으로 나눈다.
2. (크기에 따라 가중치가 적용된) 가장 순수한 subset으로 나눌 수 있는 (k, t_k) 짝 찾기
[subset 나누는 과정]
- (max_depth 매개변수로 정의된) 최대 깊이가 되면 중지하거나 불순도를 줄이는 분할을 찾을 수 없을 때 멈추게 된다.
- max_depth 외에도 min_samples_split, min_samples_leaf, min_weight_fraction_leaf, max_leaf_nodes와 같은 매개변수도 중지 조건에 관여
CART 알고리즘: 탐욕적 알고리즘(greedy algorithm)
- 결정을 해야 할 때마다 그 순간에 가장 좋다(최적이다)고 생각되는 것을 해답으로 선택함 으로써 최종적인 해답에 도달: 항상 최적의 솔루션을 보장하지 않는다.
- 최적의 트리를 찾는 것은 NP완전(NPComplete) 문제로도 알려져 있음
→ "납득할 만한 좋은 솔루션"으로만 만족해야 함
결정 트리 규제
: 결정 트리는 훈련 데이터에 대한 제약 사항이 거의 없다.(오버피팅 되기 쉽다.)
-> 규제 매개 변수를 추가하여 모델 학습시 오버피팅 방지 (결정 트리의 자유도 제한)
규제 매개변수 :
min_으로 시작하는 매개변수 증가
or max_로 시작하는 매개변수를 감소
-> 모델에 대한 규제가 커진다.
- max_depth : 결정 트리의 최대 깊이
-> 감소 -> 모델에 대한 규제가 커진다. -> 깊이가 얕아질 수록 과대적합 위험 감소 가능.
- min_samples_split : 분할되기 위해 노드가 가져야 하는 최소 샘플 개수
-> min_samples_split 증가 : 모델에 대한 규제가 커짐
- min_samples_leaf : 리프 노드가 가지고 있어야 할 최소 샘플 개수
-> 증가 -> 모델에 대한 규제가 커짐
- min_weight_fraction_leaf : min_samples_leaf와 같지만, 가중치가 부여된 전체 샘플 수에서의 비율
- max_leaf_nodes : 리프 노드의 최대 개수
-> 감소 시키면 모델에 대한 규제가 커진다.
- max_features : 각 노드에서 분할에 사용할 특성의 최대 개수
규제할 경우 더 잘 나뉜다!
회귀
- DecisionTreeRegressor를 사용
- 분류 트리와의 주요 차이점 : 각 노드에서 클래스를 예측하는 대신 어떤 값을 예측 하는 점 -> 어떤 클래스에 속할지가 아닌 어떠한
- 불순도를 최소화하는 방향으로 분할하는 대신, mse를 최소화하는 방향으로 분할
결정 트리 모델의 불안정성
- 결정 트리는 계단 모양의 결정 경계를 만들기 때문에, 훈련 세트의 회전에 민감
- 데이터 셋을 45도 회전시켜, 결정 트리 모델이 불필요하게 구불구불해지는 것을 확인 가능
- 훈련 데이터에 있는 작은 변화에 민감
- 더 좋은 방향으로 회전 시킴으로써 해결 가능 (PCA 기법 활용)
- 랜덤 포레스트는 많은 트리에서 만든 예측을 평균내서 불안정성 극복
'머신러닝' 카테고리의 다른 글
추천시스템(Recommendation system) 유사도(similarity) (0) | 2021.03.26 |
---|---|
추천시스템(Recommendation system) (1) | 2021.03.26 |
Model training(모델 훈련) (0) | 2021.02.10 |
classification(분류) (0) | 2021.02.02 |
머신러닝이란? (0) | 2021.01.26 |