在雲端環境中,利用伺服器less 架構處理串流資料變得越來越普遍。本文將引導您使用 Java 建立一個 Lambda 函式,並將其與 Kinesis 資料流整合,實作事件驅動的資料處理。透過 AWS Kinesis SDK for Java,Lambda 函式可以有效地處理 Kinesis 資料流中的新增記錄,並執行相應的邏輯。文章將逐步說明如何設定專案、撰寫程式碼、佈署函式,並透過 AWS CLI 進行測試和驗證,確保函式能正確回應 Kinesis 事件。
title: “AWS CLI 操作 Amazon ML 二元分類別” date: 2026-05-06T12:00:00+08:00 author: “玄貓(BlackCat)” categories: [“機器學習”, “雲端服務”] tags: [“AWS CLI”, “Amazon Machine Learning”, “二元分類別”, “資料來源”, “模型訓練”] draft: false math: true summary: “本文說明如何使用 AWS CLI 操作 Amazon Machine Learning (Amazon ML) 進行二元分類別任務。文章涵蓋了準備資料、建立資料來源、使用 CLI 輸入範本、執行 CLI 命令、檢視資料來源狀態等步驟,並提供程式碼解析和內容解密,幫助讀者理解每個步驟的意義和作用。”
透過 AWS CLI 操作 Amazon Machine Learning 服務,可以更有效率地管理和執行機器學習任務。本文將重點介紹如何使用 AWS CLI 進行二元分類別,從資料準備到模型訓練,提供完整的操作流程和程式碼範例。文章詳細說明瞭如何使用 CLI 命令建立資料來源、設定訓練引數,並監控任務執行狀態。此外,文章也解析了關鍵程式碼和設定,幫助讀者深入理解 Amazon ML 的運作機制,並能根據自身需求調整引數和流程。
title: “AWS Machine Learning 二元分類別預測實作” date: 2028-11-04T18:00:00+08:00 author: “玄貓(BlackCat)” categories: [“機器學習”, “雲端服務”] tags: [“AWS Machine Learning”, “二元分類別”, “預測”, “模型評估”, “即時預測”] draft: false math: true summary: “本文介紹如何使用 AWS Machine Learning 進行二元分類別預測。文章涵蓋了準備資料、建立 S3 資料來源、建立機器學習模型、評估模型、建立即時預測端點以及進行預測等步驟。每個步驟都提供 AWS CLI 命令範例和詳細的程式碼解析,幫助讀者快速上手並理解 AWS Machine Learning 的使用方法。”
AWS Machine Learning 提供了簡便易用的工具和服務,讓開發者可以快速構建和佈署機器學習模型。本文將逐步示範如何使用 AWS Machine Learning 進行二元分類別預測,從資料準備到模型佈署,涵蓋了整個機器學習流程。文章提供了詳細的 AWS CLI 命令範例和說明,幫助讀者瞭解如何建立資料來源、訓練模型、評估模型效能,以及最終佈署模型並進行即時預測。透過本文的指引,讀者可以快速掌握 AWS Machine Learning 的核心功能,並將其應用於實際的機器學習任務中。
使用 Java 實作 Kinesis 事件觸發的 Lambda 函式
本章節將介紹如何使用 Java 實作一個 Lambda 函式,該函式會在 Kinesis 資料流中有新記錄新增時被觸發。
準備工作
要完成本章節的實作,您需要具備以下條件:
- 一個有效的 AWS 帳戶。
- 按照「Your first AWS Lambda」和「Your first Lambda with AWS CLI」章節的指示,設定 Java、Maven、父專案
serverless-cookbook-parent-aws-java和 AWS CLI。 - 建立一個名為
kinesis-stream-for-event的 Kinesis 資料流。
步驟1:建立 Lambda 專案(Java)
我們將建立一個沒有服務類別的 Lambda 函式。首先,在 pom.xml 檔案中新增 AWS Kinesis SDK for Java 的依賴項,如下所示:
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-kinesis</artifactId>
<version>${aws.sdk.version}</version>
</dependency>
LambdaKinesisEventHandler.java 的實作如下:
public final class LambdaKinesisEventHandler implements RequestHandler<KinesisEvent, Boolean> {
public Boolean handleRequest(final KinesisEvent kinesisEvent, final Context context) {
LambdaLogger logger = context.getLogger();
logger.log("Received Kinesis event: " + kinesisEvent);
logger.log("Number of records: " + kinesisEvent.getRecords().size());
try {
kinesisEvent.getRecords().forEach(r -> {
final KinesisEvent.Record kr = r.getKinesis();
logger.log("Record: " + kr.toString());
logger.log("Data: " + StandardCharsets.UTF_8.decode(kr.getData()).toString());
});
} catch (final Exception e) {
logger.log("There was an exception: " + e.getMessage());
return false;
}
return true;
}
}
程式碼解析:
LambdaKinesisEventHandler類別實作了RequestHandler介面,用於處理 Kinesis 事件並傳回布林值。handleRequest方法接收KinesisEvent和Context物件作為引數,並使用LambdaLogger輸出事件資訊。- 遍歷
KinesisEvent中的記錄,並輸出每筆記錄的詳細資訊,包括記錄資料。 - 例外處理:捕捉並記錄任何異常,傳回
false表示處理失敗。
步驟2:佈署和測試 Lambda(使用 AWS CLI)
- 構建 Uber JAR:在 Lambda 專案根目錄下執行
mvn clean package。 - 上傳 Uber JAR 至 S3。
- 建立具有適當信任關係的 IAM Role,例如
lambda-invoke-kinesis-event-role。 - 附加必要的許可權政策,包括基本日誌許可權和 Kinesis 相關許可權。
Kinesis 相關許可權政策檔案範例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kinesis:GetRecords",
"kinesis:GetShardIterator",
"kinesis:DescribeStream",
"kinesis:ListStreams"
],
"Resource": [
"arn:aws:kinesis:*:*:*"
]
}
]
}
- 建立 Lambda 函式:
aws lambda create-function \
--function-name lambda-invoke-kinesis-event \
--runtime java8 \
--role arn:aws:iam::<account id>:role/lambda-invoke-kinesis-event-role \
--handler tech.heartin.books.serverlesscookbook.LambdaKinesisEventHandler::handleRequest \
--code S3Bucket=serverless-cookbook,S3Key=lambda-invoke-kinesis-event-0.0.1-SNAPSHOT.jar \
--timeout 15 \
--memory-size 512 \
--region us-east-1 \
--profile admin
- 建立事件源對映:
aws lambda create-event-source-mapping \
--event-source-arn arn:aws:kinesis:us-east-1:<account id>:stream/kinesis-stream-for-event \
--function-name lambda-invoke-kinesis-event \
--starting-position LATEST \
--batch-size 3 \
--region us-east-1 \
--profile admin
- 驗證 Lambda 函式的呼叫:向 Kinesis 資料流傳送訊息,並檢查 CloudWatch 日誌。
使用 AWS CLI 進行二元分類別的 Amazon ML 服務操作
Amazon Machine Learning (Amazon ML) 是 Amazon Web Services (AWS) 提供的一項機器學習服務,能夠幫助開發者建立和佈署機器學習模型。本章節將介紹如何使用 AWS CLI 來進行二元分類別任務。
準備資料
首先,我們需要準備一份 CSV 檔案作為訓練資料。在這個範例中,我們將使用 AWS 提供的範例資料 banking.csv,該檔案已經上傳到 S3 的 s3://aml-sample-data/ 路徑下。
建立資料來源
接下來,我們需要建立一個資料來源。資料來源是指用於訓練或測試機器學習模型的資料。在這個範例中,我們將使用同一個資料來源進行訓練和測試,但在實際應用中,建議將資料分成兩個部分:訓練資料和測試資料。
步驟1:產生 CLI 輸入範本
aws machinelearning create-data-source-from-s3 --generate-cli-skeleton input
步驟2:準備輸入 JSON 檔案
根據產生的範本,建立一個名為 create-data-source-from-s3-cli-input.json 的 JSON 檔案,並填入實際的值。
{
"DataSourceId": "my-first-s3-ds-id",
"DataSourceName": "My First S3 DataSource",
"DataSpec": {
"DataLocationS3": "s3://aml-sample-data/banking.csv",
"DataRearrangement": "{\"splitting\":{\"percentBegin\":10,\"percentEnd\":60}}",
"DataSchemaLocationS3": "s3://aml-sample-data/banking.csv.schema"
},
"ComputeStatistics": true
}
步驟3:執行建立資料來源的命令
aws machinelearning create-data-source-from-s3 --cli-input-json file://create-data-source-from-s3-cli-input.json --region us-east-1 --profile admin
程式碼解析:
aws machinelearning create-data-source-from-s3命令:此命令用於從 S3 建立一個新的資料來源。--cli-input-json引數:指定輸入 JSON 檔案的路徑,這裡是file://create-data-source-from-s3-cli-input.json。--region us-east-1引數:指定 AWS 區域為us-east-1。--profile admin引數:指定使用名為admin的 AWS 組態檔。
內容解密:
- 使用
create-data-source-from-s3命令可以將 S3 中的 CSV 資料來源轉換為 Amazon ML 可以使用的格式。 - 在 JSON 輸入檔案中,
DataLocationS3指定了 S3 中的資料位置,而DataSchemaLocationS3指定了資料的結構描述檔案位置。 ComputeStatistics設定為true表示在建立資料來源時計算統計資訊。
檢視資料來源狀態
可以使用以下命令來檢視資料來源的狀態:
aws machinelearning describe-data-sources --region us-east-1 --profile admin
或者,使用以下命令來檢視特定資料來源的詳細資訊:
aws machinelearning get-data-source --data-source-id my-first-s3-ds-id --region us-east-1 --profile admin
程式碼解析:
aws machinelearning describe-data-sources命令:列出所有資料來源的資訊。aws machinelearning get-data-source命令:取得特定資料來源的詳細資訊。
內容解密:
- 使用
describe-data-sources可以檢視所有已建立的資料來源狀態。 - 使用
get-data-source可以檢視特定 ID 的資料來源詳細資訊,有助於監控其狀態和除錯。
使用 AWS Machine Learning 進行二元分類別預測
AWS Machine Learning(AML)是一種全託管的服務,能夠幫助開發者建立機器學習模型並進行預測。在本篇文章中,我們將介紹如何使用 AWS Machine Learning 進行二元分類別預測。
準備資料
首先,我們需要準備資料。在本例中,我們使用了一個 CSV 檔案,其中包含了客戶的相關資訊,例如年齡、工作、婚姻狀況等。我們將這個檔案上傳到 Amazon S3。
建立 S3 資料來源
接下來,我們需要建立一個 S3 資料來源。使用以下命令建立一個名為 my-first-s3-ds-id 的資料來源:
aws machinelearning create-data-source \
--data-source-id 'my-first-s3-ds-id' \
--data-source-name 'My First S3 Data Source' \
--data-location-s3 's3://your-bucket/your-data.csv' \
--region us-east-1 \
--profile admin
內容解密:
create-data-source命令用於建立一個新的資料來源。--data-source-id指定了資料來源的 ID。--data-source-name指定了資料來源的名稱。--data-location-s3指定了資料檔案在 S3 中的位置。--region指定了 AWS 區域。--profile指定了使用的 AWS 組態檔。
建立機器學習模型
建立好資料來源後,我們可以建立一個機器學習模型。使用以下命令建立一個名為 my-first-ml-model-id 的二元分類別模型:
aws machinelearning create-ml-model \
--ml-model-id 'my-first-ml-model-id' \
--ml-model-name 'My First ML Model' \
--ml-model-type 'BINARY' \
--training-data-source-id 'my-first-s3-ds-id' \
--region us-east-1 \
--profile admin
內容解密:
create-ml-model命令用於建立一個新的機器學習模型。--ml-model-id指定了模型的 ID。--ml-model-name指定了模型的名稱。--ml-model-type指定了模型的型別(在本例中為二元分類別)。--training-data-source-id指定了用於訓練模型的資料來源 ID。
評估模型
建立好模型後,我們需要評估其效能。使用以下命令建立一個名為 my-first-ml-evaluation-id 的評估:
aws machinelearning create-evaluation \
--evaluation-id 'my-first-ml-evaluation-id' \
--evaluation-name 'My First ML Evaluation' \
--ml-model-id 'my-first-ml-model-id' \
--evaluation-data-source-id 'my-first-s3-ds-id' \
--region us-east-1 \
--profile admin
內容解密:
create-evaluation命令用於建立一個新的評估。--evaluation-id指定了評估的 ID。--evaluation-name指定了評估的名稱。--ml-model-id指定了要評估的模型 ID。--evaluation-data-source-id指定了用於評估的資料來源 ID。
建立即時預測端點
評估完模型後,我們可以建立一個即時預測端點。使用以下命令建立一個即時預測端點:
aws machinelearning create-realtime-endpoint \
--ml-model-id 'my-first-ml-model-id' \
--region us-east-1 \
--profile admin
內容解密:
create-realtime-endpoint命令用於建立一個新的即時預測端點。--ml-model-id指定了要使用的模型 ID。
進行預測
最後,我們可以使用建立好的即時預測端點進行預測。使用以下命令進行預測:
aws machinelearning predict \
--ml-model-id 'my-first-ml-model-id' \
--record 'age=44,job=blue-collar,marital=married,education=basic.4y,default=unknown,housing=yes,loan=no,contact=cellular,month=aug,day_of_week=thu,duration=210,campaign=1,pdays=999,previous=0,poutcome=nonexistent,emp_var_rate=1.4,cons_price_idx=93.444,cons_conf_idx=-36.1,euribor3m=4.963,nr_employed=5228.1' \
--predict-endpoint 'https://realtime.machinelearning.us-east-1.amazonaws.com' \
--region us-east-1 \
--profile admin
內容解密:
predict命令用於進行預測。--ml-model-id指定了要使用的模型 ID。--record指定了要預測的資料記錄。--predict-endpoint指定了即時預測端點的 URL。