ทำให้โมเดลการจำแนกประเภทจักรยานยนต์และสกูตเตอร์เป็นแบบอัตโนมัติด้วย Amazon SageMaker Autopilot PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

ทำให้โมเดลการจำแนกประเภทจักรยานยนต์และสกูตเตอร์เป็นแบบอัตโนมัติด้วย Amazon SageMaker Autopilot

ระบบนำร่องอัตโนมัติของ Amazon SageMaker ทำให้องค์กรสามารถสร้างและปรับใช้โมเดลการเรียนรู้ของเครื่องแบบ end-to-end (ML) และไปป์ไลน์การอนุมานได้อย่างรวดเร็วด้วยโค้ดเพียงไม่กี่บรรทัดหรือแม้กระทั่ง ไม่มีรหัส เลยด้วย สตูดิโอ Amazon SageMaker. Autopilot ช่วยลดภาระของโครงสร้างพื้นฐานการกำหนดค่าและเวลาที่ใช้ในการสร้างไปป์ไลน์ทั้งหมด รวมถึงวิศวกรรมคุณลักษณะ การเลือกรุ่น และการปรับแต่งไฮเปอร์พารามิเตอร์

ในโพสต์นี้ เราแสดงวิธีการเปลี่ยนจากข้อมูลดิบไปยังไปป์ไลน์การอนุมานที่มีประสิทธิภาพและปรับใช้อย่างสมบูรณ์ด้วย Autopilot

ภาพรวมโซลูชัน

เราใช้ ชุดข้อมูลสาธารณะของ Lyft เกี่ยวกับการแชร์จักรยาน สำหรับการจำลองนี้เพื่อทำนายว่าผู้ใช้มีส่วนร่วมใน แชร์จักรยานสำหรับทุกโปรแกรม. นี่เป็นปัญหาการจำแนกเลขฐานสองอย่างง่าย

เราต้องการแสดงให้เห็นว่าการสร้างไปป์ไลน์การอนุมานแบบอัตโนมัติและแบบเรียลไทม์เพื่อจำแนกผู้ใช้นั้นง่ายเพียงใดโดยพิจารณาจากการเข้าร่วมโปรแกรม Bike Share for All ด้วยเหตุนี้ เราจึงจำลองการนำเข้าข้อมูลแบบ end-to-end และไปป์ไลน์การอนุมานสำหรับบริษัท bikeshare ในจินตนาการที่ดำเนินการอยู่ในบริเวณอ่าวซานฟรานซิสโก

สถาปัตยกรรมแบ่งออกเป็นสองส่วน: ไปป์ไลน์การส่งผ่านข้อมูลและไปป์ไลน์การอนุมาน
ทำให้โมเดลการจำแนกประเภทจักรยานยนต์และสกูตเตอร์เป็นแบบอัตโนมัติด้วย Amazon SageMaker Autopilot PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

เราเน้นที่ไปป์ไลน์ ML เป็นหลักในส่วนแรกของโพสต์นี้ และตรวจสอบไปป์ไลน์การนำเข้าข้อมูลในส่วนที่สอง

เบื้องต้น

เพื่อทำตามตัวอย่างนี้ ให้ทำตามข้อกำหนดเบื้องต้นต่อไปนี้:

  1. สร้างอินสแตนซ์สมุดบันทึก SageMaker ใหม่.
  2. สร้าง สายไฟ Amazon Kinesis Data สตรีมการจัดส่งด้วย an AWS แลมบ์ดา ฟังก์ชั่นการแปลง ดูคำแนะนำได้ที่ การแปลงข้อมูล Amazon Kinesis Firehose ด้วย AWS Lambda. ขั้นตอนนี้เป็นทางเลือกและจำเป็นสำหรับการจำลองการสตรีมข้อมูลเท่านั้น

การสำรวจข้อมูล

