끄적이는 개발노트

260602_강의 정리 (scikit-learn) 본문

머신러닝

260602_강의 정리 (scikit-learn)

크런키스틱 2026. 6. 2. 09:51
728x90

 

machine learning · scikit-learn
scikit-learn 전체 구조 한눈에 보기
  • ML 학습 패러다임(지도·준지도·비지도)과 scikit-learn의 위치 파악
  • 전처리 → 변환 → 모델 → 평가로 이어지는 파이프라인 흐름 이해
  • 모델 4대 계열(정보·확률·유사도·오차 기반) 및 주요 알고리즘 정리
🎓
1. ML 학습 방법 — 데이터와 정답의 관계

"모델이 무엇을 보고 배우는가"에 따라 학습 방식이 갈림

🏷️ 지도학습 Supervised
입력 X와 정답 y가 모두 주어진 상태로 학습

→ 분류(Classification), 회귀(Regression)
🔀 준지도학습 Semi-supervised
일부 데이터에만 정답이 있음. 레이블 없는 데이터도 학습에 활용

→ 레이블 비용이 클 때 유용
🔍 비지도학습 Unsupervised
정답 없이 데이터 내 패턴·구조를 스스로 발견

→ 클러스터링, 차원축소
💡 새 개념
지도학습 Supervised Learning
  • X(입력)와 y(정답)를 쌍으로 제공하여 입력→출력 매핑을 학습시킴
  • 분류(범주 예측)와 회귀(수치 예측)로 나뉨
스팸 메일 필터 — 메일 본문(X)과 스팸 여부(y)로 학습
비지도학습 Unsupervised Learning
  • 정답 레이블 없이 데이터 자체의 분포·구조를 파악함
  • 클러스터링, 차원축소, 이상치 탐지 등에 활용됨
고객 구매 데이터를 군집화해 고객 유형을 자동 분류
⚙️
2. scikit-learn의 특징

실무에서 가장 널리 쓰이는 파이썬 ML 라이브러리 — 일관된 인터페이스가 핵심

  • 주요 기능 — 분류, 회귀예측, 클러스터링, 차원축소를 모두 지원함
  • 일관성 있는 인터페이스 — 모든 모델이 fit() / transform() / predict() 패턴을 따름
  • 지속 관리 — 커뮤니티를 통해 모델이 지속적으로 추가·삭제·개선됨
  • 병렬처리 지원joblib 기반으로 CPU 멀티코어 활용, GPU는 사용하지 않음
Scikits 2.0의 방향
· 차원감소(Dimensionality Reduction)에 더욱 중점을 둠
· 복합 모델(Composite Model) 구성 강화 — 대표 예: PCR(PCA + Regression)
🔁
3. 전체 파이프라인 구조

"여러 단계를 하나로 묶어 순차 실행" — make_pipeline이 이 흐름을 구현함

📦 Data
🔧 Preprocessing
🔀 Feature Extraction / 차원축소
🤖 Model Training
✅ Final Model
⚠️ 중요 원칙 — 데이터 분할 후 전처리
· 반드시 Train/Test 분리 먼저 수행 후 전처리(스케일링 등)를 적용해야 함
· 전처리를 먼저 하면 테스트 데이터 정보가 학습에 누출되는 Data Leakage가 발생함
💡 새 개념
파이프라인 Pipeline / make_pipeline
  • 전처리 → 변환 → 모델 학습을 하나의 객체로 연결함
  • Cross-validation, GridSearchCV와 결합하면 데이터 누출 없이 안전하게 평가 가능함
컨베이어 벨트처럼 각 단계가 순서대로 자동 실행됨
Data Leakage (데이터 누출)
  • 테스트 데이터의 정보가 학습 과정에 유입되어 모델 성능이 과대평가되는 현상
  • 실무에서 흔한 실수 — 분할 전 StandardScaler 적용이 대표적 사례임
시험 문제를 미리 알고 공부하는 것과 같음
🧩
4. Estimator 유형 — scikit-learn 객체의 역할 분류

모든 scikit-learn 객체는 fit()을 공통으로 갖는 Estimator를 기반으로 함

