XGBoost를 사용하는 Boosted Tree 모델을 가져오기 위한 CREATE MODEL 문

XGBoost를 사용하는 부스팅된 트리 모델의 CREATE MODEL

BigQuery에서 부스팅된 트리 모델을 만들려면 BOOSTED_TREE_CLASSIFIER 또는 BOOSTED_TREE_REGRESSOR 모델 유형으로 BigQuery ML CREATE MODEL 문을 사용합니다. 이 모델은 XGBoost 라이브러리를 사용하여 학습됩니다.

CREATE MODEL 구문

{CREATE MODEL | CREATE MODEL IF NOT EXISTS | CREATE OR REPLACE MODEL} model_name
[OPTIONS(MODEL_TYPE = { 'BOOSTED_TREE_CLASSIFIER' | 'BOOSTED_TREE_REGRESSOR' },
         BOOSTER_TYPE = {'GBTREE' | 'DART'},
         NUM_PARALLEL_TREE = int64_value,
         DART_NORMALIZE_TYPE = {'TREE' | 'FOREST'},
         TREE_METHOD = {'AUTO' | 'EXACT' | 'APPROX' | 'HIST'},
         MIN_TREE_CHILD_WEIGHT = int64_value,
         COLSAMPLE_BYTREE = float64_value,
         COLSAMPLE_BYLEVEL = float64_value,
         COLSAMPLE_BYNODE = float64_value,
         MIN_SPLIT_LOSS = float64_value,
         MAX_TREE_DEPTH = int64_value,
         SUBSAMPLE = float64_value,
         AUTO_CLASS_WEIGHTS = { TRUE | FALSE },
         CLASS_WEIGHTS = struct_array,
         L1_REG = float64_value,
         L2_REG = float64_value,
         EARLY_STOP = { TRUE | FALSE },
         LEARN_RATE = float64_value,
         INPUT_LABEL_COLS = string_array,
         MAX_ITERATIONS = int64_value,
         MIN_REL_PROGRESS = float64_value,
         DATA_SPLIT_METHOD = { 'AUTO_SPLIT' | 'RANDOM' | 'CUSTOM' | 'SEQ' | 'NO_SPLIT' },
         DATA_SPLIT_EVAL_FRACTION = float64_value,
         DATA_SPLIT_COL = string_value
)];

CREATE MODEL

지정된 데이터 세트에 새 BigQuery ML 모델을 만듭니다. 모델 이름이 있으면 CREATE MODEL은 오류를 반환합니다.

CREATE MODEL IF NOT EXISTS

지정된 데이터 세트에 현재 모델이 없는 경우에만 새 BigQuery ML 모델을 만듭니다.

CREATE OR REPLACE MODEL

새 BigQuery ML 모델을 만들고 지정된 데이터 세트에 있는 기존 모델을 동일한 이름으로 바꿉니다.

model_name

model_name은 만들거나 바꾸려는 BigQuery ML 모델의 이름입니다. 모델 이름은 데이터 세트별로 고유해야 합니다. 다른 모델이나 테이블에서 같은 이름을 사용할 수 없습니다. 모델 이름은 BigQuery 테이블과 같은 이름 지정 규칙을 따라야 합니다. 모델 이름에는 다음이 포함될 수 있습니다.

  • 최대 1,024자(영문 기준)
  • 문자(대소문자), 숫자, 밑줄

model_name은 대소문자를 구분하지 않습니다.

기본 프로젝트를 구성하지 않은 경우 백틱을 포함하여 다음 형식으로 모델 이름 앞에 프로젝트 ID를 붙입니다.

`[PROJECT_ID].[DATASET].[MODEL]`

예를 들면 다음과 같습니다.

`myproject.mydataset.mymodel`

부스팅된 트리 모델의 CREATE MODEL은 다음 옵션을 지원합니다.

MODEL_TYPE

구문

MODEL_TYPE = { 'BOOSTED_TREE_CLASSIFIER' | 'BOOSTED_TREE_REGRESSOR' }

설명

모델 유형을 지정합니다. 이 옵션은 필수입니다.

AUTO_CLASS_WEIGHTS

구문

