8 de diciembre de 2010

Reconocimiento de Patrones – Medición de imágenes

El reconocimiento de patrones es la ciencia que se ocupa de los procesos sobre ingeniería, computación y matemáticas relacionados con objetos físicos o abstractos, con el propósito de extraer información que permita establecer propiedades de entre conjuntos de dichos objetos.

Para poder reconocer los patrones se siguen los siguientes procesos:
  1. Adquisición de datos
  2. Extracción de características
  3. Toma de decisiones

La adquisición de datos comúnmente se realiza a través de un sensor, el cual toma en un momento determinado una imagen y se envía a un dispositivo que analiza sus características, para posteriormente clasificarla.

EJERCICIO

En este ejercicio se utiliza la herramienta Octave con el paquete image instalado (bajo el sistema operativo Linux, Ubuntu).

1. Obtener la siguiente imagen. La imagen se llama mm2.gif y para este ejercicio será guardado en la siguiente ubicación: “/home/mario/Documentos/Elisa/Patrones/”

2. Leer la imagen en la herramienta Octave. Para realizar esta actividad se utiliza la función imread y se guardará en una variable temporal llamada imagen:
     imagen = imread("/home/mario/Documentos/Elisa/Patrones/mm2.gif")

3. De esta imagen, primero que nada se procede a convertirla en blanco y negro. Para realizar esta actividad se utiliza la función im2bw, el valor umbral (que debe estar en el intervalo [0,1]) lo asignaremos en 0.5 y se guardará en una variable temporal llamada imagenbyn:
     imagenbyn = im2bw(imagen, 0.5)

(la imagen de blanco y negro se puede guardar con la siguiente instrucción)
     imwrite(imagenbyn, "/home/mario/Documentos/Elisa/Patrones/mm2-bn.gif")

(la cual se ve así)

3. Posteriormente, de la imagen en blanco y negro, se puede obtener una imagen con el perímetro de esta. Para esto utilizaremos la función bwperim, con el segundo parámetro = 4, el cual indica que hará un perímetro con los vecinos de los cuatro píxeles, también se pudiera poner en 8 para considerar los vecinos de las esquinas.
BW2 = bwperim(imagenbyn, 4)

(si obtenemos esta imagen, se verá así)

4. O también podemos obtener su área utilizando la función bwarea. Esta obtiene el área de los píxeles "encendidos" de una imagen, para esto, tomaremos la imagen que se convirtió en blanco y negro, y se calcularán los píxeles que están en color negro:
     total = bwarea(imagenbyn)

(y como resultado nos dará):
     total = 73683

Outlier Detection (Detección de Datos Anómalos)


Un valor anómalo es una observación que se encuentra a una distancia de otros valores anormales en una muestra aleatoria de una población. En cierto sentido, esta definición deja en manos del analista (o un proceso de consenso) para decidir lo que se considera anormal. Antes de señalar las observaciones anormales, es necesario especificar cuáles son las observaciones normales.

Dos actividades son esenciales para la caracterización de un conjunto de datos:
  1. El examen de la forma global de los datos graficados de características importantes, incluyendo la simetría y las desviaciones de los supuestos.
  2. El examen de los datos de observaciones atípicas que están muy lejos de la mayoría de datos. Estos puntos se refieren a menudo como los valores extremos.
El diagrama de caja es una pantalla gráfica útil para describir el comportamiento de los datos en el medio, así como en los extremos de las distribuciones. El diagrama de caja se utiliza la mediana y el cuartil inferior y superior (definido como el 25 y 75 percentiles). Si el cuartil inferior es Q1 y el cuartil superior es Q2, entonces la diferencia (Q2 - Q1) se llama el rango intercuartil o CI.

Un diagrama de caja se construye dibujando un cuadro entre los cuartiles inferior y superior con una línea continua trazada a través de la caja para localizar la mediana. Las siguientes cantidades (llamadas vallas) son necesarias para la identificación de valores extremos en las colas de la distribución:
  1. Valla interna inferior: Q1 - 1,5 * CI
  2. Valla interna superior: Q2 + 1.5 * CI
  3. Valla exterior inferior: Q1 - 3 * CI
  4. Valla exterior superior: Q2 + 3 * CI
