Knowing When to Stop

개념 확인: Pruning and Regression Trees


잎 평균으로 수치를 예측하는 회귀 트리를 키우고, 잎 수에 벌점을 주어 부분나무를 고르는 과정을 계산한다.

문제 1

첫 분할 찾기

특성 하나의 학습 자료가 x = (1, 3, 6, 8, 10), y = (2, 4, 10, 12, 14)다. 각 구역은 평균을 예측한다.

  1. 서로 다른 x값 사이의 기준값 후보 네 개를 적는다.
  2. 각 후보의 분할 후 RSS를 구한다(분수 또는 소수 둘째 자리까지).
  3. 고를 기준값과 두 잎의 예측값을 적고, 새 관측 x = 7의 예측값을 적는다.
  4. 분할 전 RSS를 구하고, 이 분할로 줄어든 양을 적는다.
해설 펼치기
  1. 2, 4.5, 7, 9다.
  2. 2: 0 + 56 = 56. 4.5: 2 + 8 = 10. 7: 104/3 + 2 = 110/3 ≈ 36.67. 9: 68 + 0 = 68.
  3. RSS가 가장 작은 4.5를 고른다. 왼쪽 잎은 (2 + 4)/2 = 3, 오른쪽 잎은 (10 + 12 + 14)/3 = 12다. x = 7은 오른쪽이므로 12를 예측한다.
  4. 평균 8.4에서 RSS = 536/5 = 107.2이므로 107.2 − 10 = 97.2만큼 줄었다.
문제 2

왜 가지를 치는가

  1. 모든 관측의 x값이 다른 학습 자료에서 나무를 끝까지 키우면 학습 RSS가 얼마가 될 수 있는지 적고, 이것이 좋은 모델이라는 뜻인지 적는다.
  2. 같은 x값에 y = 5와 y = 9가 함께 있다면 끝까지 키워도 남는 학습 RSS를 그 두 관측만으로 구한다.
  3. 잎 수를 늘릴 때 학습 오차와 교차검증 오차가 전형적으로 어떻게 움직이는지 적는다.
  4. 조기 중단과 사후 가지치기의 결정 시점과 각각의 주의점을 적는다.
해설 펼치기
  1. 관측을 하나씩 분리하면 0이 될 수 있다. 학습 오차만으로 일반화 성능을 판단할 수 없고 테스트 오차는 클 수 있다.
  2. 두 관측은 같은 잎에 남아 평균 7을 예측하므로 (5 − 7)² + (9 − 7)² = 8이 남는다.
  3. 학습 오차는 계속 줄고, 교차검증 오차는 줄다가 어느 크기부터 다시 커질 수 있다.
  4. 조기 중단은 키우는 중에 멈추므로 작은 개선 뒤의 큰 개선을 놓칠 수 있다. 사후 가지치기는 큰 나무를 학습한 뒤 부분나무를 고르므로 큰 나무와 가지치기 경로를 계산해야 한다.
문제 3

비용 복잡도

큰 나무에서 얻은 세 부분나무가 후보다.

잎 수 |T|RSS
53
37
125
  1. α = 0, 1, 5, 15에서 각 부분나무의 Cα(T) = RSS + α|T|를 구하고 선택되는 잎 수를 적는다.
  2. 인접한 두 후보가 동률이 되는 α 두 개를 구하고, α 구간별로 선택되는 잎 수를 적는다.
  3. α를 아주 크게 하면 어떤 나무가 남는지 적는다.
  4. ridge의 λΣβⱼ²와 α|T|가 각각 무엇에 벌점을 주는지 비교한다.
해설 펼치기
  1. α = 0: 3, 7, 25 → 5개. α = 1: 8, 10, 26 → 5개. α = 5: 28, 22, 30 → 3개. α = 15: 78, 52, 40 → 1개.
  2. 3 + 5α = 7 + 3α에서 α = 2, 7 + 3α = 25 + α에서 α = 9다. 0 ≤ α < 2는 5개, 2 < α < 9는 3개, α > 9는 1개이며 경계에서는 두 후보가 동률이다.
  3. 잎 하나인 뿌리만 남아 전체 학습 평균을 예측한다.
  4. ridge는 절편을 제외한 계수 크기에, 회귀 트리는 잎 수에 벌점을 준다. 두 식 모두 적합 오차는 RSS다.
문제 4

특성 중요도

학습 관측 N = 100개로 만든 회귀 트리의 분할 세 개다. I는 구역 내 MSE다.

분할특성nₜ, Iₜ왼쪽 n, I오른쪽 n, I
뿌리x₁100, 1060, 440, 5
왼쪽 분기점x₂60, 430, 230, 1
오른쪽 분기점x₁40, 520, 320, 3
  1. 각 분할의 가중 감소량 dₜ를 구한다.
  2. 특성 x₁과 x₂의 중요도를 구한다(소수 셋째 자리까지).
  3. x₂의 중요도가 낮다고 x₂가 쓸모없다고 보고하면 안 되는 이유를 적는다.
  4. x₁의 중요도가 크다고 x₁을 바꾸면 결과가 바뀐다고 말할 수 없는 이유를 적는다.
해설 펼치기
  1. 뿌리: 1 × (10 − 0.6 × 4 − 0.4 × 5) = 5.6. 왼쪽: 0.6 × (4 − 0.5 × 2 − 0.5 × 1) = 1.5. 오른쪽: 0.4 × (5 − 0.5 × 3 − 0.5 × 3) = 0.8.
  2. 합이 7.9이므로 x₁ = (5.6 + 0.8)/7.9 ≈ 0.810, x₂ = 1.5/7.9 ≈ 0.190이다.
  3. 비슷한 정보를 가진 다른 특성이 먼저 선택되었을 수 있고, 학습 자료나 설정이 바뀌면 순위가 달라질 수 있다.
  4. 중요도는 학습한 나무에서 가중 불순도를 많이 줄였다는 뜻일 뿐 인과관계를 설명하지 않는다.
문제 5

α 고르기와 평가

다음 코드로 α를 고르고 테스트 자료에 예측한다.

search = GridSearchCV(
    DecisionTreeRegressor(random_state=0),
    {"ccp_alpha": [0.0, 0.001, 0.01, 0.1]},
    scoring="neg_mean_squared_error", cv=5)
search.fit(X_dev, y_dev)
y_pred = search.best_estimator_.predict(X_test)
  1. 분할 특성·기준값, 잎의 예측값, ccp_alpha를 각각 어떤 자료로 어떻게 정하는지 적는다.
  2. scoring이 음의 MSE인데 best_estimator_가 MSE가 가장 작은 설정인 이유를 적는다.
  3. 교차검증 결과 잎 3개의 평균 검증 MSE는 0.42(표준오차 0.06), 잎 6개는 0.41(0.07)이다. 잎 3개를 고려할 이유와, 두 모델의 성능이 같다고 단정할 수 없는 이유를 적는다.
  4. ccp_alpha 값을 앞의 Cα 식의 α와 같은 척도로 읽으면 안 되는 이유를 적는다.
해설 펼치기
  1. 분할과 잎 평균은 학습 자료에서 불순도 감소와 평균으로 학습하고, ccp_alpha는 개발 자료 안의 교차검증 오차를 비교해 고른다. 테스트 자료는 선택한 뒤 마지막 평가에만 쓴다.
  2. 음의 MSE를 최대화하는 것은 MSE를 최소화하는 것과 같기 때문이다.
  3. 차이가 0.01로 작고 잎 3개가 더 단순해 해석하기 쉽다. 차이가 표준오차보다 작다는 사실만으로 성능이 같다고 입증되지는 않는다.
  4. scikit-learn의 벌점은 평균 불순도 단위이므로 RSS 합 기준 식의 α와 척도가 다르다.