🌳 Nonnumeric Pattern Recognition · Discrimination Tree Induction · Information Theory
홈 aistudy 메인

ID3 Approach : 비수치 속성 패턴 분류와 식별 트리 유도

📖 원전 출처 : Adaptive Pattern Recognition and Neural Networks : Yoh-Han Pao, Addison-Wesley, 1989, Page 85~93
패턴인식과 분류에 대한 ID3 접근은 비수치 속성이나 변수값 (nonnumeric attributes or feature values) 을 가지는 패턴들을 분류하기 위한 효율적인 식별 트리 (discrimination tree) 를 생성하기 위한 과정이다. 식별 트리는 규칙들을 모아놓은 (a body of rules) 형태로서 표현될 수 있기 때문에, ID3 는 기계학습이나 규칙획득을 위한 귀납추론으로 생각되기도 한다.
💡

1. ID3 접근의 개념과 효용성 범위

ID3 는 어떤 조건에서는 매우 효율적일 수 있지만, 그 효용성 범위를 넘어서서 사용되어서는 안 됩니다. ID3 는 많은 수의 패턴들이 있고, 각 패턴들이 긴 길이의 비수치 변수값 (속성값) 으로 구성되어 있을 때 유효하게 사용될 수 있습니다. 이러한 패턴들의 일부의 클래스의 종류 (class membership) 는 사전에 주어집니다.

🎯 ID3 의 본질적 목표와 탐색 메커니즘 :

그 작업은 방대하게 많은 데이터를 체계적으로 검사하고, 변수값들의 최소 조합이 클래스의 종류를 결정하기에 충분하다는 것을 발견하는 것입니다.

ID3 에서는 문자로 된 예들이 정확하게 분류될 때까지 변수들이 어떻게 순서대로 검사되는 지를 결정합니다. 예를 들면, 전체 변수들 중에서 단지 아주 작은 부분(핵심 속성)만이 분류 목적을 위해 사용될 필요가 있다는 것을 알게 됩니다. 문자로 된 예들에 대해 얻어진 이러한 결과가 원래의 데이터를 포함하는 훨씬 더 큰 패턴 집합을 잘 대표한다면, ID3 를 사용함으로써 매우 큰 이득(Gain)이 얻어지게 될 것입니다.

덧붙여서 식별트리를 발견한 결과로서, 클래스의 종류는 변수값들의 어떤 조화에 의존한다는 사실은 검사가 이루어지는 과정을 결정하는 기본 메커니즘에 대한 깊은 통찰력을 제공하게 됩니다.

👥

2. Quinlan (1983) 예제 : 물리적 특성에 따른 개인 분류

다음에 Quinlan (1983) 의 예로서 그 과정을 실증하고, 더 일반적인 과정을 표현합니다.

패턴의 집합을 I (I) 라고 하고, 신장(Height), 머리색깔(Hair), 눈색깔(Eyes) 같은 3가지 변수가 다음과 같은 비수치 변수값을 가집니다 :

  • 신장 (Height) : {short, tall}
  • 머리색깔 (Hair) : {dark, red, blond}
  • 눈색깔 (Eyes) : {blue, brown}

클래스의 종류는 o (o) 와 a (a) 입니다. 이때 훈련 패턴 집합 I (I) 는 다음과 같이 총 8개의 관측 예시로 주어집니다 :

패턴 번호 신장 (Height) 머리색깔 (Hair) 눈색깔 (Eyes) 소속 클래스 (Class) 원전 수식 표기 이미지
1 tall dark blue Class a a
2 short dark blue Class a a
3 tall blond blue Class o o
4 tall red blue Class o o
5 tall blond brown Class a a
6 short blond blue Class o o
7 short blond brown Class a a
8 tall dark brown Class a a

여기서 I (I) 는 모든 가능한 변수값의 조합 (2 × 3 × 2 = 12개) 을 모두 포함하지 않는다는 것을 알 수 있습니다. 즉 12개의 가능한 조합 중에서 8개만을 나타낸 불완전 집합입니다.

