En este artículo analizaremos la utilización de Prediction API en GAE (Google App Engine). Para esta actividad de análisis, utilizaremos como base un desarrollo de código fuente abierto llamado tryprediction.
La solución mostrada propone la utilización Prediction API para java, utilizando 4 servlets y un archivo index.jsp que en conjunto permiten la puesta en marcha de la solución de ejemplo. El objetivo del desarrollo propone una manera flexible de declarar modelos predictivos y poder dinámicamente personalizar los elementos en la interfaz de usuario que permitan interactuar con eso modelos, finalmente hacerlos útiles muy rápidamente.
El ejemplo nos propone introducir conceptos de evolución e innovación de soluciones tecnológicas haciendo uso de la potencia de las APIs de Google.
Veamos la estructura básica que propone la solución en la Fig. 1.
Elementos programáticos principales:
- AuthReturnServlet.java
- IndexServlet.java
- PredictServlet.java
- ResetServlet.java
- index.jsp
También es interesante analizar el nivel de relación que poseen los elementos de la solución que estaremos desarrollando como muestra la Fig. 3. En esta oportunidad vamos a prestar especial atención a los dos servlets que hacen el trabajo con Prediction API.
- IndexServlet.java
- PredictServlet.java
Análisis detallado de PredictServlet
Vamos a iniciar el análisis detallado de PredictServlet. En primer lugar como muestra el Código 1 obtenemos las credenciales del datastore de Google App Engine. (Este paso es porque en la definición de diseño de determinó almacenar credenciales de esta forma)
try { // Devolver las credenciales desde el datastore de App Engine. DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); Key credsKey = KeyFactory.createKey("Credentials", "Credentials"); credentials = datastore.get(credsKey); } catch (EntityNotFoundException ex) { // Si no se pueden obtener las credenciales enviamos una exception al cliente javascript. response.setContentType("text/html"); response.getWriter().println("exception: " + ex.getMessage()); }Código 1 - Accediendo al datastore para obtener las credenciales
Luego de obtener estos elementos de autenticación el PredictServlet realiza diversas funciones de soporte para acceder a la información de los modelos que deseamos poner al alcance del usuario. Esto se realiza accediendo a model.json. Obtenida esta información no pasamos a interactuar directamente con Prediction API como muestra el Código 2 para iniciar las tareas de autenticación en la integración de la API.
// Establecer el acceso OAuth 2.0 GoogleAccessProtectedResource requestInitializer = new GoogleAccessProtectedResource(tokens.accessToken,httpTransport, jsonFactory, clientId, clientSecret, tokens.refreshToken);Código 2 - Autenticando a Prediction API
Para cerrar nuestro análisis el Código 3 propone la interacción de predicción concreta de nuestra solución.
La clave del Código 3 es la línea que invoca al método trainedmodels().predict.
// Finalmente completar los datos de predición llamada a la API and trabajar los resultados en la Javascript AJAX cliente Prediction prediction = new Prediction(httpTransport, requestInitializer, jsonFactory); Input input = new Input(); InputInput inputInput = new InputInput(); inputInput.setCsvInstance(params); input.setInput(inputInput); Output output = prediction.trainedmodels().predict(modelId, input).execute();Código 3 - Ejecutando la predicción en Prediction API
Para realizar el despliegue de la solución en la infraestructura de Google App Engine debemos tener configurada nuestra aplicación en la consola de administración de Google App Engine. La Fig. 4 muestra una representación de la actividad en la consola de Google App Engine.
Com muestra la Fig. 4 tenemos la aplicación “appdemoutn” en donde vamos a realizar una nueva versión en un nuevo despliegue.
La Fig. 5 muestra el resultado de nuestra solución, en donde cada modelo Prediction se puede seleccionar y dependiendo de esta selección, se personalizan los elementos de la interfaz de usuario que requiere el modelo para desempeñar la actividad. (Como ejemplo si nuestro modelo requiere solamente una caja de texto para ingresar la consulta es lo que se propone en la interfaz de usuario, si se requieren otros elementos se personaliza según ese criterio). Además la solución propone la valuación de Prediction API mediante un gráfico utilizando la integración de Google Chart Tools, de esta forma poder visualizar de una forma más flexible la valoración.
Espero que puedan hacer uso de estas herramientas, integrar elementos distintivos y evolucionar sus aplicaciones utilizando todo el potencial que brinda Google con sus APIs.
|
Nicolás es director de relaciones para desarrolladores en latinoamérica región sur para Google. El ha desarrollado comunidades académicas y de investigación en varios países de Latinoamérica sobre la plataforma de desarrollo web y mobile de Google. Además Nicolas es profesor universitario, donde trabaja fuertemente en arquitecturas de software, ambientes emergentes e innovación en modelos de ingeniería de software
|
Les dejo el video de implementación con la demostración paso a paso:
Les dejo el análisis del código fuente central de la solución presentada:
Referencias
Google API Java Clienthttp://code.google.com/p/google-api-java-client/
Simple Logging Facade for Java (SLF4J)
http://www.slf4j.org/
TryPrediction (Python and Java)
http://code.google.com/p/try-prediction/
Google Developers
https://developers.google.com/
Prediction API
https://developers.google.com/prediction/
Google Char Tools
https://developers.google.com/chart/







1 comentario:
Excelente articulo, muestra la simpleza y el potencial de Google Prediction API.
Existen alternativas como ejecutar redes neuronales en Google App Engine:
http://lookthiscode.blogspot.com.ar/2012/08/como-entrenar-y-correr-una-red-neuronal.html
Pero esto implica un mayor de tiempo de investigacion y experimentacion, conocimiento del sistema que se modela, asi como tambien requiere normalizar los datos.
Sin dudas Google Prediction API es ideal para poner en practica rapidamente la solucion a un problema mediante inteligencia artificial.
Publicar un comentario en la entrada