Contenido


Desarrollo de soluciones de IoT cognitiva para la detección de anormalidades mediante la utilización del aprendizaje profundo, Parte 2

Generación de datos para la detección de anormalidades

Utilice Node-RED para crear un generador de datos de prueba

Comments

Contenido de la serie:

Este contenido es la parte # de 5 de la serie: Desarrollo de soluciones de IoT cognitiva para la detección de anormalidades mediante la utilización del aprendizaje profundo, Parte 2

Manténgase en contacto por contenidos adicionales de esta serie.

Este contenido es parte de la serie:Desarrollo de soluciones de IoT cognitiva para la detección de anormalidades mediante la utilización del aprendizaje profundo, Parte 2

Manténgase en contacto por contenidos adicionales de esta serie.

Cada proyecto de datos comienza con datos. Datos es un término muy amplio. Puede ser estructurado o no estructurado, grande o pequeño, rápido o lento, preciso o ruidoso.

He escrito una serie de artículos sobre las soluciones de aprendizaje profundo y el desarrollo de soluciones de IoT cognitiva que inician conIntroducción de redes de aprendizaje profundo y de memoria a corto y largo plazo. Los próximos artículos tratan de la utilización de: Deeplearning4j, ApacheSystemML y TensorFlow (TensorSpark) para la detección de anormalidades. Mi caso de uso es la detección de anomalías para los datos de las series de tiempo de IoT a partir de los datos del sensor de vibración (acelerómetro). Para demostrar eficazmente el proceso de creación de una solución de aprendizaje profundo en estas diferentes tecnologías, se necesitan datos. Necesito datos estructurados rápidos y big data, los que también pueden generar ruido.

Para obtener una infraestructura sencilla para crear datos, he escrito un simulador de datos de prueba, que forman parte de una serie cronológica mayor y de un conjunto de herramientas de aprendizaje automático.

Este simulador genera datos a partir del muestreo de varios modelos físicos, y usted puede decidir sobre el grado del ruido e intercambiar entre estados distintos (saludable y dañado) del modelo físico para la detección de anormalidades y tareas de clasificación.

Por ahora, he implementado el modelo Lorenz Attractor. Éste es un modelo físico muy sencillo, aunque muy interesante. Lorenz fue uno de los pioneros de la Teoría del Caos y fue capaz de demostrar que un modelo sencillo, que consiste en sólo tres ecuaciones y cuatro parámetros del modelo, puede crear un sistema caótico que es altamente sensible a condiciones preliminares y que también oscila entre múltiples estados semiestables en los que las transiciones de estado son muy difíciles de predecir.

Utilizo Node-RED como la plataforma de tiempo de ejecución para el simulador porque es una manera muy rápida de implementar las aplicaciones centradas en datos. Node-RED es un código abierto y se ejecuta enteramente en Node.js. Si desea obtener más información sobre Node-RED, verifique este excelente tutorial.

porque el simulador de datos se implementa por completo como un flujo de Node-RED, es posible utilizar Node-RED a partir de IoT Starter Boilerplate en IBM Cloud. Por supuesto, el simulador de datos se puede ejecutar en cualquier instancia de Node-RED, incluso en un Raspberry Pi, que se puede usar para simular datos del sensor en el límite.

Creación del simulador de datos de prueba

Si bien fue un desafío crear el simulador de datos de prueba, se puede colocar el simulador en funcionamiento siguiendo cuatro etapas principales:

  1. Despliegue el boilerplate Node-RED IoT Starter en IBM Cloud.
  2. Despliegue el flujo del simulador de datos de prueba.
  3. Ponga a prueba el simulador de datos de prueba.
  4. Obtenga las credenciales de IBM Watson IoT Platform para consumir los datos utilizando MQTT a partir de cualquier lugar en el mundo.

