Spark MLib 소개
- 머신러닝 관련 다양한 알고리즘, 유틸리티로 구성된 라이브러리
- Classfication, Regression, Clustering, Collaborative Filtering(명시적 피드백(ex)리뷰 평점), 암묵적 피드백(ex)클릭, 구매 등등) 기반), Dimensionality, Reduction
- 아직 딥러닝 지원은 미약
- 여기엔 RDD 기반과 데이터프레임 기반 두 버전 존재
- spark.mlib vs spark.ml
- mlib가 RDD 기반. ml은 데이터프레임 기반
- mlib는 RDD 위에서 동작하는 이전 라이브러리. 더 이상 업데이트가 안됨. 항상 spark.ml을 사용할 것! (import pyspark.ml(o) import pyspark.mlib(x))
- spark.mlib vs spark.ml
- Spark MLib 장점
- 원스톱 ML 프레임워크
- 데이터프레임과 SparkSQL 등을 이용해 전처리
- 모델 빌딩
- ML Pipeline을 통해 모델 빌딩 자동화
- MLflow로 모델 관리하고 서빙
- 대용량 데이터도 처리 가능
- 원스톱 ML 프레임워크
- MLflow
- 모델 관리와 서빙을 위한 Ops(Operations) 관련 기능 제공
- Spark MLib 기반 모델 빌딩 기본 구조
- 여느 라이브러리 사용 모델 빌딩과 크게 다르지 않음
- 트레이닝셋 전처리
- 모델 빌딩
- 모델 검증
- Scikit Learn과 비교했을 때 장점
- 차이점은 데이터 크기
- 트레이닝셋 크기가 크면 전처리와 모델 빌딩에 있어 Spark가 큰 장점을 가짐
- Spark는 ML 파이프라인을 통해 모델 개발 반복을 쉽게 해줌
- 여느 라이브러리 사용 모델 빌딩과 크게 다르지 않음
Spark MLib 피쳐 변환
- 피쳐 추출과 변환
- 피쳐 값들을 모델 훈련에 적합한 형태로 바꾸는 것을 지칭
- 크게 두 가지 존재
- Feature Extractor
- 기존 피쳐에서 새로운 피쳐 추출
- ex) TF-IDF, Word2Vec
- Feature Transformer
- 피쳐 값들은 숫자 필드여야 함. Categorical Data -> Numerical Data
- 숫자 필드 값 범위 표준화 Feature Scaling or Normalization
- 비어있는 필드들 값을 어떻게 채울까? Imputer
- StringIndexer : 텍스트 카테고리를 숫자로 변환
- sklearn.preprocessing 모듈에 다음과 같은 인코더 존재
- OneHotEncoder, LabelEncoder, OrdinalEncoder, ...
- Spark MLib 경우 pyspark.ml.feature 모듈 밑에 두 개의 인코더 존재
- StringIndexer, OneHotEncoder
-
from pyspark.ml.feature import StringIndexer gender_indexer = StringIndexer(inputCol = 'Gender', outputCol = 'GenderIncdexed') gender_indexer_model = gender_indexer.fit(final_data) final_data_with_transformed_gender = gender_indexer_model.transform(final_data)
- sklearn.preprocessing 모듈에 다음과 같은 인코더 존재
- Sclaer : 숫자 필드값 범위 표준화
- 숫자 필드 값 범위를 특정 범위로 변화하는 것. 피쳐 스케일링 또는 정규화라 부름
- sklearn.preprocessing 모듈 아래 두 개 스케일러 존재 StandardScaler, MinMaxScaler
- Spark MLib의 경우 pyspark.ml.feature 모듈 밑 두 개 스케일러 존재
- StandardScaler
- 각 값에서 평균을 빼고 이를 표준편차로 나눔. 값의 분포가 정규분포를 따르는 경우 사용
- MinMaxScaler
- 모든 값을 0과 1 사이로 스케일. 각 값에서 최소값을 빼고 (최대값 - 최소값)으로 나눔
- StandardScaler
- Imputer : 값이 없는 필드 채우기
- 값이 존재하지 않는 레코드들이 존재하는 필드들의 경우 기본값을 정해 채우는 것. Impute한다 부름.
- sklearn.preprocessing 모듈 아래 존재. Imputer
- Spark MLib의 경우 pyspark.ml.feature 모듈 밑에 존재
- Imputer
- Feature Extractor
Spark MLib ML Pipeline 살펴보기
- 모델 빌딩 관련 문제들
- 트레이닝 셋 관리가 안됨
- 모델 훈련 방법이 기록이 안 됨 (ML Pipeline을 통해 해결)
- 어떤 트레이닝 셋을 사용했는지?
- 어떤 피쳐들을 썼는가?
- 하이퍼 파라미터는 무엇을 사용했는가?
- 모델 훈련에 많은 시간 소요 (ML Pipeline을 통해 해결)
- 모델 훈련이 자동화가 안 된 경우 각 스텝들을 노트북 등 일일히 수행
- 에러 발생 여지가 많음. 특정 스텝을 까먹거나 다른 방식을 적용하는 경우...
- ML 파이프라인이란?
- 데이터 과학자가 머신러닝 개발과 테스트를 빠르게 해주는 기능
- 머신러닝 알고리즘 관계 없이 일관된 형태의 API를 사용하여 모델링 가능
- ML 모델개발과 테스트를 반복 가능하게 해줌.
- 구성 요소
- 데이터프레임
- 기본적으로 CSV, JSON, Parquet, JDBC(관계형 데이터베이스) 지원
- 다음 2가지 새로운 데이터 소스 지원
- 이미지 데이터 소스
- LIBSVM 데이터 소스
- label과 features 두 개 컬럼으로 구성된 머신러닝 트레이닝셋 포맷
- features 컬럼은 벡터 형태 구조를 가짐
- Transformer
- 입력 데이터프레임을 다른 데이터프레임으로 변환
- 하나 이상의 새로운 컬럼 추가
- 두 종류의 Transformer가 존재하며 transform이 메인 함수
- Feature Transformer
- 입력 데이터프레임의 컬럼으로부터 새로운 컬럼을 만들어내 이를 추가한 새로운 데이터프레임을 출력으로 내줌. 보통 피쳐 엔지니어링을 하는데 사용
- ex) Imputer, StringIndexer, VectorAssembler
- Learning Model
- 머신러닝 모델에 해당
- 피쳐 데이터프레임을 입력으로 받아 예측값이 새로운 컬럼으로 포함된 데이터프레임을 출력으로 내줌. : prediction, probability
- Feature Transformer
- 입력 데이터프레임을 다른 데이터프레임으로 변환
- Estimator
- 머신러닝 알고리즘에 해당. fit이 메인 함수
- 모델 정보를 저장하고 읽는 함수 제공. save와 load
- Parameter
- Transformer와 Estimator의 공통 API.
- 두 종류의 파라미터 존재
- Param(하나의 이름과 값)
- ParamMap (Param 리스트)
- 데이터프레임
'AI > KDT 인공지능' 카테고리의 다른 글
[07/28] NLP : 언어 모델 (0) | 2021.07.28 |
---|---|
[07/27] NLP : 텍스트 전처리 (0) | 2021.07.28 |
[07/21] Spark 2 (0) | 2021.07.21 |
[07/20] Spark (0) | 2021.07.20 |
[07/19] 12주차 강의 개요 (0) | 2021.07.19 |