"ML 기초 학습 (1/9) — 머신러닝과 sklearn: 학습의 좌표계"

이 시리즈는 신경망과 로컬 LLM으로 가기 전에 손에 익혀 둬야 할 머신러닝 기초 9편이다. 1편은 모든 ML 코드가 공유하는 공통 문법을 잡는 데 쓴다. sklearn은 그 문법을 가장 일관되게 보여주는 도구다. 이번 편이 끝나면 어떤 모델을 만나도 fit → predict → score → 평가 흐름이 같다는 것이 손에 잡힌다.


0. 학습 목표

이 편을 마치면 다음을 할 수 있어야 한다.

  • 지도학습·비지도학습·강화학습을 한 문장씩 구분해 설명한다.
  • sklearn의 estimator 인터페이스 (fit, predict, score, transform)를 코드 한 화면 안에서 쓸 수 있다.
  • train/validation/test 분할을 왜 하는지, 어디서 데이터 누수가 생기는지 식과 그림으로 설명한다.
  • 분류·회귀의 핵심 평가 지표(accuracy, precision, recall, F1, MSE, R²)를 정의에서 직접 계산할 수 있다.
  • k-fold 교차검증을 코드 한 줄로 돌리고, 결과의 평균과 표준편차를 함께 보고할 수 있다.
  • Pipeline으로 전처리와 모델을 묶어 데이터 누수를 구조적으로 막는 방법을 설명한다.

1. 핵심 요약

  • 머신러닝은 데이터에서 함수 \(f: X \to Y\)를 찾는 작업이다. 어떤 모델이든 이 본질은 같다.
  • sklearn은 모든 모델을 같은 인터페이스(fit, predict, score)로 통일해, 모델을 바꿀 때 한 줄만 바꾸면 되게 한다.
  • train/val/test 세 분할이 표준이다. 검증으로 하이퍼파라미터를 고르고, 테스트는 마지막에 한 번만 본다.
  • 데이터 누수(test 정보가 train에 새는 현상)는 ML 입문자가 가장 자주 만드는 실수이며, Pipeline + cross_val_score 조합으로 구조적으로 막을 수 있다.
  • 평가 지표는 문제 유형 (분류/회귀)클래스 불균형 에 따라 골라야 한다. accuracy 하나에 의존하면 안 된다.

2. 직관 — 머신러닝은 무엇을 하는가

2.1 함수를 찾는다

전통적 프로그래밍은 사람이 규칙을 짠다.

입력 → [사람이 짠 규칙] → 출력

머신러닝은 입력과 출력을 둘 다 주고, 규칙(함수)을 데이터에서 찾도록 한다.

(입력, 출력) 페어 → [학습 알고리즘] → 함수 f

수식으로 쓰면 간단하다. 입력 공간을 \(X\), 출력 공간을 \(Y\)라 할 때, ML은

$$ f^{*} = \arg\min_{f \in \mathcal{F}} \; \mathbb{E}_{(x,y) \sim \mathcal{D}}\big[\, L\big(f(x),\, y\big)\,\big] $$

를 푸는 일이다. \(\mathcal{F}\)는 우리가 고른 모델 군(가설 공간), \(L\)은 손실 함수, \(\mathcal{D}\)는 데이터 분포다.

문제는 \(\mathcal{D}\)를 통째로 가질 수 없다는 점이다. 그래서 우리는 유한한 표본 \(\{(x_i, y_i)\}_{i=1}^{n}\)으로 위 기댓값을 근사한다. 이 근사를 경험 위험 (empirical risk) 이라 부른다.

$$ \hat{f} = \arg\min_{f \in \mathcal{F}} \; \frac{1}{n} \sum_{i=1}^{n} L\big(f(x_i),\, y_i\big) $$

ML의 거의 모든 알고리즘은 이 식의 변형이다. 모델이 다르고(\(\mathcal{F}\)가 다름), 손실이 다르고(\(L\)이 다름), 최적화 방법이 다를 뿐이다.

2.2 세 가지 흐름

분류 입력 출력 대표 작업
지도학습 (supervised) x y (정답 라벨) 분류, 회귀
비지도학습 (unsupervised) x 군집, 차원 축소, 밀도 추정
강화학습 (reinforcement) 상태 s 행동 a, 보상 r 게임, 로봇 제어, RLHF

이 시리즈는 지도학습 위주로 간다. 비지도학습은 6편 신경망의 오토인코더, 강화학습은 LLM 시리즈의 RLHF에서 일부 다룬다.