ID3 방법의 목적은 I (I) 의 모든 패턴들을 구분하기에 충분한 최적 테스트의 순서를 찾아내는 것입니다. 이를 통해 I (I) 에 포함되지 않았던 나머지 4개의 미관측 패턴이나 새로운 데이터에 대해서도 동일한 식별 규칙을 성공적으로 일반화하여 적용할 수 있게 됩니다.

📊

3. 정보이론적 접근과 엔트로피(Entropy) 평가

ID3 는 정보이론적(Information-theoretic) 접근 방식을 사용합니다. 그 과정은 정보에서는 가장 큰 이득(Gain)을 얻고, 엔트로피에서는 가장 큰 감소를 가져오는 변수를 검사하는 것입니다.

Definition · 엔트로피 기본 정의
Entropy = -p · log₂(p)
(여기서 확률 p 는 각 클래스의 출현 빈도에 기초하여 결정됩니다)

테스트의 다양한 단계에서의 엔트로피를 평가해 봅시다 :

이 시점에서 "어떤 변수가 클래스 종류를 구분하는 데 가장 효율적인가?" 하는 핵심 의문이 발생합니다. 3개의 후보 변수인 신장(Height), 머리색깔(Hair), 눈색깔(Eyes)을 모두 고려하여, 각 변수를 분기 테스트했을 때 얼마만한 정보 이득(Information Gain)이 얻어지는지를 비교 검증합니다.

🔍

4. 3대 변수별 1-Level 분기 테스트 및 정보 이득 비교

(1) 변수 "신장 (Height)" 테스트

Height Branch Test
그림 1. 변수 "신장 (Height)" 을 테스트하여 얻은 분기 구조

• "tall" 가지의 엔트로피 : 5개 패턴 중 2개는 a, 3개는 o
tall branch entropy calculation = 0.971 bits (원전 표기: 0.917 bits)

• "short" 가지의 엔트로피 : 3개 패턴 중 1개는 o, 2개는 a
short branch entropy calculation = 0.918 bits

• 테스트 전 시스템 엔트로피 :
system entropy = 0.954 bits

• "신장" 분할 후 가중치 엔트로피 Entropy(I, "height") :
weighted entropy = 0.951 bits

• 신장 테스트에 의한 정보 이득 (Information Gain) :
Entropy(I) - Entropy(I, "height") = 0.954 - 0.951 = 0.003 bits

(2) 변수 "머리색깔 (Hair)" 테스트

Hair Branch Test
그림 2. 변수 "머리색깔 (Hair)" 을 테스트하여 얻은 분기 구조

• "dark" 가지의 엔트로피 : 3개 모두 a → 0 bit (완전 순수, 추가 정보 불필요)

• "red" 가지의 엔트로피 : 1개 모두 o → 0 bit (완전 순수, 추가 정보 불필요)

• "blond" 가지의 엔트로피 : 4개 중 2개는 a, 2개는 o
blond branch entropy = 1.0 bit

• "머리색깔" 분할 후 가중치 엔트로피 Entropy(I, "hair") :
hair weighted entropy = 0.5 bits

• 머리색깔 테스트에 의한 정보 이득 (Information Gain) :
Entropy(I) - Entropy(I, "hair") = 0.954 - 0.5 = 0.454 bits (압도적 최대치!)

(3) 변수 "눈색깔 (Eyes)" 테스트

Eyes Branch Test
그림 3. 변수 "눈색깔 (Eyes)" 을 테스트하여 얻은 분기 구조

• "blue" 가지의 엔트로피 : 5개 중 2개는 a, 3개는 o
blue branch entropy = 0.971 bits

• "brown" 가지의 엔트로피 : 3개 모두 a → 0 bit

• "눈색깔" 분할 후 가중치 엔트로피 Entropy(I, "eyes") :
eyes weighted entropy = 0.607 bits

• 눈색깔 테스트에 의한 정보 이득 (Information Gain) :
Entropy(I) - Entropy(I, "eyes") = 0.954 - 0.607 = 0.347 bits

