Presentación Introducción a Machine Learning
- Watson Studio: Watson Studio es una herramienta end-to-end que permite desarrollar modelos de machine learning y deep learning combinando los principales proyectos Open Source y herramientas propias de IBM en la nube.
- Jupyter Notebook: Es una aplicación web Open Source que le permite crear y compartir documentos que contienen código en vivo, ecuaciones, visualizaciones y texto narrativo.
- Cuenta activa de IBM Cloud
Descarga o clona el repositorio watson-studio
localmente.
En una terminal, puedes ejecutar:
$ git clone https://github.com/libardolara/watson-studio
- Crea el servicio Object Storage
- Crea el servicio Watson Studio
- Crea el servicio Machine Learning
Abre tu servicio de Watson Studio ya sea en dashboard de IBM Cloud o en el site de Watson Studio haciendo click en Sign in
- En la pagina principal de Watson Studio haz click en New Project y crea un proyecto estándard con todos los recursos (Complete)
- Dale un nombre a tu proyecto
- Asegurate que en Storage este escogido el servicio de Object Storage que creaste en el numeral anterior. Si no esta seleccionado debes hacer click en Add > Existing y selecciona de la lista desplegable el servicio.
- Haz click en Create
Vamos a agregar al proyecto servicios adicionales como Watson Machine Learning
- Haz click en la pestaña Settings
- Navega hacia abajo hasta la sección Associated Services
- Haz click en Add Service y selecciona Watson
- En la lista de servicios de Watson haz click Add para el servicio de Machine Learning
- En la pestaña Existing selecciona tu servicio de Machine Learning
- La herramienta te redirige al proyecto en la sección Associated Services
- En la pestaña de Assests en la sección Load arrastra el archivo Churn_ds.csv
- Al cargar un archivo se crea automaticamnte un Data Asset. Haz click en el Data Asset con el nombre Churn_ds.csv.
- Analiza los datos, si necesitas entender el contexto de las columnas encuentra la metadata en Churn_metadata.txt
- Haz click en Refine
En este punto vamos a usar el servicio Data Refinery para crear un flujo de modificación de los datos.
- Haz click en el menú de los 3 puntos para la Columna RowNumber y selecciona la opción Remove
- Repite el punto anterior para las columnas CustomerID y Surname
- En el campo Operation pega el siguiente codigo para cambiar los campos que deberian ser enteros
mutate_at(vars('CreditScore','Age','Tenure','NumOfProducts','HasCrCard','IsActiveMember','Exited'),funs(as.integer))
Data Refinery permite usar codigo R para modificar las columnas del data set.
- En el campo Operation pega el siguiente codigo para cambiar los campos que deberian ser decimales
mutate_at(vars('Balance','EstimatedSalary'),funs(as.numeric))
- Ahora ve a la pestaña Profile y observa la distribución de cada columna.
- Ahora ve a la pestaña Visualization y crea un Histograma con variable x CreditScore particionado por Gender
- Descarga la grafica haciendo click en el icono de descargar.
- Activa el flujo de datos haciendo click en el botón de play (Un triangulo).
- Haz click en el botón Save and Run
- En el dialogo emergente haz click en View y espera a que el flujo termine.
- Vuelve a tu proyecto haciendo click en el nombre del proyecto en el menú de navegación
- En el panel de Assets navega hacia abajo a la sección de Watson Machine Learning
- Haz click en New Watson Machine Learning model
- Dale un nombre a modelo
- Selecciona en Runtime el ambiente Default Spark Scala 2.11
- Selecciona la opción Manual para poder seleccionar los modelos que se probaran.
- Haz click en Create para crear el modelo
- En el paso Data Assets, selecciona el set que se creo apartir del Data Flow del numeral anterior.
- Haz click en Next
- En el paso Technique selecciona como Column value to predict la columna objetivo Exited
- Asegurate que la tecnica sugerida sea Binary Classification
- Haz click en Add Estimators para seleccionar los modelos que evaluaremos.
- Selecciona todos los estimadores y haz click en Add
- Haz click en Next para que comience el entrenamiento de los modelos.
- Espera a que los modelos terminen de entrenar.
- Analiza los resultados de los modelos
- Selecciona el mejor model, tipicamente es el RandomForestClassifier y haz click en el botón Save
- Ve al tab Deployments y haz click en Add Deployment
- Dale un nombre al Despliegue
- Selecciona el metodo de despliege Web Service
- Haz click en Save
- Espera hasta que el estado del despliegue diga
DEPLOY_SUCCESS
y haz click sobre el nombre del despliegue.
- Navega en la pestaña Implementation para entender como hacer los llamados a través de REST APIs
- Navega en la pestaña Test y haz un llamado al modelo.
- Vuelve a tu proyecto, a la pestaña Assets y navega a la sección Notebooks
- Haz click en New notebook
- Selecciona la pestaña From URL
- Dale un nombre al Notebook
- En el campo Notebook URL copia la dirección
https://github.com/libardolara/watson-studio/blob/master/Churn_notebook.ipynb
- Selecciona como Runtime el servicio ambiente por defecto con pytho 3.5 y Spark: Default Spark Python 3.5 XS
- Haz click en Create Notebook
- Asegurate que el Kernel diga Python 3.5 y Spark 2.1 o mayor.
- Sigue las instrucciones que estan en el Notebook.
- En el catalogo de IBM Cloud, crea el servicio de Node-RED
- Dale un nombre único a la aplicación, este nombre será usado para crear un subdominio web.
- Haz click en Crear
- Espera a que la aplicación inicialice
- De la pestaña “input” arrastre el bloque “inject”
- De doble click sobr este bloque y en la celda de “Payload” seleccione “JSON”
- Bajo la pestaña “Function” arrastre el bloque “function” y conéctelo después del bloque “inject”
- De doble click sobre este bloque que acaba de agregar y en la celda “Name” coloque “Token Header”. Luego en la casilla “Function” copie el siguiente código y péguelo reemplazando todo el campo:
msg.fields = msg.payload;
msg.headers={"Content-type": "application/json"};
return msg;
- En la pestaña “Function” arrastre el bloque “http request” y conéctelo después del bloque del punto anterior.
- De doble click sobre el bloque de “http request” y realice la siguiente configuración en las siguientes celdas:
“Method” -> GET “URL” -> https://us-south.ml.cloud.ibm.com/v3/identity/token Marque la casilla “Use basic authentication”. Esto habilitará las celdas “username” y “password”. Estas celdas deben ser llenadas con el usuario y contraseña de su servicio de Watson Machine Learning. “Name” -> Token request
La base url https://us-south.ml.cloud.ibm.com depende de la región en que se desplegó el servicio (Dallas, Londres, Frankfurt o Tokio) Si tienes dudas del endpoint correcto, puedes revisar en las credenciales del servicio Watson Machine Learning
- Bajo la pestaña “Function” agregue el bloque llamado “function”. Arrástrelo y conéctelo después del bloque del punto anterior.
- De doble click sobre este bloque que acaba de arrastrar y en la celda “Name” escriba “Grab Token”. Luego en la celda “Function” agregue la siguiente línea de código en la primera línea:
msg.token = JSON.parse(msg.payload).token;
return msg;
- Arrastre otro bloque de “function” bajo la pestaña “Function” y conéctelo con el bloque anterior.
- De doble click sobre el bloque que acaba d arrastrar y nómbrelo “Scoring Header”. Luego, en la celda “Function” copie el siguiente código y péguelo en la primera línea:
msg.headers={"Content-type": "application/json","Authorization":"Bearer " + msg.token};
msg.payload=msg.fields;
return msg;
- Arrastre otro bloque “http request” de la pestaña “Functions” y conéctelo al bloque del punto anterior.
De doble click a este bloque recién agregado y en la celda “Name” escriba “Scoring request”, en “Method” seleccione “POST” y en la celda de “URL” pegue la URL de su modelo que se puede obtener entrando a Watson Studio -> Entra a su proyecto -> Models -> Click sobre su modelo -> Click a pestaña “Deployments” -> Entre al deployment -> Click a la pestaña “Implementation”. En esta parte deberá ver de primero “Scoring End-point”.
Esta es la URL del modelo que pegaremos en la celda de “URL” de este bloque de “Http Request”
- Para terminar el flujo de bloques ir a la pestaña “Outputs” y arrastre el bloque “debug” y conéctelo después del bloque del punto anterior. De doble click al bloque de debug y cambie el nombre a “Prediction”.
- Para usar el flujo de doble click a al bloque de inject y en la celda de “Payload” pegue lo siguiente:
{"fields":["CreditScore","Geography","Gender","Age","Tenure","Balance","NumOfProducts","HasCrCard","IsActiveMember","EstimatedSalary"],"values":[[500,"Spain","Male",50,2,10000,2,1,0,40000]]}
- Luego despliegue dando click en el botón “Deploy” que se encuentra en la equina superior derecho de la página
- Una vez desplegado vaya al bloque “inject” y presione el botón.
- En el panel de la derecha en la pestaña “Debug” deberá ver la respuesta del modelo.