AUTO_CLASS_WEIGHTS = { TRUE | FALSE }

설명

클래스의 빈도와 반비례로 각 클래스의 가중치를 사용하여 클래스 라벨의 균형을 조정할지 여부입니다.

BOOSTED_TREE_CLASSIFIER 모델에만 사용됩니다.

기본적으로 부스팅된 트리 분류 모델을 만드는 데 사용되는 학습 데이터는 가중치가 없습니다. 학습 데이터 라벨의 균형이 맞지 않는 경우 모델은 가장 인기 있는 라벨 클래스를 더 무겁게 예측하도록 학습할 수 있는데, 이는 바람직하지 않을 수 있습니다.

모든 클래스의 균형을 조정하려면 다음 수식을 사용하세요.

total_input_rows / (input_rows_for_class_n * number_of_unique_classes)

인수

BOOL을 받습니다. 기본값은 FALSE입니다.

CLASS_WEIGHTS

구문

CLASS_WEIGHTS = struct_array

설명

각 클래스 라벨에 사용할 가중치입니다. AUTO_CLASS_WEIGHTSTRUE이면 이 옵션을 지정할 수 없습니다.

인수

struct_arraySTRUCTARRAY입니다. 각 STRUCT에는 클래스 라벨을 포함하는 STRING과 해당 클래스 라벨의 가중치를 포함하는 FLOAT64가 포함됩니다. 모든 클래스 라벨에는 가중치가 있어야 합니다. 가중치의 총합이 1일 필요는 없습니다. 예를 들면 다음과 같습니다.

CLASS_WEIGHTS = [STRUCT('example_label', .2)]

EARLY_STOP

구문

EARLY_STOP = { TRUE | FALSE }

설명

상대 손실 개선이 MIN_REL_PROGRESS에 지정된 값보다 적은 첫 번째 반복 후 학습을 중지해야 하는지 여부입니다.

인수

값은 BOOL입니다. 기본값은 TRUE입니다.

INPUT_LABEL_COLS

구문

INPUT_LABEL_COLS = string_array

설명

학습 데이터의 라벨 열 이름입니다.

인수

string_arraySTRINGARRAY입니다. 부스팅된 트리 모델 유형은 요소 한 개를 포함하는 string_array 값만 지원합니다.

L1_REG

구문

L1_REG = float64_value

설명

적용된 L1 정규화의 양입니다.

인수

float64_valueFLOAT64입니다. 기본값은 0입니다.

L2_REG

구문

L2_REG = float64_value

설명

적용된 L2 정규화의 양입니다.

인수

float64_valueFLOAT64입니다. 기본값은 1.0입니다.

LEARN_RATE

구문

LEARN_RATE = float64_value

설명

Learn_rate는 과접합 방지를 위해 업데이트에 사용된 보폭 축소입니다. 각 부스팅 단계가 지날 때마다 learn_rate가 특성 가중치를 축소하여 부스팅 프로세스를 더 보수적으로 만듭니다.

인수

float64_valueFLOAT64입니다. 기본값은 0.3입니다.

MAX_ITERATIONS

구문

MAX_ITERATIONS = int64_value

설명

부스팅의 최대 라운드 수입니다.

인수

int64_valueINT64입니다. 기본값은 20입니다.

MIN_REL_PROGRESS

구문

MIN_REL_PROGRESS = float64_value

설명

EARLY_STOPtrue로 설정할 때 학습을 계속하기 위해 필요한 최소 상대 손실 개선입니다. 예를 들어 0.01 값은 학습을 계속하려면 반복할 때마다 손실을 1%씩 줄여야 함을 지정합니다.

인수

float64_valueFLOAT64입니다. 기본값은 0.01입니다.

BOOSTER_TYPE

구문

BOOSTER_TYPE =  { 'GBTREE' | 'DART'}

설명

부스팅된 트리 모델의 경우 기본값 gbtree를 사용해서 사용할 부스터 유형을 지정합니다.

인수

사용할 수 있는 옵션은 다음과 같습니다.

NUM_PARALLEL_TREE

구문

NUM_PARALLEL_TREE = int64_value

설명