Un punto más allá de la valla interior a ambos lados se considera un valor atípico leve. Un punto más allá de la valla exterior se considera un valor atípico extremo.

 
Ejemplo utilizando el lenguaje y software R

En lenguaje R tenemos algunas funciones que nos permiten representar a la perfección este tema de anomalías.

Antes que nada generaremos un arreglo de 200 valores aleatorios y los visualizamos utilizando las siguientes instrucciones:
> y=rnorm(200)
> y

Al hacer esto, obtenemos el listado de valores, en este caso:
[1] -1.165853888 -0.955031545 -0.400880160 -0.236351755 0.027450224 0.264035645 1.164070642 -1.009940666 -0.215460271 2.535920209 -0.175013095
[12] 0.912400191 -0.127012647 0.980683431 -0.690220551 1.810227257 -0.083157212 -0.386534007 -0.371779463 1.938586420 -0.488154266 -1.019324308
[23] 2.629907093 -0.394080257 1.100920589 -0.914918369 1.453785890 0.225141840 -0.941417392 -1.996026513 -1.388112092 -0.276942237 -0.856065661
[34] -0.042576800 -0.469769793 0.896523593 -2.142289587 0.106668092 0.311102646 1.619171129 -1.325171756 -0.122146025 -0.295685593 0.129063802
[45] -0.153838305 1.362181677 0.538499106 1.233888968 -2.130028233 0.139157479 0.596722491 1.079477830 -0.263774619 2.191134043 -0.002627052
[56] -0.413915506 -1.007515083 -0.574816473 -0.482291746 -0.721780844 -1.025907628 -1.089927958 1.173801297 -0.082981608 -1.231377050 -2.712315073
[67] 1.445477900 -0.079720081 -0.449926763 -0.154191149 -0.712822448 -0.569890902 0.009564743 -0.338627746 1.701151651 -1.563883739 -1.672801315
[78] 0.385131736 -1.213862200 1.538937810 -1.054074341 -0.006126526 -2.290854019 1.407962777 0.220766548 0.237166688 0.214319836 0.607137111
[89] -0.432512859 -1.261568786 1.275437551 0.835784114 2.464322128 -0.821995974 0.853527852 0.377911273 0.973842634 0.027204201 2.302954317
[100] -0.901702528 -0.192658880 0.213383555 0.719825832 -0.507056210 0.349633367 0.569031224 -1.644298289 -1.030787221 1.992107112 -1.062339006
[111] 0.853355458 -0.179214011 -1.877108775 0.097302843 0.586843297 0.227901153 -1.337615592 0.297757759 0.955298601 -0.300573060 -0.234448821
[122] -0.624419801 -0.879537349 0.668275658 0.335697526 0.587730056 -1.186918987 0.678356750 1.069862688 -1.616948855 0.007750086 -0.279580543
[133] -0.642341536 -0.820946614 -0.775683799 0.027930232 -0.241186576 -0.797547075 0.631171851 0.038633245 -0.700816972 -0.796872053 1.073859628
[144] -0.340740803 0.757887883 1.321953231 -1.164196340 -0.083359570 -0.377654571 0.086319961 1.378932129 0.399875571 0.866069196 -0.346559686
[155] -0.812785484 -0.632942191 -0.337267626 -0.380453425 -0.691912362 -1.781040611 0.340368061 0.984578321 1.728054826 0.940681904 -0.156874246
[166] 1.255180807 0.720627300 -0.157533577 -0.098809027 -0.038628890 -0.187352360 0.828662725 0.259983177 1.528909142 1.200236996 0.508354296
[177] -1.249758744 0.608455200 -0.514451102 0.366154599 -1.579730166 -1.109476643 0.620700948 0.817736081 0.847031104 -0.180082208 0.213875082
[188] -0.148941407 -0.723089183 -0.083476433 1.280877039 0.066672708 -0.133964593 -0.059672883 0.490301296 -0.321303024 -1.107683228 -0.305780755
[199] -1.722887273 0.181962787

