Created
February 23, 2022 21:08
-
-
Save fclesio/cbb8c255b62f11127a00e0a844ab75fc to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Importação da biblioteca do Boto3 e | |
# criação de sessão para acesso aos recursos | |
import boto3 | |
sessao_boto = boto3.Session(region_name='us-east-1') | |
# Função para pegar a "ROLE" (papel) de execução | |
# IAM dos recursos no Sage Maker | |
from sagemaker import get_execution_role | |
ROLE = get_execution_role() | |
# Importação do Sage Maker SDK e criação | |
# da sessão do Sage Maker SDK | |
import sagemaker | |
sessao_sagemaker = sagemaker.Session(boto_session=sessao_boto) | |
BUCKET ='sagemaker-alura-engenharia-machine-learning' | |
PREFIXO_DADOS = 'dados' | |
PREFIXO_MODELOS = 'modelos' | |
REGIAO = sessao_sagemaker.boto_region_name | |
SEMENTE = 42 | |
import sys | |
sys.path.append("./") | |
import os | |
import io | |
import json | |
import time | |
import numpy as np | |
import pandas as pd | |
import matplotlib.pyplot as plt | |
from sklearn.metrics import accuracy_score | |
from sklearn.metrics import classification_report | |
from sklearn.metrics import confusion_matrix | |
from sklearn.metrics import ConfusionMatrixDisplay | |
from time import strftime, gmtime | |
# Vamos colocar os caminhos em um dicionario | |
# apenas para manter a simplicidade e a consistencia | |
# dos caminhos. Em caso de mudança, essa será refletida | |
# em todos os caminhos. | |
dict_caminho_dados = { | |
"treino": "dados/df_bytebank_treino.csv", | |
"teste": "dados/df_bytebank_teste.csv", | |
"validacao": "dados/df_bytebank_validacao.csv", | |
} | |
# Função para upload dos dados no S3 | |
# para as bases de treinamento, | |
# teste e validação | |
bytebank_treino_caminho = \ | |
sessao_sagemaker.upload_data(path=dict_caminho_dados['treino'], | |
bucket=BUCKET, | |
key_prefix=f'{PREFIXO_DADOS}/treino' | |
) | |
# Upload dos dados de treinamento | |
bytebank_teste_caminho = \ | |
sessao_sagemaker.upload_data(path=dict_caminho_dados['teste'], | |
bucket=BUCKET, | |
key_prefix=f'{PREFIXO_DADOS}/teste' | |
) | |
# Upload dos dados de validação | |
bytebank_validacao_caminho = \ | |
sessao_sagemaker.upload_data(path=dict_caminho_dados['validacao'], | |
bucket=BUCKET, | |
key_prefix=f'{PREFIXO_DADOS}/validacao' | |
) | |
print(bytebank_treino_caminho) | |
# Função para criar os canais de | |
# treinamento que vamos passar para o estimador | |
s3_input_treino =\ | |
sagemaker.TrainingInput(s3_data=bytebank_treino_caminho, | |
content_type='csv') | |
# Canal de teste | |
s3_input_teste =\ | |
sagemaker.TrainingInput(s3_data=bytebank_teste_caminho, | |
content_type='csv') | |
# Canal de validação | |
s3_input_validacao =\ | |
sagemaker.TrainingInput(s3_data=bytebank_validacao_caminho, | |
content_type='csv') | |
# Imagem do XGBoost que vamos usar no container | |
from sagemaker import image_uris | |
container = \ | |
image_uris.retrieve( | |
framework='xgboost', | |
region=REGIAO, | |
version='0.90-2' | |
) | |
# Criação do estimador | |
from sagemaker import estimator | |
estimador_modelo_xgb = \ | |
estimator.Estimator( | |
image_uri=container, | |
role=ROLE, | |
instance_count=1, | |
instance_type='ml.m4.xlarge', | |
output_path=f's3://{BUCKET}/{PREFIXO_MODELOS}', | |
base_job_name='bytebankPythonSDK', | |
sagemaker_session=sessao_sagemaker) | |
# Definição dos hiperparametros | |
estimador_modelo_xgb.set_hyperparameters( | |
max_depth=5, | |
eta=0.3, | |
eval_metric='error', | |
seed=SEMENTE, | |
num_round=100, | |
objective='binary:hinge' | |
) | |
# Ajuste do modelo | |
estimador_modelo_xgb.fit({ | |
'train': s3_input_treino, | |
'validation': s3_input_validacao | |
}) | |
# Importação do serializador CSV e a | |
# definição do objeto de serialização | |
from sagemaker.serializers import CSVSerializer | |
serializer = CSVSerializer() | |
# Deploy do estimador no endpoint | |
modelo_endpoint = \ | |
estimador_modelo_xgb.deploy( | |
initial_instance_count=1, | |
instance_type='ml.t2.medium', | |
endpoint_name='bytebankSDKEndpoint', | |
serializer=serializer, | |
model_name='bytebankPythonSDK-2021-02-15-21-43-56-913' | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment