데이터 분석/데이터 사이언스
데이터 사이언스 - 6. 머신러닝 기초 (6.2 머신러닝 라이브러리 (scikit-learn))
개발_노트
2025. 3. 20. 16:09
6.2 머신러닝 라이브러리 (scikit-learn)
Scikit-learn은 머신러닝을 위한 가장 널리 사용되는 파이썬 라이브러리로,
데이터 전처리, 모델 학습, 평가, 하이퍼파라미터 튜닝 등의 다양한 기능을 제공한다.
이 장에서는 Scikit-learn을 활용한 데이터 처리(Pipeline)와 모델 저장(joblib, pickle) 방법을 다룬다.
6.2.1 Scikit-learn 개요
✅ Scikit-learn 특징
- 다양한 머신러닝 알고리즘 제공 (선형 회귀, 랜덤 포레스트, SVM 등)
- 데이터 전처리 기능 지원 (결측치 처리, 스케일링, 인코딩 등)
- 모델 평가 및 하이퍼파라미터 튜닝 지원
✅ 설치 방법
pip install scikit-learn
✅ Scikit-learn 기본 사용 흐름
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# 샘플 데이터 생성
X = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
y = [0, 1, 0, 1, 0]
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 모델 학습
model = RandomForestClassifier()
model.fit(X_train, y_train)
# 예측 및 평가
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
✅ 출력 예시
Accuracy: 1.0
6.2.2 Pipeline을 활용한 데이터 처리
① Pipeline이란?
Pipeline은 데이터 전처리 → 모델 학습 과정을 하나의 흐름으로 자동화하는 기능이다.
- 여러 단계를 하나의 객체로 묶어서 실행 가능
- 데이터 전처리와 모델 학습을 한 번에 적용 가능
- 데이터 변환 과정에서 데이터 누수를 방지
② Pipeline 기본 사용 예제
📌 표준화(Scaling) + 로지스틱 회귀(Logistic Regression) 모델 적용
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
# 데이터 로드
iris = load_iris()
X, y = iris.data, iris.target
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Pipeline 생성 (표준화 + 로지스틱 회귀)
pipeline = Pipeline([
('scaler', StandardScaler()), # 데이터 스케일링 (정규화)
('classifier', LogisticRegression()) # 로지스틱 회귀 모델
])
# 모델 학습
pipeline.fit(X_train, y_train)
# 예측 및 평가
accuracy = pipeline.score(X_test, y_test)
print("Pipeline Accuracy:", accuracy)
✅ Pipeline 사용 장점
- 데이터 전처리 및 모델 학습을 한 번에 수행
- 데이터 스케일링과 모델 학습을 자동으로 연결
- 새로운 데이터가 들어와도 동일한 변환 적용 가능
③ 여러 개의 전처리 단계를 포함한 Pipeline 예제
📌 결측치 처리(SimpleImputer) + 표준화(StandardScaler) + 분류 모델(RandomForestClassifier)
from sklearn.impute import SimpleImputer
from sklearn.ensemble import RandomForestClassifier
# Pipeline 생성
pipeline = Pipeline([
('imputer', SimpleImputer(strategy='mean')), # 결측치 평균 대체
('scaler', StandardScaler()), # 표준화
('classifier', RandomForestClassifier(n_estimators=100)) # 랜덤 포레스트 모델
])
# 모델 학습
pipeline.fit(X_train, y_train)
# 예측 및 평가
accuracy = pipeline.score(X_test, y_test)
print("Pipeline Accuracy with Imputer:", accuracy)
✅ 추가적인 전처리 단계를 포함하여 자동화 가능
6.2.3 모델 저장 및 로드 (joblib, pickle 활용)
머신러닝 모델은 학습 후에도 저장하여 재사용할 수 있어야 한다.
Scikit-learn에서는 joblib와 pickle을 활용하여 모델을 저장하고 불러올 수 있다.
① joblib을 활용한 모델 저장 및 불러오기
✅ joblib은 대용량 모델을 저장하는 데 최적화
import joblib
# 모델 저장
joblib.dump(pipeline, "model_pipeline.joblib")
# 모델 불러오기
loaded_model = joblib.load("model_pipeline.joblib")
# 로드한 모델로 예측 수행
accuracy = loaded_model.score(X_test, y_test)
print("Loaded Model Accuracy:", accuracy)
✅ joblib 사용 장점
- 대용량 모델 저장에 적합
- NumPy 배열을 효율적으로 저장
② pickle을 활용한 모델 저장 및 불러오기
✅ pickle은 일반적인 파이썬 객체 저장에 적합
import pickle
# 모델 저장
with open("model_pipeline.pkl", "wb") as f:
pickle.dump(pipeline, f)
# 모델 불러오기
with open("model_pipeline.pkl", "rb") as f:
loaded_model = pickle.load(f)
# 로드한 모델로 예측 수행
accuracy = loaded_model.score(X_test, y_test)
print("Loaded Model Accuracy (Pickle):", accuracy)
✅ pickle 사용 장점
- 모델뿐만 아니라 파이썬 객체(리스트, 딕셔너리 등) 저장 가능
- 소규모 모델을 간단히 저장할 때 유용
6.2.4 joblib vs pickle 비교
방법 | 장점 | 단점 | 사용 예시 |
joblib | 대용량 모델 저장 최적화 | 일반 객체 저장에는 부적합 | 대규모 머신러닝 모델 저장 |
pickle | 모든 파이썬 객체 저장 가능 | 대용량 모델 저장 비효율적 | 소규모 모델 또는 일반 객체 저장 |
⚠ 모델 크기가 크다면 joblib 사용을 권장!
결론
Scikit-learn을 활용하면 머신러닝 모델을 손쉽게 학습, 평가, 저장할 수 있다.
✅ 핵심 요약
- Pipeline → 데이터 전처리 + 모델 학습을 한 번에 처리
- joblib, pickle → 학습된 모델을 저장하고 재사용 가능
- joblib은 대용량 모델 저장에 적합, pickle은 일반 객체 저장에 적합
이러한 개념을 이해하면 머신러닝 모델을 효율적으로 관리하고 배포할 수 있다.