🏆 1-Level 및 2-Level 의사결정 결론 :

1) 그림 1의 신장은 0.003 bits의 매우 적은 정보 이득만을 줍니다. 반면 머리색깔은 0.454 bits, 눈색깔은 0.347 bits를 나타냅니다. 따라서 ID3 메커니즘에 따라 정보 내용에서의 이득이 가장 큰 "머리색깔"이 트리의 루트(Root Node)로 최종 선택됩니다.

2) 이어서 2번째 Level에서는 "blond" 가지(4개 샘플, a:2, o:2)에 대해 남은 변수인 "눈색깔"을 테스트함으로써 blue는 o, brown은 a로 완벽히 분리되어 엔트로피 0에 도달합니다. 이 결과가 바로 아래의 2-Level Decision Tree 입니다.

ID3 Two-level Decision Tree
그림 4. 완성된 ID3 Two-level Decision Tree
📐

5. General Considerations (일반적 정식화 및 4대 실행 절차)

일반적인 경우, N (N) 개의 문자로 표현된 패턴들이 클래스 c_i, i=1,2,3,...,C (c_i, i = 1, 2, 3, ..., C) 에 속하는 패턴 집합으로 분할됩니다.

클래스 c_i (c_i) 에서의 모집단은 N_i (N_i) 입니다. 각 패턴은 K (K) 개의 변수를 가지며, 각 변수는 J_k (J_k) 개의 값들을 가집니다. (여기서는 단순화시켜서 모든 변수들이 J (J) 개의 값들을 가지는 것으로 합니다). 효율적인 decision tree 를 생성하기 위한 ID3 방법은 다음과 같은 단계를 거칩니다 :

1 Step 1. 엔트로피의 초기값을 계산한다.

훈련 집합에서 모든 패턴들에 대해 어떤 클래스에 속하는지 표시됩니다. 그러므로 N (N) 개의 패턴으로 구성된 시스템을 위한 초기 엔트로피는 다음과 같습니다 :

Entropy(I) = sum - (Ni/N) log2 (Ni/N)

= sum - pi log2 pi

2 Step 2. decision tree 의 root node 가 될 변수를 선택한다.

  • a. 각 변수 A_k (A_k, k=1..K) 에 대해 J (J) 개의 변수값 a_kj (a_kj) 에 따라 원래의 모집단을 1 level 모집단으로 분할합니다. 각 가지에는 n_kj (n_kj) 개의 패턴들이 속합니다.
  • b. 하나의 가지의 모집단 n_kj (n_kj) 내에서 클래스 c_i (c_i) 에 속하는 패턴의 수를 n_kj(i) (n_kj(i)) 라 할 때, 각 가지의 엔트로피는 다음과 같이 계산됩니다 :
    branch entropy
    변수 A_k 를 테스트한 후의 전체 가중 시스템 엔트로피는 다음과 같습니다 :
    system entropy after test
  • c. 변수 A_k 를 테스트한 결과로서 엔트로피의 감소(정보 이득)는 다음과 같습니다 :
    Delta Entropy(k)
  • d. 엔트로피가 가장 크게 감소하는 변수 A_k0 (A_ko) 를 선택합니다.
    Delta Entropy(ko) > Delta Entropy(k)
  • e. 변수 A_ko 는 decision tree 의 Root 가 되고 1 level 구조는 아래 그림 5 와 같이 형성됩니다 :
Root and level-1 populations
그림 5. decision tree 의 기본 구조 : Root 와 Level-1 Populations

3 Step 3. decision tree 의 다음 level 을 만든다.

모든 가지들에 대해 나머지 잔여 변수 A_k' (A_k') 상에서 테스트하여, 정보 내용에서 최대의 이득을 얻거나 엔트로피가 최대 감소하는 변수를 Level-1 노드로서 사용할 변수로 순차 선택합니다.

4 Step 4. Step 1 에서 Step 3 까지 반복한다.

모든 하위 모집단(subpopulation)이 하나의 클래스로 통일(완전 순수)되고 시스템 엔트로피가 0 이 될 때까지 위의 과정을 재귀적으로 반복합니다.