มาดาวน์โหลดและเห็นภาพชุดข้อมูลซึ่งอยู่ในสาธารณะ บริการจัดเก็บข้อมูลอย่างง่ายของ Amazon (Amazon S3) บัคเก็ตและเว็บไซต์แบบคงที่:

# The dataset is located in a public bucket and static s3 website.
# https://www.lyft.com/bikes/bay-wheels/system-data import pandas as pd
import numpy as np
import os
from time import sleep !wget -q -O '201907-baywheels-tripdata.zip' https://s3.amazonaws.com/baywheels-data/201907-baywheels-tripdata.csv.zip
!unzip -q -o 201907-baywheels-tripdata.zip
csv_file = os.listdir('.')
data = pd.read_csv('201907-baywheels-tripdata.csv', low_memory=False)
data.head()

ภาพหน้าจอต่อไปนี้แสดงชุดย่อยของข้อมูลก่อนการแปลง
ทำให้โมเดลการจำแนกประเภทจักรยานยนต์และสกูตเตอร์เป็นแบบอัตโนมัติด้วย Amazon SageMaker Autopilot PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

คอลัมน์สุดท้ายของข้อมูลมีเป้าหมายที่เราต้องการคาดการณ์ ซึ่งเป็นตัวแปรไบนารีที่ใช้ค่าใช่หรือไม่ใช่ ซึ่งระบุว่าผู้ใช้เข้าร่วมในโปรแกรม Bike Share for All

มาดูการกระจายของตัวแปรเป้าหมายสำหรับข้อมูลที่ไม่สมดุลกัน

# For plotting
%matplotlib inline
import matplotlib.pyplot as plt
#!pip install seaborn # If you need this library
import seaborn as sns
display(sns.countplot(x='bike_share_for_all_trip', data=data))

ทำให้โมเดลการจำแนกประเภทจักรยานยนต์และสกูตเตอร์เป็นแบบอัตโนมัติด้วย Amazon SageMaker Autopilot PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

ตามที่แสดงในกราฟด้านบน ข้อมูลไม่สมดุล โดยมีผู้เข้าร่วมโปรแกรมน้อยลง

เราจำเป็นต้องสร้างสมดุลของข้อมูลเพื่อป้องกันอคติในการนำเสนอมากเกินไป ขั้นตอนนี้เป็นทางเลือก เนื่องจาก Autopilot ยังเสนอวิธีการภายในเพื่อจัดการกับความไม่สมดุลของคลาสโดยอัตโนมัติ ซึ่งมีค่าเริ่มต้นเป็นเมตริกการตรวจสอบคะแนน F1 นอกจากนี้ หากคุณเลือกสร้างสมดุลข้อมูลด้วยตนเอง คุณสามารถใช้เทคนิคขั้นสูงเพิ่มเติมในการจัดการความไม่สมดุลของคลาส เช่น สโมต or GAN.

สำหรับโพสต์นี้ เราสุ่มตัวอย่างคลาสส่วนใหญ่ (ไม่) เป็นเทคนิคการปรับสมดุลข้อมูล:

รหัสต่อไปนี้ทำให้ข้อมูลสมบูรณ์ยิ่งขึ้นและแสดงตัวอย่างต่ำกว่าในคลาสที่แสดงเกิน:

df = data.copy()
df.drop(columns=['rental_access_method'], inplace=True) df['start_time'] = pd.to_datetime(df['start_time'])
df['start_time'] = pd.to_datetime(df['end_time']) # Adding some day breakdown
df = df.assign(day_of_week=df.start_time.dt.dayofweek, hour_of_day=df.start_time.dt.hour, trip_month=df.start_time.dt.month)
# Breaking the day in 4 parts: ['morning', 'afternoon', 'evening']
conditions = [ (df['hour_of_day'] >= 5) & (df['hour_of_day'] < 12), (df['hour_of_day'] >= 12) & (df['hour_of_day'] < 18), (df['hour_of_day'] >= 18) & (df['hour_of_day'] < 21),
]
choices = ['morning', 'afternoon', 'evening']
df['part_of_day'] = np.select(conditions, choices, default='night')
df.dropna(inplace=True) # Downsampling the majority to rebalance the data
# We are getting about an even distribution
df.sort_values(by='bike_share_for_all_trip', inplace=True)
slice_pointe = int(df['bike_share_for_all_trip'].value_counts()['Yes'] * 2.1)
df = df[-slice_pointe:]
# The data is balanced now. Let's reshuffle the data
df = df.sample(frac=1).reset_index(drop=True)