각 반복 중 생성되는 병렬 트리 수입니다. 기본값은 1입니다. 부스팅된 랜덤 포레스트를 학습시키려면 이 값을 1보다 크게 설정합니다.

DART_NORMALIZE_TYPE

구문

DART_NORMALIZE_TYPE = { 'TREE' | 'FOREST'}

설명

DART 부스터에 대한 정규화 알고리즘 유형입니다. 기본값은 tree입니다.

TREE_METHOD

구문

TREE_METHOD = { 'AUTO' | 'EXACT' | 'APPROX' | 'HIST'}

설명

트리 구성 알고리즘의 유형입니다. 기본값은 AUTO입니다.

학습 속도를 높이고 리소스 소비를 줄이려면 대규모 데이터 세트에 HIST를 사용하는 것이 좋습니다. 자세한 내용은 트리 부스터를 참조하세요.

MIN_TREE_CHILD_WEIGHT

구문

MIN_TREE_CHILD_WEIGHT = int64_value

설명

추가 파티션 나누기를 위해 하위 요소에 필요한 최소 인스턴스 가중치 합계입니다. 트리 파티션 단계로 인스턴스 가중치 합계가 min_tree_child_weight보다 낮은 리프 노드가 발생하는 경우, 빌드 프로세스가 추가 파티션 나누기를 포기합니다. min_tree_child_weight가 클수록 알고리즘이 더 보수적으로 됩니다. 값이 0보다 크거나 같아야 하고 기본값은 1입니다.

COLSAMPLE_BYTREE

구문

COLSAMPLE_BYTREE = float64_value

설명

각 트리를 생성할 때 열의 서브 샘플 비율입니다. 서브 샘플링은 트리가 생성될 때마다 한 번씩 수행됩니다. 값은 0에서 1 사이여야 하고 기본값은 1입니다.

COLSAMPLE_BYLEVEL

구문

COLSAMPLE_BYLEVEL = float64_value

설명

각 수준에 대한 열의 서브 샘플 비율입니다. 서브 샘플링은 트리에서 새로운 깊이 수준에 도달할 때마다 한 번씩 수행됩니다. 열은 현재 트리에 대해 선택한 열 집합에서 서브 샘플링됩니다. 값은 0에서 1 사이여야 하고 기본값은 1입니다.

COLSAMPLE_BYNODE

구문

COLSAMPLE_BYNODE = float64_value

설명

각 노드에 대한 열의 서브 샘플 비율입니다(분할). 서브 샘플링은 새 분할이 평가될 때마다 한 번씩 수행됩니다. 열은 현재 수준에 대해 선택한 열 집합에서 서브 샘플링됩니다. 값은 0에서 1 사이여야 하고 기본값은 1입니다.

MIN_SPLIT_LOSS

구문

MIN_SPLIT_LOSS = float64_value

설명

트리의 리프 노드에서 추가 분할을 수행하기 위해 필요한 최소 손실 감소입니다. min_split_loss가 클수록 알고리즘이 더 보수적으로 됩니다. 기본값은 0입니다.

MAX_TREE_DEPTH

구문

MAX_TREE_DEPTH = int64_value

설명

트리의 최대 깊이입니다. 기본값은 6입니다.

SUBSAMPLE

구문

SUBSAMPLE = float64_value

설명

학습 인스턴스의 서브 샘플 비율입니다. 이 값을 0.5로 설정하면 트리 성장 전 학습이 학습 데이터의 절반을 샘플링하여 과접합을 방지합니다. 서브 샘플링은 부스팅이 반복될 때마다 한 번씩 수행됩니다. 이것은 학습 옵션에 사용되는 학습-테스트 데이터 분할과 관계가 없습니다(기본적으로 80/20 무작위). 테스트 데이터는 서브 샘플에 관계없이 모든 반복에 사용되지 않습니다. 서브 샘플은 학습 데이터에만 적용됩니다. 값은 0에서 1사이여야 하며, 기본값은 1.0입니다(각 반복에 모든 학습 데이터 사용)

DATA_SPLIT_METHOD

구문

DATA_SPLIT_METHOD = { 'AUTO_SPLIT' | 'RANDOM' | 'CUSTOM' | 'SEQ' | 'NO_SPLIT' }

