Ejercicio con Azure Machine Learning Studio
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.
Datos para la práctica de predicción de rentas de bicicletas
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)
Creación de un recurso de Aprendizaje automático
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
- Lee todo el Notebook para saber más sobre ellos
- Este es el resultado esperado:
- 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.
Carga de un dataset y entrenamiento con el mismo
Creación de un cluster de proceso
- 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
Creación del Dataset
-
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
Creación de un experimento
- 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
Creación de un modelo con Machine Learning Designer
-
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