성장 트리 성장

모든 지도 머신러닝 모델과 마찬가지로 결정 트리는 일련의 학습 예시를 설명합니다 의사 결정 트리의 최적 학습은 NP-난해 문제입니다. 따라서 학습은 일반적으로 휴리스틱을 최적은 아니지만 정답에 근접한 학습 알고리즘입니다. 결정 트리라고 할 수 있습니다.

결정 트리를 학습시키는 데 사용되는 대부분의 알고리즘은 정복하는 전략입니다. 알고리즘은 단일 노드 (루트)를 만드는 것으로 시작하고 결정 트리를 재귀적으로 탐욕적으로 성장시킵니다.

각 노드에서 가능한 모든 조건이 평가되고 점수가 매겨집니다. 이 알고리즘이 '가장 좋은' 즉, 조건이 가장 높은 있습니다. 지금은 점수가 점수와 관련이 있는 해당 측정항목을 최대화하도록 조건이 선택됩니다.

예를 들어 Palmer 펭귄 (이 과정의 후반부에서 코드 예시에 사용됨), 대부분의 아델리와 친스트랩 펭귄은 부리 길이가 16mm가 넘으며, 대부분의 젠투 펭귄은 펭귄은 청구서가 더 작습니다. 따라서 bill_length_mm ≥ 16은 젠투 펭귄, 하지만 구분할 수는 없음 아델리와 친스트랩의 사이더군요 알고리즘이 이 조건을 선택할 가능성이 높습니다.

하나의 조건이 잎 두 개로 이어집니다. 조건은 'bill_length_mm >= 16'입니다.
그렇다면 리프는 '아델리 또는 친스트랩'입니다.  '아니요'인 경우 리프가
'젠투'입니다.

<ph type="x-smartling-placeholder"></ph> 그림 7. 나무 기르기의 첫 번째 단계입니다. 를 통해 개인정보처리방침을 정의할 수 있습니다.

 

그런 다음 알고리즘은 두 하위 노드에서 독립적으로 재귀적으로 반복됩니다. 만족하는 조건이 발견되지 않으면 노드는 리프가 됩니다. 나뭇잎 예측이 예에서 가장 대표적인 라벨 값으로 결정됩니다.

알고리즘은 다음과 같습니다.

def train_decision_tree(training_examples):
  root = create_root() # Create a decision tree with a single empty root.
  grow_tree(root, training_examples) # Grow the root node.
  return root

def grow_tree(node, examples):
  condition = find_best_condition(examples) # Find the best condition.

  if condition is None:
    # No satisfying conditions were found, therefore the grow of the branch stops.
    set_leaf_prediction(node, examples)
    return

  # Create two childrens for the node.
  positive_child, negative_child = split_node(node, condition)

  # List the training examples used by each children.
  negative_examples = [example for example in examples if not condition(example)]
  positive_examples = [example for example in examples if condition(example)]

  # Continue the growth of the children.
  grow_tree(negative_child, negative_examples)
  grow_tree(positive_child, positive_examples)

Cloud SQL에서 특정 결정 트리를 학습시키는 단계를 더 자세히 살펴보겠습니다.

1단계: 루트를 만듭니다.

물음표가 있는 노드.

2단계: 1번 노드를 확장합니다. 'x1 ≥ 1' 조건 이(가) 발견되었습니다. 두 개의 하위 노드가 생성됩니다.

루트 노드
   두 개의 정의되지 않은 노드로 이어집니다.

3단계: 2번 노드를 확장합니다. 만족스러운 조건을 찾을 수 없습니다. 따라서 포드가 리프로 변환합니다.

루트
   2개의 정의되지 않은 노드로 이어집니다.

4단계: 3번 노드를 확장합니다. 조건 'x2 ≥ 0.5' 이(가) 발견되었습니다. 자녀 2명 자동으로 생성됩니다

루트 노드,
세 개의 잎이 있습니다.

결정 트리를 늘리는 다른 방법도 있습니다. 인기 있는 대안은 분할 및 정복 전략을 사용하는 대신 전역적으로 노드를 최적화할 수 있습니다.

YDF 코드
YDF에서 결정 트리는 '탐욕의 분할 및 정복'을 통해 성장합니다. 기본 알고리즘이라 할 수 있습니다. 또는 전역 growing_strategy="BEST_FIRST_GLOBAL" 매개변수로 얻는 결과입니다. 를 참조하세요. 문서를 참조하세요.

입력 특성의 수와 유형에 따라 노드의 가능한 조건은 거대하고 일반적으로 무한할 수 있습니다. 예를 들어 임곗값 조건 $\mathrm{feature}_i \geq t$가 있으면 모든 가능 기준값을 $t \in \mathbb{R}$ 은 무한합니다.

최상의 조건을 찾는 루틴을 분할 가능한 많은 조건을 테스트해야 하기 때문에 스플리터는 결정 트리를 학습시킬 때의 병목 현상입니다.

스플리터가 최대화하는 점수는 작업에 따라 다릅니다. 예를 들면 다음과 같습니다.

  • 정보 획득Gini (둘 다 흔히 분류에 사용됩니다.
  • 평균 제곱 오차는 회귀에 흔히 사용됩니다.

여러 스플리터 알고리즘이 있으며 각각 다음을 지원합니다.

  • 기능 유형 예: 숫자, 범주형, 텍스트
  • 작업 예: 이진 분류, 다중 클래스 분류, 회귀
  • 조건 유형 예를 들어 임곗값 조건, 인셋 조건 사위
  • 정규화 기준 예: 정확한 스플리터 또는 근사치 스플리터 기준 조건

또한 그에 상응하는 스플리터 변형도 있으며 절충사항이 서로 다릅니다. 메모리 사용량, CPU 사용량, 계산 분배 등과 관련된 정보가 표시됩니다

YDF 코드
YDF에서 스플리터는 자동으로 감지된 (또는 특성의 유형, 초매개변수, 예측된 각 스플리터의 속도 (학습 도중 YDF는 작은 모델을 실행하여 속도).