2.3 왜 sklearn인가

sklearn은 2007년부터 이어진 파이썬 ML 라이브러리다. 한 줄 표현으로는 "모든 ML 모델에 같은 옷을 입힌 도구" 다.

  • 모든 estimator가 fit(X, y)predict(X) 패턴을 따른다.
  • 모델을 바꿀 때 클래스 이름 한 줄만 바꾼다.
  • 전처리(StandardScaler, OneHotEncoder)부터 평가(cross_val_score)까지 같은 문법.
  • 딥러닝은 아니지만, 딥러닝 코드의 사고 흐름(데이터셋 → 모델 → 학습 → 평가) 을 그대로 만든다.

원논문 인용:

Pedregosa, F. et al. Scikit-learn: Machine Learning in Python. Journal of Machine Learning Research, 12 (2011): 2825–2830.

JMLR 2011 논문은 sklearn의 설계 철학을 명시한다: "a consistent interface, balanced compromises between ease of use and performance, and dependence on a small set of well-established libraries (NumPy, SciPy)".


3. 정의와 표기 — estimator 인터페이스

3.1 데이터 표기

  • \(X \in \mathbb{R}^{n \times d}\): \(n\)개의 샘플, \(d\)차원 피처를 가진 입력 행렬.
  • \(y \in \mathbb{R}^{n}\) (회귀) 또는 \(y \in \{0, 1, \dots, C-1\}^{n}\) (분류): 정답 벡터.
  • 한 샘플: \(x_i \in \mathbb{R}^{d}\), \(y_i\).

3.2 estimator 인터페이스

sklearn에서 모든 학습 가능한 객체는 estimator 다. 표준 메서드 시그니처는 다음과 같다.

class Estimator:
    def fit(self, X, y=None):  return self           # 학습
    def predict(self, X):      return y_hat          # 예측
    def score(self, X, y):     return metric_value   # 기본 지표
    def transform(self, X):    return X_transformed  # 전처리/차원변환 계열
    def fit_transform(self, X, y=None): ...          # fit + transform
메서드 어디에 있는가 의미
fit 모든 estimator 데이터로 학습
predict 분류기, 회귀기 새 입력에 대한 예측
score 분류기, 회귀기 분류면 accuracy, 회귀면 R² 기본
transform 전처리기, 차원축소기 입력을 새 표현으로
predict_proba 확률 분류기 각 클래스 확률

이 일관성이 sklearn의 핵심 자산이다. LogisticRegression, RandomForestClassifier, KNeighborsClassifier를 바꿔 끼워도 호출 코드는 동일하다.


4. 수식과 메커니즘 — 일반화, 분할, 누수

4.1 일반화 오차의 분해

학습된 모델 \(\hat{f}\)의 일반화 오차는 다음과 같이 분해된다.

$$ \mathbb{E}\big[L(\hat{f}(x), y)\big] \;=\; \underbrace{\big(\,\mathbb{E}[\hat{f}(x)] - f^{*}(x)\,\big)^{2}}_{\text{Bias}^2} \;+\; \underbrace{\mathrm{Var}\big[\hat{f}(x)\big]}_{\text{Variance}} \;+\; \underbrace{\sigma^{2}}_{\text{Noise}} $$

  • Bias: 모델 가정이 너무 단순해 진짜 함수를 못 따라가는 정도(과소적합).
  • Variance: 훈련 데이터가 바뀔 때 모델이 흔들리는 정도(과적합).
  • Noise: 데이터 자체의 본질적 불확실성. 어떤 모델로도 못 줄인다.

이 분해는 5편(정규화)에서 다시 정확하게 다룬다. 1편에서는 한 가지만 기억하면 된다: 훈련 오차가 낮다고 일반화 오차가 낮은 게 아니다.

4.2 왜 train/val/test 세 분할인가

  • Train: \(\hat{f}\)의 파라미터(가중치)를 학습한다.
  • Validation: 하이퍼파라미터(예: k-NN의 \(k\), Ridge의 \(\lambda\))를 고른다.
  • Test: 최종 일반화 성능을 딱 한 번 측정한다.

검증과 테스트를 분리하지 않으면, 하이퍼파라미터 선택 자체가 테스트셋에 적합되어 낙관적 편향(optimistic bias) 이 생긴다. 같은 테스트셋을 반복해서 보고 성능을 보고하는 것은 사실상 그 테스트셋을 훈련에 쓰는 것과 같다.

