← 문제 목록/Multi-output R² (sklearn multioutput) [medium]
문제 해설

Multi-output R² (sklearn multioutput) [medium]

평가 지표 · medium

preview

Multi-output R² [medium]

v1 R² 은 스칼라 타깃. 실제로는 여러 출력 을 동시에 예측하는 경우가 흔함 (multi-target regression, 이미지 회귀, 좌표 예측 등).

각 출력 kk 에 대해 개별 R²:

Rk2=1i(yi,ky^i,k)2i(yi,kyˉk)2R^2_k = 1 - \frac{\sum_i (y_{i,k} - \hat{y}_{i,k})^2}{\sum_i (y_{i,k} - \bar{y}_k)^2}

문제: K 개의 R² 를 어떻게 집계할 것인가? sklearn 의 multioutput 파라미터 3 가지 모드:

mode집계 방식
'raw_values'각 출력별 R² 벡터 그대로 반환 (shape (K,))
'uniform_average'단순 평균 1KkRk2\frac{1}{K}\sum_k R^2_k (기본)
'variance_weighted'분산 가중 평균 kSSTkRk2kSSTk\frac{\sum_k SST_k \cdot R^2_k}{\sum_k SST_k}

variance_weighted 는 분산이 큰 (즉, 예측 난이도가 큰) 출력에 더 가중치.

과제

함수 r2_score_multi(y_pred, y_true, multioutput='uniform_average') 를 완성하세요.

  • y_pred, y_true: shape (N, K).
  • multioutput: 'raw_values' | 'uniform_average' | 'variance_weighted'.
  • 반환:
    • 'raw_values' → shape (K,) numpy array,
    • 아니면 Python float.
  • SSTk=0SST_k = 0 인 출력은 해당 Rk2=0R^2_k = 0 으로 처리 (분모 0 방어).

수식 팁

SSR_k = sum_i (y_pred[i,k] - y_true[i,k])^2   # shape (K,)
SST_k = sum_i (y_true[i,k] - y_true[:,k].mean())^2
R2_k  = 1 - SSR_k / SST_k   # SST_k==0 → 0

테스트 케이스

#이름검증
1raw_values shape (K,)
2uniform_average = mean(raw)
3variance_weighted = Σ(SST·R²) / ΣSST
4완벽 예측 → 모두 1.0
5상수 출력 (SST=0) → 0 처리, NaN 없음
6K=1 → v1 R² 와 일치
7sklearn r2_score(multioutput=...) 와 일치
코드 작성
Loading...
실행 결과

코드를 작성하고 Run 을 눌러보세요.