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 장점
    • 원스톱 ML 프레임워크
      • 데이터프레임과 SparkSQL 등을 이용해 전처리
      • 모델 빌딩
      • ML Pipeline을 통해 모델 빌딩 자동화
      • MLflow로 모델 관리하고 서빙
    • 대용량 데이터도 처리 가능
  • 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)
        • Sclaer : 숫자 필드값 범위 표준화
          • 숫자 필드 값 범위를 특정 범위로 변화하는 것. 피쳐 스케일링 또는 정규화라 부름
          • sklearn.preprocessing 모듈 아래 두 개 스케일러 존재 StandardScaler, MinMaxScaler
          • Spark MLib의 경우 pyspark.ml.feature 모듈 밑 두 개 스케일러 존재
            • StandardScaler
              • 각 값에서 평균을 빼고 이를 표준편차로 나눔. 값의 분포가 정규분포를 따르는 경우 사용
            • MinMaxScaler
              • 모든 값을 0과 1 사이로 스케일. 각 값에서 최소값을 빼고 (최대값 - 최소값)으로 나눔
        • Imputer : 값이 없는 필드 채우기
          • 값이 존재하지 않는 레코드들이 존재하는 필드들의 경우 기본값을 정해 채우는 것. Impute한다 부름.
          • sklearn.preprocessing 모듈 아래 존재. Imputer
          • Spark MLib의 경우 pyspark.ml.feature 모듈 밑에 존재
            • Imputer

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
      • 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

+ Recent posts