모델 빌딩과 관련된 흔한 문제들
- 트레이닝 셋의 관리가 안됨
- 모델 훈련 방법이 기록이 안됨
- 어떤 트레이닝 셋을 사용했는지?
- 어떤 피쳐들을 사용했는지?
- 하이퍼 파라미터는 무엇을 사용했는지?
- 모델 훈련에 많은 시간 소요
- 모델 훈련이 자동화가 안된 경우 매번 각 스텝들을 노트북 등에서 일일히 수행
- 에러가 발생할 여지가 많음 (특정 스텝을 까먹거나 조금 다른 방식 적용)
ML Pipeline의 등장
- 모델 훈련 방법 기록, 모델 훈련 시간 소요등의 문제를 해결하기 위해 등장
- 자동화를 통해 에러 소지를 줄이고 반복을 빠르게 가능하게 해줌
Spark ML 관련 개념 정리
- ML 파이프라인이란?
- 데이터 과학자가 머신러닝 개발과 테스트를 쉽게 해주는 기능(데이터 프레임 기반)
- 머신러닝 알고리즘에 관계없이 일관된 형태의 API를 사용하여 모델링이 가능
- ML 모델개발과 테스트를 반복가능해짐
- 뒤에 설명할 Transformer와 Estimator로 구성됨
- 4개의 요소로 구성
- 데이터프레임
- Transformer
- Estimator
- Parameter
ML 파이프라인의 구성 요소 : 데이터프레임
- ML 파이프라인에서는 데이터프레임이 기본 데이터 포맷
- 기본적으로 CSV, JSON, Parquet, JDBC(관계형 데이터베이스)를 지원
- ML 파이프라인에서 다음 2가지의 새로운 데이터소스를 지원
- 이미지 데이터소스
- jpeg, png 등의 이미지들을 지정된 디렉토리에서 로드
- LIBSVM 데이터소스
- label과 features 두 개의 컬럼으로 구성되는 트레이닝셋 포맷
- features 컬럼은 벡터 형태의 구조를 가짐
- 이미지 데이터소스
ML 파이프라인의 구성 요소 : Transformer (1)
- 입력 데이터프레임을 다른 데이터프레임으로 변환
- 하나 이상의 새로운 컬럼을 추가
- 2 종류의 Transformer가 존재하며 transform이 메인 함수
- Feature Transformer와 Learning Model
ML 파이프라인의 구성 요소 : Transformer (2)
- Feature Transformer
- 입력 데이터프레임의 컬럼으로부터 새로운 컬럼을 만들어내 이를 추가한 새로운 데이터프레임을 출력으로 내줌. 보통 피쳐 엔지니어링을 하는데 사용
- 예) Imputer, StringIndexer, VectorAssembler
- Imputer는 기본값 지정에 사용
- StringIndexer는 categorical 정보를 숫자 정보로 변환
- VectorAssembler : 주어진 컬럼들을 통합하여 하나의 벡터 컬럼으로 변환
ML 파이프라인의 구성 요소 : Transformer (3)
- Learning Model
- 머신러닝 모델에 해당
- 피처 데이터프레임을 입력으로 받아 예측값이 새로운 컬럼으로 포함된 데이터프레임을 출력으로 내줌 : prediction, probability
ML 파이프라인의 구성 요소 : Estimator (1)
- 머신러닝 알고리즘에 해당. fit이 메인 함수
- 트레이닝셋 데이터프레임을 입력으로 받아서 머신러닝 모델(Transformer)을 만들어냄
- 입력 : 데이터프레임 (트레이닝 셋)
- 출력 : 머신러닝 모델
- 예를 들어 LogisticRegression은 Estimator이고 LogisticRegression.fit()를 호출하면 머신러닝 모델(Transformer)을 만들어냄
- 트레이닝셋 데이터프레임을 입력으로 받아서 머신러닝 모델(Transformer)을 만들어냄
ML 파이프라인의 구성 요소 : Estimator (2)
- ML Pipeline도 Estimator
- Estimator는 저장과 읽기 함수 제공
- 즉 모델과 ML Pipeline을 저장했다가 나중에 다시 읽을 수 있음
- save와 load
- 즉 모델과 ML Pipeline을 저장했다가 나중에 다시 읽을 수 있음
ML 파이프라인의 구성 요소 : Parameter
- Transformer와 Estimator의 공통 API로 다양한 인자를 적용해줌
- 두 종류의 파라미터가 존재 :
- Param(하나의 이름과 값)
- ParamMap(Param 리스트)
- 파라미터의 예)
- 훈련 반복수 (iteration) 지정을 위해 setMaxIter()를 사용
- ParamMap(lr.maxIter -> 10)
- 파라미터는 fit(Estimator) 혹은 transform(Transformer)에 인자로 지정 가능
ML 파이프라인
- 하나 이상의 Transformer와 Estimator가 연결된 모델링 워크플로우
- 입력은 데이터프레임
- 출력은 머신러닝 모델
- ML Pipeline 그 자체도 Estimator
- 따라서 ML Pipeline의 실행은 fit 함수의 호출로 시작
- 저장했다가 나중에 다시 로딩하는 것이 가능(Persistence)
- 한번 파이프라인을 만들면 반복 모델 빌딩이 쉬워짐
'데이터 엔지니어링 > Spark' 카테고리의 다른 글
32. Spark 마무리, 다음 스텝 (2) | 2023.08.25 |
---|---|
31. Spark EMR, Zepplin (1) | 2023.08.25 |
29. SparkML(Classification, 타이타닉 생존 예측 모델) (0) | 2023.08.25 |
28. Spark ML(Regression, 보스턴 주택값 예측 모델) (0) | 2023.08.23 |
27. SPARK ML 소개 (0) | 2023.08.23 |