¿Qué es Cortana Analytics Suite?

Cortana Analytics es una serie de servicios disponibles en Azure que nos permiten crear nuestros procesos de negocio. A partir de los datos de entrada; podemos combinar estos servicios en función de nuestras necesidades. El objetivo es realizar un análisis de los datos con el que vamos a poder generar acciones inteligentes de negocio.
ComponentsCortanaAnalytics
En función de los datos; si estos son en tiempo real o no, volumen de los mismos, necesidad de procesamiento de los mismos, tipo de los datos… utilizaremos una combinación adecuada de servicios.
Con estos datos, gracias a los servicios de análisis vamos a poder ver que ha ocurrido, el porque, que pasará y tomar acciones en función de lo que preveamos que va suceder.
Un ejemplo de solución de aplicación en Cortana Analytics, es el servicio que propone Microsoft para monitorizar dispositivos de IOT. Este servicio se llama Azure IOT Suite y esta construido usando diferentes servicios de Cortana Analytics.
EjemploUsoCortanaAnalytics

Servicios de Cortana Analytics

Publicado en Azure, Cortana Analytics, Internet of Things, Machine Learning | Deja un comentario

C# Interactivo

En Visual Studio 2015 disponemos de una novedad muy interesante. Consiste en una consola para trabajar directamente en un entorno interactivo; sin necesidad de crear un proyecto y compilarlo. Resulta muy útil para probar. C# InteractiveA la consola se accede desde el menu View->Other Windows->C# Interactive Window.

Comandos

Las instrucciones son las del lenguaje C# normal y también disponemos de intelligence a la hora de trabajar.
Para ver resultados, podemos escribir directamente el nombre de la variable o utilizamos las mismas instrucciones que en una aplicación de Consola.

var message = "Hello World!!!";
message //Muestra Hello World !!!!
Console.WriteLine(message); //Muestra Hello World !!!!

Se añaden algunos comandos utiles especificos en modo consola:

  • #r: Añade referencias a nuestra sesión de consola.
    //#r {Nombre del Assembly}
    #r "System.Web"
    //#r {Path de la dll}
    #r "c:\code\myDll.dll"
    
  • #reset: Libera la memoria del entorno de consola (elimina las variables actuales).
  • #cls: Limpia la pantalla de la consola.
  • #load: Podemos guardar los comandos en un fichero; con el objetivo de cargarlo y ejecutarlo.
  • #help: Ayuda.
Publicado en Visual Studio | Deja un comentario

Técnicas de Aprendizaje automático y Azure Machine Learning: Modo Avanzado II

En la anterior entrada Modo Avanzado I se indicaron parámetros por defecto para aplicar en diferentes técnicas de aprendizajes automático. En esta entrada vamos a ver como es posible probar iterativamente diferentes parámetros de cara a obtener la combinación optima de los mismos.

Configurar la técnica de aprendizaje automático

MLTrainerModeLas diferentes técnicas permiten configurar el trainer mode a Parameter Range. Esto permite que en los parámetros de configuración de la técnica podamos entrar un conjunto o rango de valores que se van iterar para probarlos. En el rango de valores, se nos pregunta adicionalmente el numero de valores que probaremos.

Aplicar la técnica

Sweep ParametersEn lugar de usar el módulo Train Model; se usa el módulo Sweep Parameters.

Entradas del módulo de izquierda a derecha:

  • Técnica de aprendizaje.
  • Conjunto de datos de aprendizaje.
  • Conjunto de datos a usar para optimizar: es opcional, sino se informa utilizaría el conjunto de datos de aprendizaje. También podemos usar el conjunto de datos para validar o si tenemos muchos datos crear un conjunto específico.

Salidas del módulo de izquierda a derecha:

  • Resultados de las diferentes iteraciones de parámetros.
  • Modelo que ofrece mejor resultado.

Parametros del módulo

  • Tipo iteración: random sweep (prueba aleatoriamente entre los parámetros suministrados hasta el numero de veces indicado en Maximum number of runs) o entire grid (prueba todas las combinaciones sistemáticamente).
  • Dato a predecir.
  • Hemos decidir cual es la medida de la técnica que vamos utilizar para optimizar. El mejor valor de la medida nos indicará el modelo a retornar ;-).
Publicado en Azure Machine Learning, Cortana Analytics, Machine Learning | Deja un comentario

Evaluar Aprendizaje Automatico

En esta entrada vamos a ver como se evalúa que el resultado obtenido en un proceso de Aprendizaje Automático es correcto. Cada tipo de técnica de Aprendizaje Automático se evalúa de forma diferente.

Módulos de regresión

Hay medidas de error que miden la diferencia entre el valor real y el predicido.

Diferencia en valores absolutos

Diferencia en valores relativos

Estas son las más interesantes, ya que ponen en contexto la medida del error.

  • Relative absolute error: RAE = \frac{\sum_{i=1}^{n} |a_i -p_i|}{\sum_{i=1}^{n} |\bar{a} -a_i|}
  • Relative squared error: RSE = \frac{\sum_{i=1}^{n} (a_i -p_i)^2}{\sum_{i=1}^{n} (\bar{a} -a_i)^2}
  • Coefficient of Determination o R^2: Determina la potencia de predicción del modelo; indica un valor numérico de 0 (el modelo es un desastre) a 1 (el modelo funciona a la perfección).
    R = \sqrt{\frac{\sum_{i=1}^{n} (a_i -\bar{a})(p_i -\bar{p})}{desviacion(a)*desviacion(p)}} donde desviacion(a) = \sqrt{\frac{1}{n-1}\sum_{i=1}^{n} (a_i -\bar{a})^2} y desviacion(p) = \sqrt{\frac{1}{n-1}\sum_{i=1}^{n} (p_i -\bar{p})^2}

Módulos de clasificación

Se describen diferentes métodos de evaluación:

Matriz de confusión

matrizDeConfusiónClasifica en cuatro bloques en función de la clase del dato y su predicción:

  • True Positive (TP) y True Negative (TN): correctamente clasificados.
  • False Positive (FP): La predicción no clasificada correctamente en la clase de interés
  • False Negative (FN): La predicción no clasificada correctamente en la clase de no interés

A partir de estos datos se pueden calcular las siguientes medidas:

  • La tasa de acierto o accuracy nos indica la bondad del método. Recordar que en función del objetivo propuesto no es suficiente. accuracy = \frac{TP + TN}{TP + TN + FP + FN}
  • La sensibilidad o sensibility o recall nos indica la capacidad de detectar los casos positivos correctamente. recall = \frac{TP}{TP + FN} En función de lo que se pretenda valores no cercanos a 1; invalidan el método.
  • La precisión o precision nos indica que el sistema tiene buen ratio en detectar la clase de interés. precision = \frac{TP}{TP + FP}
  • La especificidad o specificity nos indica la capacidad de detectar los casos negativos correctamente. specificity = \frac{TN}{TN + FP} En función de lo que se pretenda valores no cercanos a 1; invalidan el método.
  • El F Score combina la precisión y recall en una sola medida para indicar la bondad del método. Recordar que en función del objetivo propuesto no es suficiente. FScore= \frac{2*precision*recall}{recall+precision}= \frac{2*TP}{2*TP + FP + FN}

MedidasMatrizConfusion

Curba ROC

ROCCurba
El gráfico mide la relación entre:

  • En el eje vertical, la capacidad de detectar los casos positivos correctamente, es decir la sensibilidad o recall.
  • En el eje horizontal, la tasa de resultados positivos incorrectos. (1-especificidad)=\frac{FP}{TP + FP}

La diagonal central indica que el método es aleatorio. Lo ideal es la linea en la esquina superior izquierda pegada a los ejes (maximiza la distancia de la diagonal central). El valor UAC que muestra Azure Machine Learning mide el área debajo de la curva.

Kappa