설명

입력 데이터를 학습 및 평가 집합으로 분할하는 방법입니다. 학습 데이터는 모델을 학습시키는 데 사용됩니다. 평가 데이터는 조기 중단으로 인해 과적합을 피하기 위해 사용됩니다.

인수

다음 값을 허용합니다.

'AUTO_SPLIT' 자동 분할 전략은 다음과 같습니다.

  • 입력 데이터의 행이 500개 미만인 경우 모든 행이 학습 데이터로 사용됩니다.
  • 입력 데이터의 행이 500~50,000개 사이인 경우 데이터의 20%가 RANDOM 분할의 평가 데이터로 사용됩니다.
  • 입력 데이터의 행이 50,000개를 초과할 경우 이중 10,000개 행만 RANDOM 분할의 평가 데이터로 사용됩니다.

'RANDOM' 데이터를 무작위로 분할합니다. 무작위 분할은 확정적이므로 기반 학습 데이터가 동일하게 유지되면 서로 다른 학습 실행에서 동일한 분할 결과가 생성됩니다.

'CUSTOM' 고객이 제공한 BOOL 유형의 열을 사용하여 데이터를 분할합니다. 값이 TRUE인 행은 평가 데이터로 사용됩니다. 값이 FALSE인 행은 학습 데이터로 사용됩니다.

'SEQ' 고객이 제공한 열을 사용하여 데이터를 순차적으로 분할합니다. 이 열에는 정렬할 수 있는 데이터 유형인 NUMERIC, BIGNUMERIC, STRING 또는 TIMESTAMP가 포함될 수 있습니다. 임계값보다 작은 분할 값이 있는 모든 행이 학습 데이터로 사용됩니다. NULL 값을 포함한 나머지 행은 평가 데이터로 사용됩니다.

'NO_SPLIT' 모든 데이터를 학습 데이터로 사용합니다.

DATA_SPLIT_EVAL_FRACTION

구문

DATA_SPLIT_EVAL_FRACTION = float64_value

설명

이 옵션은 'RANDOM''SEQ' 분할에 사용되며, 평가에 사용되는 데이터의 비율을 지정하고 소수점 둘째 자리까지 정확합니다.

인수

float64_valueFLOAT64입니다. 기본값은 0.2입니다.

DATA_SPLIT_COL

구문

DATA_SPLIT_COL = string_value

설명

데이터를 분할하는 데 사용되는 열을 식별합니다. 이 열은 특성 또는 라벨로 사용될 수 없고 자동으로 특성에서 제외됩니다.

  • DATA_SPLIT_METHOD 값이 'CUSTOM'인 경우 해당 열의 유형은 BOOL이어야 합니다. 값이 TRUE 또는 NULL인 행은 평가 데이터로 사용됩니다. 값이 FALSE인 행은 학습 데이터로 사용됩니다.

  • DATA_SPLIT_METHOD 값이 'SEQ'인 경우 해당 열에서 가장 작은 것부터 가장 큰 것까지 마지막 n개 행이 평가 데이터로 사용되며, 여기서 nDATA_SPLIT_EVAL_FRACTION에 지정되는 값입니다. 앞부분의 행은 학습 데이터로 사용됩니다.

예시

다음 예시는 라벨 열로 'mylabel'이 포함된 'mytable'에 대해 부스팅된 트리 분류 모델을 학습시킵니다.

CREATE MODEL project_id:mydataset.mymodel
OPTIONS(MODEL_TYPE='BOOSTED_TREE_CLASSIFIER',
        BOOSTER_TYPE = 'GBTREE',
        NUM_PARALLEL_TREE = 1,
        MAX_ITERATIONS = 50,
        TREE_METHOD = 'HIST',
        EARLY_STOP = FALSE,
        SUBSAMPLE = 0.85,
        INPUT_LABEL_COLS = ['mylabel'])
AS SELECT * FROM project_id:mydataset.mytable;

지원되는 리전

부스팅된 트리 모델 학습이 모든 BigQuery ML 리전에서 지원되지는 않습니다. 지원되는 리전 및 멀티 리전의 전체 목록은 리전별 위치를 참조하세요.