기술 노트/Apache Spark

Apache Spark ML 파이프라인과 하이퍼 파라미터 튜닝 - 모델 학습 최적화

anothel 2024. 11. 17. 23:36

1. Spark의 머신러닝 파이프라인 구축

Spark MLlib은 대규모 데이터 환경에서의 머신러닝 모델 구축을 돕는 도구로, 데이터 전처리부터 모델 학습과 평가까지 일관성 있는 파이프라인을 구성할 수 있다. 파이프라인을 사용하면 데이터 전처리와 학습 단계를 통합하여 관리하기 편리하다.

파이프라인(Pipeline) 설정과 구성 요소

파이프라인은 여러 단계로 구성되어 있으며, 각 단계에서 데이터 전처리, 피처 엔지니어링, 모델 학습을 순차적으로 수행할 수 있다. Spark에서는 Pipeline 객체에 각 작업 단계를 정의하고 이를 순차적으로 연결한다.

from pyspark.ml import Pipeline
from pyspark.ml.feature import StringIndexer, StandardScaler
from pyspark.ml.classification import LogisticRegression

# StringIndexer: 범주형 데이터를 수치형으로 변환
indexer = StringIndexer(inputCol="category", outputCol="categoryIndex")

# StandardScaler: 데이터를 표준화하여 분포 조정
scaler = StandardScaler(inputCol="features", outputCol="scaledFeatures")

# LogisticRegression: 모델 정의
lr = LogisticRegression(featuresCol="scaledFeatures", labelCol="categoryIndex")

# 파이프라인 설정
pipeline = Pipeline(stages=[indexer, scaler, lr])

위의 예시에서는 StringIndexer로 범주형 데이터를 인코딩하고, 표준 스케일링으로 데이터를 정규화한 후, 로지스틱 회귀 모델을 사용해 학습하는 파이프라인을 구축한다.


2. 교차 검증과 하이퍼 파라미터 튜닝

교차 검증과 하이퍼 파라미터 튜닝은 모델 성능을 최적화하기 위해 중요한 단계다. Spark는 CrossValidator와 ParamGridBuilder를 사용해 자동으로 다양한 하이퍼 파라미터 조합을 시도하고 최적의 조합을 찾아준다.

CrossValidator와 ParamGridBuilder 설정

ParamGridBuilder는 하이퍼 파라미터의 후보 값을 지정해 파라미터 그리드를 생성하며, CrossValidator는 이 그리드를 기반으로 교차 검증을 수행하여 최적의 파라미터 조합을 찾아준다.

from pyspark.ml.tuning import ParamGridBuilder, CrossValidator
from pyspark.ml.evaluation import BinaryClassificationEvaluator

# 하이퍼 파라미터 그리드 생성
paramGrid = ParamGridBuilder() \
    .addGrid(lr.regParam, [0.1, 0.01]) \
    .build()

# 교차 검증 설정
crossval = CrossValidator(estimator=pipeline,
                          estimatorParamMaps=paramGrid,
                          evaluator=BinaryClassificationEvaluator(),
                          numFolds=3)

위 예제에서는 로지스틱 회귀 모델의 규제 파라미터 regParam에 대해 0.1과 0.01 값을 시도하도록 설정하고, 3-Fold 교차 검증을 수행한다.

 

TrainValidationSplit을 통한 성능 최적화

TrainValidationSplit은 전체 데이터셋을 교차 검증 대신 일정 비율로 나누어 검증하는 방식이다. 매우 큰 데이터셋에서 계산 비용을 줄이는 데 효과적이다.

from pyspark.ml.tuning import TrainValidationSplit

# TrainValidationSplit 설정
trainValidationSplit = TrainValidationSplit(estimator=pipeline,
                                            estimatorParamMaps=paramGrid,
                                            evaluator=BinaryClassificationEvaluator(),
                                            trainRatio=0.8)

이 방식은 전체 데이터를 사용하지 않고도 모델 성능을 평가하고 최적의 하이퍼 파라미터를 찾을 수 있다.


3. MLFlow Tracking 개요

MLFlow는 머신러닝 실험을 관리하고, 하이퍼 파라미터, 모델 성능, 결과 등을 체계적으로 추적할 수 있게 해준다. Spark와 함께 사용하면 실험 관리를 한층 더 효율화할 수 있다.

MLFlow는 다음과 같은 기능을 제공한다.

  • 실험 관리
    • 각 실험에서 사용된 하이퍼 파라미터, 메트릭, 모델을 관리
  • 모델 관리
    • 학습된 모델의 버전 관리를 통해 모델의 배포와 롤백이 용이
  • 추적
    • 학습 과정에서의 성능 지표와 로그를 기록해 다양한 실험을 체계적으로 관리

MLFlow는 특히 Spark와 통합하여 대규모 데이터 실험을 쉽게 관리하고 모니터링하는 데 유용하다.


4. 데이터 전처리와 인코딩 기법

데이터 전처리는 모델 성능에 중요한 영향을 미친다. Spark ML은 다양한 전처리 기법을 제공하여 데이터의 특성을 조정하고, 학습 효율을 높인다.

레이블 인코딩과 원-핫 인코딩

레이블 인코딩은 StringIndexer를 사용해 범주형 데이터를 수치형으로 변환하며, 원-핫 인코딩은 OneHotEncoder를 사용해 각 범주를 고유한 벡터로 변환한다.

from pyspark.ml.feature import OneHotEncoder

# 범주형 데이터를 원-핫 인코딩으로 변환
encoder = OneHotEncoder(inputCol="categoryIndex", outputCol="categoryVec")

레이블 인코딩을 거친 데이터를 원-핫 인코딩하여 모델 학습에 적합한 형태로 조정할 수 있다.

스케일링과 표준화

StandardScaler와 MinMaxScaler는 모델의 성능을 높이기 위해 데이터 분포를 조정해준다. StandardScaler는 표준화를 통해 평균 0, 분산 1로 조정하고, MinMaxScaler는 최소값과 최대값을 기반으로 스케일링을 수행한다.

from pyspark.ml.feature import MinMaxScaler

# MinMaxScaler를 통해 데이터 정규화
scaler = MinMaxScaler(inputCol="features", outputCol="scaledFeatures")

스케일링과 표준화를 통해 학습 속도를 개선하고, 모델이 데이터를 더 잘 학습할 수 있도록 돕는다.

728x90