2018년 8월 6일 월요일

[GCP] How to use Google Big Query ML



이번 포스트는 Big Query ML을 뜯어 보고자 한다.

bigquery에 대한 이미지 검색결과

Bigquery ML을 위해서는 아래와 같이 2가지 Step을 거친다. 

1. Model Creation (모델 생성)
Bigquery ML의 모델을 생성 하는 것은 익히 알고 있는 Create 구문과 비슷하며, Model 생성에 필요한 Option Parameter는 {Key = Value}의 형태로 사용하면 된다. 


CREATE MODEL | CREATE MODEL IF NOT EXISTS  | CREATE OR REPLACE MODEL ] model_name       
OPTIONS (
                       [Options..]
)
AS 
[SQL_Statement]


1.1 Options 

NAME
VALUE
Details
Example
model_type
linear_reg
logistic_reg

'linear_reg'는 linear regression model을 생성하는데 사용하는 Option이고, 'logistic_reg' logistic regression model을 생성하는데 사용한다.
해당 Option은 필수로 입력 해야 한다.
model_type=‘linear_reg’
model_type=‘logistic_reg’
input_label_cols
STRING
학습에 이용되는 Label 컬럼의 이름을 배열로 열거 한다배열이라 해도 하나의 컬럼일 경우 하나의 Label 컬럼을 명시   있다만약 Option 지정되지 않은 경우 Query 하는 Dataset 컬럼  , “label”이라는 이름이  컬럼의 경우 이것을 하나의 input_label 인식한다 마저 없다면모델 생성은 실패한다. 
Linear Regression 모델의 Label column 실제 수치 Measure (숫자값)으로 하고, Logistics Regression 경우 Cardinality 낮은 컬럼을 대상으로 설정 하도록 한다. 
inupt_label_cols=[‘col1’,’col2’]
l1_reg
FLOAT64
Model L1 정규화를 진행여기서 말하는 정규화는 Model 가중치를  조절 하여모델 접합성을 향상 시킨다. 
기본값은 0. 
l1_reg=0
l2_reg
FLOAT64
Model L2 정규화를 진행여기서 말하는 정규화는 Model 가중치를  조절 하여모델 접합성을 향상 시킨다. 
기본값은 0. 
l2_reg=0
max_iterations
INT64
최대 반복 학습 횟수 
기본값은 20
max_iterations=20
learn_rate_strategy
line_search
constant
Training 동안 특정 Learning rate(학습률) 선정함에 있어전략을 선택한다. 2가지 Option 선택할  있다기본 값은 ‘line_search’
line_search Option 학습 속도를 늦추고 처리되는 바이트 수를 늘리지 지정된 초기 학습 속도가  높더라도 일반적으로 수렴된다는 점에서 트레이드 오프가   있다  learn_rate_stretegy Option 대해 설정 하지 않거나 line_search 경우, is_init_learn_rate값을 통해 ml.learn_info 나타나는 learn_rate 값을 두배로 설정 하길 Recommand 한다최적의 초기 learning rate 모델 마다 다르므로이점을 확일  필요가 있다. 
learn_rate_strategy=‘line_search’
learn_rate_strategy=‘constant’
learn_rate
FLOAT64
learn_rate_strategy Option constant 경우 경사 하강법(gradient descent) learning rate 설정 한다만약, learn_rate_strategy Option line_search 경우 오류를 return 한다기본 값은 0.1이다. 
learn_rate_strategy ‘constant’ 경우 에만 사용하는 Option이다. 
If learn_rate_strategy=‘constant’
then 
learn_rate=0.1 
early_stop
BOOL
relative loss improvement(상대적 손실 개선) min_rel_progress 미만인  번째 반복 이후에 학습이 중지되어야 함을 나타낸다기본값은 ture
early_stop=ture
min_rel_progress
FLOAT64
The minimum relative loss improvement necessary to continue training when early_stop is set to true. For example, a value of 0.01 specifies that each iteration must reduce the loss by 1% for training to continue. The default value is 0.01.

