본문 바로가기
[파이썬]/머신러닝

[머신러닝] 트리(Tree) 구조의 이해

by sung min_Kim 2024. 1. 7.

 이번 글에서는 " 트리(Tree) 개념부터 트리 구조의 작동원리"에 대한 내용들을 살펴보려 한다. 차례와 사용 툴 및 라이브러리는 아래와 같다.

 [차례]
 첫 번째, 트리(Tree)란?
 두 번째, 트리의 중요성
 세 번째, 트리의 구조
 네 번째, 트리 구조의 작동 원리
 
 [사용 툴]

- Jupyter notebook(웹 기반 대화형 코딩 환경

 


트리(Tree)란?

 

 

 트리(Tree)는 계층적인 구조를 가진 데이터를 표현하고 관리하기 위해 사용되는 자료구조이다.

 가계도를 예로 들면, '조상'이라는 개념은 트리에서 '루트(Root)'에 해당하며, '가족 구성원'은 트리에서 '노드(Node)'에 해당한다. 또한, 가족 구성원들 간의 '관계'를 나타내는 선을 트리에서는 '엣지(Edge)'라고 칭한다. 


 이런 식으로 트리는 계층적인 구조를 표현하는 데 매우 유용한 도구이다.

 


트리의 중요성

 

 

 트리 구조는 다양한 분야에서 데이터를 조직화하고 이해하기 위한 중요한 도구이다. 트리는 계층적인 관계를 표현할 수 있어, 복잡한 데이터를 이해하기 쉽게 만들어준다.

 예를 들어, 파일 시스템에서 폴더와 파일의 관계를 표현하거나, 웹사이트의 사이트맵을 구성하거나, 조직의 구조를 표현하는 데 트리 구조를 사용할 수 있다. 또한, 트리는 빠르게 데이터를 검색하거나 추가하거나 삭제하는 등의 작업을 수행하는 데도 유용하다.

 머신러닝 분야에서는 결정 트리, 랜덤 포레스트, 그래디언트 부스팅 등의 알고리즘에서 트리 구조를 활용한다. 이런 알고리즘들은 트리의 구조를 이용해 데이터를 분류하거나 예측하는 작업을 수행하게 된다.

 그래디언트 부스팅을 예로 들면, 이는 여러 개의 결정 트리를 조합하여 더 좋은 예측 성능을 달성하는 방법이다. 간단히 말해서, 그래디언트 부스팅은 약한 예측 모델(일반적으로 결정 트리)을 순차적으로 학습시키는데, 각 단계에서 이전 모델의 오차를 줄이는 방향으로 모델을 조정한다. 이렇게 여러 개의 모델을 합치는 방식을 '앙상블 방법'이라고 부르며, 그래디언트 부스팅은 이 앙상블 방법의 한 종류이다.

 이런 방식을 통해, 그래디언트 부스팅은 단일 모델만을 사용하는 것보다 더 좋은 예측 성능을 달성할 수 있게 된다. 따라서, 다양한 머신러닝 문제에서 효과적인 솔루션을 제공하게 된다.

 이처럼 트리는 데이터를 체계적으로 다루고, 분류 및 예측 문제를 해결하는 데 있어 매우 중요한 도구이다.

 


트리의 구조

 

트리 구조


 트리는 여러 개의 노드로 이루어져 있으며, 이들 노드는 엣지라는 선으로 서로 연결되어 있다. 트리의 가장 최상위에 위치하는 노드를 루트 노드라고 하며, 루트 노드 아래에는 여러 개의 서브트리가 위치할 수 있다. 이 서브트리 역시 루트 노드와 동일한 구조를 가지며, 트리는 이런 방식으로 계층적인 구조를 형성하게 된다. 또한, 트리에서 더 이상 자식 노드를 가지지 않는 노드를 리프 노드 또는 결정 노드라고 한다.

 각 노드에 대한 설명은 다음과 같다.

  1. 노드(Node): 트리 구조에서 데이터를 저장하는 기본 단위이다. '루트 노드', '규칙 노드', '리프 노드', '자식 노드', '부모 노드' 등으로 구분된다.

  2. 루트 노드(Root Node): 트리 구조의 가장 상위에 위치하는 노드이다. 이 노드에서부터 분기가 시작된다.

  3. 규칙 노드(Relu Node) 또는 내부 노드(Internal Node): 트리 구조에서 루트 노드와 리프 노드 사이에 위치하며, 하나 이상의 자식 노드를 가지는 노드이다. 이 노드는 특정 조건 또는 규칙을 담고 있으며, 이 규칙에 따라 데이터를 다음 노드로 넘기는 역할을 한다.

  4. 리프 노드(Leaf Node) 또는 결정 노드(Decision Node): 더 이상 자식 노드를 가지지 않는 노드로, 트리의 가장 하위 단계에 위치한다. 결정 트리에서는 이 리프 노드에서 최종 결정이 이루어진다.

 


트리 구조의 작동 원리

 


 트리 구조는 노드(Node)와 노드 간의 관계에 기반을 두고 동작하며, 이를 통해 데이터를 분류하거나 예측한다.

 트리는 루트 노드(Root Node)에서 시작하여, 각 노드에서는 특정 조건에 따라 데이터를 분류한다. 만약 조건을 만족하면 특정 방향의 자식 노드로 이동하고, 만족하지 않으면 다른 방향으로 이동하게 된다. 이러한 과정을 반복하면서 결국 리프 노드(Leaf Node)에 도달하게 되며, 이 리프 노드(또는 결정 노드)에서의 결정이 해당 데이터에 대한 최종 판단이 된다.

 이러한 트리 구조는 머신러닝, 특히 결정 트리 알고리즘에서 많이 사용된다. 결정 트리 알고리즘은 데이터의 특성에 따라 노드를 분기하여 최종 결정을 내리는 방식을 사용한다.

 데이터의 각 단위, 즉 '샘플'은 이 트리를 따라 분류되거나 예측된다. 샘플은 루트 노드에서 출발하여 여러 노드를 거치며 최종적으로 리프 노드에 도달하게 되고, 이 리프 노드의 값이 그 샘플에 대한 최종 예측 결과가 된다.

 GridSearchCV는 결정 트리의 최적의 하이퍼파라미터를 찾기 위한 기법이다. 'param_grid'는 탐색하고자 하는 하이퍼파라미터의 범위를 지정하는 딕셔너리로써, 결정 트리의 성능을 최적화하는데 도움을 준다. 

 트리 구조에서는'n_estimators', 'max_depth', 'min_samples_split', 'min_samples_leaf'와 같은 하이퍼파라미터들이 중요한 역할을 한다. 이들은 GridSearchCV를 통해 튜닝되며, 그 과정에서 결정 트리의 성능을 크게 높일 수 있다.

 각각의 하이퍼
파라미터에 대한 설명과 이를 활용한 GridSearchCV 사용방법에 대한 자세한 내용은 아래의 글을 참고해 보시기 바란다.

2024.01.07 - [[파이썬]/머신러닝] - [머신러닝] GridSearchCV를 활용한 하이퍼파라미터 튜닝 이해하기

 

[머신러닝] GridSearchCV를 활용한 하이퍼파라메터 튜닝 이해하기

HTML 삽입 미리보기할 수 없는 소스 이번 글에서는 " GridSearchCV의 개념부터 사용방법"에 대한 내용들을 살펴보려 한다. 차례와 사용 툴 및 라이브러리는 아래와 같다. [차례] 첫 번째, GridSearchCV의

sungmin93.tistory.com