전형적 비율은 60/20/20 또는 70/15/15다. 데이터가 큰 경우에는 98/1/1도 흔하다 (예: 100만 샘플이면 1만 개 테스트면 충분).

4.3 데이터 누수 (data leakage)

이 시리즈에서 가장 강조하고 싶은 개념이다. 누수는 미래 정보가 과거로 새는 것이다.

전형적인 사례:

  1. 전처리 누수: 전체 데이터로 StandardScaler.fit()을 한 뒤 train/test로 나눈다 → test 통계가 train 정규화에 섞인다.
  2. 타깃 누수: 피처 중 하나가 사실상 정답과 동치다 (예: 환자 사망 예측에서 사망일자 피처).
  3. 시간 누수: 시계열인데 무작위로 섞어 분할한다 → 미래 데이터로 과거를 예측하는 셈.
  4. 그룹 누수: 같은 환자의 다른 시점이 train과 test에 모두 들어간다.

해결의 핵심은 "test는 미래" 라고 생각하는 것이다. 어떤 통계도 test에서 계산해 train에 쓰지 않는다.

sklearn의 Pipeline은 이 원칙을 코드 구조로 강제한다. 4편(로지스틱)에서 본격적으로 쓴다.


5. 다이어그램 — 전체 흐름

diagram-1

핵심: validation을 보고 모델을 고른 다음, test는 한 번만 본다. test를 보고 모델을 고치면 그 순간 test는 validation이 된다.


6. 원리 워크스루 — sklearn 5단계를 해부하다

sklearn 작업의 본체는 사실 다섯 줄이다. 줄 자체가 아니라 각 줄이 어떤 학습 과학의 원칙을 담고 있는가가 학습 가치다.

6.1 표준 5단계 워크플로

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

X, y = load_breast_cancer(return_X_y=True)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)
model = LogisticRegression(max_iter=10000).fit(X_tr, y_tr)
print(f"acc = {accuracy_score(y_te, model.predict(X_te)):.4f}")

다섯 동작이 끝이다 — 분할 → 학습 → 예측 → 평가. 이 다섯이 어떤 sklearn 모델에도 그대로 적용된다는 점이 fit/predict 인터페이스 통일의 핵심이고, sklearn이 ML 표준이 된 가장 큰 이유다 (Buitinck et al. 2013).

6.2 Pipeline이 데이터 누수를 구조적으로 막는 방식

무엇이 문제인가 누수의 가장 흔한 패턴: 전체 데이터로 StandardScaler().fit(X)를 한 뒤 split하면, validation/test 통계가 train 정규화에 섞여 들어간다. 결과적으로 test 성능이 부풀려진다.

Pipeline은 어떻게 막는가 Pipeline([("scaler", StandardScaler()), ("clf", LogisticRegression())])cross_val_score에 넘기면, 각 fold에서 그 fold의 train만으로 scaler가 fit되고 validation은 transform만 받는다. 누수가 코드 작성 단계에서 차단된다.

왜 이 설계가 채택되었는가 sklearn 0.15 (2014) 의 Pipeline API 도입은 재현 가능한 ML 실험이라는 학계 요구를 직접 반영한 것이다. 그 전에는 같은 데이터셋·같은 모델로 다른 연구자가 다른 점수를 보고하는 일이 잦았다 — 누수가 원인의 절반 이상이었다. Pipeline은 "데이터 흐름의 시간성"을 코드에 명시함으로써 이 문제를 해결했다.

다음 단계로의 연결 같은 발상이 7편 신경망 학습기법에서 BatchNorm·LayerNorm으로 확장된다 — 각 미니배치의 통계만으로 정규화 한다는 시간성 원칙이 동일하게 적용된다.

6.3 평가 지표는 블랙박스가 아니다 — 정의가 곧 한 줄

confusion matrix \([[\text{TN}, \text{FP}],[\text{FN}, \text{TP}]]\)에서 모든 분류 지표가 한 줄 정의로 나온다.

지표 정의 의미
Accuracy \((\text{TP}+\text{TN})/(\text{TP}+\text{TN}+\text{FP}+\text{FN})\) "전체 중 맞춘 비율"
Precision \(\text{TP}/(\text{TP}+\text{FP})\) "양성 예측 중 진짜 양성"
Recall \(\text{TP}/(\text{TP}+\text{FN})\) "진짜 양성 중 잡아낸 비율"
F1 \(2 \cdot \text{Prec} \cdot \text{Rec} / (\text{Prec}+\text{Rec})\) precision·recall 조화평균