data_split_method
auto_split
random
custom
seq
no_split
입력 데이터에 대해 Training Evaluation dataset 나누는 방법에 대해 나타낸다여기서 Training data Model 학습(training)시키는 데이터를 나타내고, Evaluation Data set training   early stop  overfitting 피하기 위해 Training Model 검증의 용도로 사용된다기본값은 auto_split이다. 
auto_split : Training data Evaluation data 자동으로 분할 해주는 Option이다. 
random :  그대로 Dataset 임의적으로 나눈다. (다른 Training 실시 하면서로 다른 Split 결과가 나타난다.)
custom : BOOL이란 이름으로 사용자가 컬럼을 만들어 Training Data Evaluation Data 분할 한다여기서 컬럼의 값이 ‘true’ 경우 evaluation data 사용하고 ‘false’ 경우 training data 사용 한다. 
seq : 사용자가 제공한 Column 순차적으로 나눈다이때 순차적으로 사용   있는 Column NUMERIC, STRING, TIMESTAMP이다나머지 Row(Null 포함한 모든 ) Evaluation data 활용된다. 
no_split : 모든 데이터를 Training data  사용한다. 
만약, data_split_method Option 명시 하지 않으면해당 Option auto_split으로 수행되며 auto_split 아래와 같은 순서로 진행 된다. 
     1. 입력 데이터가 500 이하라면모든 데이터를 Training Data 활용 한다. 
     2. 입력 데이터가 500개에서 50000 사이면 20% 비율을 Evaluation Data 활용한다. 
     3. 50000 이상의 입력 Data 경우 무작위로 10000개의 데이터를 나누어 Evaluation Data 사용 된다. 
data_split_method=‘auto_split’
or
data_split_method=‘random’
or
data_split_method=‘custom’
or
data_split_method=‘seq’
or
data_split_method=‘no_split’ 
data_split_eval_fraction
FLOAT64
 옵션은 data_split_method Option ‘random’, ‘seq’ Option 경우 사용한다 Option 평가에 사용된 데이터에 대한 소수점 값으로 해당 값은 평가에 대한 기준점역할을 한다기본값은 0.2
data_split_eval_fraction=0.2
data_split_col
STRING
데이터를 나누는데 기준이되는 Column 명시하며선택된 컬럼은 자동으로 feature Column에서 제외 된다. 
 data_split_method option ‘custom’ 경우 해당 Option 명시되는 Column 타입은 Boolean이여야 한다 , Row 해당 Column true Null값이 있을 경우해당 컬럼은 Evaluation Data 사용 되고나머지 false 값은 Training데이터로 사용된다. 
data_split_method option ‘seq’ 경우 해당 Column 마지막 data_split_fraction Row (최소값에서 최대값까지) 평가 데이터로 사용된다첫번째 Row training data 사용된다. 

data_split_col=‘col1’
ls_init_learn_rate
DOUBLE
learn_rate_strategy=‘line_search’경우 사용하며 Option line_rate_strategy=‘line_search’ 경우만 사용   있다. 

warm_start
BOOL
 Option 새로운 Training Data 새로운 모델의 옵션혹은 둘다 사용 하는데 이용된다명시 적으로  정의되지 않으면 모델을 학습하는  사용  초기 옵션이 Warm start 실행에 사용됩니다기본값은 false.
Warm start 실행에서는 반복 횟수가 0에서 시작하도록  설정된다. training_run No. 또는 TIMESTAMP 열은 Warm start 실행을 원래 실행과 구별하는  사용될  있다.

model_type label Option, 그리고 Training Data Schema 변경은 Warm start에서 변경   없다.




2. Prediction (예측)

Prediction은 ML.PREDICT를 이용하여 예측결과를 도출 한다. 사용법은 아래와 같다. 

#StandardSQL
Select predictive_label // 예측 결과 Label 
        ,  col1, col2 ... 
from ML.PREDICT(MODEL '[MODEL_NAME]', [SQL_Statement] )


다음 포스트는 실제로 사용하기 위한 예제를 포스팅 해보도록 하겠다. 

출처 : [ http://warehousekeeper.tistory.com/7 ]

댓글 2개:

  1. ML 과 Biqquery 조합은 상상도 못했던 일 입니다. 저와 같이 SQL 이 익숙한 세대에겐 희소식 입니다.

    답글삭제