Nos indica un valor numérico de 0 (el modelo es un desastre) a 1 (el modelo funciona a la perfección). Desgraciadamente esta medida Azure Machine Learning; no nos la muestra en la evaluación del modelo :-(.
k=\frac{PRa-PRe}{1-PRe}

donde:

  • PRa es la tasa de acierto. PRa = \frac{TP + TN}{TotalMuestras}
  • PRe es la probabilidad combinada entre los resultados. PRe = (\frac{TP+FP}{TotalMuestras}*\frac{TP+FN}{TotalMuestras})+(\frac{TN+FN}{TotalMuestras}*\frac{TN+FP}{TotalMuestras})

Módulos de Agrupación (Clustering)

  • Distancia media al centro de la agrupación y a los otros centros de agrupación.
  • Número de elementos en cada agrupación.

Módulos de Recomendación

En Azure Machine Learning tiene su propio módulo evaludador Evaluate Recommender.

  • Normalized Discounted Cumulative Gain (NDCG): Nos mide la diferencia entre la recomendación ideal y la prevista por el modelo. Nos indica un valor numérico de 0 (el modelo es un desastre) a 1 (el modelo funciona a la perfección).
Publicado en Azure Machine Learning, Cortana Analytics, Machine Learning | 1 Comentario

Técnicas de Aprendizaje automático y Azure Machine Learning: Modo Avanzado I

En esta entrada se va a tratar en mayor profundidad la entrada Técnicas de Aprendizaje automático y Azure Machine Learning. Para los diferentes métodos se indican los elementos claves a considerar para su buen uso. Además también se incorporan los comandos de R equivalentes.

Consideraciones Generales

Al aplicar una técnicas de Machine Learning; hemos de tener presente dos métricas:

  • Bias o sesgo: Nos mide la falta de precisión; que lo que esperamos coincida con lo pronosticado.
  • Variancia: Es lo que se separan los datos pronosticados.

En función del valor de estas métricas tenemos los siguientes escenarios:

  • Perfect: Lo ideal es tener un sesgo y una variancia bajos.
    LowBiasLowVariance
  • Overfitting: Tenemos ruido en los datos del modelo. Bias bajo pero variancia elevada. Predecimos con muchos parámetros y con pocos datos; nos ajustamos al ejemplo concreto de los datos de entreno.
    LowBiasHighVariance
  • Underfitting: Perdemos el foco en la obtención de los patrones que era nuestro objetivo. Sesgo alto pero variancia baja. Predecimos con pocos parámetros, no hay flexibilidad.
    HighBiasLowVariance
  • Fail: Nuestro patrón no funciona. :-(
    HighBiasHighVariance

Modulo de Regresión

Regresión Lineal

En Azure Machine Learning, el módulo Linear Regression o en R el comando lm (ejemplo de uso). Buena descripción del proceso de Regresión Lineal.

  • La relación entre la variable a predecir y la variable predictora utilizada debe ser lineal. Modificar la variable predictora; por ejemplo escalar si es logarítmica.
  • Al analizar si la variables que usamos en la predicción están relacionadas entre ellas (ver su correlación ;-)). Si es el caso eliminar una o promediarlas, ya que invalida la obtención del modelo.

Arboles de Decisión

En Azure Machine Learning, el módulo Decision Forest Regression o en R el comando rpart en el paquete rpart.

Redes Neuronales

En Azure Machine Learning, el módulo Neural Network Regression o en R el comando neuralnet en el paquete neuralnet.

  • Las redes neuronales trabajan mejor en un rango (0,1). Es recomendable estandarizar las variables. \frac{x-min(x)}{max(x) - min(x)}
    array <- c(1,2,3,3,4,4,4,5,6,8,9)
    array2 <- c(2,34,43,23,34,12,12,13,3,45,45)
    normalize <- function(x) { return ((x - min(x)) / (max(x) - min(x))) }
    arrays <- data.frame(array,array2)
    lapply(arrays, normalize)
    
  • Un alto numero de neuronas puede provocar Overfitting y un bajo numero Underfitting. Iterar hasta encontrar el resultado optimo. Por defecto una sola capa oculta con este numero de nodos \sqrt{n*m} donde n es el numero de variables y m es el número de resultados.
  • Iterar para encontrar el nivel de Learning rate. A valores más bajos mayor tiempo de ejecución.

Módulos de clasificación

Arboles de Decisión

En Azure Machine Learning, el módulo Two-Class Decision Forest o en R el comando cforest en el paquete party.

  • Son muy sensibles al Overfitting o al Underfitting. Es clave determinar bien el numero de arboles y nodos a generar.

Bayes Point Machine

En Azure Machine Learning, el módulo Two-Class Bayes Point Machine o en R el comando naiveBayes en el paquete e1071.

  • Cuando una variable tiene toda su distribución en una sola de las etiquetas a clasificar. Ocurre que la probabilidad es 0 en la otra etiqueta; lo cual condiciona y nos invalida el resto de variables. Añadir más datos para que tenga almenos alguna ocurrencia en la otra etiqueta. También se puede usar la técnica con estimación de Laplace; que incorpora corrige automáticamente datos para solventar el problema.
    naiveBayes(data,etiquetas, laplace = 1)
    
  • Las variables numéricas agruparlas en categorías. Azure Machine Learnig lo hace automáticamente. ;-)

Support Vector Machine

En Azure Machine Learning, el módulo Two-Class Support Vector Machine o en R el comando svm en el paquete e1071.

Módulos de Agrupación

K-Means Clustering

