本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
開始使用 Amazon RedShift ML
Amazon Redshift ML 讓使用者使用熟悉的SQL命令輕鬆SQL建立、訓練和部署機器學習模型。使用 Amazon Redshift ML,您可以使用 Redshift 叢集中的資料,透過 Amazon 訓練模型 SageMaker。之後,這些模型會經過本地化,並且可以在 Amazon Redshift 資料庫中進行預測。Amazon Redshift ML 目前支援機器學習演算法:XGBoost(AUTO ON 和 OFF) 和多層感知器 (AUTO ON)、K 平均值 (AUTO OFF) 和線性學習器。
針對 Amazon Redshift ML 管理進行叢集和組態設定
在您使用 Amazon Redshift ML 之前,請先完成叢集設定並設定使用 Amazon Redshift ML 的許可。
使用 Amazon Redshift ML 的叢集設定
使用 Amazon Redshift ML 之前,請先完成以下先決條件。
身為 Amazon Redshift 管理員,請針對使用 Amazon Redshift 佈建叢集執行下列一次性設定。如需將 Amazon Redshift ML 與 Amazon Redshift Serverless 搭配使用,請參閱 Amazon Redshift Serverless 入門。
若要為 Amazon Redshift ML 執行一次性叢集設定
-
使用 AWS Management Console 或 AWS Command Line Interface () 建立 Redshift 叢集AWS CLI。請務必在建立叢集時連接 AWS Identity and Access Management (IAM) 政策。如需將 Amazon Redshift ML 與 Amazon 搭配使用所需的許可的詳細資訊 SageMaker,請參閱使用 Amazon Redshift 機器學習 (ML) 所需的許可
-
以下列其中一種方式建立使用 Amazon Redshift ML 所需的IAM角色:
-
若要 SageMaker 搭配 Amazon Redshift ML 使用,請使用
AmazonS3FullAccess
和AmazonSageMakerFullAccess
政策建立IAM角色。如果您打算同時建立預測模型,也可以將AmazonForecastFullAccess
政策附加至您的角色。 -
若要將 Amazon Bedrock 與 Amazon Redshift ML 搭配使用,請使用
AmazonS3FullAccess
和AmazonBedrockFullAccess
政策建立IAM角色。 -
建議您透過 Amazon Redshift 主控台建立IAM角色,該主控台具有執行SQL命令的許可
AmazonRedshiftAllCommandsFullAccess
政策,例如 CREATE MODEL。Amazon Redshift 使用無縫 API型機制, AWS 帳戶 以程式設計方式代表您在 中建立IAM角色。Amazon Redshift 會自動將現有的 AWS 受管政策連接至IAM角色。此方法表示您可以留在 Amazon Redshift 主控台中,而且不需要切換到IAM主控台來建立角色。如需詳細資訊,請參閱將IAM角色建立為 Amazon Redshift 的預設角色。當IAM角色建立為叢集的預設值時, 會包含
redshift
作為資源名稱的一部分,或使用 Redshift 特定標籤來標記這些資源。如果您的叢集已開啟增強型 Amazon VPC路由,您可以使用透過 Amazon Redshift 主控台建立IAM的角色。此IAM角色已連接
AmazonRedshiftAllCommandsFullAccess
政策,並將下列許可新增至政策。這些額外許可允許 Amazon Redshift 建立和刪除您帳戶中的彈性網路介面 (ENI),並將其附加至在 Amazon EC2或 Amazon 上執行的編譯任務ECS。這樣做可讓您的 Amazon S3 儲存貯體中的物件只能從虛擬私有雲端 (VPC) 內存取,並封鎖網際網路存取。{ "Effect": "Allow", "Action": [ "ec2:DescribeVpcEndpoints", "ec2:DescribeDhcpOptions", "ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeNetworkInterfaces", "ec2:DeleteNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:CreateNetworkInterface", "ec2:ModifyNetworkInterfaceAttribute" ], "Resource": "*" }
若要使用 Amazon Bedrock 基礎模型,請新增下列區段:
// Required section if you use Bedrock models. { "Effect": "Allow", "Action": "bedrock:InvokeModel", "Resource": [ "arn:aws:bedrock:
<region>
::foundation-model/*" ] } -
如果您想要使用更嚴格的政策建立IAM角色,您可以使用下列政策。您也可以修改此政策以因應您的需求。
Amazon S3 儲存貯體
redshift-downloads/redshift-ml/
是用於其他步驟和範例之範例資料的儲存所在位置。如果您不需要從 Amazon S3 載入資料,則可以將其移除。或者,也可以將其取代為您用來將資料載入 Amazon Redshift 的其他 Amazon S3 儲存貯體。所以此
,your-account-id
、 和您的角色
amzn-s3-demo-bucket
值是您在CREATEMODEL命令中指定的值。(選用) 如果您在使用 Amazon Redshift ML 時指定 AWS KMS 金鑰,請使用範例政策的 AWS KMS 金鑰區段。所以此
value 是您作為CREATEMODEL命令一部分使用的金鑰。your-kms-key
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData", "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:GetAuthorizationToken", "ecr:GetDownloadUrlForLayer", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:PutLogEvents", "sagemaker:*Job*", "sagemaker:AddTags", "sagemaker:CreateModel", "sagemaker:CreateEndpoint", "sagemaker:CreateEndpointConfig", "sagemaker:DeleteEndpoint", "sagemaker:DeleteEndpointConfig, "sagemaker:DeleteModel" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole", "s3:AbortMultipartUpload", "s3:GetObject", "s3:DeleteObject", "s3:PutObject" ], "Resource": [ "arn:aws:iam::
<your-account-id>
:role/<your-role>
", "arn:aws:s3:::amzn-s3-demo-bucket/*", "arn:aws:s3:::redshift-downloads/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket, "arn:aws:s3:::redshift-downloads" ] } // Optional section needed if you use AWS KMS keys. ,{ "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:Decrypt", "kms:DescribeKey", "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": [ "arn:aws:kms:<your-region>
:<your-account-id>
:key/<your-kms-key>
" ] } ] }
-
-
若要允許 Amazon Redshift 和 SageMaker 擔任角色以與其他 服務互動,請將下列信任政策新增至IAM角色。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "redshift.amazonaws.com", "sagemaker.amazonaws.com", "forecast.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
-
(選用) 建立 Amazon S3 儲存貯體和 AWS KMS 金鑰。這些可讓 Amazon Redshift 用來儲存傳送至 Amazon SageMaker 並從 Amazon 接收訓練模型的訓練資料 SageMaker。
-
(選用) 建立角色IAM和 Amazon S3 儲存貯體的不同組合,以控制對不同使用者群組的存取。
-
(選用) 當您開啟 Redshift 叢集的VPC路由時,請為 VPC Redshift 叢集所在的 建立 Amazon S3 端點和 SageMaker 端點。這樣做可讓流量在 期間在服務VPC之間執行CREATE您的 MODEL。如需VPC路由的詳細資訊,請參閱 Amazon Redshift 中的增強VPC路由。
如需VPC為超參數調校任務指定私有所需許可的詳細資訊,請參閱搭配使用 Amazon Redshift ML 與 Amazon 所需的許可 SageMaker。
如需如何使用 CREATEMODEL陳述式開始為不同使用案例建立模型的資訊,請參閱 CREATE MODEL。
管理許可和擁有權
就像其他資料庫物件 (例如資料表或函數) 一樣,Amazon Redshift 會繫結建立和使用機器學習模型來存取控制機制。建立執行預測函數的模型有不同的許可。
下列範例使用兩個使用者群組 retention_analyst_grp
(模型建立者) 和 marketing_analyst_grp
(模型使用者) 來說明 Amazon Redshift 如何管理存取控制。保留分析師會建立機器學習模型,讓其他一組使用者可透過取得的許可使用這些模型。
超級使用者可以GRANTUSER或GROUP許可使用以下陳述式建立機器學習模型。
GRANT CREATE MODEL TO GROUP retention_analyst_grp;
如果使用者在 上擁有一般CREATE許可,具有此許可的使用者或群組可以在叢集中的任何結構描述中建立模型SCHEMA。機器學習模型是結構描述階層的一部分,與資料表、檢視表、程序和使用者定義函數類似。
假設結構描述 demo_ml
已存在,請依照下列方式授予兩個使用者群組結構描述上的許可。
GRANT CREATE, USAGE ON SCHEMA demo_ml TO GROUP retention_analyst_grp;
GRANT USAGE ON SCHEMA demo_ml TO GROUP marketing_analyst_grp;
若要讓其他使用者使用您的機器學習推論函數,請授予 EXECUTE許可。下列範例使用 EXECUTE許可授予 marketing_analyst_grp 使用該模型的GROUP許可。
GRANT EXECUTE ON MODEL demo_ml.customer_churn_auto_model TO GROUP marketing_analyst_grp;
使用 REVOKE陳述式搭配 CREATEMODEL和 EXECUTE ,從使用者或群組撤銷這些許可。如需許可控制命令的相關資訊,請參閱 GRANT 和 REVOKE。
使用模型可解釋性與 Amazon Redshift ML
透過 Amazon Redshift ML 中的模型可解釋性,您可以使用特徵重要性值,協助您了解訓練資料中的每個屬性如何影響預測結果。
模型可解釋性可以解釋模型進行的預測,以協助改善您的機器學習 (ML) 模型。模型可解釋性可幫助解釋這些模型如何使用特徵歸因方法進行預測。
Amazon Redshift ML 整合了模型可解釋性,為 Amazon Redshift ML 使用者提供模型解釋功能。如需模型可解釋性的詳細資訊,請參閱 Amazon SageMaker 開發人員指南 中的什麼是Machine Learning預測的公平性和模型可解釋性?。
模型解釋性還可監控模型在生產環境中為特徵屬性漂移所做的推論。它還提供了一些工具來幫助您生成模型治理報告,您可以使用這些報告告知風險和合規團隊以及外部監管機構。
當您在使用CREATEMODEL陳述式時指定 AUTO ON 或AUTOOFF選項時,在模型訓練任務完成後, 會 SageMaker 建立解釋輸出。您可以使用 EXPLAIN_MODEL 函數,以 JSON 格式查詢可解釋性報告。如需詳細資訊,請參閱機器學習函數。
Amazon Redshift ML 概率指標
在監督式學習問題中,類別標籤是使用輸入資料的預測結果。例如,如果您使用模型來預測客戶是否會重新訂閱串流服務,則可能的標籤是很可能和不太可能。Redshift ML 會提供概率指標的功能,可為每個標籤指派概率以指出其可能性。這可以幫助您根據預測的結果做出更明智的決策。在 Amazon Redshift ML 中,建立問題類型為二進位分類或多類別分類的 AUTO ON 模型時,可以使用機率指標。如果您省略 AUTO ON 參數,Redshift ML 會假設模型應該有 AUTO ON。
建立模型
建立模型時,Amazon Redshift 會自動偵測模型類型和問題類型。如果是分類問題,Redshift 會自動建立第二個推論函數,您可以使用該函數輸出相對於每個標籤的機率。第二個推論函數的名稱是您指定的推論函數名稱接著字串 _probabilities
。例如,如果您將推論函數命名為 customer_churn_predict
,則第二個推論函數的名稱為 customer_churn_predict_probabilities
。然後,您可以查詢此函數以獲取每個標籤的概率。
CREATE MODEL customer_churn_model FROM customer_activity PROBLEM_TYPE BINARY_CLASSIFICATION TARGET churn FUNCTION customer_churn_predict IAM_ROLE {default} AUTO ON SETTINGS ( S3_BUCKET 'amzn-s3-demo-bucket'
獲取概率
機率函數準備就緒後,執行 命令會傳回包含傳回機率陣列及其相關標籤的SUPER類型。例如,結果 "probabilities" : [0.7, 0.3], "labels" : ["False.", "True."]
表示 False 標籤的概率為 0.7,而 True 標籤的概率為 0.3。
SELECT customer_churn_predict_probabilities(Account_length, Area_code, VMail_message, Day_mins, Day_calls, Day_charge,Eve_mins, Eve_calls, Eve_charge, Night_mins, Night_calls, Night_charge,Intl_mins, Intl_calls, Intl_charge, Cust_serv_calls) FROM customer_activity; customer_churn_predict_probabilities -------------------- {"probabilities" : [0.7, 0.3], "labels" : ["False.", "True."]} {"probabilities" : [0.8, 0.2], "labels" : ["False.", "True."]} {"probabilities" : [0.75, 0.25], "labels" : ["True.", "False"]}
概率和標籤陣列一律會按其概率降序排序。您可以編寫查詢,透過取消巢狀機率函數傳回SUPER的結果,僅傳回具有最高機率的預測標籤。
SELECT prediction.labels[0], prediction.probabilities[0] FROM (SELECT customer_churn_predict_probabilities(Account_length, Area_code, VMail_message, Day_mins, Day_calls, Day_charge,Eve_mins, Eve_calls, Eve_charge, Night_mins, Night_calls, Night_charge,Intl_mins, Intl_calls, Intl_charge, Cust_serv_calls) AS prediction FROM customer_activity); labels | probabilities -----------+-------------- "False." | 0.7 "False." | 0.8 "True." | 0.75
為了使查詢更簡單,您可以將預測函數的結果儲存在資料表中。
CREATE TABLE churn_auto_predict_probabilities AS (SELECT customer_churn_predict_probabilities(Account_length, Area_code, VMail_message, Day_mins, Day_calls, Day_charge,Eve_mins, Eve_calls, Eve_charge, Night_mins, Night_calls, Night_charge,Intl_mins, Intl_calls, Intl_charge, Cust_serv_calls) AS prediction FROM customer_activity);
您可以查詢含有結果的資料表,以僅傳回概率高於 0.7 的預測。
SELECT prediction.labels[0], prediction.probabilities[0] FROM churn_auto_predict_probabilities WHERE prediction.probabilities[0] > 0.7; labels | probabilities -----------+-------------- "False." | 0.8 "True." | 0.75
使用索引符號,你可以得到特定標籤的概率。下列範例會傳回所有 True.
標籤的概率。
SELECT label, index, p.prediction.probabilities[index] FROM churn_auto_predict_probabilities p, p.prediction.labels AS label AT index WHERE label='True.'; label | index | probabilities ---------+-------+--------------- "True." | 0 | 0.3 "True." | 0 | 0.2 "True." | 0 | 0.75
下列範例會傳回所有具有 True
. 標籤且概率大於 0.7 的資料列,這表示客戶可能流失。
SELECT prediction.labels[0], prediction.probabilities[0] FROM churn_auto_predict_probabilities WHERE prediction.probabilities[0] > 0.7 AND prediction.labels[0] = "True."; labels | probabilities -----------+-------------- "True." | 0.75