https://tyami.github.io/machine%20learning/decision-tree-3-c4_5/
의사결정 나무 (Decision Tree) C4.5 알고리즘
개선점 1: 정교한 불순도 지표
- Windy라는 지표로 분기했을 때 데이터가 위와 같이 분기된다고 가정해봅시다. 이 경우의 Information Gain은 0.5568입니다.
Information Gain=H(7,3)−(106H(6,0)+104H(1,3))
=0.8813−(106×0+104×0.8113)

- 다른 지표인 With whom이라는 지표로 분기했을 때는 Information Gain이 0.6813이 나옵니다.
Information Gain=H(7,3)−(101H(1,0)+101H(1,0)+⋯+101H(0,1)+102H(1,1))
=0.8813−(101×0+⋯+102×1)
H(7,3)=−107log2(107)−103log2(103)=−0.7log2(0.7)−0.3log2(0.3)=0.8813

Information Gain Ratio=IVIG
- 특정 지표로 분기했을 때 생성되는 가지의 수를
N이라고 하고, i번째 가지에 해당하는 확률을
pi라고할 때, Intrinsic Value는 아래와 같습니다.
IV=−i=1∑Npilog2pi

예시로 든 두 가지 지표 Windy, With whom에 대한 Information Gain Ratio를 계산하여 차이점을 비교해봅시다.
- Windy 지표에 대한 Information Gain Ratio 계산
Information Gain Ratio=IVIG=−(106log2106+104log2104)0.5568
=0.97010.5568=0.5739
- With whom 지표에 대한 Information Gain Ratio 계산
Information Gain Ratio=IVIG=3.12190.6813=0.2182
Information Gain을 사용할 때는 두 지표 간 우열이 명확하지 않았지만, Information Gain Ratio(GR)를 사용하면 아래와 같은 결론에 도달한다.
정리
IG(Information Gain) 과 IV(Intrinsic Value) 은 모양은 비슷하지만 완전히 다른 목적을 가진 두 개념이다.
- IG = 원래 불확실성 − 속성 A로 나눈 뒤 남은 불확실성
- IV는 속성 값의 분포 엔트로피이며 “속성이 본질적으로 얼마나 많은 가지(branch)를 만드는지”를 측정한다.
IG(S,A)=H(S)−i∑piH(Si)
차이 ① 목적이 다름
| 개념 | 목적 |
|---|
| IG | 속성이 Play를 얼마나 잘 예측하는가 (정보 감소량) |
| IV | 속성이 데이터를 얼마나 많이/균등하게 쪼개는가 (분할 복잡성) |
차이 ② 계산에서 사용하는 정보가 다름
| 사용 정보 | IG | IV |
|---|
| Play(Yes/No) 클래스 정보 | 사용됨 | 사용 안 함 |
| 속성 값의 분포 | 2차적으로 고려 | 주요 요소 |
차이 ③ 수식의 구조 차이
IG=H(label)−∑piH(labeli)
IV=−∑pilog2(pi)
IG는 엔트로피 감소량
IV는 속성 분포의 엔트로피
둘을 왜 함께 쓰는가? (ID3 → C4.5 개선)
-
IG만 사용하면 문제가 생김:
-
문제: 값 종류가 많으면 항상 IG가 커짐
- 예) 주민번호, 전화번호 같은 독립된 값 → 모두 다르게 분기 → IG 최대.
개선점 2: 연속형 변수를 사용 가능
방법 1을 예시
모든 지표 X 가능한 모든 breakpoints에 대해 Information Gain을 계산하여 비교한 뒤, 최적의 지표 + 최적의 threshold 조합을 선택하여 분기하면 된다.
-
IG(Play, Temperature(21))=0.04742
-
IG(Play, Temperature(23))=0.1001
-
IG(Play, Temperature(24.5))=0.1590
-
IG(Play, Temperature(25.5))=0.2257
-
IG(Play, Temperature(26.5))=0.3029
-
IG(Play, Temperature(27.5))=0.09000
-
IG(Play, Temperature(28.5))=0.1516
-
IG(Play, Temperature(29.5))=0.3586
-
IG(Play, Temperature(30.5))=0.1925
-
IG(Play, Temperature(33))=0.4009
-
IG(Play, Temperature(35.5))=0.2863
위의 모든 threshold 후보들 중에서 가장 큰 Information Gain은 IG=0.4009을 갖는 Temperature=33
-
따라서 Temperature 지표에서 최적 threshold는 33도이다.
-
모든 지표 X 모든 breakpoints에 대해 Information Gain을 계산하여 비교한 뒤, 최적의 지표 X breakpoints 조합을 찾아 분기를 진행하면 됩니다.
개선점 3: 결측치가 포함된 데이터 사용 가능
-
결측값(missing value)이 있는 경우, 속성 A의 실제 기여도를 반영하기 위해 Weighted Information Gain을 사용한다.
-
14개의 데이터 샘플 중 6개 샘플에 대해서는 Outlook 변수의 값이 결측치 (missing value)로 되어있는 상태입니다.
- 일반적으로는 이런 경우 분기 자체가 불가능하지만, C4.5 알고리즘에서는 이 문제를 Information Gain 을 계산하는 수식에 약간의 변화를 주어 해결했습니다.
-
Entropy는 Non-missing value로만 계산
-
Information Gain는 Weighted Information Gain로 변경
Weighted Information Gain=F×IG(S,A)
F=proportion of non-missing value
- IG(S,A): 원래의 Information Gain
- F: 해당 속성 A에서 실제로 값이 존재하는 비율
- 따라서 결측치가 많을수록 F가 작아져 그 속성이 트리에 미치는 영향도 줄어든다.
-
Intrinsic Value는 missing value를 하나의 클래스로 보고 모든 데이터로 계산
예시
1단계: Entropy는 Non-missing value로만 계산
H(Play)=−i=1∑Cpilog2pi=−(83log283+85log285)=0.9544
H(Play, Outlook)=∑p(t)H(t)=81H(1,0)+84H(2,2)+83H(0,3)=0.5
IG(Play, Outlook)=H(Play)−H(Play, Outlook)=0.9544−0.5=0.4544
2단계: Information Gain → Weighted Information Gain 계산
결측값이 있는 경우
F=proportion of non-missing value=148
Weighted Information Gain=F×IG=148×0.4544=0.2597
3단계: Intrinsic Value 계산
Missing value를 하나의 클래스로 보고 총 4개의 클래스(sunny=1, rain=4, overcast=3, missing=6)로 계산한다.
IV=−(141log2141+144log2144+143log2143+146log2146)=1.659
IGR=1.6590.2597=0.1565
개선점 4: 과적합을 방지하기 위한 가지치기
- 의사결정 나무가 깊어질수록, training data에 대해서는 잘 분류하지만, 새로운 종류의 데이터 (test data)는 잘 분류하지 못하는 과적합 (overfitting) 문제가 발생하게 됩니다.
가지치기 (Pruning)
이 중, C4.5 알고리즘에서는 사후 가지치기 알고리즘을 적용했습니다.
사후 가지치기 (Post-pruning)Permalink
-
Data segmentation 사후 가지치기는 의사결정 나무가 완성된 후에 가지치기를 진행하는 방식입니다.
- 따라서 데이터를 training/test 데이터가 아니라 training/pruning/test 데이터로 나눕니다.
-
Complete decision tree with training data Training data만으로 의사결정 나무를 만듭니다.
-
Pruning with test data Pruning data로 가지치기를 수행합니다.
- Prediction with test data 완성된 pruned decision tree를 이용해 Test data 에 대한 결과를 예측합니다.