Transformer
데이터 변환fit() + transform() 사용. 스케일링, 인코딩, 차원축소 등 전처리 담당
Regressor
회귀(수치 예측)fit() + predict() 사용. LinearRegression, Ridge, Lasso 등
Classifier
분류(범주 예측)fit() + predict() 사용. LogisticRegression, RandomForest 등
Meta-estimator
다른 Estimator를 감싸는 래퍼 — Pipeline, GridSearchCV, BaggingClassifier 등. 기존 모델을 조합·확장함
Clusterer
비지도 군집화fit() + predict()(또는 fit_predict()) 사용. KMeans 등
공통 인터페이스 패턴
· fit(X, y) → 모델/변환기 학습
· transform(X) → 데이터 변환 (Transformer)
· predict(X) → 예측값 반환 (Regressor/Classifier)
🌳
5. 모델 4대 계열 — 학습 원리별 분류

"모델이 어떻게 패턴을 찾는가"에 따라 4가지 계열로 나뉨

정보 기반
트리 기반 모델 계열
데이터를 질문으로 쪼개어 정보 이득(불순도 감소)을 최대화하는 방향으로 학습
  • Decision Tree — 기본 트리 구조. 해석이 쉽지만 과적합에 취약함
  • Random Forest — 다수의 트리를 앙상블. 과적합을 줄이고 안정성을 높임
  • AdaBoost — 이전 트리의 오류에 가중치를 부여하며 순차 학습함
  • Gradient Boost / XGBoost — 잔차(오차)를 줄이는 방향으로 트리를 순차 추가함. 현재 가장 널리 쓰이는 계열
확률 기반
확률·통계 기반 모델 계열
데이터가 특정 분포를 따른다고 가정하고, 확률로 클래스/결과를 추정함
  • Logistic Regression — 분류 문제에 시그모이드 함수를 적용한 선형 모델. 확률값을 직접 출력함
  • BP (Backpropagation) 기반 신경망 — 오차를 역전파하여 가중치 업데이트
  • GP (Gaussian Process) — 예측값과 불확실성을 함께 추정함
유사도 기반
거리·벡터 기반 모델 계열
데이터 포인트 간 거리(유사도)로 클래스·군집을 결정함
  • KNN (K-Nearest Neighbors) — 새 데이터와 가장 가까운 K개 이웃의 레이블로 분류함
  • K-Means — 유사한 데이터끼리 K개 군집으로 묶는 비지도 클러스터링
  • SVM — 클래스 경계 마진을 최대화하는 결정 경계를 찾음
오차 기반
신경망(ANN) 계열
예측 오차를 최소화하는 방향으로 가중치를 반복 조정하며 학습함
  • ANN (Artificial Neural Network) — 입력층 → 은닉층 → 출력층 구조로 복잡한 비선형 패턴을 학습함
  • 경사하강법(Gradient Descent)으로 오차 역전파하여 가중치 업데이트
  • 딥러닝(CNN, RNN, Transformer 등)의 기반이 되는 구조임
💡 새 개념
XGBoost Extreme Gradient Boosting
  • Gradient Boosting을 병렬처리·정규화로 고속화한 라이브러리
  • 캐글(Kaggle) 경진대회에서 압도적으로 많이 쓰이는 모델임
  • scikit-learn 호환 인터페이스를 지원하여 파이프라인에 바로 연결 가능함
여러 명의 약한 전문가가 서로의 실수를 보완하며 점차 정확해지는 것
앙상블 Ensemble
  • 여러 모델의 예측을 결합해 단일 모델보다 더 나은 성능을 얻는 기법
  • Bagging(병렬 결합) vs Boosting(순차 보완) 두 방향이 있음
선거에서 여러 전문가 설문을 합산해 예측하는 것과 같음
📋
6. 주요 알고리즘 목록

scikit-learn이 제공하는 대표 알고리즘 — 문제 유형별 정리

문제 유형 주요 알고리즘 특이사항
회귀 (Regression) LinearRegression
Lasso Ridge ElasticNet
SGDRegressor
Lasso=L1 규제, Ridge=L2 규제
SGD는 대량 데이터에 적합
분류 (Classification) LogisticRegression
RidgeClassifier
SGDClassifier
CV 접미사(LogisticRegressionCV 등)는 교차검증으로 하이퍼파라미터 자동 튜닝
클러스터링 (Clustering) KMeans DBSCAN 비지도 학습 — 정답 레이블 불필요
차원축소 (Dim. Reduction) PCA FA ICA
RandomProjection
PCA: 분산 최대화 방향으로 투영
Random Projection: 대규모 고차원 데이터에 빠르게 적용
🔬
7. Model Selection — 하이퍼파라미터 튜닝 & 검증

"좋은 모델을 어떻게 고를 것인가" — 올바른 평가 방법이 성능을 좌우함