회귀 지표도 마찬가지다 — \(\text{MSE} = \tfrac{1}{n}\sum (y - \hat{y})^2\), \(R^2 = 1 - \text{SS}_{\text{res}}/\text{SS}_{\text{tot}}\). 수치를 받아 적기 전에 식이 무엇을 묻고 있는지 떠올린다 — 이게 7장 지표 선택의 출발점이다.


7. 변형과 사례 — 평가 지표가 비즈니스 결정이 되는 자리

ML 모델을 운영에 올리는 순간 가장 자주 다투게 되는 주제는 모델 구조가 아니라 지표 선택이다. 한 지표를 잘못 고르면 모델은 "좋아 보이지만" 실제로는 비즈니스를 망친다.

7.1 클래스 불균형 — accuracy를 버려야 하는 자리

무엇이 바뀌나 양성 클래스 비율이 1%인 데이터에서 "모두 정상"이라고 예측해도 accuracy = 99%. 모델이 아무것도 안 했는데 점수가 높다.

왜 등장했나 의료 진단·사기 탐지·이상 탐지 분야에서 희귀 양성이 본질이다. Provost & Fawcett 1997 Analysis and Visualization of Classifier Performance (KDD) 이후 PR 곡선·ROC 곡선이 표준 평가가 되었다.

무엇이 가능해졌나 - precision·recall: precision은 "양성 예측 중 진짜 양성", recall은 "진짜 양성 중 잡아낸 비율". 두 축이 분리되어 trade-off가 명시적으로 드러난다. - F1 (조화 평균): 두 오류의 비용이 비슷할 때. - PR-AUC / ROC-AUC: 임계값을 정하기 전 모델의 전체 분리 능력 측정. - 가중 비용 모델: 거짓 음성 \(\times c_{\text{FN}}\) + 거짓 양성 \(\times c_{\text{FP}}\) 의 기대 손실 직접 최적화.

한계와 다음 단계 지표를 비즈니스 비용에 매핑하는 일은 자동화되지 않는다. 4편 로지스틱 회귀에서 임계값 선택의 의미, 5편 정규화에서 클래스 불균형 보정 방법이 이어진다.

7.2 회귀 지표 — 무엇이 "큰 오차"인가에 대한 정책

지표 특징 사용처
MSE 큰 오차에 제곱 페널티 미분 가능, 기본 손실
RMSE MSE의 √, 원본 단위 보고·해석
MAE 이상치에 강건 데이터에 이상치 빈번
분산 설명 비율 스케일 무관 모델 비교
MAPE 상대 오차 % 예측 규모가 크게 변하는 시계열
Quantile loss \(\tau\)-분위수 추정 리스크·VaR 모델링

핵심 시각: 지표 선택은 손실 함수 선택이다. MSE를 보면 큰 오차 1개 vs 작은 오차 10개를 같게 본다는 정책에 동의한 셈. MAE를 쓰면 그 둘을 다르게 본다.

7.3 cross-validation — 데이터의 구조가 분할을 결정한다

메서드 언제
KFold(5) 기본 회귀 IID 가정
StratifiedKFold(5) 분류 각 fold 클래스 비율 보존
GroupKFold 환자·사용자·매장 단위 같은 그룹이 train/val에 흩어지면 누수
TimeSeriesSplit 시계열 시간 순서 위반 = 미래 정보 누수
LeaveOneOut 데이터 매우 적음 모든 표본을 한 번씩 val

핵심 시각: 분할은 "데이터를 어떻게 자르냐"가 아니라 "무엇이 IID가 아닌가를 모델에게 알려 주기"다. 시계열을 무작위로 자르면 모델이 미래로 과거를 예측하는 셈이 되어 일반화 추정이 완전히 무너진다.

7.4 운영 환경에서의 사례

  • 스팸 필터: precision 강조 (정상 메일을 스팸으로 오인하면 사용자 신뢰 손실).
  • 암 진단: recall 강조 (양성을 놓치면 환자 손실).
  • 광고 클릭률 (CTR) 예측: PR-AUC + 캘리브레이션 (확률이 맞는 값을 가지는지).
  • 사기 거래 탐지: 가중 비용 손실 직접 최적화.
  • 수요 예측: MAPE (작은 매장과 큰 매장의 오차를 비교 가능하게).
  • A/B 테스트 효과 추정: 회귀 + 신뢰구간 (점추정이 아니라 효과 크기 범위).

8. 한계와 실패 양상 — sklearn이 막아 주지 못하는 것들

sklearn API는 모델 학습의 수렴성·재현성을 보장하지만, 평가의 정직성은 사용자 책임이다. 여기서 가장 자주 무너진다.

