튜토리얼: XGBoost 모델 구축
이 튜토리얼에서는 Amazon S3의 데이터로 모델을 생성하고 Amazon Redshift ML을 사용하여 이 모델로 예측 쿼리를 실행합니다. XGBoost 알고리즘은 그래디언트 부스트 트리 알고리즘을 최적화한 것입니다. XGBoost는 다른 그래디언트 부스트 트리 알고리즘보다 더 많은 데이터 유형, 관계 및 분포를 처리합니다. 회귀, 바이너리 분류, 다중 클래스 분류, 순위 결정 관련 문제에 XGBoost를 사용할 수 있습니다. XGBoost 알고리즘에 대한 자세한 내용은 Amazon SageMaker 개발자 안내서의 XGBoost 알고리즘 섹션을 참조하세요.
AUTO OFF
옵션을 사용한 Amazon Redshift ML CREATE MODEL
작업은 현재 XGBoost를 MODEL_TYPE
으로 지원합니다. 사용 사례에 따라 CREATE MODEL
명령의 일부로 목적 및 하이퍼파라미터와 같은 관련 정보를 제공할 수 있습니다.
이 튜토리얼에서는 주어진 지폐가 원본인지 위조인지 예측하는 바이너리 분류 문제인 banknote authentication 데이터 세트
사용 사례
Amazon Redshift ML을 사용하여 환자의 건강 또는 질병 유무 예측과 같은 다른 바이너리리 분류 문제를 해결할 수 있습니다. 이메일이 스팸인지 아닌지도 예측할 수 있습니다.
작업
-
사전 조건
-
1단계: Amazon S3에서 Amazon Redshift로 데이터 로드
-
2단계: 기계 학습 모델 생성
-
3단계: 모델을 사용하여 예측 수행
사전 조건
이 튜토리얼을 완료하려면 Amazon Redshift ML의 관리 설정을 완료해야 합니다.
1단계: Amazon S3에서 Amazon Redshift로 데이터 로드
Amazon Redshift 쿼리 편집기 v2를 사용하여 다음 쿼리를 실행합니다.
다음 쿼리는 두 개의 테이블을 생성하고 Amazon S3에서 데이터를 로드한 다음 데이터를 훈련 세트와 테스트 세트로 분할합니다. 훈련 세트를 사용하여 모델을 훈련시키고 예측 함수를 생성합니다. 그런 다음 테스트 세트에서 예측 함수를 테스트합니다.
--create training set table CREATE TABLE banknoteauthentication_train( variance FLOAT, skewness FLOAT, curtosis FLOAT, entropy FLOAT, class INT ); --Load into training table COPY banknoteauthentication_train FROM 's3://redshiftbucket-ml-sagemaker/banknote_authentication/train_data/' IAM_ROLE default REGION 'us-west-2' IGNOREHEADER 1 CSV; --create testing set table CREATE TABLE banknoteauthentication_test( variance FLOAT, skewness FLOAT, curtosis FLOAT, entropy FLOAT, class INT ); --Load data into testing table COPY banknoteauthentication_test FROM 's3://redshiftbucket-ml-sagemaker/banknote_authentication/test_data/' IAM_ROLE default REGION 'us-west-2' IGNOREHEADER 1 CSV;
2단계: 기계 학습 모델 생성
다음 쿼리는 이전 단계에서 생성한 훈련 세트에서 Amazon Redshift ML에 XGBoost 모델을 생성합니다. amzn-s3-demo-bucket
을 입력 데이터 세트 및 기타 Redshift ML 아티팩트를 저장할 사용자의 S3_BUCKET
으로 대체합니다.
CREATE MODEL model_banknoteauthentication_xgboost_binary FROM banknoteauthentication_train TARGET class FUNCTION func_model_banknoteauthentication_xgboost_binary IAM_ROLE default AUTO OFF MODEL_TYPE xgboost OBJECTIVE 'binary:logistic' PREPROCESSORS 'none' HYPERPARAMETERS DEFAULT EXCEPT(NUM_ROUND '100') SETTINGS(S3_BUCKET 'amzn-s3-demo-bucket');
모델 훈련 상태 표시(선택 사항)
SHOW MODEL 명령을 사용하여 모델이 준비되었는지 알 수 있습니다.
다음 쿼리를 사용하여 모델 훈련의 진행 상황을 모니터링합니다.
SHOW MODEL model_banknoteauthentication_xgboost_binary;
모델이 READY
인 경우 SHOW MODEL 작업은 다음 출력 예시에서 보여주는 것처럼 train:error
메트릭을 제공합니다. train:error
메트릭은 소수점 6자리까지 측정하는 모델의 정확도를 측정한 것입니다. 값이 0이면 가장 정확하고 값이 1이면 가장 부정확합니다.
+--------------------------+--------------------------------------------------+ | Model Name | model_banknoteauthentication_xgboost_binary | +--------------------------+--------------------------------------------------+ | Schema Name | public | | Owner | awsuser | | Creation Time | Tue, 21.06.2022 19:07:35 | | Model State | READY | | train:error | 0.000000 | | Estimated Cost | 0.006197 | | | | | TRAINING DATA: | | | Query | SELECT * | | | FROM "BANKNOTEAUTHENTICATION_TRAIN" | | Target Column | CLASS | | | | | PARAMETERS: | | | Model Type | xgboost | | Training Job Name | redshiftml-20220621190735686935-xgboost | | Function Name | func_model_banknoteauthentication_xgboost_binary | | Function Parameters | variance skewness curtosis entropy | | Function Parameter Types | float8 float8 float8 float8 | | IAM Role | default-aws-iam-role | | S3 Bucket | amzn-s3-demo-bucket | | Max Runtime | 5400 | | | | | HYPERPARAMETERS: | | | num_round | 100 | | objective | binary:logistic | +--------------------------+--------------------------------------------------+
3단계: 모델을 사용하여 예측 수행
모델의 정확도 확인
다음 예측 쿼리에서는 이전 단계에서 생성한 예측 함수를 사용하여 모델의 정확도를 확인합니다. 테스트 세트에서 이 쿼리를 실행하여 모델이 훈련 세트와 너무 근접하게 대응되지 않도록 합니다. 이러한 근접 대응을 과적합이라고도 하며, 과적합으로 인해 모델이 신뢰할 수 없는 예측을 수행할 수 있습니다.
WITH predict_data AS ( SELECT class AS label, func_model_banknoteauthentication_xgboost_binary (variance, skewness, curtosis, entropy) AS predicted, CASE WHEN label IS NULL THEN 0 ELSE label END AS actual, CASE WHEN actual = predicted THEN 1 :: INT ELSE 0 :: INT END AS correct FROM banknoteauthentication_test ), aggr_data AS ( SELECT SUM(correct) AS num_correct, COUNT(*) AS total FROM predict_data ) SELECT (num_correct :: FLOAT / total :: FLOAT) AS accuracy FROM aggr_data;
원본 및 위조 지폐의 양 예측
다음 예측 쿼리는 테스트 세트에 있는 원본 및 위조 지폐의 예상 양을 반환합니다.
WITH predict_data AS ( SELECT func_model_banknoteauthentication_xgboost_binary(variance, skewness, curtosis, entropy) AS predicted FROM banknoteauthentication_test ) SELECT CASE WHEN predicted = '0' THEN 'Original banknote' WHEN predicted = '1' THEN 'Counterfeit banknote' ELSE 'NA' END AS banknote_authentication, COUNT(1) AS count FROM predict_data GROUP BY 1;
원본 지폐와 위조 지폐에 대한 평균 관찰 값 찾기
다음 예측 쿼리는 테스트 세트에서 원본 및 위조 지폐로 예측되는 지폐에 대한 각 특성의 평균값을 반환합니다.
WITH predict_data AS ( SELECT func_model_banknoteauthentication_xgboost_binary(variance, skewness, curtosis, entropy) AS predicted, variance, skewness, curtosis, entropy FROM banknoteauthentication_test ) SELECT CASE WHEN predicted = '0' THEN 'Original banknote' WHEN predicted = '1' THEN 'Counterfeit banknote' ELSE 'NA' END AS banknote_authentication, TRUNC(AVG(variance), 2) AS avg_variance, TRUNC(AVG(skewness), 2) AS avg_skewness, TRUNC(AVG(curtosis), 2) AS avg_curtosis, TRUNC(AVG(entropy), 2) AS avg_entropy FROM predict_data GROUP BY 1 ORDER BY 2;
관련 주제
Amazon Redshift ML에 대한 자세한 내용은 다음 설명서를 참조하세요.
기계 학습에 대한 자세한 내용은 다음 설명서를 참조하세요.