En Azure Machine Learning, el módulo K-Means Clustering o en R el comando kmeans.

  • Reescalar los datos si las medidas no son lineales; por ejemplo en el caso de medidas con una escala exponencial.
  • Es recomendable transformarlos a un rango (0,1) para que los rangos de medidas se estandaricen. \frac{x-min(x)}{max(x) - min(x)}
    array <- c(1,2,3,3,4,4,4,5,6,8,9)
    normalize <- function(x) { return ((x - min(x)) / (max(x) - min(x))) }
    normalize(array)
    
  • Las variables categóricas; se subdividen en variables categóricas binarias (0 o 1). Por ejemplo, variable animal con 3 categorias en 3 variables Perro, Gato y Ratón.
  • En la clasificación de los datos en k grupos; la clave esta en escoger un valor de k bueno (el valor inicial por defecto suele \sqrt{n} donde n es el numero de muestras). Con una k demasiado pequeña, tendremos Overfitting y con una k demasiado grande tendremos Underfitting.

Módulos de Recomendación

En Azure Machine Learning, se deben utilizar los módulos Train Matchbox Recommender y Score Matchbox Recommender. En R el comando apriori en el paquete arules.

Publicado en Azure Machine Learning, Cortana Analytics, Machine Learning | 1 Comentario

R, Azure Machine Learning y Análisis de Datos.

En la entrada anterior Analizando los datos y Azure Machine Learning describí las métricas usadas para el análisis de datos. Dado que hay métricas que no se pueden obtener directamente de Azure Machine Learning, en esta entrada vamos a describir como obtener estos datos mediante R.

Que es R?

RlogoR es un lenguaje de scripting utilizado por estadísticos y científicos de datos. Es muy usado en el entorno de minería de datos y machine learing. Podemos descargar R en el siguiente enlace. Azure Machine Learing permite la ejecución de scripts de R mediante el modulo Execute R Script.
Adjunto varias guías de referencia rápida de R:

Análisis de Datos

En la entrada Analizando los datos y Azure Machine Learning se describió cada una de las métricas; aquí vamos a ver para cada tipo de métrica como obtenerla en R.

  • Tendencia Central

    array <- c(1,2,3,3,4,4,4,5,6,8,9)
    ##Media
    mean(array)
    ##Mediana
    median(array)
    ##Moda
    sort(table(array))
    
  • Distribución
    array <- c(1,2,3,3,4,4,4,5,6,8,9)
    ##Histograma
    hist(array)
    ##Cuartiles
    quantile(array)
    boxplot(array)
    ##Rango
    min(array)
    max(array)
    ##Variancia
    var(array)
    ##Desviación Standard
    sd(array)
    ## Distribución Asimétrica
    ## install.packages("fBasics")
    library(fBasics)  
    kurtosis(array)
    #Distribución en variables categóricas
    a <- table(array)  
    a ##Frecuencia
    prop.table(a)  ##Frecuencia en porcentaje 
    
  • Representavidad de la Muestra
    array <- c(1,2,3,3,4,4,4,5,6,8,9)
    #Error Standard
    errorStandard <- sd(array)/sqrt(length(array))
    #Intervalos de Confianza
    errorMuestra <- qt(0.975,df=length(array)-1)*errorStandard
    left <- mean(array)-errorMuestra
    right <- mean(array)+errorMuestra
    paste("[",left,",",right,"]",sep="")
    
  • Relación entre variables
  • array <- c(1,2,3,3,4,4,4,5,6,8,9)
    array2 <- c(1,2,4,6,5,3,4,5,7,8,10)
    #Diagramas de Dispersión
    plot(x=array, y=array2)
    #Tablas de Contingencia
    #install.packages("gmodels")
    library("gmodels")
    CrossTable(x = array, y = array2)
    #Coeficiente de Correlación
    cor(array,array2)
    #Tau de Kendal
    cor.test(array , array2 , method="kendall")
    #T-Test
    cor.test(array,array2)
    #Anova
    arrays <- list(x1=array,x2=array2)
    arrayStack <- stack(arrays)
    results <- aov(values~ind, data=arrayStack )
    summary(results)
    #Chi-Square
    library("gmodels")
    CrossTable(x = array, y = array2,chisq = TRUE )
    

PD:
Libera toda la memoria de R. Eliminando todas las variables de la sesión. ;-)

rm(list=ls())
Publicado en Azure Machine Learning, Desarrollo, Machine Learning | Deja un comentario

Azure Data Catalog

Que es Microsoft Azure Data Catalog?

Es una aplicación donde gestionamos las fuentes de datos de nuestra organización. Conectando a los diferentes orígenes obtenemos automáticamente la información de ellos (también se puede añadir los metadatos manualmente). Una vez generada la información base podemos añadir la información adicional que queremos (tags, descripciones…). Posteriormente podemos buscar donde se ubica la información con una simple búsqueda. Así mismo podemos ver un previsualización de esta información.
Disponible en www.azuredatacatalog.com.
MicrosoftAzureDataCatalog

Publicado en Azure, Cortana Analytics | 1 Comentario