अमेज़ॅन सेजमेकर ऑटोपायलट प्लेटोब्लॉकचेन डेटा इंटेलिजेंस के साथ साझा बाइक और स्कूटर वर्गीकरण मॉडल को स्वचालित करें। लंबवत खोज. ऐ.

अमेज़ॅन सेजमेकर ऑटोपायलट के साथ साझा बाइक और स्कूटर वर्गीकरण मॉडल को स्वचालित करें

अमेज़ॅन सैजमेकर ऑटोपायलट संगठनों के लिए कोड की कुछ पंक्तियों के साथ एंड-टू-एंड मशीन लर्निंग (एमएल) मॉडल और अनुमान पाइपलाइन को जल्दी से बनाना और तैनात करना संभव बनाता है। बिना किसी कोड के बिलकुल भी साथ में अमेज़ॅन सैजमेकर स्टूडियो. ऑटोपायलट बुनियादी ढांचे को कॉन्फ़िगर करने के भारी भार और फीचर इंजीनियरिंग, मॉडल चयन और हाइपरपैरामीटर ट्यूनिंग सहित पूरी पाइपलाइन बनाने में लगने वाले समय को ऑफलोड करता है।

इस पोस्ट में, हम दिखाते हैं कि ऑटोपायलट के साथ कच्चे डेटा से एक मजबूत और पूरी तरह से तैनात अनुमान पाइपलाइन तक कैसे जाया जाए।

समाधान अवलोकन

हम का उपयोग करें बाइकशेयरिंग पर Lyft का सार्वजनिक डेटासेट इस सिमुलेशन से यह अनुमान लगाया जा सकता है कि कोई उपयोगकर्ता इसमें भाग लेता है या नहीं सभी के लिए बाइक शेयर कार्यक्रम. यह एक सरल द्विआधारी वर्गीकरण समस्या है।

हम यह दिखाना चाहते हैं कि बाइक शेयर फॉर ऑल कार्यक्रम में उनकी भागीदारी के आधार पर उपयोगकर्ताओं को वर्गीकृत करने के लिए एक स्वचालित और वास्तविक समय अनुमान पाइपलाइन बनाना कितना आसान है। इस प्रयोजन के लिए, हम सैन फ्रांसिस्को खाड़ी क्षेत्र में संचालित एक काल्पनिक बाइकशेयर कंपनी के लिए एंड-टू-एंड डेटा अंतर्ग्रहण और अनुमान पाइपलाइन का अनुकरण करते हैं।

आर्किटेक्चर को दो भागों में विभाजित किया गया है: अंतर्ग्रहण पाइपलाइन और अनुमान पाइपलाइन।
अमेज़ॅन सेजमेकर ऑटोपायलट प्लेटोब्लॉकचेन डेटा इंटेलिजेंस के साथ साझा बाइक और स्कूटर वर्गीकरण मॉडल को स्वचालित करें। लंबवत खोज. ऐ.

हम मुख्य रूप से इस पोस्ट के पहले खंड में एमएल पाइपलाइन पर ध्यान केंद्रित करते हैं, और दूसरे भाग में डेटा अंतर्ग्रहण पाइपलाइन की समीक्षा करते हैं।

.. पूर्वापेक्षाएँ

इस उदाहरण का अनुसरण करने के लिए, निम्नलिखित आवश्यक शर्तें पूरी करें:

  1. एक नया सेजमेकर नोटबुक इंस्टेंस बनाएं.
  2. एक बनाएं अमेज़न Kinesis डेटा Firehose एक के साथ डिलीवरी स्ट्रीम AWS लाम्बा परिवर्तन समारोह. निर्देशों के लिए देखें AWS लैम्ब्डा के साथ अमेज़ॅन किनेसिस फ़ायरहोज़ डेटा परिवर्तन. यह चरण वैकल्पिक है और केवल डेटा स्ट्रीमिंग का अनुकरण करने के लिए आवश्यक है।

डाटा अन्वेषण

आइए डेटासेट को डाउनलोड करें और विज़ुअलाइज़ करें, जो सार्वजनिक रूप से स्थित है अमेज़न सरल भंडारण सेवा (अमेज़ॅन 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()

निम्नलिखित स्क्रीनशॉट परिवर्तन से पहले डेटा का एक सबसेट दिखाता है।
अमेज़ॅन सेजमेकर ऑटोपायलट प्लेटोब्लॉकचेन डेटा इंटेलिजेंस के साथ साझा बाइक और स्कूटर वर्गीकरण मॉडल को स्वचालित करें। लंबवत खोज. ऐ.

डेटा के अंतिम कॉलम में वह लक्ष्य होता है जिसकी हम भविष्यवाणी करना चाहते हैं, जो एक बाइनरी वैरिएबल है जो हां या नहीं मान लेता है, यह दर्शाता है कि उपयोगकर्ता बाइक शेयर फॉर ऑल प्रोग्राम में भाग लेता है या नहीं।

आइए किसी भी डेटा असंतुलन के लिए हमारे लक्ष्य चर के वितरण पर एक नज़र डालें।

# 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))

अमेज़ॅन सेजमेकर ऑटोपायलट प्लेटोब्लॉकचेन डेटा इंटेलिजेंस के साथ साझा बाइक और स्कूटर वर्गीकरण मॉडल को स्वचालित करें। लंबवत खोज. ऐ.

जैसा कि ऊपर दिए गए ग्राफ़ में दिखाया गया है, डेटा असंतुलित है, कार्यक्रम में कम लोग भाग ले रहे हैं।

अति-प्रतिनिधित्व पूर्वाग्रह को रोकने के लिए हमें डेटा को संतुलित करने की आवश्यकता है। यह चरण वैकल्पिक है क्योंकि ऑटोपायलट वर्ग असंतुलन को स्वचालित रूप से संभालने के लिए एक आंतरिक दृष्टिकोण भी प्रदान करता है, जो कि 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)

हमने जानबूझकर अपने द्विआधारी लक्ष्य मान सहित अपनी श्रेणीगत विशेषताओं को एन्कोडेड नहीं छोड़ा है। ऐसा इसलिए है क्योंकि ऑटोपायलट स्वचालित फीचर इंजीनियरिंग और पाइपलाइन परिनियोजन के हिस्से के रूप में हमारे लिए डेटा को एन्कोडिंग और डिकोड करने का ख्याल रखता है, जैसा कि हम अगले भाग में देखते हैं।

निम्नलिखित स्क्रीनशॉट हमारे डेटा का एक नमूना दिखाता है।
अमेज़ॅन सेजमेकर ऑटोपायलट प्लेटोब्लॉकचेन डेटा इंटेलिजेंस के साथ साझा बाइक और स्कूटर वर्गीकरण मॉडल को स्वचालित करें। लंबवत खोज. ऐ.

निम्नलिखित ग्राफ़ में डेटा अन्यथा सामान्य दिखता है, जैसा कि आप उम्मीद करेंगे, द्वि-मॉडल वितरण सुबह के घंटों और दोपहर के भीड़-भाड़ वाले घंटों के लिए दो शिखरों का प्रतिनिधित्व करता है। हम सप्ताहांत और रात में भी कम गतिविधियाँ देखते हैं।
अमेज़ॅन सेजमेकर ऑटोपायलट प्लेटोब्लॉकचेन डेटा इंटेलिजेंस के साथ साझा बाइक और स्कूटर वर्गीकरण मॉडल को स्वचालित करें। लंबवत खोज. ऐ.

अगले भाग में, हम ऑटोपायलट को डेटा फीड करते हैं ताकि वह हमारे लिए एक प्रयोग चला सके।

एक द्विआधारी वर्गीकरण मॉडल बनाएं

ऑटोपायलट के लिए आवश्यक है कि हम इनपुट और आउटपुट गंतव्य बकेट निर्दिष्ट करें। यह डेटा लोड करने के लिए इनपुट बकेट का उपयोग करता है और फीचर इंजीनियरिंग और जेनरेटेड ज्यूपिटर नोटबुक जैसी कलाकृतियों को सहेजने के लिए आउटपुट बकेट का उपयोग करता है। प्रशिक्षण पूरा होने के बाद मॉडल के प्रदर्शन का मूल्यांकन और सत्यापन करने के लिए हम 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)

