教學課程:建置XGBoost模型 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

教學課程:建置XGBoost模型

在本教學課程中,您會使用來自 Amazon S3 的資料建立模型,並使用 Amazon Redshift ML 透過該模型執行預測查詢。此XGBoost演算法是漸層增強型樹狀目錄演算法的最佳化實作。XGBoost 處理比其他梯度增強型樹狀演算法更多的資料類型、關係和分佈。您可以使用 XGBoost進行迴歸、二進位分類、多類別分類和排名問題。如需XGBoost演算法的詳細資訊,請參閱 Amazon SageMaker 開發人員指南中的XGBoost演算法

Amazon Redshift ML CREATE MODEL操作搭配 AUTO OFF選項目前支援XGBoost作為 MODEL_TYPE。您可以根據您的使用案例提供相關資訊 (例如目標和超參數) 做為 CREATE MODEL 命令的一部分。

在本教學課程中,您將使用鈔票驗證資料集,這是一個二進制分類問題,用於預測給定鈔票是真的還是偽造的。

使用案例範例

您可以使用 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 取代為您自己的 S3_BUCKET,這將存儲您的輸入資料集和其他 Redshift ML 成品。

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');

顯示模型訓練的狀態 (選擇性)

您可以使用 SHOWMODEL命令來了解模型何時準備就緒。

使用下列查詢來監控模型訓練進度。

SHOW MODEL model_banknoteauthentication_xgboost_binary;

如果模型為 READY,SHOWMODEL操作也會提供 train:error 指標,如下列輸出範例所示。train:error 指標用於測量模型準確度,可測量到小數點後六位。值為 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 的相關資訊,請參閱下列文件:

如需機器學習的相關資訊,請參閱下列文件: