自動建立機器學習模型

使用 Amazon SageMaker Autopilot

Amazon SageMaker 是一項全受管服務,能讓所有開發人員和資料科學家快速地建置、訓練及部署機器學習 (ML) 模型。

在本教學中,您可以自動建立機器學習模型,無須撰寫任何程式碼! Amazon SageMaker Autopilot 是一種 AutoML 功能,可自動建立最佳的分類和迴歸機器學習模型,同時擁有完整的控制和可見性。

在本教學中,您將了解如何:

  1. 建立 AWS 帳戶
  2. 設定 Amazon SageMaker Studio 以存取 Amazon SageMaker Autopilot
  3. 使用 Amazon SageMaker Studio 下載公用資料集
  4. 使用 Amazon SageMaker Autopilot 建立訓練實驗
  5. 探索訓練實驗的不同階段
  6. 從訓練實驗找出效能最佳的模型並進行部署
  7. 使用部署的模型進行預測

在本教學中,您將扮演在銀行工作的開發人員角色。公司要求您開發一款機器學習模型,用於預測客戶是否會註冊定期存單 (CD)。該模型將使用行銷資料集進行訓練,其中該資料集包含有關客戶人口統計、對行銷事件的回應以及外部因素的資訊。

為了方便起見,已對資料進行了標記,且資料集中有一欄可識別客戶是否已註冊銀行提供的產品。加州大學歐文分校管理的 ML 資料儲存器已 公開提供此資料集的版本。
關於本教學
時間 10 分鐘                                           
費用 低於 10 USD
使用案例 Machine Learning
產品 Amazon SageMaker
對象 開發人員
等級 初階
上次更新日期 2020 年 5 月 12 日

步驟 1.建立 AWS 帳戶

本研討會的費用低於 10 USD。如需詳細資訊,請參閱 Amazon SageMaker Studio 定價

已經有帳戶了嗎? 登入

步驟 2.設定 Amazon SageMaker Studio

完成下列步驟,即可加入 Amazon SageMaker Studio 存取 to Amazon SageMaker Autopilot。

注意:如需詳細資訊,請參閱 Amazon SageMaker 文件中的開始使用 Amazon SageMaker Studio


a.登入 Amazon SageMaker 主控台。 

注意:在右上角,請確認選取可使用 Amazon SageMaker Studio 的 AWS 區域。如需區域清單,請參閱加入 Amazon SageMaker Studio

autopilot-region-selection

b.在 Amazon SageMaker 導覽窗格中,選擇 Amazon SageMaker Studio
 
注意:如果您是第一次使用 Amazon SageMaker Studio,必須完成 Studio 加入程序。 加入時,您可以選擇使用 AWS Single Sign-On (AWS SSO) 或 AWS Identity and Access Management (IAM) 做為身份驗證方法。使用 IAM 身份驗證時,您可以選擇快速入門或標準設定程序。如果不確定該選擇哪個選項,請參閱 加入 Amazon SageMaker Studio,並向 IT 管理員尋求協助。為簡化說明,本教學使用 快速入門程序。
autopilot-studio-selection

c.在 開始使用方塊中,選擇 快速入門並指定使用者名稱。
autopilot-quickstart

d.在 執行角色選擇 建立 IAM 角色。在顯示的對話方塊中,選擇 任何 S3 儲存貯體,接著選擇 建立角色

Amazon SageMaker 會建立具備必要許可的角色,並將其指派到您的執行個體。 

autopilot-create-iam-role

e.按一下 提交
autopilot-execution-role

步驟 3.下載資料集

完成下列步驟,下載和探索資料集。

注意:如需詳細資訊,請參閱 Amazon SageMaker 文件中的 Amazon SageMaker Studio 導覽


a.在 Amazon SageMaker Studio 控制面板中,選擇 開啟 Studio
autopilot-open-studio

b.在 JupyterLab檔案功能表,依序選擇 新增筆記本。在 選取核心方塊中,選擇 Python 3 (資料科學)
 
autopilot-select-kernel

c.要下載和解壓縮程式碼,複製下列程式碼並將其貼到程式碼儲存格中,然後選擇 執行
 
注意:程式碼執行時,方括號之間會出現 * 號。幾秒鐘後,程式碼執行完畢,會將 * 替換成一個數字。
%%sh
apt-get install -y unzip
wget https://sagemaker-sample-data-us-west-2.s3-us-west-2.amazonaws.com/autopilot/direct_marketing/bank-additional.zip
unzip -o bank-additional.zip
autopilot-download-package

d.複製下列程式碼並將其貼到新的程式碼儲存格,然後選取執行

CSV 資料集會載入並顯示前十行。

import pandas as pd
data = pd.read_csv('./bank-additional/bank-additional-full.csv')
data[:10]

其中一個資料集欄名為 y,代表每個樣本的標籤:這名客戶是否接受提議?

資料科學家會在這個步驟開始探索資料、建立新的功能等等。使用 Amazon SageMaker Autopilot,您不需要執行任何這些額外的步驟。您只需上傳檔案中使用逗號分隔值的表格式資料 (例如,從試算表或資料庫),然後選擇要預測的目標欄,Autopilot 就會為您建立一個預測模型。

autopilot-csv

d.複製下列程式碼並將其貼到新的程式碼儲存格,然後選取執行

這個步驟會將 CSV 資料集上傳到 Amazon S3 儲存貯體。您不需要建立 Amazon S3 儲存貯體;上傳資料時,Amazon SageMaker 會自動在您的帳戶建立預設儲存貯體。

import sagemaker

prefix = 'sagemaker/tutorial-autopilot/input'
sess   = sagemaker.Session()

uri = sess.upload_data(path="./bank-additional/bank-additional-full.csv", key_prefix=prefix)
print(uri)

您完成了! 程式碼輸出顯示 S3 儲存貯體 URI,如以下範例所示:

s3://sagemaker-us-east-2-ACCOUNT_NUMBER/sagemaker/tutorial-autopilot/input/bank-additional-full.csv

記住在自己筆記本寫下的 S3 URI。您在下個步驟會用到。

autopilot-s3-uri

步驟 4.建立 SageMaker Autopilot 實驗

您已在 Amazon S3 下載並分階處理資料集,現在可以建立 Amazon SageMaker Autopilot 實驗。實驗是指與同一個機器學習專案相關的一組處理和訓練工作。

完成下列步驟以建立新的實驗。

注意:如需詳細資訊,請參閱 Amazon SageMaker 文件中的在 SageMaker Studio 中建立 Amazon SageMaker Autopilot 實驗


a.在 Amazon SageMaker Studio 的左側導覽窗格中,選擇實驗 (圖示用燒瓶表示),然後選擇建立實驗

autopilot-experiments

b.填寫任務設定欄位,如下所示:

  • 實驗名稱:tutorial-autopilot
  • 輸入資料的 S3 位置:前面您寫下的 S3 URI
    (例如,s3://sagemaker-us-east-2-123456789012/sagemaker/tutorial-autopilot/input/bank-additional-full.csv)
  • 目標屬性名稱y
  • 輸入資料的 S3 位置s3://sagemaker-us-east-2-[ACCOUNT-NUMBER]/sagemaker/tutorial-autopilot/output
    (記得將 [ACCOUNT-NUMBER] 換成自己的帳號)
autopilot-job-settings

c.所有其他設定保留預設值,然後選取建立實驗

成功! 這樣即可開始 Amazon SageMaker Autopilot 實驗! 這個程序會產生模型和統計資料,您可以在實驗進行時即時查看這些資料。實驗完成後,您可以查看試驗、按目標指標排序,然後按滑鼠右鍵來部署模型,以便在其他環境中使用。

autopilot-job-settings

步驟 5.探索 SageMaker Autopilot 實驗階段

實驗進行時,您可以學習和探索 SageMaker Autopilot 實驗的各個階段。 

本節將提供更多與 SageMaker Autopilot 實驗階段有關的詳細資訊:

  1. 分析資料
  2. 功能工程
  3. 模型調整

注意:如需詳細資訊,請參閱 SageMaker Autopilot 筆記本輸出


分析資料

分析資料階段可找出需要解決的問題類型 (線性迴歸、二進位分類、多元分類)。接著,產生十個候選管道。管道結合了資料預先處理步驟 (處理遺漏值、設計新功能等),以及模型訓練步驟,該步驟使用 ML 演算法比對問題類型。這個步驟完成後,該任務會進入功能工程階段。 

autopilot-analyzing-data

功能工程

功能工程階段,該實驗會為每個候選管道建立訓練和驗證資料集,將所有成品儲存到 S3 儲存貯體中。在功能工程階段,您可以開啟並檢視兩個自動產生的筆記本:

  • 資料探索筆記本包含與資料集相關的資訊和統計資料。
  • 候選產成筆記本包含十個管道的定義。事實上,這是可執行的筆記本:您可以完整重建 AutoPilot 任務執行的每個步驟、了解不同模型的建構方式,如有需要甚至可以持續調整這些模型。

有了這兩本筆記本,您可以詳細了解預先處理資料的方式,以及模型的建構和優化方法。這種透明化是 Amazon SageMaker Autopilot 的重要功能。

autopilot-open-notebooks

模型調整

模型調整階段,SageMaker Autopilot 會針對每個候選管道和其預先處理的資料集啟動超參數優化任務;相關的訓練任務會探索各種超參數值,並迅速聚集到高效能模型。

這個階段完成後,SageMaker Autopilot 任務即完成。您可以在 SageMaker Studio 查看並探索所有任務。

autopilot-model-tuning

步驟 6.部署最佳模型

現在實驗已經完成,您可以選擇最佳的調整模型並將該模型部署到由 Amazon SageMaker 管理的端點。

按照這些步驟選擇最佳調整任務並部署模型。

注意:如需詳細資訊,請參閱選擇並部署最佳模型


a.在實驗的試用清單中,選擇目標旁邊的胡蘿蔔,依降冪排序調整任務。最佳調整任務會以星號標示。

autopilot-sort-objective

b.選取最佳調整任務 (以星號標示) 並選擇部署模型。 

autopilot-deploy-model

c.在部署模型方塊中,為端點命名 (例如,tutorial-autopilot-best-model) 並保留所有設定為預設值。選擇部署模型

您的模型會部署至 Amazon SageMaker 管理的 HTTPS 端點。

autopilot-deploy-model-settings

d.在左側工具列中,選擇端點圖示。您可以看到系統正在建立模型,需要花費幾分鐘的時間。當端點狀態為 InService,您即可傳送資料和接收預測!

autopilot-endpoints

步驟 7.使用模型預測

現在已經部署模型,您可以預測資料集的前 2,000 個樣本。若要這麼做,請使用 boto3 SDK 中的 invoke_endpoint API。在此過程中,您將運算重要的機器學習指標:正確性準確性召回率F1 分數

按照這些步驟使用模型進行預測。

注意:如需詳細資訊,請參閱使用 Amazon SageMaker 實驗管理機器學習


在 Jupyter 筆記本中,複製並貼上以下程式碼,然後選擇執行

import boto3, sys

ep_name = 'tutorial-autopilot-best-model'
sm_rt = boto3.Session().client('runtime.sagemaker')

tn=tp=fn=fp=count=0

with open('bank-additional/bank-additional-full.csv') as f:
    lines = f.readlines()
    for l in lines[1:2000]:   # Skip header
        l = l.split(',')      # Split CSV line into features
        label = l[-1]         # Store 'yes'/'no' label
        l = l[:-1]            # Remove label
        l = ','.join(l)       # Rebuild CSV line without label
                
        response = sm_rt.invoke_endpoint(EndpointName=ep_name, 
                                         ContentType='text/csv',       
                                         Accept='text/csv', Body=l)

        response = response['Body'].read().decode("utf-8")
        #print ("label %s response %s" %(label,response))

        if 'yes' in label:
            # Sample is positive
            if 'yes' in response:
                # True positive
                tp=tp+1
            else:
                # False negative
                fn=fn+1
        else:
            # Sample is negative
            if 'no' in response:
                # True negative
                tn=tn+1
            else:
                # False positive
                fp=fp+1
        count = count+1
        if (count % 100 == 0):   
            sys.stdout.write(str(count)+' ')
            
print ("Done")

accuracy  = (tp+tn)/(tp+tn+fp+fn)
precision = tp/(tp+fp)
recall    = tn/(tn+fn)
f1        = (2*precision*recall)/(precision+recall)

print ("%.4f %.4f %.4f %.4f" % (accuracy, precision, recall, f1))

您應會看到以下輸出。

100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800 1900 Done
0.9830 0.6538 0.9873 0.7867

此輸出是一個進度指示器,顯示已預測的樣本數量!

autopilot-sort-objective

步驟 8.清理

在此步驟,您將終止在此實驗室中使用的資源。

重要:終止非使用中的資源可降低成本,這是最佳實務。未終止資源將使您的帳戶產生費用。


刪除您的端點:在 Jupyter 筆記本中,複製並貼上以下程式碼,然後選擇執行

sess.delete_endpoint(endpoint_name=ep_name)

如果要清理所有訓練成品 (模型、預先處理的資料集等),請複製以下程式碼並將其貼到您的程式碼儲存格中,然後選擇執行

注意:記得將 [ACCOUNT-NUMBER] 換成您的帳號。

%%sh
aws s3 rm --recursive s3://sagemaker-us-east-2-ACCOUNT_NUMBER/sagemaker/tutorial-autopilot/

恭喜

您已使用 Amazon SageMaker Autopilot 自動建立具有最佳準確性的機器學習模型

本教學對您有幫助嗎?

感謝您
請告訴我們您喜歡的部分。
抱歉,讓您失望
是有內容過時、令人困擾,或不準確嗎? 請提供意見回饋,協助我們改進此教學課程。

進行 Amazon SageMaker Studio 導覽

進一步了解 Amazon SageMaker Autopilot

如需進一步了解,請閱讀部落格文章或參閱 Autopilot 影片系列