인지야공/인공 지능 공부 치트 시트 정리/8번째 글
CS229 머신러닝 팁 치트시트를 다시 쓴다 — R² 는 잡음만 넣어도 오른다
이 치트시트는 알고리즘이 아니라 알고리즘을 고르는 법을 다룬다. 실무에서 실제로 쓰는 빈도로 치면 지도학습 치트시트보다 이쪽이 높다.
지표의 정의는 모델 평가 지표 글에 정리해 두었으니, 여기서는 그 지표를 믿어도 되는가를 중심으로 다시 썼다.
분류 지표 — 혼동행렬에서 다 나온다
| 예측 + | 예측 − | |
|---|---|---|
| 실제 + | TP | FN (2종 오류) |
| 실제 − | FP (1종 오류) | TN |
| 지표 | 식 | 무엇을 묻나 |
|---|---|---|
| 정확도 | 전체적으로 얼마나 맞혔나 | |
| 정밀도 | + 라고 한 것 중 진짜는 | |
| 재현율(민감도) | 진짜 + 중 몇 개를 잡았나 | |
| 특이도 | 진짜 − 중 몇 개를 걸렀나 | |
| F1 | 정밀도와 재현율의 조화평균 |
불균형 데이터에서 정확도는 쓸모가 없다. 99%가 음성인 데이터에서 전부 음성이라고 답하면 정확도 99%다. 그래서 F1 이나 AUC 를 본다.
ROC 는 임계값을 0 에서 1 까지 움직이며 TPR(재현율) 대 FPR(1−특이도)를 그린 곡선이고, AUC 는 그 아래 넓이다. 임계값 하나에 매이지 않는다는 것이 ROC 의 값어치다.
1종 오류는 FP(없는데 있다고 함), 2종 오류는 FN(있는데 없다고 함)이다. 통계 검정에서 귀무가설을 잘못 기각하는 것이 1종 오류인 것과 같은 뜻이다.
회귀 지표 — 는 증거가 아니다
문제는 가 변수를 넣을수록 오른다는 데 있다. 아무 의미 없는 난수 열을 넣어도 오른다. 40개 표본에 순수한 잡음 변수만 늘려 가며 200번씩 돌려 봤다.
| 넣은 잡음 변수 | 평균 | 조정 평균 |
|---|---|---|
| 0개 | 0.8935 | 0.8907 |
| 3개 | 0.9007 | 0.8893 |
| 10개 | 0.9212 | 0.8902 |
| 20개 | 0.9505 | 0.8928 |
정보가 하나도 없는 변수 20개로 가 0.89 에서 0.95 로 올랐다. 조정 는 같은 자리에 머문다 — 변수 개수 으로 벌점을 주기 때문이다.
같은 목적의 다른 지표들도 전부 적합도 − 복잡도 꼴이다.
| 지표 | 식 |
|---|---|
| AIC | |
| BIC | |
| Mallow’s |
BIC 는 이 곱해져 있어 표본이 클수록 변수에 더 엄해진다. 그래서 보통 BIC 가 AIC 보다 단순한 모델을 고른다.
데이터를 셋으로 나눈다
| 몫 | 하는 일 |
|---|---|
| 훈련(train) | 모델을 학습시킨다 (보통 80%) |
| 검증(validation) | 모델을 고른다. 하이퍼파라미터 튜닝은 여기서 (보통 20%) |
| 시험(test) | 마지막에 딱 한 번. 본 적 없는 데이터 |
검증 세트에서 하이퍼파라미터를 고르고 시험 세트로 또 고르면 시험 세트가 오염된다. 시험 점수가 좋아 보이는데 실제로 배포하면 안 나오는 전형적인 경로다.
교차검증은 이 나눔이 운에 좌우되지 않게 한다.
| 방식 | 내용 |
|---|---|
| k-fold | k 조각으로 나눠 k−1 로 학습, 1 로 평가. 보통 k = 5 또는 10 |
| Leave-p-out | p 개만 남기고 학습. p=1 이면 LOO |
진단 — 증상으로 갈라 본다
| 과소적합 | 적당 | 과적합 | |
|---|---|---|---|
| 훈련 오차 | 높다 | 조금 낮다 | 아주 낮다 |
| 훈련과 시험의 차이 | 거의 없다 | 조금 | 크다 |
| 정체 | 편향이 높다 | 분산이 높다 | |
| 처방 | 모델을 키운다 · 특징을 늘린다 · 더 학습한다 | 정규화 · 데이터를 더 모은다 |
에 잡음을 섞은 데이터를 25개씩 뽑아 다항회귀 차수를 올리며 120번씩 돌려 편향과 분산을 직접 재 봤다.
| 다항 차수 | 편향² | 분산 | 합 |
|---|---|---|---|
| 1 | 0.2131 | 0.0320 | 0.2452 |
| 3 | 0.0072 | 0.0181 | 0.0253 |
| 9 | 0.1226 | 30.74 | 30.87 |
| 15 | 325,596 | 62,273,584 | — |
차수 1 은 편향이 크고, 차수 9 부터는 분산이 폭발한다. 표본 25개에 15차 다항식을 맞추면 숫자 자체가 의미를 잃는다. 훈련 데이터는 완벽하게 지나가는데도 그렇다 — 이것이 “훈련 오차만 보면 안 되는” 이유다.
정규화 — 무엇을 0 으로 만드느냐
| 벌점 항 | 성격 | |
|---|---|---|
| LASSO | 계수를 0 으로 만든다 → 변수 선택 | |
| Ridge | 계수를 작게 만든다 (0 은 아니다) | |
| Elastic Net | 둘의 절충 |
말이 아니라 계수를 보면 분명하다. 진짜 신호는 두 변수뿐이고 나머지 여섯은 잡음인 데이터다.
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에 있다. 표의 실험값은 전부 내가 직접 돌려 얻은 것이다.