AI & Data/Machine Learning

[머신러닝] 분류 (Classification)

테드리 2024. 3. 25. 19:18

1. 분류 (Classification)

분류분석이란? 지도학습 기법 중 하나로 독립변수(Feature)를 통해 정답(Label)이 어떤 특정 카테고리로 분류될 것을 예측하는 기법을 말한다. 이때, Target Data의 자료는 주로 범주형에 속하고, 독립변수들 간의 관계를 분석해 Target Data의 각각의 데이터가 어떤 범주에 속할 지 예측한다.

 

위 그림에서 말하는 클래스(Class)가 바로 범주이며, 데이터의 종류에 따라 다양한 클래스를 가질 수 있다.

  • 성별 Class : {Male, Female}
  • 생존 여부 Class: {'0' : 생존, '1' : 사망}

 

분류의 종류

이름 설명
나이브 베이즈
Naive Bayes
베이즈 통계와 생성모델에 기반한 분류
로지스틱 회귀
Logistic Regression
독립변수와 종속변수의 선형 관계성에 기반한 분류
결정 트리
Decision Tree
데이터 균일도에 따른 규칙 기반의 분류
서포트 벡터 머신
SVM(Support Vector Machine)
개별 클래스 간의 최대 Margin을 효과적으로 찾아내주는 분류
최소 근접 알고리즘
Nearest Neighbor
데이터 간의 근접 거리를 기반으로 하는 분류
신경망
Neural Network
심층 연결 기반의 분류
앙상블
Ensemble
서로 다른 (혹은 같은) 머신러닝 알고리즘을 결합한 분류

 

이렇듯 분류 분석에는 다양한 머신러닝 알고리즘들이 사용될 수 있는데, 오늘은 그 중 가장 대중적으로 쓰이는 결정 트리 알고리즘에 대해 알아보도록 하겠다.

 

Label 데이터의 클래스 개수에 따른 유형

1) 이진 분류

Label 데이터의 클래스가 2개

 

2) 다중 분류

Label 데이터의 클래스가 3개 혹은 그 이상

 

2. 결정 트리 (Decision Tree)

결정트리란? 데이터의 규칙을 찾아내 Tree 기반의 분류 규칙을 만드는 방식

  • 장점: 균일도’를 기반으로 한 알고리즘을 적용→ 직관적, 전처리 영향 적음
  • 단점: 분류 규칙이 복잡할수록 과적합으로 인한 예측성능 저하의 가능성이 있음
  • 앙상블 학습에서 좋은 약한 학습기로써의 역할을 수행하는 아주 기본적인 분류 모델

 

결정트리의 구조

 

  1. 규칙 노드: 분할 규칙을 담고 있다.
  2. 리프 노드: 최종 결정 노드
  3. 서브 트리: 규칙 노드를 root 노드로 갖는 트리로, 전체 트리의 부분집합
  4. 깊이(Depth): 루트 노드로부터 최하위 노드까지의 경로의 길이(깊이)

 

3. 데이터 분할 원리

원칙적으로 균일도가 높은, 즉 혼잡도가 낮은 데이터셋을 먼저 선택하도록 규칙 조건을 만든다.

- 균일도: C > B > A

- 혼잡도: A < B < C

 

균일도, 혼잡도를 측정하는 방법에는 다음과 같은 방식이 대표적이다.

  • Information Gain
  • Gini 지수

 

Information Gain (정보 이득 지수)

변수에 의해 데이터를 분할했을 때, 기대되는 엔트로피 (Entropy)의 감소 정도

Information Gain을 계산하기 위해서는 정보량과 엔트로피라는 개념부터 살펴보아야 한다.

 

1) 정보량

어떤 사건 $x$에 대한 정보량은 다음과 같이 구해진다.

$$ IV(x) = \log_b(\frac{1}{P(x)}) = -\log_b(P(x))$$

여기서 $b$는 정보량의 측정단위로, 보통 2를 많이 사용한다.

 

$b=2$를 주로 사용하는 이유: 로그의 밑을 2로 설정함으로써 정보량은 'bit' 단위로 표현된다.
이는 사건의 확률이 1/2 (즉, 50%의 확률)일 때, 그 사건의 정보량이 정확히 1비트임을 의미하고, 이는 하나의 '예/아니오' 질문으로 해당 사건에 대해 알아낼 수 있는 정보의 양과 일치한다.

 

2) 엔트로피

어떤 데이터 집합 $x \in X$에 대해, $X$에 대한 엔트로피는 다음과 같이 구해진다.

$$ H(X) = \sum_{i =1 }^{c}{p_i \times IV(x_i)} \;\;\;\;\;\; (c = \text{Number of Classes})$$

 

Information Gain $IG$는 원래 엔트로피에서 조건부 엔트로피를 뺀 값으로 계산된다. 여기서 원래 엔트로피는 전체 데이터 집합의 불확실성을, 조건부 엔트로피는 특정 특성에 따라 분할된 집합의 불확실성을 나타낸다.

 

$$IG = H(X) - H(X|S) \;\;\;\; (S = \text{어떤 특성})$$

$$H(X|S) = \sum_{j=1}^{d} \frac{|X_j|}{|X|} \times H(X_j)$$ 

여기서 $X_j : \text{특성 S의 j번째 값에 해당하는 데이터 집합의 부분 집합})$

 

Gini (지니) 지수

무작위로 선택된 데이터를, 데이터셋의 클래스 분포에 따라 어떤 클래스로 분류했을 때 잘못 분류할 확률

$$Gini(S) = \sum_{i=1}^{c}p_i(1-p_i) = 1 - \sum_{i=1}^{c}p_i^{2}$$

 

결정 트리 알고리즘은 지니 지수가 낮아지는 방향으로 학습한다.

 

 

4. 하이퍼 파라미터

1) min_samples_split:

  • 노드를 분할하기 위한 최소한의 sample data 수
  • 작게 설정할수록 분할되는 노드의 수 증가  → 과적합 가능성 증가

2) max_depth: 

  • 트리의 최대 깊이를 규정
  • 깊이가 너무 깊어지면 과적합 가능 

3) min_samples_leaf:

  • 분할이 될 경우 각 브랜치 노드에서 가져야 할 최소 sample data 수
  • 값이 클수록 상대적으로 노드 분할이 덜 진행됨

4) max_features:

  • 최적의 분할을 위해 고려해야 할 최대 피처 수
  • 디폴트는 None, 데이터 세트의 모든 피처를 사용

5) max_leaf_nodes:

  • 말단 노드의 최대 개수

 

5. 과적합 방지 - 가지치기

사전 가지치기 (Pre-Pruning)

  • 결정트리가 다 자라기 전에 알고리즘을 멈추는 방법
  • 나무의 max_depth, max_leaf_nodes 등을 제어
  • 새로운 데이터에 대한 예측 정확성 향상

 

사후 가지치기 (Post-Pruning)

  • 결정트리를 끝까지 그린 후 밑에서부터 가지를 치는 방법
  • 리프 노드의 불순도가 0인 상태의 트리를 생성한 후, 적절한 수준에서 리프 노들를 결합함

 

[실습 코드]

결정 트리" target="_blank" rel="noopener" data-mce-href="http://결정 트리">http://결정 트리

 

GitHub - taekyounglee1224/Bitamin: 빅데이터 연합동아리 Bitamin에서 진행한 실습 및 프로젝트

빅데이터 연합동아리 Bitamin에서 진행한 실습 및 프로젝트. Contribute to taekyounglee1224/Bitamin development by creating an account on GitHub.

github.com