1
Train-Test Split
전체 데이터를 학습용/테스트용으로 분리함. 테스트셋은 최종 평가에만 사용하고 학습 중에는 절대 보지 않음
2
Cross-Validation (교차 검증)
학습 데이터를 K개로 나눠 반복 검증. 단 한 번의 분할보다 신뢰도 높은 성능 추정이 가능함
3
Hyperparameter Tuning
GridSearchCV : 지정한 모든 파라미터 조합을 탐색 (완전 탐색)
RandomizedSearchCV : 랜덤 샘플링으로 탐색 (대규모 공간에 효율적)
4
모델 평가
분류: Accuracy, F1-score, ROC-AUC / 회귀: MSE, RMSE, R² 등 문제 유형에 맞는 지표로 평가함
💡 새 개념
규제 Regularization
  • 모델이 학습 데이터에 과도하게 맞춰지는 과적합(Overfitting)을 방지하는 기법
  • 손실 함수에 가중치 크기에 대한 패널티 항을 추가하여 가중치가 지나치게 커지지 않도록 제약함
시험 점수(손실)만 올리려다 편법(과적합)을 쓰지 못하도록 감점 규정을 추가하는 것
L1 규제 Lasso — 가중치 절대값 합 기준
  • 패널티 = 가중치 절대값의 합 Σ|w|
  • 일부 가중치를 정확히 0으로 만드는 성질이 있음 → 불필요한 특성을 자동으로 제거하는 Feature Selection 효과
  • 중요한 특성이 소수일 때 적합함 (희소 모델, Sparse Model)
짐 중에 안 쓰는 것은 아예 버림 — 가방 자체를 가볍게 만듦
L2 규제 Ridge — 가중치 제곱합 기준
  • 패널티 = 가중치 제곱합 Σw²
  • 가중치를 0에 가깝게 줄이지만 완전히 0으로 만들지는 않음 → 모든 특성을 조금씩 유지함
  • 특성 간 상관관계가 높을 때(다중공선성) 안정적인 해를 찾는 데 유리함
짐을 버리지 않고 모든 짐을 골고루 압축해서 전체 무게를 줄임
하이퍼파라미터 Hyperparameter
  • 학습 전에 사람이 직접 설정하는 값 — 모델이 스스로 학습하지 않음
  • 예: 학습률, 트리 깊이, 규제 강도(C, alpha), K-Means의 K값
요리할 때 불 세기와 시간 — 레시피가 정해줘야 하는 외부 조건
📐
8. 차원축소 & 복합 모델 (Composite Model)

Scikits 2.0이 강조하는 방향 — PCA를 전처리로 붙여 성능을 높이는 구조

PCA
주성분 분석 (Principal Component Analysis)
변수들을 정보 손실을 최소화하며 새로운 저차원 축(주성분)으로 투영함
  • 상관된 다수의 특성을 독립적인 소수의 주성분으로 압축함
  • 다중공선성 문제를 해결하고 연산량을 줄이는 효과가 있음
  • Random Projection은 PCA보다 빠르나 해석 가능성이 낮음
PCR (Principal Component Regression)
PCA → LinearRegression 파이프라인 연결 패턴
· PCA로 다중공선성 제거 후 회귀 적용 → 고차원·상관 특성이 많을 때 특히 유효함
· make_pipeline(PCA(n_components=k), LinearRegression())
PCA FA (Factor Analysis) ICA Random Projection Feature Selection
9. 병렬처리 — joblib

scikit-learn 내부에서 joblib을 사용해 CPU 멀티코어 병렬 연산을 수행함

  • GPU 미사용 — scikit-learn은 CPU 기반. 딥러닝 프레임워크(PyTorch, TensorFlow)와 역할이 구분됨
  • n_jobs 파라미터 — 대부분의 estimator에서 n_jobs=-1로 설정하면 모든 코어를 활용함
  • GridSearchCV, Cross-validation — 내부적으로 joblib을 통해 자동 병렬화됨
GPU가 필요하다면?
· 대규모 딥러닝 → PyTorch / TensorFlow 사용
· XGBoost, LightGBM은 별도로 GPU 학습 지원함
· scikit-learn 자체는 GPU 연산을 지원하지 않음
📌 scikit-learn 핵심 흐름 정리
· 데이터 분할 → 전처리(Pipeline) → 모델 학습(fit) → 예측(predict) → 교차검증/튜닝 순서를 항상 지킬 것
· 모든 객체는 fit / transform / predict 인터페이스로 일관되게 작동함
· 트리 계열(XGBoost 포함)이 정형 데이터에서 현재 가장 강력한 성능을 보임
728x90