इनपुट गंतव्य पर डेटा अपलोड करने के बाद, ऑटोपायलट शुरू करने का समय आ गया है:

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)

प्रयोग शुरू करने के लिए हमें बस फिट() विधि को कॉल करना है। ऑटोपायलट को आवश्यक पैरामीटर के रूप में इनपुट और आउटपुट S3 स्थान और लक्ष्य विशेषता कॉलम की आवश्यकता होती है। फीचर प्रोसेसिंग के बाद, ऑटोपायलट कॉल करता है SageMaker स्वचालित मॉडल ट्यूनिंग अपने डेटासेट पर कई प्रशिक्षण कार्य चलाकर किसी मॉडल का सर्वोत्तम संस्करण ढूंढना। हमने उम्मीदवारों की संख्या को 30 तक सीमित करने के लिए वैकल्पिक max_candidates पैरामीटर जोड़ा है, जो कि प्रशिक्षण नौकरियों की संख्या है जिसे ऑटोपायलट सर्वोत्तम मॉडल खोजने के लिए एल्गोरिदम और हाइपरपैरामीटर के विभिन्न संयोजनों के साथ लॉन्च करता है। यदि आप यह पैरामीटर निर्दिष्ट नहीं करते हैं, तो यह डिफ़ॉल्ट रूप से 250 पर आ जाता है।

हम निम्नलिखित कोड के साथ ऑटोपायलट की प्रगति देख सकते हैं:

# 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)

प्रशिक्षण पूरा होने में कुछ समय लगता है। जब यह चल रहा हो, आइए ऑटोपायलट वर्कफ़्लो को देखें।
अमेज़ॅन सेजमेकर ऑटोपायलट प्लेटोब्लॉकचेन डेटा इंटेलिजेंस के साथ साझा बाइक और स्कूटर वर्गीकरण मॉडल को स्वचालित करें। लंबवत खोज. ऐ.

सर्वोत्तम उम्मीदवार ढूंढने के लिए, निम्नलिखित कोड का उपयोग करें:

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

निम्न स्क्रीनशॉट हमारे आउटपुट को दर्शाता है।
अमेज़ॅन सेजमेकर ऑटोपायलट प्लेटोब्लॉकचेन डेटा इंटेलिजेंस के साथ साझा बाइक और स्कूटर वर्गीकरण मॉडल को स्वचालित करें। लंबवत खोज. ऐ.

हमारे मॉडल ने 96% की सत्यापन सटीकता हासिल की, इसलिए हम इसे तैनात करने जा रहे हैं। हम ऐसी शर्त जोड़ सकते हैं कि हम मॉडल का उपयोग केवल तभी करें जब सटीकता एक निश्चित स्तर से ऊपर हो।

अनुमान पाइपलाइन

इससे पहले कि हम अपना मॉडल तैनात करें, आइए अपने सर्वश्रेष्ठ उम्मीदवार की जांच करें और हमारी पाइपलाइन में क्या हो रहा है। निम्नलिखित कोड देखें:

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

निम्नलिखित चित्र हमारा आउटपुट दिखाता है।
अमेज़ॅन सेजमेकर ऑटोपायलट प्लेटोब्लॉकचेन डेटा इंटेलिजेंस के साथ साझा बाइक और स्कूटर वर्गीकरण मॉडल को स्वचालित करें। लंबवत खोज. ऐ.

ऑटोपायलट ने मॉडल बनाया है और इसे तीन अलग-अलग कंटेनरों में पैक किया है, प्रत्येक क्रमिक रूप से एक विशिष्ट कार्य चला रहा है: परिवर्तन, भविष्यवाणी और रिवर्स-ट्रांसफॉर्म। यह बहु-चरणीय अनुमान एक के साथ संभव है सेजमेकर अनुमान पाइपलाइन।

एक बहु-चरणीय अनुमान कई अनुमान मॉडलों को भी श्रृंखलाबद्ध कर सकता है। उदाहरण के लिए, एक कंटेनर कार्य कर सकता है मुख्य घटक विश्लेषण 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 )

