← 문제 목록/자동 k 선택 (Variance Threshold) [medium]
문제 해설

자동 k 선택 (Variance Threshold) [medium]

차원 축소 · medium

preview

자동 k 선택: Variance Threshold [medium]

v1 비율 은 각 성분의 개별 비율. 실제 실무에서는:

"분산의 95% 를 보존하려면 몇 개 성분이 필요한가?"

이런 기준을 자동으로 찾는 게 자연스러움. sklearn PCA(n_components=0.95) 가 동일하게 동작.

알고리즘

  1. λ1λ2\lambda_1 \ge \lambda_2 \ge \dots (내림차순 고유값).
  2. 정규화 비율: ri=λi/jλjr_i = \lambda_i / \sum_j \lambda_j.
  3. 누적합: Ck=i=1kriC_k = \sum_{i=1}^{k} r_i.
  4. 최소 kk 반환:

k=min{k:Ckτ}k^* = \min \{ k : C_k \ge \tau \}

τ=0.95\tau = 0.95 면 "분산 95% 를 설명하는 가장 작은 차원".

엣지 케이스

  • 모든 분산이 첫 성분 → k=1k^* = 1.
  • 균등 분산 + 높은 threshold → kDk^* \to D.
  • threshold 가 정확히 누적합 중 하나와 같으면 그 k.
  • threshold = 1.0 → 전체 DD 반환.
  • threshold > 1 → k=Dk^* = D (capped).

과제

함수 auto_k_pca(X, variance_threshold) 를 완성하세요.

  • X shape (N, D), variance_threshold[0, 1] (넘어도 D 로 capped).
  • 반환: (k, cumulative)k Python int, cumulative shape (D,) 전체 누적 비율 배열.
  • 힌트: np.searchsorted(cumulative, threshold) + 1 로 가장 먼저 초과하는 인덱스.

테스트 케이스

#이름검증
1반환 (int, (D,))
2cumulative 단조 증가, 마지막 = 1
3threshold=1.0 → k=D
4threshold=0.0 → k=1
5threshold=0.95 데이터에서 일관된 k
6cumulative[k-1] >= threshold, cumulative[k-2] < threshold (중간)
7강한 첫 성분 데이터: threshold=0.9 → k=1
코드 작성
Loading...
실행 결과

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