8.1 데이터 누수 (Data Leakage)

왜 본질적 한계인가 누수는 미래 정보가 과거로 새는 현상이다. 모델은 그 정보를 정직하게 학습한 셈이지만, 운영 환경에서는 그 정보가 존재하지 않는다. 결과적으로 오프라인 평가는 좋고 운영 성능은 무너지는 체계적 과대평가가 일어난다.

어떻게 진단하는가 - Test R²/accuracy가 train과 거의 같거나 더 높음 → 의심 - Feature importance에 "결과를 곧바로 알려 주는" 변수 (예: 사망 예측에서 사망일자) 가 1위 - Pipeline 없이 fit_transform을 split 이전에 호출한 경우 (전처리 누수)

다음 단계 모든 전처리를 Pipeline으로 감싸 cross-validation에 넘긴다. 시계열은 TimeSeriesSplit, 그룹 데이터는 GroupKFold. 5편 정규화는 이 사고방식의 자연스러운 확장이다.

8.2 하이퍼파라미터를 test로 고르기

왜 본질적 한계인가 test 점수를 보고 하이퍼파라미터를 조정하면, test가 검증으로 변한다. 같은 test로 100번 비교하면 우연한 best가 무조건 나온다 — 다중 비교(multiple testing) 문제.

어떻게 진단하는가 "여러 모델을 비교한 뒤 가장 높은 test 점수를 보고"하는 워크플로면 이미 발생.

다음 단계 train / validation / test 3분할. 또는 nested CV: 외부 fold가 test 역할, 내부 fold가 하이퍼파라미터 튜닝 역할. 5편에서 정규화 강도 \(\lambda\) 선택 시 다시 만난다.

8.3 랜덤 시드 고정 누락

왜 본질적 한계인가 sklearn의 train_test_split·KFold·신경망 초기화 모두 RNG에 의존. 시드를 고정하지 않으면 매 실행마다 점수가 ±2~5% 변동 — "0.3% 개선"이 통계적으로 의미 없는 상태가 된다.

어떻게 진단하는가 같은 코드를 두 번 실행하고 점수가 다르면 시드 미고정.

다음 단계 random_state=42를 어디든. 그리고 여러 시드로 반복 실행해 \(\text{mean} \pm \text{std}\)를 보고하는 게 정직한 평가.

8.4 \(p\) (피처) ≫ \(n\) (표본)

왜 본질적 한계인가 30 피처 × 100 표본 같은 경우, 어떤 모델도 훈련 데이터를 완벽히 외울 충분한 표현력을 가진다. 일반화 추정 자체가 어렵다.

어떻게 진단하는가 \(d/n > 0.1\) 이면 주의, \(> 1\) 이면 정규화 필수.

다음 단계 정규화(5편 Lasso·Ridge), 차원 축소(PCA), 또는 더 많은 데이터 수집. 3편 8.6에서 이 한계를 정면으로 다룬다.

8.5 비-IID 샘플 (시계열·그룹 구조)

왜 본질적 한계인가 random split은 데이터가 IID(독립 동일분포)라는 가정 위에 서 있다. 시계열·환자 코호트·매장 데이터는 IID가 아니다 — 같은 환자의 측정값이 train과 val에 흩어지면 그 환자에 과적합 한 모델이 좋은 점수를 받는다.

어떻게 진단하는가 도메인 지식이 출발점. 표본에 시간·그룹 인덱스가 있는가? 그렇다면 random split은 위험.

다음 단계 TimeSeriesSplit, GroupKFold, 또는 prospective 평가 (실제 새 데이터에서 측정).

8.6 단일 지표 집착

왜 본질적 한계인가 accuracy 하나로 모델을 비교하면 클래스 불균형·비용 구조가 가려진다. F1 하나로만 보면 임계값의 영향이 가려진다. 운영에서는 여러 지표의 합의가 안전.

어떻게 진단하는가 모델 비교 표에 한 컬럼만 있다면 의심.

다음 단계 classification report (precision·recall·F1·support), confusion matrix, calibration curve, 그리고 비즈니스 비용 함수 평가를 함께 보고.


한계가 알려주는 흐름

이 6가지 한계가 알려주는 한 가지 메시지: sklearn은 학습은 자동화하지만 평가의 정직성은 자동화하지 않는다. 같은 발상이 7편 신경망 학습에서 "왜 train loss가 아니라 val loss로 모델을 고르는가", 8편 아키텍처에서 "왜 transformer의 효과는 task별 평가가 필수인가"로 이어진다.