Antes de iniciar, necesitará una IBM Bluemix Account. (Es posible solicitar una cuenta gratuita aquí, que puede convertir en una cuenta freemium más tarde).

  1. Cree una aplicación de IBM Cloud utilizando Internet of Things Platform Starter. Si usted no ha iniciado sesión en IBM Bluemix, inicie sesión.
  2. Denomine a su aplicación con un sólo nombre, y haga clic en Crear.
    Nota: Utilicé romeoiotstarter123 para que mi aplicación esté segura, tiene que ser un nombre único. El nombre de la aplicación se convierte en parte del URL, donde su aplicación se encuentra accesible. Mi URL, por ej.: esromeoiotstarter123.mybluemix.net.
  3. En el menú izquierdo, haga clic en Conexiones.
  4. En el recuadro Internet of Things Platform , haga clic enVer credenciales.
  5. Escriba los valores de las siguientes propiedades, ya que las necesita más tarde cuando esté trabajando con una de las tres tecnologías (DeepLearning4j, ApacheSystemML y TensorFlow (TensorSpark)):
    • org
    • apiKey
    • apiToken
  6. Haga clic en Close.
  7. Espere hasta que su aplicación esté funcionando, y, a continuación, haga clic en URL para Visitar la Aplicación.

    Nota: Si ocurre un error "404 - No route defined", recargue la página en un par de minutos. Este error es un problema conocido en el componente de la plataforma de la nube de código abierto Cloud Foundry y ocurre ocasionalmente, en el caso de que IBM enfrente cargas de trabajo elevadas. Cloud Foundry se comunica entre los componentes y, por lo tanto, la UI piensa que la aplicación se está ejecutando, pero el balanceador de cargas no ha sido actualizado.

  8. Antes de que usted pueda acceder y abrir su editor de flujo de Node-RED, debe dar seguridad a su editor de Node-RED.
    1. Haga clic en Siguiente.
    2. Defina un nombre de usuario y una contraseña.
      Nota: Seleccione el recuadro de verificación para compartir su aplicación con los demás. No seleccionar el recuadro de verificación hará que su implementación sea privada.
    3. Haga clic en Siguiente.
    4. Haga clic en Finalizar.
  9. Haga clic en Vaya a su editor de flujos de Node-RED.
  10. Inicie la sesión con el nombre de usuario y contraseña que acaba de crear.
  11. Con el ratón, seleccione los nodos en Flujo 1; haga clic en la tecla Borrar para vaciarlo.
  12. En el menú izquierdo superior, haga clic en Importar >Área común.
  13. Abra este archivo simulatorflow.json en mi repositorio developerWorks GitHub; copie el objeto en el área común de JSON.
  14. En la ventana Importar nodos , pegue el objeto de JSON en el campo y haga clic Importar.

    Nota: Asegúrese de que está pegando un documento JSON de su área común y no HTML. En su próxima versión, NodeRED tendrá integración de GIT, de modo que esta etapa se vuelve más fácil.

    El flujo a continuación se exhibe en el tabular Flujo 1.

  15. Haga clic en Desplegar. Se exhibirá el mensaje "Desplegado con éxito".

El tabular depuración despliega los mensajes generados. ¡Felicidades! Su Test Data Generator está funcionando.

La comprensión de este flujo de Node-RED

Usted ha hecho que funcione, pero ¿qué entra en este flujo de Node-RED?

Considere el nodo etiquetado con la expresión fecha de registro.

Este nodo es un nodo de inyectar y se genera mensajes a intervalos definidos. Esto es muy útil como punto de partida para nuestro simulador. En un escenario de la vida real, este nodo se debería reemplazar con algunos nodos que se encuentren conectados a los sensores del acelerómetro. Porque nosotros generamos los valores del acelerómetro utilizando Lorenz Attractor Model, es posible ignorar la carga útil de la fecha de registro en el objeto de mensaje y reaccionar solamente sobre el objeto de mensaje en sí, lo que veremos más tarde.

Haga doble clic en el nodo sello de tiempo . Observe que la frecuencia de muestreo genera 100 mensajes por segundo (o un índice de muestreo de 100 Hz).

Nota: El índice de muestreo tiene que ser dos veces la frecuencia más alta que deseemos capturar debido al teorema de Nquist. A pesar de que 100 Hz es en realidad demasiado bajo, para este tutorial, es lo suficientemente alto. En un escenario real, debería ejemplificar en 20 o 40 kHz (cada 0,01 segundo es igual a 100 Hz).

