인지야공

인지야공/인공 지능 공부 치트 시트 정리/8번째 글

CS229 머신러닝 팁 치트시트를 다시 쓴다 — R² 는 잡음만 넣어도 오른다

이 치트시트는 알고리즘이 아니라 알고리즘을 고르는 법을 다룬다. 실무에서 실제로 쓰는 빈도로 치면 지도학습 치트시트보다 이쪽이 높다.

지표의 정의는 모델 평가 지표 글에 정리해 두었으니, 여기서는 그 지표를 믿어도 되는가를 중심으로 다시 썼다.

분류 지표 — 혼동행렬에서 다 나온다

예측 +예측 −
실제 +TPFN (2종 오류)
실제 −FP (1종 오류)TN
지표식무엇을 묻나
정확도TP+TNTP+TN+FP+FN\frac{TP+TN}{TP+TN+FP+FN}전체적으로 얼마나 맞혔나
정밀도TPTP+FP\frac{TP}{TP+FP}+ 라고 한 것 중 진짜는
재현율(민감도)TPTP+FN\frac{TP}{TP+FN}진짜 + 중 몇 개를 잡았나
특이도TNTN+FP\frac{TN}{TN+FP}진짜 − 중 몇 개를 걸렀나
F12TP2TP+FP+FN\frac{2TP}{2TP+FP+FN}정밀도와 재현율의 조화평균

불균형 데이터에서 정확도는 쓸모가 없다. 99%가 음성인 데이터에서 전부 음성이라고 답하면 정확도 99%다. 그래서 F1 이나 AUC 를 본다.

ROC 는 임계값을 0 에서 1 까지 움직이며 TPR(재현율) 대 FPR(1−특이도)를 그린 곡선이고, AUC 는 그 아래 넓이다. 임계값 하나에 매이지 않는다는 것이 ROC 의 값어치다.

1종 오류는 FP(없는데 있다고 함), 2종 오류는 FN(있는데 없다고 함)이다. 통계 검정에서 귀무가설을 잘못 기각하는 것이 1종 오류인 것과 같은 뜻이다.

회귀 지표 — R2R^2 는 증거가 아니다

SStot=∑(yi−yˉ)2,SSres=∑(yi−f(xi))2,R2=1−SSresSStotSS_{tot} = \sum (y_i - \bar y)^2, \quad SS_{res} = \sum (y_i - f(x_i))^2, \quad R^2 = 1 - \frac{SS_{res}}{SS_{tot}}

문제는 R2R^2 가 변수를 넣을수록 오른다는 데 있다. 아무 의미 없는 난수 열을 넣어도 오른다. 40개 표본에 순수한 잡음 변수만 늘려 가며 200번씩 돌려 봤다.

넣은 잡음 변수R2R^2 평균조정 R2R^2 평균
0개0.89350.8907
3개0.90070.8893
10개0.92120.8902
20개0.95050.8928

정보가 하나도 없는 변수 20개로 R2R^2 가 0.89 에서 0.95 로 올랐다. 조정 R2R^2 는 같은 자리에 머문다 — 변수 개수 nn 으로 벌점을 주기 때문이다.

조정 R2=1−(1−R2)(m−1)m−n−1\text{조정 } R^2 = 1 - \frac{(1-R^2)(m-1)}{m-n-1}

같은 목적의 다른 지표들도 전부 적합도 − 복잡도 꼴이다.

지표식
AIC2(n+2)−2log⁡(L)2(n+2) - 2\log(L)
BIClog⁡(m)(n+2)−2log⁡(L)\log(m)(n+2) - 2\log(L)
Mallow’s CpC_pSSres+2(n+1)σ^2m\frac{SS_{res} + 2(n+1)\hat\sigma^2}{m}

BIC 는 log⁡(m)\log(m) 이 곱해져 있어 표본이 클수록 변수에 더 엄해진다. 그래서 보통 BIC 가 AIC 보다 단순한 모델을 고른다.