9. 정리된 결론 — 보지 않고 답해 보라

이 글이 답한 핵심 질문 5개. 먼저 답을 가린 채로 한 줄로 답해 본 뒤 정답과 비교.

Q1. sklearn의 fit/predict 인터페이스가 ML 표준이 된 이유는?

정답 어떤 모델이든 동일한 5단계 워크플로(분할 → 학습 → 예측 → 평가)로 다룰 수 있게 했기 때문. 표준화된 인터페이스가 모델 비교·재현·자동화의 비용을 한꺼번에 낮췄다 (Buitinck et al. 2013). 같은 발상이 후에 PyTorch·TensorFlow의 fit/step API로 이어진다. (본문 6.1, 9편)

Q2. StandardScaler().fit_transform(X)를 split 이전에 호출하면 무엇이 일어나는가?

정답 데이터 누수. validation/test의 평균·분산이 train 정규화에 섞여 들어가 test 성능이 부풀려진다. sklearn Pipelinecross_val_score에 넘기면 각 fold의 train만으로 scaler가 fit되고 validation은 transform만 받아 누수가 구조적으로 차단된다. (본문 6.2, 8.1)

Q3. 양성 클래스 비율이 1%인 데이터에서 accuracy = 99%인 모델은 좋은 모델인가?

정답 아니다. "모두 정상이라고 답하는" 모델도 같은 점수가 나온다. 클래스 불균형 상황에서는 accuracy가 아무 정보도 주지 않는다. precision·recall·F1·PR-AUC를 봐야 한다 (Provost & Fawcett 1997). (본문 7.1)

Q4. 시계열 데이터에 KFold(shuffle=True)를 쓰면 무슨 일이 일어나는가?

정답 시간 누수. 미래 데이터로 과거를 예측하는 셈이 되어 일반화 추정이 무너진다. random split은 IID 가정이 전제. 시계열·그룹 데이터는 IID가 아니므로 TimeSeriesSplit 또는 GroupKFold가 필요하다. (본문 7.3, 8.5)

Q5. 같은 코드를 두 번 실행했는데 점수가 ±2% 변동한다. 어떻게 해야 정직한 비교가 가능한가?

정답 RNG 시드 고정(random_state=42) + 여러 시드로 반복 실행해 \(\text{mean} \pm \text{std}\) 보고. 단일 점수는 노이즈와 구분되지 않는다. 0.3% 차이가 통계적으로 의미 있으려면 시드 변동성보다 커야 한다. (본문 8.3)


4~5개를 한 줄로 답할 수 있었다면 sklearn의 핵심 개념이 자리잡은 것이다. 막힌 질문은 본문 해당 챕터로 돌아가 재독.


10. 추가 학습

1차 자료

  • Pedregosa, F. et al. Scikit-learn: Machine Learning in Python. JMLR 12 (2011): 2825–2830. — sklearn 원논문.
  • Buitinck, L. et al. API design for machine learning software: experiences from the scikit-learn project. ECML PKDD Workshop, 2013. arXiv:1309.0238 — fit/predict 인터페이스 설계 철학.

공식 docs

  • scikit-learn User Guide: https://scikit-learn.org/stable/user_guide.html
  • Model evaluation: https://scikit-learn.org/stable/modules/model_evaluation.html
  • Cross-validation: https://scikit-learn.org/stable/modules/cross_validation.html
  • Pipelines: https://scikit-learn.org/stable/modules/compose.html

보조 자료

  • Hastie, T., Tibshirani, R., Friedman, J. The Elements of Statistical Learning, 2nd ed., Springer 2009. 무료 PDF 공개. 1·2장이 이 편의 자연스러운 후속.
  • Bishop, C. Pattern Recognition and Machine Learning. Springer 2006. 1장.

다음 편(2/9)에서는 가장 단순한 모델인 k-Nearest Neighbors를 다룬다. "거리를 재서 가까운 것들의 답을 평균낸다"는 한 줄짜리 아이디어로 ML의 핵심 개념(편향-분산, 차원의 저주, 비모수 모델, 결정경계)을 한꺼번에 볼 수 있다.

시리즈 전체 안내: 시리즈 목차

댓글

이 블로그의 인기 게시물

"LLM 핵심 학습 (1/6) — 기본: 토큰화·임베딩·어텐션·위치 인코딩"

"LLM 핵심 학습 (2/6) — 파인튜닝: LoRA·QLoRA·증류·Adapter"