A continuación, observe la función . Es el corazón del simulador.

Haga doble clic en este nodo y vea el código de la función a continuación:

var h = context.global.get('h')||0.008;
var a = context.global.get('a')||10;
var b = context.global.get('b')||28;
var c = context.global.get('c')||8/3;
var x = context.global.get('x')||2;
var y = context.global.get('y')||3;
var z = context.global.get('z')||4;

x+=h*a*(y-x)
y+=h*(x*(b-z)-y)
z+=h*(x*y-c*z)

context.global.set("x",x);
context.global.set("y",y);
context.global.set("z",z);
msg.payload={};
msg.payload.x=x;
msg.payload.y=y;
msg.payload.z=z;
return msg;

Nota: Los parámetros iniciales del modelo son h, a, b y c. Se inicializa también x, ye z para algunos valores; las ecuaciones son el modelo real. Dependen deh, a, b, c, x, ye z. Sin excepción (actualmente 100 por segundo), el modelo es una etapa avanzada en el futuro porque x, ye z están actualizadas utilizando los valores de las constantes h, a, be c y también de anterioresx, ye z .

Usted necesita establecer un límite en la salida para dos estaciones:

  • En el índice de muestreo real (100 mensajes por segundo) usará los 200 MB gratuitos por mes en Watson IoT Platform en el plazo de un par de horas.
  • El análisis en sentido descendente no podría ser capaz de atender este porcentaje de datos.

Ahora, vamos a observar el límite a máximo 3000 nodos de función. Actualmente, el máximo se establece en el valor de datos de 30 segundos utilizando una cuenta sencilla.

Haga doble clic en el nodo para ver el código de función:

var count = context.global.get('count') || 0;
count += 1;
context.global.set('count',count);
if (count <= 3000) {
   return msg;
}

Ahora, considere el reinicio . El nodo de función relacionado con este nodo se configura para enviar el valor de los datos los próximos 30 segundos de la cola de mensajes.

Haga doble clic en el nodo de función. Se implementa de la manera siguiente:

context.global.set('count',0);
msg.payload=context.global.get('count');
return msg;

La penúltima etapa es intercambiar este simulador entre los estados dañado y saludable. Para simular los datos defectuosos o dañados, podemos hacer clic en el nodo de función relacionado con el nodo de inyección dañado .

La única cosa que este nodo hace es actualizar las constantes del modelo Lorenz Attractor.

context.global.set('h',0.008);
context.global.set('a',30);
context.global.set('b',128);
context.global.set('c',28/3);

return msg;

Y, por supuesto, observe la función para volver a colocarla en un estado saludable.

context.global.set('h',0.008);
context.global.set('a',10);
context.global.set('b',28);
context.global.set('c',8/3);

return msg;

Por último, pero no menos importante, veamos cómo estos datos viajan hacia el agente de mensajes MQTT de IBM Watson IoT Platform.

Puede dejar la configuración como está y las credenciales se inyectan utilizando Cloud Foundry que ejecuta en IBM Bluemix.

Conclusión

Ha ejecutado un simulador de datos de prueba con éxito creando una serie temporal de eventos de muestra tomados a partir de un modelo físico. También es posible intercambiar entre dos estados (saludable y dañado) para la detección y clasificación de anormalidades.

Ahora, es posible utilizar estos datos de prueba en los demás tutoriales en esta serie. Usted podrá desarrollar las soluciones de IoT de aprendizaje cognitivo profundo para la detección de anormalidades con: Deeplearning4j, ApacheSystemML y TensorFlow (TensorSpark).


Recursos para Descargar


Temas relacionados


Comentarios

Inicie Sesión o Regístrese para agregar comentarios.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Internet of Things, Cognitive computing, Big data y analytics
ArticleID=1057962
ArticleTitle=Desarrollo de soluciones de IoT cognitiva para la detección de anormalidades mediante la utilización del aprendizaje profundo, Parte 2: Generación de datos para la detección de anormalidades
publish-date=02082018