Spark & Hadoop/SparkML

[SparkML] Spark ML Pipeline (DataFrame, Transformer, Estimator, Parameter)

YSY^ 2023. 10. 14. 21:38

모델 빌딩과 관련된 문제들

  • 트레이닝 셋의 관리가 안됨
  • 모델 훈련 방법이 기록이 안됨
    • 어떤 트레이닝 셋을 사용했는지?
    • 어떤 피쳐들을 사용했는지?
    • 하이퍼 파라미터는 무엇을 사용했는지?
  • 모델 훈련에 많은 시간 소요
    • 모델 훈련이 자동화가 안된 경우 매번 각 스텝들을 노트북 등에서 일일히 수행
    • 에러가 발생할 여지가 많음 (특정 스텝을 까먹거나 조금 다른 방식 적용)

 

ML Pipeline

  • 데이터 과학자가 머신러닝 개발과 테스트를 쉽게 해주는 기능 (데이터 프레임 기반)
  • 머신러닝 알고리즘에 관계없이 일관된 형태의 API를 사용하여 모델링이 가능 
  • ML 모델개발과 테스트를 반복가능해줌
  • 4개 요소로 구성 : DataFrame,Transformer, Estimator, Parameter
  • 모델 훈련 방법이 기록이 안되는 문제와 모델 훈련에 많은 시간 소요되는 문제를 해결
  • 자동화를 통해 에러 소지를 줄이고 반복을 빠르게 가능하게 해줌

DataFrame (구성요소 1)

  • ML 파이프라인에서는 데이터프레임이 기본 데이터 포맷
  • 기본적으로 CSV, JSON, Parquet, JDBC(관계형 데이터베이스)를 지원
  • ML 파이프라인에서 다음 2가지의 새로운 데이터소스를 지원
    • 이미지 데이터소스
      • jpeg, png 등의 이미지들을 지정된 디렉토리에서 로드
    • LIBSVM 데이터소스
      • label과 features 두 개의 컬럼으로 구성되는 머신러닝 트레이닝셋 포맷
      • features 컬럼은 벡터 형태의 구조를 가짐

 

Transformer (구성요소 2)

  • 입력 데이터프레임을 다른 데이터프레임으로 변환
    • 하나 이상의 새로운 컬럼을 추가
  • 2 종류의 Transformer가 존재하며 transform이 메인 함수
  • Feature Transformer
    • 입력 데이터프레임의 컬럼으로부터 새로운 컬럼을 만들어내 이를 추가한 새로운 데이터프레임을 출력으로 내줌. 보통 피쳐 엔지니어링을 하는데 사용
    • 예) Imputer, StringIndexer, VectorAssembler
      • Imputer는 기본값 지정에 사용
      • StringIndexer는 categorical 정보를 숫자 정보로 변환
      • VectorAssembler: 주어진 컬럼들을 통합하여 하나의 벡터 컬럼으로 변환
    • Transform 함수

  • Learning Model
    • 머신러닝 모델에 해당, 역시 transform 함수로 동작
    • 피쳐 데이터프레임을 입력으로 받아 예측값이 새로운 컬럼으로 포함된 데이터프레임을 출력으로 내줌: prediction, probability

Estimator (구성요소 3)

  • 머신러닝 알고리즘에 해당. fit이 메인 함수
  • 트레이닝셋 데이터프레임을 입력으로 받아서 머신러닝 모델(Transformer)을 만들어냄
    • 입력: 데이터프레임 (트레이닝 셋)
    • 출력: 머신러닝 모델
  • 예를 들어 LogisticRegression은 Estimator이고 LogisticRegression.fit()를 호출하면 머신 러닝 모델(Transformer)을 만들어냄
  • ML Pipeline도 Estimator
  • Estimator는 저장과 읽기 함수 제공
  • 즉 모델과 ML Pipeline을 저장했다가 나중에 다시 읽을 수 있음
    • save와 load

Parameter (구성요소 4)

  • Transformer와 Estimator의 공통 API로 다양한 인자를 적용해줌
  • 두 종류의 파라미터가 존재 : Param(하나의 이름과 값), ParamMap (Param 리스트)
  • 파라미터의 예)
    • 훈련 반복수 (iteration) 지정을 위해 setMaxIter()를 사용
    • ParamMap(lr.maxIter -> 10)
  • 파라미터는 fit (Estimator) 혹은 transform (Transformer)에 인자로 지정 가능

위 포스팅은 [파이썬으로 해보는 Spark 프로그래밍 with 프로그래머스] 강의를 듣고 정리한 내용입니다

728x90
반응형