Basis of steepest descent in entropy
그림 6. decision tree on basis of steepest descent in entropy (엔트로피 최급강하법에 기반한 의사결정 트리 구축)
⏱️

6. ID3 의 복잡성 (Complexity Analysis)

ID3 방법에서 기본적인 작업은 각 가지에 대해 엔트로피를 계산하는 것입니다. 여기서는 K (K) 개의 변수 각각이 J (J) 개의 값을 가지는 것으로 가정해왔습니다.

  • Root 노드에서의 계산량 : 각 변수 K 에 대해 J 번의 계산을 수행합니다.
  • 다음 Level 에서의 계산량 : J 개의 노드 각각이 J 개의 가지를 가지므로, K-1 (K - 1) 개의 변수 각각이 J^2 (J²) 번의 계산을 하게 됩니다.

그러나 트리의 레벨이 증가하면서 여러 개의 가지들이 단일 클래스로 순수해짐에 따라 계산의 부담은 점차 감소하게 됩니다. 추정하여 보면 L-level (L-level) 의 트리는 L/2-level (L/2-level) 의 완전히 확장된 decision tree 정도의 복잡성을 보이는 것으로 추정됩니다.

Complexity Growth · 복잡도 증가율
계산 부담 ≈ O(K · Jˣ)
• 트리의 깊이(L)에 비교하여 : 지수적(Exponentially)으로 증가
• 변수의 수(K)와 각 변수값의 수(J)에 비교하여 : 다항식적(Polynomially)으로 증가

Quinlan (1983, p. 464) 은 계산 부담에 대해 다음과 같이 서술합니다 :

"ID3 는 많은 대상을 다루기 위해 특별히 고안된 것이며, 문제의 어려움과 함께 계산 시간이 선형적으로 증가하는 것은 다음과 같은 요소들 때문입니다 :"

  • 1. 학습 대상의 수 (N N)
  • 2. 대상을 서술하기 위해 사용되는 속성의 수 (K K)
  • 3. decision tree 상의 노드 수로 측정되는 개발되는 개념의 복잡성 (J^L Jˣ)

계산의 요구에 대한 Quinlan 과 우리의 서술은 근본적으로 동일합니다.

⚖️

7. ID3 의 장점과 단점 (Pros & Cons)

✨ ID3 의 주요 장점 (Advantages)

  • 규칙 생성의 완전 자동화 : 사람이 개입하여 복잡한 규칙을 수작업으로 프로그래밍할 필요 없이 데이터로부터 자동으로 최적의 식별 트리를 유도합니다.
  • 최소 결정 변수 조합의 자동 발견 : 수많은 비수치 속성 중 어떤 조합이 클래스를 판별하는 데 결정적인지 최소 속성 세트를 경험적으로 명확히 찾아냅니다.
  • 해석 가능성 및 통찰력 제공 : 식별 트리는 IF-THEN 규칙의 집합으로 1:1 직관적 변환이 가능하여 의사결정 프로세스의 명확한 통찰력을 제공합니다.

⚠️ ID3 의 주요 단점 (Disadvantages)

  • 점진적 갱신(Incremental Update)의 불가 : 새로운 패턴이 잘못 분류되었을 때 전체 트리를 재구축하지 않고는 쉽게 업데이트할 수 없습니다. 패치워크(patchwork) 방식은 트리의 최적성과 대표성을 점차 훼손합니다.
  • 메모리 유지 부담 : 트리를 새로 갱신하기 위해 접했던 모든 과거 학습 패턴들을 항상 메모리에 유지해야 하는 한계가 존재합니다.
  • 일반화와 특화(Generalization & Specialization)의 한계 : 생성된 트리가 고정적이어서 학습 데이터의 노이즈에 과적합(Overfitting)되기 쉽고 유연한 특화가 어렵습니다. (이 한계는 후속 모델인 C4.5 의 가지치기 기법을 통해 극복됩니다).
📚

8. 관련 지식 및 심층 학습 아카이브