일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- UDF
- youtube data
- 공분산
- subdag
- airflow subdag
- grad-cam
- hadoop
- integrated gradient
- session 유지
- correlation
- Airflow
- 유튜브 API
- BigQuery
- login crawling
- tensorflow text
- API Gateway
- API
- GCP
- chatGPT
- Counterfactual Explanations
- TensorFlow
- requests
- spark udf
- gather_nd
- XAI
- top_k
- GenericGBQException
- flask
- 상관관계
- Retry
- Today
- Total
데이터과학 삼학년
Feature engineering 기초 & wide and deep model 본문
Overview
- Data collection : 1. data house에 있는 경우
2. data가 없으면 beautifulsoup, selenium 등으로 데이터 수집 가능
- data가 이미 저장되어 있는 경우
> data correction
> data processing
> clean up
> transformation
- ML : AI, ML, DL → DS
> ML은 function(모델을 의미하는)을 선택, DL은 neuralnet 선택(활성화함수 선택이 모델을 의미하는 것은 아님)
- Good enough model
> svm
> random forest
> linear & logistic regression
- 주피터에서 show contextual help 누르면 쓰고 있는 함수들 정보를 다 볼수 있음
- d3py → visualization 하기에 좋음
Turn raw data to features
- 문제 해결을 위한 domain 지식도 중요
> 이상한 데이터(컬럼 성격에 따라 최소값과 최댓값이 다를 것임) 처리
- string to number 바꾸는 것들(one-hot, embedding 등)
Compare good versus bad features
- 예측하는 것이랑 연관이 있는 feature인지 확인
> 예측할 것과 feature간의 상관관계 이용
- 예측에 쓰일 데이터가 미래에 실시간으로 쓰여져야할 데이터라면>?, 즉 예측할 시점에 수집되지 않은 데이터가 feature라면?
> 예측시간에 쓸 수 있는 데이터를 골라야함
> sign 패턴을 실시간 데이터로 쓰기는 힘들지
> 과거 데이터로 학습을 시키고, 그 feature가 예측시에 쓰일수 있는 데이터인지 확인한 다음에 적용해야함
- 숫자 데이터인지 확인 → 숫자데이터도 나타내고 있는 숫자가 의미있게 쓰일 수 있는 것인지를 확인해야함
- 카테고리형 데이터도 뉴메릭한 데이터로 바꾸어줘야함
- 적절한 feature 수?
> 최소 5개 이상의 종류를 가진 카테고리형 데이터이면 괜찮은 듯
> 5개의 다른 column이 있으면 괜찮은 듯
- feature를 선택하는데 도메인 지식이 중요
Represent features
- 카테고형 데이터 변형
- 데이터 형태에 따라 다르게 카테고리형 feature를 변형 시킬수 있음
> hash는 전체 데이터 종류 사이즈, 두번째 num_buckets은 그 수대로 임베딩하는듯(그룹핑)
- 이상한 데이터가 있을 경우 카테고리형 변수는 쓰레기로 취급해서 0으로 모든 값을 만들어 주는 방법
> missing value 처리 방법이지
Feature engineering
- 뉴메릭을 카테고리형으로 바꿔서 분석 가능
- 데이터의 capped를 정해줄수 있어(즉, 최대값을 정해주는 방법) → 클린하는 방법(아웃라이어제거 or 그값 이상이면 다 합쳐진 값 적용)
- tf.data 는 많은 데이터를 읽어오는 용도 → 분산처리를 가능하게 위함
- scaling
> min-max scaler
> standardization scaler
> robust saler
- feature engineering을 이용해서 새로운 데이터를 생성
> 조합하는 방법(x**2, x1+x2 등)
- ctrl + shift + - → 주피터 코드 cell을 분리해줌
- feature 엔지니어링 한 로직을 feature_cols에 넣어주고 모델에 넣어주면, 데이터가 들어가고 나서 내가 정한 형식에 맞게 feature를 변형시킨 다음 모델이 학습함
> 따로 전처리로 데이터를 전부 변환시키지않고 로직만 만들어 데이터를 넣을 수 있는 장점
Building Feature cross
- 아래 그림과 같은 경우, feature를 곱해주는 것으로도 이진분류를 진행할 수 있음
- feature cross는 버킷을 만들어서 분배하는 개념으로 볼 수 있음
> polynomial 개념이여~
- permutation(순열)의 개념으로 n*m개의 경우가 생김
> 복잡성을 증가시킴
Embedding from Feature crosses
- sparse data to dense data 로 바꾸는데 용이함
- 일반적으로 차원수를 정하는 방법 → 가능한 더비변수 사이즈를 4제곱근 루트 씌운 수 정도
- embedding은 성격이 비슷한 녀석끼리 벡터값이 비슷하게 만들어주는것
Wide and Deep model
- memorization & generalization
> memorization : 모든 새는 날개를 가지고 있다
> generalization : 다른 피처들을 더 살펴볼 필요 있음
- wide model : 선형모델 → 패턴과 연관(feature를 구체적으로 적용함)
- deep model : 딥러닝
- sparse data 에는 선형 모델이 조금 더 잘 작동함(딥러닝 모델보다)
- dese data 에는 deep model이 잘 작동함
- dnnlinearcombined → 컬럼(features)을 나눠서 집어 넣을 수 있음
- sparse data를 임베딩 한것도 딥러닝에 넣는데 왜 굳이 리니어한 sparse feature를 넣어야 하나?
> 펭귄같은 경우, 이런 케이스를 모델이 기억하고 있기를 원함
> memorization을 위해서 리니어한 wide 모델이 들어가게 됨
Feature preprocessing 단계를 따로 만들지 않으려면 모델에 그래프로 단계를 저장해라!!!
- model에 들어가는 feature_cols를 정해놓으면 모델이 저장되면 모델을 돌릴때 알아서 preprocess단계가 적용되어 모델에 들어가게 됨
- 그러나 tf.feature_column을 이용하여 preprocess를 하는 것은 제한적임
- 머신에서 병렬로 최적화해서 처리할 수 있는 한 방법이기 함
** feature_colunm.~ → placeholder 만들어 놓는 것이랑 같은 개념
'Machine Learning' 카테고리의 다른 글
Learning rate and Batch size (0) | 2020.01.18 |
---|---|
Regularization (0) | 2020.01.18 |
Distributed training (feat.GCP CMLE) (0) | 2020.01.12 |
Deep Neural Networks 기초 (0) | 2020.01.12 |
Linear & Logistic regression (0) | 2020.01.10 |