그래디언트 부스티드 결정 트리

배깅 및 부스팅과 마찬가지로 경사 부스팅은 다른 머신러닝 알고리즘 위에 적용되는 방법입니다. 비공식적으로 경사 부스팅에는 두 가지 유형의 모델이 포함됩니다.

  • '약한' 머신러닝 모델이며 일반적으로 결정 트리입니다.
  • 약한 여러 모델로 구성된 '강력한' 머신러닝 모델

그래디언트 부스팅에서는 각 단계에서 새로운 약한 모델이 학습되어 현재 강한 모델 (의사 응답이라고 함)의 '오류'를 예측합니다. '오류'는 나중에 자세히 설명합니다. 현재 '오류'는 예측과 회귀 라벨 간의 차이입니다. 그러면 취약한 모델 (즉, '오류')이 강력한 모델에 추가되며, 음의 기호와 함께 강력한 모델의 오류가 줄어듭니다.

그래디언트 부스팅은 반복적입니다. 각 반복에서 다음 수식을 호출합니다.

\[ F_{i+1} = F_i - f_i \]

각 매개변수는 다음과 같습니다.

  • $F_i$ 은(는) $i$ 단계의 강력한 모델입니다.
  • $f_i$ 은(는) $i$ 단계에서 취약한 모델입니다.

최대 반복 수와 같은 중지 기준 또는 (강력한) 모델이 별도의 검증 데이터 세트에서 측정된 대로 과적합을 시작하는 경우 등 이 작업은 반복됩니다.

다음과 같은 간단한 회귀 데이터 세트에서 그라데이션 부스팅을 보여줍니다.

  • 목표는 $x$ 에서 $y$를 예측하는 것입니다.
  • 강력한 모델은 0 상수로 초기화됩니다. $F_0(x) = 0$.
# Simplified example of regressive gradient boosting.

y = ... # the labels
x = ... # the features

strong_model = []
strong_predictions = np.zeros_like(y) # Initially, the strong model is empty.

for i in range(num_iters):

    # Error of the strong model
    error = strong_predictions - y

    # The weak model is a decision tree (see CART chapter)
    # without pruning and a maximum depth of 3.
    weak_model = tfdf.keras.CartModel(
        task=tfdf.keras.Task.REGRESSION,
        validation_ratio=0.0,
        max_depth=3)
    weak_model.fit(x=x, y=error)

    strong_model.append(weak_model)

    weak_predictions = weak_model.predict(x)[:,0]

    strong_predictions -= weak_predictions

다음 데이터 세트에 이 코드를 적용해 보겠습니다.

특성 x와 그 라벨 y에 대한 정답입니다. 플롯은 다소 감쇠된 사인파입니다.

그림 25. 하나의 숫자 특성이 있는 합성 회귀 데이터 세트

 

다음은 경사 부스팅 알고리즘의 첫 번째 반복 후 3개의 플롯입니다.

도표 3개 첫 번째 도표는 기울기 0과 y 절편 0의 직선인 강력한 모델을 예측합니다. 두 번째 도표는 일련의 사인파인 강력한 모델의 오류를 보여줍니다. 세 번째 플롯은 정사각형 파도의 약한 모델의 예측을 보여줍니다.

그림 26. 첫 번째 반복 이후의 도표 3개

 

그림 26의 플롯에 관한 다음 사항에 유의하세요.

  • 첫 번째 도표는 강력한 모델의 예측을 보여주며, 현재 항상 0입니다.
  • 두 번째 플롯은 약한 모델의 라벨인 오류를 보여줍니다.
  • 세 번째 플롯은 약한 모델을 보여줍니다.

첫 번째 약한 모델은 라벨의 대략적인 표현을 학습하고 특성 공간의 왼쪽 부분 (가장 변형이 많고 따라서 계속 잘못된 모델에 가장 많은 오류)에 주로 초점을 맞춥니다.

다음은 알고리즘의 다른 반복에 따른 동일한 플롯입니다.

도표 3개 첫 번째 도표는 강력한 모델의 예측을 보여주며, 이는 이전 그림의 취약한 모델 예측과는 반대입니다. 두 번째 도표는 노이즈가 많은 사인파 집합인 강력한 모델의 오류를 보여줍니다. 세 번째 도표는 약한 파형 몇 개인
약한 모델의 예측을 보여줍니다.

그림 27. 두 번째 반복 이후의 3개 도표

 

그림 27의 플롯에 관한 다음 사항에 유의하세요.

  • 이제 우수 모델은 이전 반복 버전의 취약한 모델에 대한 예측을 포함합니다.
  • 강력한 모델의 새로운 오류는 약간 작습니다.
  • 이번에 취약한 모델의 새로운 예측은 특성 공간의 오른쪽 부분에 초점을 맞춥니다.

8번 더 반복하는 알고리즘을 실행합니다.

도표를 보면 강력한 모델이 실측에 점점 가까워지고 있는 반면, 약한 모델의 예측은 점점 더 약해졌습니다.

그림 28. 세 번째 반복과 열 번째 반복 이후의 도표 3개

 

그림 28에서 강력한 모델의 예측은 데이터 세트의 플롯과 유사하기 시작합니다.

다음 그림은 결정 트리를 취약한 학습자로 사용하는 경사 부스팅 알고리즘을 보여줍니다. 이 조합을 경사 부스팅 (결정) 트리라고 합니다.

앞의 플롯은 경사 부스팅의 핵심을 보여줍니다. 그러나 이 예시에는 다음 두 가지 실제 작업이 없습니다.

  • 축소
  • 뉴턴 방법의 한 단계로 리프 값 최적화

축소

약한 모델 $f_i$은(는) 작은\n값 $u(예: $\nu = 0.1$)와 강력한 모델인 $F_i$에 곱합니다. 이 작은 값을 축소라고 합니다. 즉, 각 반복 대신 다음 수식을 사용합니다.

\[ F_{i+1} = F_i - f_i \]

각 반복에서 다음 수식을 사용합니다.

\[ F_{i+1} = F_i - \nu f_i \]

경사 부스의 축소는 신경망의 학습률과 유사합니다. 축소는 강력한 모델이 학습하는 속도를 제어하므로 과적합을 제한하는 데 도움이 됩니다. 즉, 축소 값이 0.0에 가까우면 축소 값이 1.0에 더 가깝습니다.

위 코드에서는 축소를 다음과 같이 구현합니다.

shrinkage = 0.1   # 0.1 is a common shrinkage value.
strong_predictions -= shrinkage * weak_predictions