เราจงใจปล่อยให้คุณลักษณะตามหมวดหมู่ของเราไม่ถูกเข้ารหัส ซึ่งรวมถึงค่าเป้าหมายไบนารีของเราด้วย นี่เป็นเพราะว่า Autopilot ดูแลการเข้ารหัสและถอดรหัสข้อมูลสำหรับเราโดยเป็นส่วนหนึ่งของวิศวกรรมคุณลักษณะอัตโนมัติและการปรับใช้ไปป์ไลน์ดังที่เราเห็นในหัวข้อถัดไป

ภาพหน้าจอต่อไปนี้แสดงตัวอย่างข้อมูลของเรา
ทำให้โมเดลการจำแนกประเภทจักรยานยนต์และสกูตเตอร์เป็นแบบอัตโนมัติด้วย Amazon SageMaker Autopilot PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

ข้อมูลในกราฟต่อไปนี้จะดูเป็นเรื่องปกติ โดยมีการแจกแจงแบบทวิโมดัลแทนจุดสูงสุดสองจุดสำหรับชั่วโมงเช้าและชั่วโมงเร่งด่วนในช่วงบ่าย อย่างที่คุณคาดไว้ นอกจากนี้เรายังสังเกตกิจกรรมต่ำในวันหยุดสุดสัปดาห์และตอนกลางคืน
ทำให้โมเดลการจำแนกประเภทจักรยานยนต์และสกูตเตอร์เป็นแบบอัตโนมัติด้วย Amazon SageMaker Autopilot PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

ในส่วนถัดไป เราจะป้อนข้อมูลไปยัง Autopilot เพื่อให้ทำการทดสอบให้เราได้

สร้างแบบจำลองการจำแนกประเภทไบนารี

Autopilot ต้องการให้เราระบุบัคเก็ตปลายทางอินพุตและเอาต์พุต ใช้อินพุตบัคเก็ตเพื่อโหลดข้อมูลและเอาต์พุตบัคเก็ตเพื่อบันทึกอาร์ติแฟกต์ เช่น วิศวกรรมฟีเจอร์และโน้ตบุ๊ก Jupyter ที่สร้างขึ้น เราเก็บรักษาชุดข้อมูลไว้ 5% เพื่อประเมินและตรวจสอบประสิทธิภาพของโมเดลหลังจากการฝึกอบรมเสร็จสิ้น และอัปโหลดชุดข้อมูล 95% ไปยังบัคเก็ตอินพุต S3 ดูรหัสต่อไปนี้:

import sagemaker
import boto3 # Let's define our storage.
# We will use the default sagemaker bucket and will enforce encryption bucket = sagemaker.Session().default_bucket() # SageMaker default bucket. #Encrypting the bucket
s3 = boto3.client('s3')
SSEConfig={ 'Rules': [ { 'ApplyServerSideEncryptionByDefault': { 'SSEAlgorithm': 'AES256', } }, ] }
s3.put_bucket_encryption(Bucket=bucket, ServerSideEncryptionConfiguration=SSEConfig) prefix = 'sagemaker-automl01' # prefix for ther bucket
role = sagemaker.get_execution_role() # IAM role object to use by SageMaker
sagemaker_session = sagemaker.Session() # Sagemaker API
region = sagemaker_session.boto_region_name # AWS Region # Where we will load our data input_path = "s3://{}/{}/automl_bike_train_share-1".format(bucket, prefix) output_path = "s3://{}/{}/automl_bike_output_share-1".format(bucket, prefix) # Spliting data in train/test set.
# We will use 95% of the data for training and the remainder for testing.
slice_point = int(df.shape[0] * 0.95) training_set = df[:slice_point] # 95%
testing_set = df[slice_point:] # 5% # Just making sure we have split it correctly
assert training_set.shape[0] + testing_set.shape[0] == df.shape[0] # Let's save the data locally and upload it to our s3 data location
training_set.to_csv('bike_train.csv')
testing_set.to_csv('bike_test.csv', header=False) # Uploading file the trasining set to the input bucket
sagemaker.s3.S3Uploader.upload(local_path='bike_train.csv', desired_s3_uri=input_path)