अब जब हमारे पास अपना समापन बिंदु और भविष्यवक्ता तैयार है, तो हमारे द्वारा अलग रखे गए परीक्षण डेटा का उपयोग करने और हमारे मॉडल की सटीकता का परीक्षण करने का समय आ गया है। हम एक उपयोगिता फ़ंक्शन को परिभाषित करके शुरू करते हैं जो डेटा को एक समय में एक पंक्ति में हमारे अनुमान समापन बिंदु पर भेजता है और बदले में एक भविष्यवाणी प्राप्त करता है। क्योंकि हमारे पास एक एक्सजीबूस्ट मॉडल, हम CSV लाइन को अंतिम बिंदु पर भेजने से पहले लक्ष्य चर को छोड़ देते हैं। इसके अतिरिक्त, हमने फ़ाइल के माध्यम से लूपिंग करने से पहले परीक्षण सीएसवी से हेडर को हटा दिया, जो सेजमेकर पर XGBoost के लिए एक और आवश्यकता भी है। निम्नलिखित कोड देखें:

# 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())

निम्न स्क्रीनशॉट हमारे आउटपुट को दर्शाता है।
अमेज़ॅन सेजमेकर ऑटोपायलट प्लेटोब्लॉकचेन डेटा इंटेलिजेंस के साथ साझा बाइक और स्कूटर वर्गीकरण मॉडल को स्वचालित करें। लंबवत खोज. ऐ.

आइए अब अपने मॉडल की सटीकता की गणना करें।
अमेज़ॅन सेजमेकर ऑटोपायलट प्लेटोब्लॉकचेन डेटा इंटेलिजेंस के साथ साझा बाइक और स्कूटर वर्गीकरण मॉडल को स्वचालित करें। लंबवत खोज. ऐ.

निम्नलिखित कोड देखें:

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

हमें 92% की सटीकता मिलती है। यह सत्यापन चरण के दौरान प्राप्त 96% से थोड़ा कम है, लेकिन यह अभी भी काफी अधिक है। हम सटीकता के बिल्कुल समान होने की उम्मीद नहीं करते हैं क्योंकि परीक्षण एक नए डेटासेट के साथ किया जाता है।

डेटा अंतर्ग्रहण

हमने सीधे डेटा डाउनलोड किया और इसे प्रशिक्षण के लिए कॉन्फ़िगर किया। वास्तविक जीवन में, आपको डेटा को सीधे एज डिवाइस से डेटा लेक में भेजना पड़ सकता है और सेजमेकर को इसे सीधे डेटा लेक से नोटबुक में लोड करना पड़ सकता है।

काइनेसिस डेटा फ़ायरहोज़ एक अच्छा विकल्प है और स्ट्रीमिंग डेटा को डेटा लेक, डेटा स्टोर और एनालिटिक्स टूल में विश्वसनीय रूप से लोड करने का सबसे सीधा तरीका है। यह स्ट्रीमिंग डेटा को Amazon S3 और अन्य AWS डेटा स्टोर में कैप्चर, ट्रांसफ़ॉर्म और लोड कर सकता है।

हमारे उपयोग के मामले में, हम स्ट्रीम को पार करते समय कुछ हल्के डेटा की सफाई करने के लिए लैम्ब्डा ट्रांसफ़ॉर्मेशन फ़ंक्शन के साथ एक किनेसिस डेटा फ़ायरहोज़ डिलीवरी स्ट्रीम बनाते हैं। निम्नलिखित कोड देखें:

# 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}

यह लैम्ब्डा फ़ंक्शन उपकरणों से डेटा लेक पर स्ट्रीम किए गए डेटा का हल्का परिवर्तन करता है। यह एक CSV स्वरूपित डेटा फ़ाइल की अपेक्षा करता है।

अंतर्ग्रहण चरण के लिए, हम डेटा डाउनलोड करते हैं और लैम्ब्डा ट्रांसफ़ॉर्म फ़ंक्शन के साथ किनेसिस डेटा फ़ायरहोज़ और हमारे 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())

क्लीन अप

