일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- AWS
- HTML
- SQL
- 데이터 엔지니어
- 팀 프로젝트
- django
- airflow
- Tableau
- 데이터 시각화
- 코테 연습
- Spark
- 데브코스
- Selenium
- cloud platform
- 슈퍼셋
- Snowflake
- Til
- PCCP
- Kafka
- superset
- 코딩 테스트
- beuatifulsoup
- 코딩테스트
- Today
- Total
주니어 데이터 엔지니어 우솨's 개발일지
데이터 엔지니어링 74일차 TIL 본문
학습 내용
SparkML 제공 알고리즘
- Classification :
- Logistic regression
- Decision tree
- Random forest
- Gradient-boosted tree
- Regression :
- Linear regression
- Decision tree
- Random forest
- Gradien-boosted tree
- Clustering :
- K-means
- LDA(Latent Dirichlet Allocation)
- GMM(Gaussian Mixture Model)
- Collaborative Filtering :
- 명시적인 피드백 : 리뷰 평점
- 암묵적인 피드백 : 클릭, 구매 등
- Dimensionality Reduction 등
- spark.ml 사용할 것!
Spark ML 기반 모델 빌딩의 기본 구조
: 여느 라이브러리를 사용한 모델 빌딩과 크게 다르지 않다.
- 트레이닝셋 전처리, 모델 빌딩, 모델 검증(confusion matrix)
- Scikit-Learn과 비교의 비교
- 가장 큰 차이점은 결국 데이터의 크기
- Scikit-Learn은 하나의 컴퓨터에서 돌아가는 반면 Spark MLlib는 여러 서버 위에서 모델 빌딩
- 트레이닝셋의 크기가 크면 전처리와 모델 빌딩에 있어 Spark이 큰 장점을 가진다.
- Spark는 ML 파이프라인을 통해 모델 개발의 반복을 쉽게 해준다.
Spark ML 피쳐 변환
: 피쳐 값들을 모델 훈련에 적합한 형태로 바꾸는 것
- 크게 두가지 존재 : Feature Extractor와 Feature Transformer
- Feature Transformer (숫자 필드 값의 범위 표준화)
- 텍스트 필드를 숫자 필드로 변환 해야함 (피쳐값들은 숫자 필드여야 한다!)
- 숫자 값들의 범위를 특정범위(0부터 1)로 변환 -- 정규화(Normalization)
- 비어있는 필드 값을 채워야한다.(Imputer사용)
- Feature Extractor (기존 피쳐에서 새로운 피쳐를 추출)
- TF-IDF, Word2Vec,... 등으로 변경
- 많은 경우 텍스트 데이터를 어떤 형태로 인코딩하는 것이 여기에 해당
StringIndexer
: 텍스트 카테고리를 숫자로 변환
- ex) ["Red", "Blue", "Yellow"] => [0,1,2]
- Scikit-Learn은 sklearn.preprocessing 모듈 아래 여러 인코더 존재
- OneHotEncoder, LabelEncoder, OrdianlEncoder 등
- Spark MLlib의 경우 pyspark.ml.feature 모듈 밑에 두 개의 인코더 존재
- StringIndexer, OneHotEncdoer
- Indexer 모델을 만들고 fit한 후, Indexer 모델로 데이터프레임을 transform
Scaler
: 숫자 필드 값의 범위 표준화
- 숫자 필드 값의 범위를 특정 범위(ex : 0~1)로 변환
- 피쳐 스케일링(Feature Scaling) 혹은 정규화(Normalization)이라 부름
- ex) [-20, 100, 40, 25, 15] => [0, 1, 0.5, 0.375, 0.125]
- Scikit-Learn은 sklearn.preprocessing 모듈 아래 두 개 인코더 존재
- StandardScaler, MinMaxScaler
- Spark MLlib의 경우 pyspark.ml.feature 모듈 밑에 두 개의 인코더 존재
- StandardScaler, MinMaxScaler
- Scaler 모델을 만들고 fit한 후, Indexer 모델로 데이터프레임을 transform
- StandardScaler : 각 값에서 평균을 빼고 이를 표준편차로 나눔
- 값의 분포가 정규분포를 따르는 경우 사용
- MinMaxScaler : 모든값을 0과 1사이로 스케일
- 각 값에서 최소값을 빼고 (최대값-최소값)으로 나눈다.
Imputer
: 값이 없는 필드 채우기
- 값이 존재하지 않는 레코드들이 존재하는 들드들의 경우 기본값을 정해서 채우는 것. Impute한다고 부름.
- Scikit-Learn은 sklearn.preprocessing 모듈 아래 존재
- Imputer
- Spark MLlib의 경우 pyspark.ml.feature 모듈 밑에 존재
- Imputer
- Imputer 모델을 만들고 fit한 후, Indexer 모델로 데이터프레임을 transform
ML 파이프라인
: 머신러닝 개발과 테스트를 쉽게 해주는 기능 (데이터 프레임 기반)
- 머신러닝 알고리즘에 관계없이 일관된 형태의 API를 사용하여 모델링이 가능
- ML 모델개발과 테스트를 반복가능하게 해줌
- 데이터프레임, Transformer, Estimator, Parameter 4가지 요소로 구성됨
ML 파이프라인의 구성요소 : 데이터 프레임
- ML 파이프라인에서는 데이터프레임이 기본 데이터 포맷이다.
- 기본적으로 CSV, JSON, Parquet, JDBC(관계형 데이터베이스)를 지원
- ML 파이프라인에서는 다음 2가지의 새로운 데이터소스를 지원
- 이미지 데이터소스
- jpeg, png 등의 이미지들을 지정된 디렉토리에서 로드
- LIBSVM 데이터소스
- label과 features 두 개의 컬럼으로 구성되는 머신러닝 트레이닝셋 포맷
- features 컬럼은 벡터 형태의 구조를 가진다.
ML 파이프라인의 구성요소 : Transformer
: 입력 데이터프레임을 다른 데이터프레임으로 변환한다.
- 하나 이상의 새로운 칼럼을 추가
- 2 종류의 Transformer가 존재하며 transform이 메인 함수
- Feature Transformer와 Learning Model
- Feature Transformer
- 입력 데이터프레임의 컬럼으로부터 새로운 컬럼을 만들어내 이를 추가한 새로운 데이터프레임을 출력으로 내줌. - 보통 피쳐 엔지니어링에 사용
- Imputer : 기본값 지정에 사용
- StringIndexer : categorical 정보를 숫자 정보로 변환
- VectorAssembler : 주어진 컬럼들을 통합하여 하나의 벡터 컬럼으로 변환
- Learning Model
- 머신러닝 모델에 해당
- 피쳐 데이터프레임을 입력으로 받아 예측값이 새로운 컬럼으로 포함된 데이터프레임을 출력으로 내줌 : prediction, probability
ML 파이프라인의 구성요소 : Learning Model
- 머신러닝 모델에 해당하여 transform 함수로 동작
ML 파이프라인의 구성요소 : Estimator
- 머신러닝 알고리즘에 해당하며 fit이 메인 함수이다.
- 트레이닝셋 데이터프레임을 입력으로 받아서 머신러닝 모델(Transformer)를 만들어낸다.
- 입력 : 데이터프레임(트레이닝 셋)
- 출력 : 머신러닝 모델
- ML Pipeline도 Estimator이다.
- Estimator는 저장과 읽기 함수를 제공한다.
- save와 load를 통해 저장 및 로드가 가능하다.
ML 파이프라인의 구성요소 : Parameter
- Transformer와 Estimator의 공통 API로 다양한 인자를 적용해준다.
- Param : 하나의 이름과 값
- ParamMap : Param 리스트
- 파라미터의 예
- 훈련 반복수(iteration) 지정을 위해 setMaxIter()를 사용
- ParamMap(Ir.maxIter -> 10)
- 파라미터는 fit (Estimator) 혹은 transform(Transformer)에 인자로 지정이 가능하다.
ML Pipeline
: 하나 이상의 Transformer와 Estimator가 연결된 모델링 웍플로우
- 입력은 데이터프레임, 출력은 머신러닝 모델
- ML Pipeline 그자체도 Estimator이다.
- 따라서 ML Pipeline의 실행은 fit 함수의 호출로 시작한다.
- 저장후 나중에 다시 로딩하는 것이 가능(Persistence)
- 한번 파이프라인을 만들면 반복 모델빌딩이 쉬워진다.
'데브코스' 카테고리의 다른 글
데이터 엔지니어링 75일차 TIL (0) | 2024.07.13 |
---|---|
데이터 엔지니어링 73일차 TIL (1) | 2024.07.10 |
데이터 엔지니어링 72일차 TIL (0) | 2024.07.09 |
데이터 엔지니어링 71일차 TIL (0) | 2024.07.08 |
데이터 엔지니어링 70일차 TIL (0) | 2024.07.06 |