หลังจากที่เราอัปโหลดข้อมูลไปยังปลายทางอินพุต ก็ถึงเวลาเริ่มต้น Autopilot:

from sagemaker.automl.automl import AutoML
# You give your job a name and provide the s3 path where you uploaded the data
bike_automl_binary = AutoML(role=role, target_attribute_name='bike_share_for_all_trip', output_path=output_path, max_candidates=30)
# Starting the training bike_automl_binary.fit(inputs=input_path, wait=False, logs=False)

ทั้งหมดที่เราต้องเริ่มการทดลองคือการเรียกเมธอด fit() Autopilot ต้องการตำแหน่งอินพุตและเอาต์พุต S3 และคอลัมน์แอตทริบิวต์เป้าหมายเป็นพารามิเตอร์ที่จำเป็น หลังจากประมวลผลคุณสมบัติแล้ว Autopilot จะเรียก การปรับโมเดลอัตโนมัติของ SageMaker เพื่อค้นหารุ่นที่ดีที่สุดของแบบจำลองโดยเรียกใช้งานการฝึกอบรมจำนวนมากบนชุดข้อมูลของคุณ เราได้เพิ่มพารามิเตอร์ตัวเลือก max_candidates เพื่อจำกัดจำนวนผู้สมัครเป็น 30 คน ซึ่งเป็นจำนวนงานการฝึกอบรมที่ Autopilot เปิดตัวด้วยอัลกอริธึมและไฮเปอร์พารามิเตอร์ต่างๆ ผสมกัน เพื่อค้นหาโมเดลที่ดีที่สุด หากคุณไม่ระบุพารามิเตอร์นี้ ค่าเริ่มต้นจะอยู่ที่ 250

เราสามารถสังเกตความคืบหน้าของ Autopilot ด้วยรหัสต่อไปนี้:

# Let's monitor the progress this will take a while. Go grup some coffe.
from time import sleep def check_job_status(): return bike_automl_binary.describe_auto_ml_job()['AutoMLJobStatus'] def discribe(): return bike_automl_binary.describe_auto_ml_job() while True: print (check_job_status(), discribe()['AutoMLJobSecondaryStatus'], end='** ') if check_job_status() in ["Completed", "Failed"]: if "Failed" in check_job_status(): print(discribe()['FailureReason']) break sleep(20)

การฝึกอบรมต้องใช้เวลาพอสมควร ขณะที่กำลังทำงาน มาดูเวิร์กโฟลว์ Autopilot กัน
ทำให้โมเดลการจำแนกประเภทจักรยานยนต์และสกูตเตอร์เป็นแบบอัตโนมัติด้วย Amazon SageMaker Autopilot PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

เพื่อค้นหาผู้สมัครที่ดีที่สุด ใช้รหัสต่อไปนี้:

# Let's take a look at the best candidate selected by AutoPilot
from IPython.display import JSON
def jsonView(obj, rootName=None): return JSON(obj, root=rootName, expanded=True) bestCandidate = bike_automl_binary.describe_auto_ml_job()['BestCandidate']
display(jsonView(bestCandidate['FinalAutoMLJobObjectiveMetric'], 'FinalAutoMLJobObjectiveMetric'))