लागत को कम करने के लिए इस अभ्यास में उपयोग किए गए सभी संसाधनों को हटाना महत्वपूर्ण है। निम्नलिखित कोड हमारे द्वारा बनाए गए सेजमेकर अनुमान समापन बिंदु को हटा देता है और साथ ही हमारे द्वारा अपलोड किए गए प्रशिक्षण और परीक्षण डेटा को भी हटा देता है:

#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()

निष्कर्ष

एमएल इंजीनियर, डेटा वैज्ञानिक और सॉफ्टवेयर डेवलपर ऑटोपायलट का उपयोग बिना किसी एमएल प्रोग्रामिंग अनुभव के एक अनुमान पाइपलाइन बनाने और तैनात करने के लिए कर सकते हैं। ऑटोपायलट डेटा विज्ञान और एमएल सर्वोत्तम प्रथाओं का उपयोग करके समय और संसाधनों की बचत करता है। बड़े संगठन अब इंजीनियरिंग संसाधनों को बुनियादी ढांचे के विन्यास से हटाकर मॉडल में सुधार और व्यावसायिक उपयोग के मामलों को हल करने की दिशा में स्थानांतरित कर सकते हैं। स्टार्टअप और छोटे संगठन कम या बिना एमएल विशेषज्ञता के भी मशीन लर्निंग शुरू कर सकते हैं।

सेजमेकर ऑटोपायलट के साथ आरंभ करने के लिए, देखें उत्पाद पृष्ठ या सेजमेकर स्टूडियो के भीतर सेजमेकर ऑटोपायलट तक पहुंचें।

हम सेजमेकर द्वारा पेश की जाने वाली अन्य महत्वपूर्ण सुविधाओं के बारे में अधिक जानने की भी सलाह देते हैं, जैसे कि अमेज़न SageMaker फ़ीचर स्टोर, जो के साथ एकीकृत करता है अमेज़न SageMaker पाइपलाइन बनाने, सुविधा खोज और खोज जोड़ने और स्वचालित एमएल वर्कफ़्लो का पुन: उपयोग करने के लिए। आप अपने डेटासेट में विभिन्न फीचर या लक्ष्य वेरिएंट के साथ कई ऑटोपायलट सिमुलेशन चला सकते हैं। आप इसे एक गतिशील वाहन आवंटन समस्या के रूप में भी देख सकते हैं जिसमें आपका मॉडल समय (जैसे दिन का समय या सप्ताह का दिन) या स्थान, या दोनों के संयोजन के आधार पर वाहन की मांग की भविष्यवाणी करने का प्रयास करता है।


लेखक के बारे में

अमेज़ॅन सेजमेकर ऑटोपायलट प्लेटोब्लॉकचेन डेटा इंटेलिजेंस के साथ साझा बाइक और स्कूटर वर्गीकरण मॉडल को स्वचालित करें। लंबवत खोज. ऐ.डौग म्बाया डेटा और एनालिटिक्स में फोकस के साथ एक वरिष्ठ समाधान वास्तुकार हैं। डौग AWS भागीदारों के साथ मिलकर काम करता है, जिससे उन्हें क्लाउड में डेटा और एनालिटिक्स समाधान को एकीकृत करने में मदद मिलती है। डौग के पूर्व अनुभव में राइड शेयरिंग और फूड डिलीवरी सेगमेंट में AWS ग्राहकों का समर्थन करना शामिल है।

अमेज़ॅन सेजमेकर ऑटोपायलट प्लेटोब्लॉकचेन डेटा इंटेलिजेंस के साथ साझा बाइक और स्कूटर वर्गीकरण मॉडल को स्वचालित करें। लंबवत खोज. ऐ.वैलेरियो पेरोन Amazon SageMaker ऑटोमैटिक मॉडल ट्यूनिंग और ऑटोपायलट पर काम करने वाला एक एप्लाइड साइंस मैनेजर है।

समय टिकट:

से अधिक AWS मशीन लर्निंग

अमेज़ॅन सेजमेकर भू-स्थानिक क्षमताओं का उपयोग करके अंतर्दृष्टि प्राप्त करने के लिए गतिशीलता डेटा का उपयोग करें अमेज़न वेब सेवाएँ

स्रोत नोड: 1938140
समय टिकट: जनवरी 17, 2024