데이터를 셋으로 나눈다

몫하는 일
훈련(train)모델을 학습시킨다 (보통 80%)
검증(validation)모델을 고른다. 하이퍼파라미터 튜닝은 여기서 (보통 20%)
시험(test)마지막에 딱 한 번. 본 적 없는 데이터

검증 세트에서 하이퍼파라미터를 고르고 시험 세트로 또 고르면 시험 세트가 오염된다. 시험 점수가 좋아 보이는데 실제로 배포하면 안 나오는 전형적인 경로다.

교차검증은 이 나눔이 운에 좌우되지 않게 한다.

방식내용
k-foldk 조각으로 나눠 k−1 로 학습, 1 로 평가. 보통 k = 5 또는 10
Leave-p-outp 개만 남기고 학습. p=1 이면 LOO

진단 — 증상으로 갈라 본다

과소적합적당과적합
훈련 오차높다조금 낮다아주 낮다
훈련과 시험의 차이거의 없다조금크다
정체편향이 높다분산이 높다
처방모델을 키운다 · 특징을 늘린다 · 더 학습한다정규화 · 데이터를 더 모은다

sin⁡(2πx)\sin(2\pi x) 에 잡음을 섞은 데이터를 25개씩 뽑아 다항회귀 차수를 올리며 120번씩 돌려 편향과 분산을 직접 재 봤다.

다항 차수편향²분산합
10.21310.03200.2452
30.00720.01810.0253
90.122630.7430.87
15325,59662,273,584—

차수 1 은 편향이 크고, 차수 9 부터는 분산이 폭발한다. 표본 25개에 15차 다항식을 맞추면 숫자 자체가 의미를 잃는다. 훈련 데이터는 완벽하게 지나가는데도 그렇다 — 이것이 “훈련 오차만 보면 안 되는” 이유다.

정규화 — 무엇을 0 으로 만드느냐

벌점 항성격
LASSOλ∥θ∥1\lambda\lVert\theta\rVert_1계수를 0 으로 만든다 → 변수 선택
Ridgeλ∥θ∥22\lambda\lVert\theta\rVert_2^2계수를 작게 만든다 (0 은 아니다)
Elastic Netλ[(1−α)∥θ∥1+α∥θ∥22]\lambda[(1-\alpha)\lVert\theta\rVert_1 + \alpha\lVert\theta\rVert_2^2]둘의 절충

말이 아니라 계수를 보면 분명하다. 진짜 신호는 두 변수뿐이고 나머지 여섯은 잡음인 데이터다.

LASSO 계수: [1.544, 0.780, -0., -0., 0., -0., -0., 0.]   → 0 이 6개
Ridge 계수: [2.348, 1.618, -0.105, -0.096, 0.029, ...]   → 0 이 0개

변수를 골라내야 하면 LASSO, 다 남기되 영향만 줄이려면 Ridge 다. 다중공선성이 심하면 Ridge 가 안정적이고, 변수가 아주 많고 그중 일부만 의미 있을 것 같으면 LASSO 다.

마지막 두 가지

  • 오류 분석: 지금 모델과 완벽한 모델 사이의 차이가 어디서 오는지 단계별로 뜯는다. 틀린 사례를 직접 눈으로 보는 것이 지표를 한 번 더 계산하는 것보다 낫다.
  • 제거 분석(ablative): 지금 모델에서 기능을 하나씩 빼 보며 어느 것이 실제로 기여했는지 본다. 넣을 때 좋아 보였던 것이 빼도 그대로인 경우가 흔하다.

출처

Afshine Amidi · Shervine Amidi 의 CS 229 VIP Cheatsheet: Machine Learning Tips and Tricks(Stanford, 2018)를 보고 다시 쓴 것이다. 원본은 stanford.edu/~shervine에 있다. 표의 실험값은 전부 내가 직접 돌려 얻은 것이다.

표시는 이 브라우저에만 남는다. 서버로 가는 것은 없다.