ภาพหน้าจอต่อไปนี้แสดงผลลัพธ์ของเรา
ทำให้โมเดลการจำแนกประเภทจักรยานยนต์และสกูตเตอร์เป็นแบบอัตโนมัติด้วย Amazon SageMaker Autopilot PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

โมเดลของเรามีความถูกต้องในการตรวจสอบถึง 96% ดังนั้นเราจะปรับใช้มัน เราสามารถเพิ่มเงื่อนไขที่เราใช้แบบจำลองได้ก็ต่อเมื่อความถูกต้องสูงกว่าระดับที่กำหนดเท่านั้น

ไปป์ไลน์การอนุมาน

ก่อนที่เราจะปรับใช้โมเดลของเรา ให้ตรวจสอบผู้สมัครที่ดีที่สุดของเราและสิ่งที่เกิดขึ้นในไปป์ไลน์ของเรา ดูรหัสต่อไปนี้:

display(jsonView(bestCandidate['InferenceContainers'], 'InferenceContainers'))

แผนภาพต่อไปนี้แสดงผลลัพธ์ของเรา
ทำให้โมเดลการจำแนกประเภทจักรยานยนต์และสกูตเตอร์เป็นแบบอัตโนมัติด้วย Amazon SageMaker Autopilot PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

Autopilot ได้สร้างแบบจำลองและบรรจุไว้ในคอนเทนเนอร์ที่แตกต่างกันสามคอนเทนเนอร์ โดยแต่ละรายการจะรันงานเฉพาะตามลำดับ: แปลง ทำนาย และแปลงกลับ การอนุมานแบบหลายขั้นตอนนี้เป็นไปได้ด้วย a ไปป์ไลน์การอนุมาน SageMaker

การอนุมานแบบหลายขั้นตอนยังสามารถโยงโมเดลการอนุมานได้หลายแบบ ตัวอย่างเช่น หนึ่งคอนเทนเนอร์สามารถดำเนินการได้ การวิเคราะห์องค์ประกอบหลัก ก่อนส่งข้อมูลไปยังคอนเทนเนอร์ XGBoost

ปรับใช้ไพพ์ไลน์การอนุมานไปยังปลายทาง

กระบวนการปรับใช้เกี่ยวข้องกับโค้ดเพียงไม่กี่บรรทัด:

# We chose to difine an endpoint name.
from datetime import datetime as dt
today = str(dt.today())[:10]
endpoint_name='binary-bike-share-' + today
endpoint = bike_automl_binary.deploy(initial_instance_count=1, instance_type='ml.m5.xlarge', endpoint_name=endpoint_name, candidate=bestCandidate, wait=True)

มากำหนดค่าปลายทางของเราสำหรับการคาดคะเนด้วยตัวทำนาย:

from sagemaker.serializers import CSVSerializer
from sagemaker.deserializers import CSVDeserializer
csv_serializer = CSVSerializer()
csv_deserializer = CSVDeserializer()
# Initialize the predictor
predictor = sagemaker.predictor.Predictor(endpoint_name=endpoint_name, sagemaker_session=sagemaker.Session(), serializer=csv_serializer, deserializer=csv_deserializer )

ตอนนี้เรามีจุดสิ้นสุดและตัวทำนายพร้อมแล้ว ก็ถึงเวลาใช้ข้อมูลการทดสอบที่เราแยกไว้และทดสอบความถูกต้องของแบบจำลองของเรา เราเริ่มต้นด้วยการกำหนดฟังก์ชันยูทิลิตี้ที่ส่งข้อมูลครั้งละหนึ่งบรรทัดไปยังจุดสิ้นสุดการอนุมาน และรับการทำนายเป็นการตอบแทน เพราะเรามี XGBoost โมเดล เราปล่อยตัวแปรเป้าหมายก่อนที่จะส่งบรรทัด CSV ไปยังปลายทาง นอกจากนี้ เราได้ลบส่วนหัวออกจาก CSV การทดสอบก่อนที่จะวนซ้ำในไฟล์ ซึ่งเป็นข้อกำหนดอื่นสำหรับ XGBoost บน SageMaker ดูรหัสต่อไปนี้:

# The fuction takes 3 arguments: the file containing the test set,
# The predictor and finaly the number of lines to send for prediction.
# The function returns two Series: inferred and Actual.
def get_inference(file, predictor, n=1): infered = [] actual = [] with open(file, 'r') as csv: for i in range(n): line = csv.readline().split(',') #print(line) try: # Here we remove the target variable from the csv line before predicting observed = line.pop(14).strip('n') actual.append(observed) except: pass obj = ','.join(line) predicted = predictor.predict(obj)[0][0] infered.append(predicted) pd.Series(infered) data = {'Infered': pd.Series(infered), 'Observed': pd.Series(actual)} return pd.DataFrame(data=data) n = testing_set.shape[0] # The size of the testing data
inference_df = get_inference('bike_test.csv', predictor, n) inference_df['Binary_Result'] = (inference_df['Observed'] == inference_df['Infered'])
display(inference_df.head())

ภาพหน้าจอต่อไปนี้แสดงผลลัพธ์ของเรา
ทำให้โมเดลการจำแนกประเภทจักรยานยนต์และสกูตเตอร์เป็นแบบอัตโนมัติด้วย Amazon SageMaker Autopilot PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

ตอนนี้ มาคำนวณความแม่นยำของแบบจำลองของเรากัน
ทำให้โมเดลการจำแนกประเภทจักรยานยนต์และสกูตเตอร์เป็นแบบอัตโนมัติด้วย Amazon SageMaker Autopilot PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

ดูรหัสต่อไปนี้:

count_binary = inference_df['Binary_Result'].value_counts()
accuracy = count_binary[True]/n
print('Accuracy:', accuracy)

เราได้รับความแม่นยำ 92% ซึ่งต่ำกว่า 96% ที่ได้รับเล็กน้อยระหว่างขั้นตอนการตรวจสอบความถูกต้อง แต่ก็ยังสูงพอ เราไม่ได้คาดหวังว่าความแม่นยำจะเหมือนกันทุกประการ เนื่องจากการทดสอบดำเนินการกับชุดข้อมูลใหม่

การนำเข้าข้อมูล

เราดาวน์โหลดข้อมูลโดยตรงและกำหนดค่าสำหรับการฝึกอบรม ในชีวิตจริง คุณอาจต้องส่งข้อมูลโดยตรงจากอุปกรณ์ Edge ไปยัง Data Lake และให้ SageMaker โหลดจาก Data Lake ลงในโน้ตบุ๊กโดยตรง

Kinesis Data Firehose เป็นตัวเลือกที่ดีและเป็นวิธีที่ตรงไปตรงมาที่สุดในการโหลดข้อมูลการสตรีมลงใน Data Lake ที่เก็บข้อมูล และเครื่องมือวิเคราะห์อย่างน่าเชื่อถือ สามารถจับ แปลง และโหลดข้อมูลการสตรีมไปยัง Amazon S3 และที่จัดเก็บข้อมูล AWS อื่นๆ

สำหรับกรณีการใช้งานของเรา เราสร้างสตรีมการนำส่ง Kinesis Data Firehose ด้วยฟังก์ชันการแปลงแลมบ์ดาเพื่อทำความสะอาดข้อมูลบางส่วนในขณะที่ข้ามสตรีม ดูรหัสต่อไปนี้:

# Data processing libraries
import pandas as pd # Data processing
import numpy as np
import base64
from io import StringIO def lambda_handler(event, context): output = [] print('Received', len(event['records']), 'Records') for record in event['records']: payload = base64.b64decode(record['data']).decode('utf-8') df = pd.read_csv(StringIO(payload), index_col=0) df.drop(columns=['rental_access_method'], inplace=True) df['start_time'] = pd.to_datetime(df['start_time']) df['start_time'] = pd.to_datetime(df['end_time']) # Adding some day breakdown df = df.assign(day_of_week=df.start_time.dt.dayofweek, hour_of_day=df.start_time.dt.hour, trip_month=df.start_time.dt.month) # Breaking the day in 4 parts: ['morning', 'afternoon', 'evening'] conditions = [ (df['hour_of_day'] >= 5) & (df['hour_of_day'] < 12), (df['hour_of_day'] >= 12) & (df['hour_of_day'] < 18), (df['hour_of_day'] >= 18) & (df['hour_of_day'] < 21), ] choices = ['morning', 'afternoon', 'evening'] df['part_of_day'] = np.select(conditions, choices, default='night') df.dropna(inplace=True) # Downsampling the majority to rebalance the data # We are getting about an even distribution df.sort_values(by='bike_share_for_all_trip', inplace=True) slice_pointe = int(df['bike_share_for_all_trip'].value_counts()['Yes'] * 2.1) df = df[-slice_pointe:] # The data is balanced now. Let's reshuffle the data df = df.sample(frac=1).reset_index(drop=True) data = base64.b64encode(bytes(df.to_csv(), 'utf-8')).decode("utf-8") output_record = { 'recordId': record['recordId'], 'result': 'Ok', 'data': data } output.append(output_record) print('Returned', len(output), 'Records') print('Event', event) return {'records': output}

ฟังก์ชัน Lambda นี้ทำการแปลงข้อมูลที่สตรีมจากอุปกรณ์ไปยัง Data Lake แบบเบาบาง คาดว่าจะเป็นไฟล์ข้อมูลที่จัดรูปแบบ CSV

สำหรับขั้นตอนการนำเข้า เราดาวน์โหลดข้อมูลและจำลองสตรีมข้อมูลไปยัง Kinesis Data Firehose ด้วยฟังก์ชันการแปลง Lambda และลงใน Data Lake S3 ของเรา

มาจำลองการสตรีมสองสามบรรทัด:

# Saving the data in one file.
file = '201907-baywheels-tripdata.csv' data.to_csv(file) # Stream the data 'n' lines at a time.
# Only run this for a minute and stop the cell
def streamer(file, n): with open(file, 'r') as csvfile: header = next(csvfile) data = header counter = 0 loop = True while loop == True: for i in range(n): line = csvfile.readline() data+=line # We reached the end of the csv file. if line == '': loop = False counter+=n # Use your kinesis streaming name stream = client.put_record(DeliveryStreamName='firehose12-DeliveryStream-OJYW71BPYHF2', Record={"Data": bytes(data, 'utf-8')}) data = header print( file, 'HTTPStatusCode: '+ str(stream['ResponseMetadata']['HTTPStatusCode']), 'csv_lines_sent: ' + str(counter), end=' -*- ') sleep(random.randrange(1, 3)) return
# Streaming for 500 lines at a time. You can change this number up and down.
streamer(file, 500) # We can now load our data as a DataFrame because it’s streamed into the S3 data lake:
# Getting data from s3 location where it was streamed.
STREAMED_DATA = 's3://firehose12-deliverybucket-11z0ya3patrod/firehose/2020'
csv_uri = sagemaker.s3.S3Downloader.list(STREAMED_DATA)
in_memory_string = [sagemaker.s3.S3Downloader.read_file(file) for file in csv_uri]
in_memory_csv = [pd.read_csv(StringIO(file), index_col=0) for file in in_memory_string]
display(df.tail())

ทำความสะอาด

สิ่งสำคัญคือต้องลบทรัพยากรทั้งหมดที่ใช้ในแบบฝึกหัดนี้เพื่อลดต้นทุน โค้ดต่อไปนี้จะลบจุดสิ้นสุดการอนุมานของ SageMaker ที่เราสร้างขึ้น ตลอดจนข้อมูลการฝึกอบรมและการทดสอบที่เราอัปโหลด:

#Delete the s3 data
predictor.delete_endpoint() # Delete s3 data
s3 = boto3.resource('s3')
ml_bucket = sagemaker.Session().default_bucket()
delete_data = s3.Bucket(ml_bucket).objects.filter(Prefix=prefix).delete()

สรุป

วิศวกร ML นักวิทยาศาสตร์ข้อมูล และนักพัฒนาซอฟต์แวร์สามารถใช้ Autopilot เพื่อสร้างและปรับใช้ไปป์ไลน์การอนุมานโดยมีประสบการณ์ในการเขียนโปรแกรม ML เพียงเล็กน้อยหรือไม่มีเลย Autopilot ช่วยประหยัดเวลาและทรัพยากร โดยใช้วิทยาศาสตร์ข้อมูลและแนวทางปฏิบัติที่ดีที่สุดของ ML องค์กรขนาดใหญ่สามารถเปลี่ยนทรัพยากรด้านวิศวกรรมออกจากการกำหนดค่าโครงสร้างพื้นฐานไปสู่การปรับปรุงรูปแบบและแก้ปัญหาการใช้งานทางธุรกิจได้ สตาร์ทอัพและองค์กรขนาดเล็กสามารถเริ่มต้นใช้งานแมชชีนเลิร์นนิงได้โดยไม่ต้องใช้ความเชี่ยวชาญ ML เพียงเล็กน้อยหรือไม่มีเลย

ในการเริ่มต้นใช้งาน SageMaker Autopilot โปรดดูที่ หน้าสินค้า หรือเข้าถึง SageMaker Autopilot ภายใน SageMaker Studio

เรายังแนะนำให้เรียนรู้เพิ่มเติมเกี่ยวกับคุณสมบัติที่สำคัญอื่นๆ ของ SageMaker เช่น Amazon SageMaker ฟีเจอร์สโตร์ซึ่งรวมเข้ากับ ท่อส่ง Amazon SageMaker เพื่อสร้าง เพิ่มการค้นหาและค้นพบคุณลักษณะ และนำเวิร์กโฟลว์ ML อัตโนมัติมาใช้ซ้ำ คุณสามารถเรียกใช้การจำลอง Autopilot ได้หลายแบบด้วยคุณลักษณะหรือตัวแปรเป้าหมายที่แตกต่างกันในชุดข้อมูลของคุณ คุณยังสามารถใช้วิธีนี้ในฐานะปัญหาการจัดสรรรถแบบไดนามิก ซึ่งโมเดลของคุณพยายามคาดการณ์ความต้องการรถตามเวลา (เช่น เวลาของวันหรือวันในสัปดาห์) หรือสถานที่ หรือทั้งสองอย่างรวมกัน


เกี่ยวกับผู้เขียน

ทำให้โมเดลการจำแนกประเภทจักรยานยนต์และสกูตเตอร์เป็นแบบอัตโนมัติด้วย Amazon SageMaker Autopilot PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.ดั๊ก เอ็มบาย่า เป็นสถาปนิกโซลูชันอาวุโสที่เน้นข้อมูลและการวิเคราะห์ Doug ทำงานอย่างใกล้ชิดกับคู่ค้าของ AWS ช่วยผสานรวมข้อมูลและโซลูชันการวิเคราะห์ในระบบคลาวด์ ประสบการณ์ก่อนหน้าของ Doug รวมถึงการสนับสนุนลูกค้า AWS ในส่วนการแชร์รถและการจัดส่งอาหาร

ทำให้โมเดลการจำแนกประเภทจักรยานยนต์และสกูตเตอร์เป็นแบบอัตโนมัติด้วย Amazon SageMaker Autopilot PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.วาเลริโอ เปโรเน เป็น Applied Science Manager ที่ทำงานเกี่ยวกับ Amazon SageMaker Automatic Model Tuning และ Autopilot

ประทับเวลา:

เพิ่มเติมจาก AWS Machine Learning AWS