Con estos valores utilizaremos la función outlier, definida como aquella que encuentra el valor con la mayor diferencia entre la media y el mismo valor. El uso de esta función es:

outlier(x, opposite = FALSE, logical = FALSE)

donde,
x: Es el arreglo de datos
opposite: Está por default en TRUE y este define el valor opuesto (si el valor más grande tiene la máxima diferencia de la media, da el más pequeño y viceversa)
logical: Está por default en TRUE, da vector de valores lógicos, y la posición del posible valor atípico lo marca como TRUE.

 
Entonces, utilizamos la función de la siguiente manera:
> outlier(y)
[1] -2.712315

Otra función con la cual se cuenta es la de chisq.out.test, en la cual se realiza una prueba de ji cuadrado para la detección de un valor atípico en un vector.

El uso de la función es el siguiente:

chisq.out.test (x, variance =var(x), opposite = FALSE)

donde,

x: es    un vector de valores de datos numéricos.
variance: conocida como la varianza de la población. Si no se da, se estima de la muestra, pero no hay mucho sentido por lo que en tal prueba (que es similar a la puntuación z)
opposite: es un indicador lógico que indica si no se desea comprobar el valor con mayor diferencia de la media, sino todo lo contrario

 
Entonces, ejecutamos lo siguiente:
> chisq.out.test(y)

 
Y como resultado obtendremos:

chi-squared test for outlier

data: y
X-squared = 7.5101, p-value = 0.006135
alternative hypothesis: lowest value -2.71231507343222 is an outlier

 
Como conclusión, ambas pruebas nos arrojan que el valor anómalo es el -2.712315.

 
Se anexa las imágenes de las ejecuciones:

7 de diciembre de 2010

Análisis de la Herramienta de Minería de Datos: Pentaho

Pentaho es una herramienta open-source de business intelligence. Cuenta con versiones para sistemas operativos Linux y Windows. Entre las versiones que cuenta tiene las siguientes:

  • Pentaho BI Suite 3.7 GA
  • Pentaho Data Integration 4.1 GA
  • Pentaho BI Suite for Hadoop 3.7 GA
  • Pentaho Data Integration for Hadoop 4.1 GA
Para esta evaluación fue seleccionada la herramienta Pentahoo BI Suite 3.7 GA para Windows, para la cual se utilizó una computadora con Windows 7, procesador Inter Core 2 Duo de 2.53 GHz y 4 Gb de memoria RAM.

Las versiones están disponibles para descarga como una versión de evaluación de 30 días y al seleccionar la versión deseada se presenta un formulario para indicar datos personales y el propósito de la descarga.


En el sitio no se visualiza información de precios para la adquisición, para esto es necesario contactar al fabricante. 

El proceso de instalación es un poco largo pero al finalizar se cuenta con estas herramientas y documentación:


Para utilizar la herramienta Aggregation Designer primero fue necesario crear un ODBC, que para este ejemplo se utilizó un ODBC que se conecta a SQL SERVER 2008 que se tenía instalado de forma local:

Una vez seleccionado el ODBC se selecciona el archivo de esquema Mondrian, para la cual se basa en la especificación mencionada en el sitio: http://mondrian.pentaho.com/documentation/schema.php



Report Designer funge como un reporteador similar a un Crystal Reports donde se puede crear un informe desde cero o desde un wizard:


En este caso se generó un reporte desde el wizard siguiendo los pasos:
  1. Seleccionar el templeate:
  2. Seleccionar los datos de origen:
  3. Se configura la información a desplegar en el reporte:
  4. Al finalizar tenemos el previo del reporte


Con estas herramientas ademas de tener acceso a importar información desde muchas fuentes también se tiene la posibildad de tratarla para analizarla y desplegarla de la manera nosotros necesitamos.