En esta práctica lo que harás será crear un modelo de predicción de diabetes de acuerdo con un dataset brindado. Todo lo harás con el portal de Azure y Machine Learning Studio. Además, aprenderás a usar un poco mejor la plataforma.
Código de ejecución en Python para el ejercicio de renta de bicis:
endpoint = 'YOUR_ENDPOINT' #Replace with your endpoint
key = 'YOUR_KEY' #Replace with your key
import json
import requests
#An array of features based on five-day weather forecast
x = [[1,1,2022,1,0,6,0,2,0.344167,0.363625,0.805833,0.160446],
[2,1,2022,1,0,0,0,2,0.363478,0.353739,0.696087,0.248539],
[3,1,2022,1,0,1,1,1,0.196364,0.189405,0.437273,0.248309],
[4,1,2022,1,0,2,1,1,0.2,0.212122,0.590435,0.160296],
[5,1,2022,1,0,3,1,1,0.226957,0.22927,0.436957,0.1869]]
#Convert the array to JSON format
input_json = json.dumps({"data": x})
#Set the content type and authentication for the request
headers = {"Content-Type":"application/json",
"Authorization":"Bearer " + key}
#Send the request
response = requests.post(endpoint, input_json, headers=headers)
#If we got a valid response, display the predictions
if response.status_code == 200:
y = json.loads(response.json())
print("Predictions:")
for i in range(len(x)):
print (" Day: {}. Predicted rentals: {}".format(i+1, max(0, round(y["result"][i]))))
else:
print(response)
Para usar Azure Machine Learning Studio necesitamos un recurso de Aprendizaje Automático de Azure que nos proporcionará el área de trabajo y la facturación a nuestra suscripción de Microsoft Azure.
- Dirigete a portal.azure.com Si te lo pide, inicia sesión
- Busca el recurso Aprendizaje automático*
- Configura y crea el recurso
- No te precupes por los apartados de Cuenta de almacenamiento, Almac{emn de claves o Application Insights ya que se autocompleta.
- En registro de contenedor deja ninguno
- Ya puedes darle clic en Revisar y crear
- Espera a que termine de crearse exitosamente, ve a ml.azure.com y selecciona el nombre del recurso que acabas de crear
- Si no aparece, dale clic en el botón de actualizar del lado derecho de la lista o espera un minuto a que aparezca.
- Crea una instancia de cómputo. Guiáte de las capturas de pantalla
Hay cuatro tipos de recursos de computo que puedes crear:
- Instancias de cómputo: estaciones de trabajo de desarrollo que l@s científic@s de datos pueden usar para trabajar con datos y modelos.
- Clústeres de cómputo: clústeres escalables de máquinas virtuales para el procesamiento bajo demanda del código del experimento.
- Clústeres de inferencia: objetivos de implementación para servicios predictivos que utilizan sus modelos entrenados.
- Computación adjunta: vínculos a otros recursos de computación de Azure, como máquinas virtuales o clústeres de Azure Databricks.
- Selecciona una de las máquinas virtuales mostradas (Recuerda cuidar tu crédito de Azure)
- Da clic en siguiente, ponle un nombre al proceso y da clic en Crear
- Ve al apartado de Notebooks y haz clic en el icono de Terminal para abrir una
- ejecuta el siguiente comando que clonará un repositorio con practicas en forma de Notebooks
git clone https://github.com/MicrosoftLearning/mslearn-dp100
- Despliega la carpeta creada (si no aparece después de la ejecución da clic en actualizar). Y entra al Notebook titulado Get Started with Notebooks.
- Ejecuta el Notebook ya sea comando por comando o todo el Notebook con el icono de doble Play en la parte superior
- Deten la instancia de proceso si ya no la usarás ya que son máquinas virtuales y se siguen ejecutando aunque no las uses.
- Ahora creamos un Cluster de Proceso
-
En la siguiente ventana
- Colocamos un nombre al proceso
- Número mímino de nodos: 0
- Número máximo de nodos: 2 (1 si la suscripción o la cuota no te lo permite)
- Deshabilitado el acceso SSH
-
Descarga el siguiente archivo CSV que usaremos para crear uestro dataset https://aka.ms/diabetes-data
-
Ve al apartado de conjuntos de datos (Datasets) y crea uno
- Llena el primer formulario con los siguiente datos:
- Agrega un nombre y descripción a tu dataset
- Selecciona el Tipo de conjunto de datos en Tubular
- En el siguiente formulario carga el archivo CSV del paso anterior y dale clic en siguiente
- En el siguiente formulario deja todo como esta y solo cambia lo siguiente:
- Encabezados de columna como Solo el primer archivo tiene encabezados
- En el aprtado de esquema deja todos seleccionados excepto Path
- Confirma que todo este bien y dale en continuar
- Ve al apartado de ML Automatizado y dale clic en Nueva ejecución de ML Automatizado
- Selecciona el dataset que acabamos de crear y dale siguiente
- En el siguiente formulario
- Selecciona la opción de Crear
- Ponle un nombre a tu experimento
- En Columna de destino selecciona **Diabetic (Integer)
- Selecciona el Cluster de proceso previamente creado
- En la sección de Selección del tipo de tarea selecciona Clasificación (debe aparecer una palomita verde del lado derecho)
- Da clic en Ver opciones de configuración adicionales y replica los valores siguientes y da clic en guardar:
Esto hace que el Tiempo de trabajo de entrenamiento sea de máximo 30 minutos y que el el experimento termine si el modelo alcanza en Valor ponderado de AUC el valor de que pusiste en Umbral de puntuación de métrica.
-
Después le das clic en Ver configuración de caracterización y revisas que Habilitar catracterización este encendido
-
Da clic en Finalizar y espera que termine el experimento
- Cuando se termine de ejecutar eñ experimento, en la vista de detalalle de la ejecución da clic los algoritmos usados debajo de Nombre del algoritmo
- Revisa las métricas arrojadas por el experimento
tutorial-ml-metrics
- Da clic en el botón implementar
- Dale un nombre y una descripción a la implementación del modelo
- En Tipo de proceso selecciona Instancia de Contenedor de Azure
- Habilita la autenticacion
Estro creará un nuevo Modelo junto con un Endpoint o Punto de conexión el cual usaremos para conectarnos mediante Notebooks.
- Ve a la sección de Puntos de conexión, selecciona el que recien has creado, ve a la pestaña de Consumir y espera a que el Punto de conexión REST este disponible (puede tardar unos minutos)
- ML Studio te notificará cuando este listo. Sal y vuelve a entrar a tu Endpoint para actualizarlo y que aparezca la URL
-
Copia y guarda la URL del Punto de conexión REST y la Clave Principal o Primary key
-
Ve a la sección Notebooks, abre la carpeta mslearn-dp100 y abre el notebook 02-Get AutoML Prediction
-
Coloca la URL del Endpoint como valor de la variable endpoint y la Primary Key como valor de la variable key
-
Ejecuta el notebook y observa el resultado
-
Si ya no lo vas a ocupar, borra el cluster de proceso
-
Si eliminaste el Cluster de proceso crea uno nuevo
-
Ve al apartado de Diseñador con el menú de la izquierda
-
Selecciona en el apartado de Canalizaciones el único pipeline que te aparece
-
Si no aparece ninguno da clic en Módulos creados previamente fáciles de usar
- Cambia el nombre del pipeline haciendo clic en el nombre de la parte superior
- Selecciona una instancia de cómputo desde la configuración y despúes Selección de destino de proceso en el menú de la derecha
- Expande el apartado de Datasets de la parte izquierda y arrastra al área gris de en medio el dataset que hemos creado (el único que debería aparecer)
- Agrega la transformación Normalize Data (te puedes apoyar de la barra de búsqueda)
-
Selecciona el nuevo elemento y parecerá uan sección en la parte izquierda. Dale clic en Editar columna y como en la imagen agrega las siguientes columnas:
- PlasmaGlucose
- DiastolicBloodPressure
- TricepsThickness
- SerumInsulin
- BMI
- DiabetesPedigree
- Agrega el elemento de transformación Split Data al diseñador
Conecta los elementos como se ve en la imagen
- Selecciona el elemento Split Data y configuralo como la siguiente imagen:
- Agrega el elemento Train Model y conecta la salida izquierda de Split Data con la entrada derecha de Train Model
- Da clic en Train Model y en Editar Columnas en el campo de texto solo agrega la columna Diabetic y dale Guardar
-
Agrega el elemento Two-Class Logistic Regression a la izquierda de Split Data y arriba de Train Model conecta su única salida a la entrada restante de Train Model
-
Agrega el elemento Score Model debajo de Train Model y conecta la salida de Train Model a la entrada izquierda y Split Data a la entrada derecha
-
Agrega el elemento Evaluate Model y conecta la salida de Score Model a la entrada izquierda de Evaluate Model
- El diagrama del diseñador te debe quedar similar a este:
-
Una vez hecho esto dale clic en Enviar, dale en Crear Nuevo, colocale un nombre y da clic en enviar para crear un nuevo experimento
-
Una ves terminada la ejecución exitosa de nuestro experimento En el diseñador > Borradores de canalización > Seleccionamos le que hicimos
-
Da clic en Crear canalización de Interferencia y selecciona canalización de inferencia en tiempo real
- Se abrirá un pipeline nuevo
- Renombralo a Predicción Diabetes
-
Elimina el diabetes dataset (O como le hayas puesto a tu dataset)
-
Coloca el módulo Enter Data Manually
- Da clic en el nuevo módulo y en la sección de Data coloca lo siguiente:
PatientID,Pregnancies,PlasmaGlucose,DiastolicBloodPressure,TricepsThickness,SerumInsulin,BMI,DiabetesPedigree,Age
1882185,9,104,51,7,24,27.36983156,1.350472047,43
1662484,6,73,61,35,24,18.74367404,1.074147566,75
1228510,4,115,50,29,243,34.69215364,0.741159926,59
- Conectalo de la misma forma que estaba el dataset
-
Elimina el módulo Evaluate Model ya que no es útil para nueva data
-
Elimina la conexión entre Score Model y Web Service Output
-
Agrega el módulo Execute Python Script
-
Conecta la salida de Score Model con la primer entrada de izquierda a derecha de Execute Python Script. De este último ejecuta su salida con Web Service Output.
- Da clic Execute Python Script y remplaza todo el código del Script por lo siguiente:
import pandas as pd
def azureml_main(dataframe1 = None, dataframe2 = None):
scored_results = dataframe1[['PatientID', 'Scored Labels', 'Scored Probabilities']]
scored_results.rename(columns={'Scored Labels':'DiabetesPrediction',
'Scored Probabilities':'Probability'},
inplace=True)
return scored_results
- El diagrama resultante debe ser similar a este:
-
Dale clic en enviar, crea un nuevo experimento y colocale un nombre nuevo.
-
Una vez terminada la ejecución das clic al botón Implementar y selecciona la opción Implementar nuevo punto de conexión en tiempo real y con el Tipo de proceso Instancia de Contenedor de Azure
- Espera a que se despliegue el web service
-
Ve a la sección de puntos de conexión y abre el que acabamos de crear
-
En la pestaña de cconsumir guarda el punto de conexión REST y el Primary Key
-
Ve a la sección de Notebooks, agre la carpeta mslearn-dp100. Posteriormente accede al notebook 03-Get Designer Prediction
También puedes copiar y pegar el código desde aquí:
endpoint = 'YOUR_ENDPOINT' #Replace with your endpoint
key = 'YOUR_KEY' #Replace with your key
import urllib.request
import json
import os
data = {
"Inputs": {
"WebServiceInput0":
[
{
'PatientID': 1882185,
'Pregnancies': 9,
'PlasmaGlucose': 104,
'DiastolicBloodPressure': 51,
'TricepsThickness': 7,
'SerumInsulin': 24,
'BMI': 27.36983156,
'DiabetesPedigree': 1.3504720469999998,
'Age': 43,
},
],
},
"GlobalParameters": {
}
}
body = str.encode(json.dumps(data))
headers = {'Content-Type':'application/json', 'Authorization':('Bearer '+ key)}
req = urllib.request.Request(endpoint, body, headers)
try:
response = urllib.request.urlopen(req)
result = response.read()
json_result = json.loads(result)
output = json_result["Results"]["WebServiceOutput0"][0]
print('Patient: {}\nPrediction: {}\nProbability: {:.2f}'.format(output["PatientID"],
output["DiabetesPrediction"],
output["Probability"]))
except urllib.error.HTTPError as error:
print("The request failed with status code: " + str(error.code))
# Print the headers to help debug
print(error.info())
print(json.loads(error.read().decode("utf8", 'ignore')))
-
Suplanta el endpoint y el primary key en donde corresponden y ejecuta el Notebook
-
Elimina los recursos para evitar que se gasten tu crédito de Azure