Buscar este blog

domingo, 30 de marzo de 2014

Teorema de Bayes y Clasificador Bayesiano

En esta entrega platicaré a mi parecer uno de los mejores clasificadores probabilistas, el clasificador Bayesiano. Fundamentado en el teorema de Bayes. Este posee las siguientes características:

  • Es fuerte ante la presencia de ruido, debido a que los mismos se promedian estimando las probabilidades condicionales.
  • Puede admitir valores faltantes.
  • Es robusto ante atributos que sean irrelevantes.
  • Aquellos atributos que estén correlacionados pueden afectar el desempeño de este clasificador.

Básicamente este clasificador asume que cada atributo describe en cierta medida a una clase, y que la ausencia o presencia de los demás atributos no afectan esta medida, es decir, para clasificar un auto podríamos decir que tiene llantas, volante, asientos ,un motor, y puertas. El clasificador Bayesiano interpretara que cada uno de estos atributos contribuye en cierta medida a que sea un auto, sin importar si falta uno (el que tenga llantas indica que se puede tratar de un auto sin importar diga que no tiene puertas), de hecho Bayes trabaja mejor cuando sus atributos no están correlacionados.

Este clasificador está basado en el teorema de Bayes y expresa la probabilidad condicional de un evento aleatorio A dado B en términos de la distribución de probabilidad condicional del evento B dado A y la distribución de probabilidad marginal de sólo A [1]. Veamos un ejemplo basado de [2]


Consideremos un partido de fútbol entre dos equipos rivales (Real Madrid y Barcelona).Supongamos que la probabilidad de que gane el Real Madrid es de 65% y el Barcelona del 35% (no me odien es solo un ejemplo). De entre todos los juegos ganados por el Real Madrid solo 30% de ellos ocurrieron en el territorio del Barcelona. Por otro lado 75% de las victorias obtenidas del Barcelona han ocurrido en su propio campo.

Ahora supongamos que habrá un encuentro Real Madrid vs Barcelona, y que se jugará en el territorio del Barcelona, ¿Quien tiene mayor probabilidad de salir victorioso?

Bien, veamos la fórmula del teorema de Bayes

P(Y|X) = (P(X|Y) P(Y)) / P(X)

Ahora consideremos a X como una variable que representa el lugar de la disputa y a Y como la variable que representa la probabilidad de que un equipo gane el partido.

Recordando tenemos:


  • Probabilidad de que Real Madrid gane el encuentro es P(Y= Real Madrid) = 0.65 (1).
  • Probabilidad de que el Barcelona gane el partido es P(Y = Barcelona) = 0.35 (2).
  • Probabilidad de que el Barcelona gane en su propio campo sin importar con quien compita P(X=campo del Barcelona | Y = Barcelona) = 0.75 (3).
  • Probabilidad de que el partido sea jugado en el campo del Barcelona y el partido lo gane el Real Madrid P(X = campo del Barcelona | Y = Real Madrid) = 0.3 (4).


Ahora debemos computar la probabilidad P(X= campo del Barcelona|Y=gane el Real Madrid) y compararla contra P(X= campo del Barcelona|Y=gane el Barcelona)

entonces tenemos que:

P(Y= gane el Real Madrid|X= campo de Barcelona) = ((3) x (2))/ (3) x (2) + (4) x (1))

= P(Y= gane el Real Madrid|X= campo de Barcelona) = (.75 x .35) / (.75 x .35 + .3 x .65)
P(Y= gane el Real Madrid|X= campo de Barcelona) = 0.5738

Bueno, aquí para computar P(Y= gane el Barcelona|X= campo de Barcelona) de manera mas fácil seria:

P(Y= gane el Barcelona|X= campo de Barcelona) = 1 - P(Y= gane el Real Madrid|X= campo de Barcelona)
=0.4262

entonces tenemos que es mas probable que gane el Real Madrid si juega en el terreno del Barcelona.


Pero bueno esto es el teorema de Bayes, ahora nos compete conocer el clasificador Bayesiano, que básicamente tiene sus bases en dicha fórmula, y nos permite predecir clases (no solo estimar probabilidades), bien estudiémoslo con un ejemplo tomado de [2].

Supongamos que tenemos la siguiente tabla:


Id Casa Estado Civil Salario trimestral(miles) Evasor
1 Si Soltero 125 No
2 No Casado 100 No
3 No Soltero 70 No
4 Si Casado 120 No
5 No Divorciado 95 Si
6 No Casado 60 No
7 Si Divorciado 220 No
8 No Soltero 85 Si
9 No Casado 75 No
10 No Soltero 90 Si



Bien ahora supongamos que nos piden clasificar la siguiente información:



Id Casa Estado Civil Salario trimestral(miles) Evasor
11 No Casado 120
¿?


Primero debemos establecer el modelo de probabilidades de este clasificador, posteriormente determinar la probabilidad de que sea un evasor contra que no lo sea, es decir , P(X=Si) y P(X=No), en donde X representa si  es evasor o no.

Para obtener el modelo, se debe buscar las ocurrencias de cada valor de atributo con respecto a su clase, por ejemplo , para P(Casa = SI | Es evasor = No) tenemos que es 3/7, esto debido a que tenemos 7 filas en donde evasor = No y tenemos 3 filas en donde Casa = Si y Evasor = No.

Entonces obtenemos la siguiente tabla:

Evento Ocurrencia
P(Casa = Si | Es evasor = No) 3/7
P(Casa = No | Es evasor = No ) 4/7
P(Casa=Si | Es evasor = Si) 0
P(Casa = No | Es evasor = Si) 1
P(Estado civil = Soltero| Es evasor = No) 2/7
P(Estado civil = Divorciado| Es evasor = No) 1/7
P(Estado civil = Casado| Es evasor = No) 4/7
P(Estado civil = Soltero| Es evasor = Si) 2/3
P(Estado civil = Divorciado| Es evasor = Si) 1/3
P(Estado civil = Casado| Es evasor = Si) 0

Ahora para el atributo salario trimestral tenemos que es continuo, entonces tenemos dos opciones, una es discretizarlo (CAIM) y la otra es asumir una distribución de probabilidad (usualmente una distribución Gaussiana).

En esta entrada utilizaré la segunda opción, para ello se debe de obtener la media y la desviación estándar, para aquellos salarios anuales que son evasores y las mismas variables para los que no lo son.

Tenemos entonces:

Media No Evasores = 110.  ((125 + 100 + 70 + 120 + 60 + 220 + 75) / 7)
Desviación Estándar No Evasores = 54.54.
Media Evasores = 90.
Desviación Estándar Evasores = 5


Ahora aplicaremos la fórmula de la distribución[3]:


Esta fórmula la aplicaremos para el valor de nuestro caso, que es de 120 (es el valor del salario trimestral que tenemos que clasificar)

P(Salario Trimestral = 120 | Evasor = No) =

  

que da como resultado : 0.0072 y para

P(Salario Trimestral = 120 | Evasor = Si) =


tenemos que es 0.0000000012

Pues bien ya con esto ahora nos resta utilizar la fórmula del clasificador Bayesiano, que es la siguiente[4]:


Aquí P(Y) es la probabilidad de que ocurra la clase, para nuestro ejemplo tenemos 10 filas en donde 7 corresponden a la clase evasor = No y tres a Evasor = Si, entonces, para evasor = NO, P(Y) = 7/10 y para Evasor = Si, P(Y) = 3/10. d = a todas las probabilidades implicadas para los atributos en cuestión (P(Casa | Evasor), P(Estado Civil | evasor) , P(Salario Trimestral | Evasor))

Ahora para clasificar nuestro ejemplo :

Id Casa Estado Civil Salario trimestral(miles) Evasor
11 No Casado 120
¿?


Tendremos que aplicar la fórmula para Evasor = Si y Evasor = No, y tomar aquel valor superior:

P(X | No) = 7/10 x P( Casa = No | Evasor = No) x P( Estado civil = Casado | Evasor = No) x P(Salario trimestral = 120 | Evasor = No)

= 7/10 x 4/7 x 4/7 x 0.0072

P(X | No) = 0.0024.

P(X | Si) = 3/10 x P( Casa = No | Evasor = Si) x P( Estado civil = Casado | Evasor = Si) x P(Salario trimestral = 120 | Evasor = Si)

= 3/10 x 1 x 0 x 0.0000000012

P(X | Si) = 0.

Entonces para nuestro caso tenemos que la persona pertenece a la clase Evasor = No.

Bueno como verán este clasificador es sencillo y eficaz, no toma muchos recursos computacionales (a diferencia de Knn por citar un ejemplo) y mientras nuestros datos no estén correlacionados tendrá un alto grado de confiabilidad.





[2]Introduction to data mining, Pang-Ning Tang, Adisson Wesley



sábado, 22 de marzo de 2014

K-NN (K Nearest Neighbor), el algoritmo del vecino mas cercano

KNN


Significa K-Nearest-Neighbor por sus siglas en ingles, también llamado algoritmo del vecino mas cercano. Este método sirve para clasificar nuestra información y obtener predicciones, tiene una frase famosa que es la siguiente:

Si algo camina como pato, hace quack igual que un pato y parece un pato, bueno entonces es probable que sea un pato”

Básicamente se basa en tomar la información que deseamos clasificar, calcular las distancias de todos los miembros de la base de datos (comúnmente un conjunto de entrenamiento) y se toma un número particular de vecinos (K) que son los que tuvieron distancias menores, luego se visualiza la clase de los mismos, de allí se determina que tipo es el dato que estamos buscando.

La siguiente imagen muestra un ejemplo muy claro de la idea de este algoritmo:



Bien en la imagen tenemos dos figuras, los cuadrados y los hexágonos, después intentamos clasificar un tercer elemento (un pentágono), calculamos las distancias de todos sus vecinos y bueno , nos damos cuenta que tiene mas cercanía con un hexágono, entonces KNN diría la nueva figura es un hexágono, o al menos es probable que lo sea.

Que distancia es mas precisa para KNN, bueno, eso depende de nuestros datos, si tenemos atributos como ingresos mensuales, gastos mensuales, deudas, otros ingresos, entonces posiblemente una distancia euclideana seria la respuesta correcta, pero si tenemos estatura, peso, edad, número de hijos, ingreso mensual, entonces tenemos datos que por su número opacarian a los demás (a decir ingreso mensual estaría en miles) entonces una distancia de Mahalanobis seria nuestra bandera a seguir.

Bien hasta este punto todo bien, pero no siempre ocurre así, que pasa si tenemos las mismas figuras, pero con la siguiente disposición:

Si K = 3 , es decir, buscamos los tres vecinos mas cercanos, clasificaríamos a nuestra figura como un cuadrado, lo mismo ocurrirìa si K = 4 o K = 5,pero cuando K = 6 entonces tendríamos un empate (cuando esto ocurre he visto que lo que se suele realizar es sumar las distancias y tomar la suma menor) y si K = 8, entonces KNN nos diría que es un hexágono.

Es por ello que con este tipo de algoritmos es exageradamente necesario conocer bien la información y como parte medular decidir el tipo de cálculo para las distancias. y el número de vecinos a considerar.

Otro punto importante es el factor de búsqueda, ya que, seria muy costoso (de hecho KNN es un algoritmo costoso computacionalmente hablando) el calcular la distancia de toda nuestra base, mas si tenemos millones de registros, es por ello que suelen utilizarse ciertas heuristicas para determinar con que elementos realizar la comparación, el mas utilizado es el de determinar elementos clave (conjuntos de entrenamiento), es decir, si tenemos 1 millón de registros de tipos de clientes y dos clases a decir, “se acepta préstamo ” y “se rechaza préstamo”, entonces cuando llega un posible cliente y le pedimos los datos,no sería práctico calcular la distancia con el millón de clientes, en vez de ello, podemos tener unos mil clientes que son icónicos , es decir representan bien a su clase y con ellos calcular las distancias.

Otra heuristica común es establecer un rango de búsqueda, aquí usualmente se propone una distancia máxima, es decir, supongamos que la distancia que queremos calcular es una distancia euclideana, entonces, queremos que nuestros vecinos no pasen de cierta distancia:


Para finalizar con este clasificador comentaré sus características principales:
  • No requiere la construcción de un modelo.
  • Trabaja con los datos originales (no requiere representaciones especiales de los mismos).
  • Realiza su predicción en base a información local (esto cuando se aplican heuristicas de búsqueda).
  • Puede producir resultados equivocados si el cálculo de distancia no es el adecuado.
  • En general, mientras K sea mayor (sin ser esto una regla), es decir, mientras mas vecinos sean tomados en cuenta, la probabilidad de una predicción correcta aumenta.

lunes, 17 de marzo de 2014

Distancias entre datos

La determinación de que tan parecido es un conjunto de datos con otro es de mucha importancia en la minería de datos. Varios algoritmos de clasificación como K-means se basan en el hecho de saber que tanto parecido tiene un dato con otro. Parte del interés de determinar que tan parecido es un atributo con otro son las conclusiones que se puedan obtener a través de esto, por ejemplo, supongamos que tenemos una base de datos de seguros y tenemos reconocido unos 1000 clientes que han sido muy buenos desde el punto de vista del negocio, entonces cuando llega un nuevo cliente queremos saber que tan cerca esta este cliente de ser como uno de nuestros mejores consumistas.

Existen muchas formas de calcular la similitud de un atributo, y esto en gran medida depende del conocimiento que poseamos de la información, por ejemplo, si tenemos un atributo estatura y tenemos dos medidas, x1= 1.70 metros y x2 = 1.78 metros, entonces la distancia entre ambos es de 8 centímetros y su cálculo es muy sencillo, a decir, Distancia = x1 – x2.

Pero no todo es tan fácil, en la mayoría de las ocasiones tendremos mas de un atributo a considerar, por ejemplo, supongamos que tenemos los atributos de estatura, peso, edad, género, presión arterial y temperatura.

Estatura Peso Edad Género Presión Arterial Temperatura
1.71 70 27 Masculino 120/80 36.5
1.75 80 29 Femenino 130/90 37
1.79 60 30 Masculino 110/80 36.4

Como se puede observar, saber la distancia que existe entre la fila 1 y la fila 3 ya no es tan trivial y se requiere de cierto análisis para determinarla. Por suerte existen ciertas fórmulas que se encargan de determinar distancias para facilitarnos la vida. A continuación expongo algunas de ellas :


Distancia para datos no numéricos
Cuando no tenemos datos numéricos, bueno, podríamos decir que no tenemos mucho de donde buscarle, en este tipo de datos debemos de conocer un poco (o mas bien bastante) acerca de la información que queremos medir. Usualmente lo que se realiza es una diferencia de conjuntos  :


o bien una suma de ellas y se toma la distancia como la cantidad de los componentes faltantes, por ejemplo, tengamos al conjunto A ={casa,coche,mesa,foco,estufa} y al conjunto B = {casa,coche,mesa, televisión}, entonces, la distancia se mediría de la siguiente manera:
D = size(A – B) + size (B – A)
D = 2 + 1


entonces tenemos que la diferencia entre ambos conjuntos es 3.


Distancia Euclideana

En matemáticas, la distancia euclidiana o euclídea es la distancia "ordinaria" (que se mediría con una regla) entre dos puntos de un espacio euclídeo, la cual se deduce a partir del teorema de Pitágoras[1].

Su representación Gráfica, para la diferencia de dos puntos A(x1,y1) y B(x2,y2) es la siguiente:
  



Y su fórmula[2]:


en donde Xk y Yk son cada uno de los atributos de d(X,Y), La sumatoria recorrerá cada uno de dichos atributos, pero veamos un ejemplo, supongamos que tenemos los siguientes datos:

A{1.71,70,27} y B{1.75,80,29} , entonces tenemos


y nos da una distancia de 10.198.





Distancia de Mahalanobis

Esta distancia es parecida a la Euclideana, pero contempla brindar pesos a los atributos, es decir, por ejemplo, si tenemos dos atributos, estatura y nivel de ingresos, y queremos definir su distancia, claramente al final de cuentas será el ingreso el que será de importancia, dejando casi exiliado a la estatura, veamos un ejemplo, tenemos A{1.71,9000} y B{1.75,8900}, claramente se ve que el número de estatura será poco representativo al momento de calcular la distancia Euclideana.


Para estos casos contamos con la distancia de Mahalanobis, la cual utiliza la inversa de la matriz de covarianza para determinar los pesos de cada atributo, su fórmula es la siguiente:


Supongamos que tenemos peso, estatura y edad, entonces:
Calculemos la matriz de covarianzas para peso, estatura y edad
Obtengamos la inversa de cada matriz
realizar el calculo (x1 – x2) ' * inversa de matriz de covarianzas * (x1-x2) y se obtiene su raiz cuadrada


Para el cálculo de la matriz de covarianzas puedes seguir este enlace, allí lo explican paso a paso sin entrar en formulaciones complicadas http://www.ehowenespanol.com/calcular-matriz-varianzacovarianza-como_484793/.




Correlación


No existe mucha teoría que decir en este punto, la correlación mide el grado en que dos variables están relacionadas entre si, por ejemplo, peso y estatura, su fórmula es la siguiente:

Correlacion(X,Y) = Covarizanza(X,Y) / (DesviaciónEstandar(X) * DesviaciónEstandar(Y))

Su resultado va de -1 a 1 donde -1 indica que tienen una perfecta negativa relación y 1 una perfecta positiva relación



A continuación muestro una imagen que muestra las relaciones entre dos variables desde -1 a 1. Tomado de [2]:


Distancia Binaria

Las medidas para datos binarios son llamados coeficientes de similaridad y su fórmula es la siguiente:

d(x,y) = (F11 + F00) / (F01 + F10 + F11 + F00)

en donde:

F00 : El número de atributos donde X es 0 y Y es 0.
F01 : El número de atributos donde X es 0 y Y es 1.
F10 : El número de atributos en donde X es 1 y Y es 0 .
F11 : El número de atributos en donde X es 1 y Y es 1



Coeficiente de Jaccard

Esta medida se utiliza para datos binarios que provienen de bases de datos transaccionales, por ejemplo, donde 1 representa una venta y 0 representa que no se compró el artículo. La fórmula es:

d(X,Y) = F11 / (F01 + F10 + F11)

Datos generales

Finalmente, existen muchos mas métodos, aquí solo he comentado los mas comunes. Solo queda aclarar una cosa, por si se requiere diseñar un nuevo método que evalúe distancia para datos específicos, se deben de tener las siguientes consideraciones:

Positivismo
  1. d(X,X) >= 0 para todos los X y Y.
  2. d(X,Y) = 0 solo si X = Y

Simetria
  1. d(X,Y) = d(Y,X) para todo X y Y

Desigualdad Triangular
  1. d(X,Z) <= d(X,Y) + d(Y,Z) para todos los puntos X,Y y Z




[2]Introduction to data mining, Pang-Ning Tang, Adisson Wesley



lunes, 10 de marzo de 2014

Algoritmo de discretización CAIM



Bien como el nombre de esta entrada indica, hablaré de l algoritmo de discretización CAIM[1]. Antes de continuar, abordemos la definición de discretización desde el punto de vista de la minería de datos:

Discretización: Es el proceso mediante el cual los valores se incluyen en depósitos para que haya un número limitado de estados posibles. Los depósitos se tratan como si fueran valores ordenados y discretos [2].

En pocas palabras es crear rangos, por ejemplo,  veamos una parte de la famosa tabla iris [3]:


 
Como podemos observar, tenemos aquí una tabla con atributos continuos, esto es común es cualquier tabla. Bueno ahora supongamos que deseamos crear rangos para uno de sus atributos, digamos “sepalwidth”, tenemos aquí varias soluciones posibles:

  1. Utilizar el conocimiento inherente de los datos y elegir manualmente los rangos.
  2.  Crear algún modelo en el cual se cree ‘x’ cantidad de rangos y cada rango contenga en promedio la misma cantidad de valores, esto es, por ejemplo,  tener rangos con la misma diferencia 2-4, 4-6, 6-8 etc.
  3. Parecido al anterior pero en vez de que los rangos tengan las mismas distancias ahora se intentará que cada uno contenga la misma cantidad de elementos, es decir, si tenemos una base con 1500 registros, podríamos crear tres rangos y que cada uno contuviera 500 registros.
  4. Utilizar algún algoritmo de discretización que se encargue de la creación de los rangos en base a heurísticas que intenten agrupar los datos con la mayor ganancia de información.

Como se puede observar, si se tiene suficiente conocimiento de la información, pues no hablar más, el primer punto es el más indicado, pero  de no ser así, bueno cada quien sus gustos, yo me decantaré por explicar el último punto, el de crear un algoritmo que me entrega rangos que maximicen mi ganancia de información (se escucha bonito pero se refiere a que pueda explicar mejor mis datos).
Existen varios métodos creados con este fin, por citar algunos:

  • ·         Maximum entropy
  • ·         IEM
  • ·         CADD
  • ·         CAIR
  • ·         CAIM
  • ·         FCAIM
  • ·         Shanon
  • ·         Paterson-Niblett
  • ·         Equal Width
  • ·         Equal Frequency

Básicamente estos algoritmos se dividen en dos tipos, basados en clase y no basados en clase. Los primeros requieren de una clase que identifique a sus datos (en la tabla mostrada anterior tenemos un atributo llamado “class” que se encarga de realizar esto), estos algoritmos son un poco más “fiables”, debido a que se cuenta con mayor información para poder tomar decisiones al momento de crear los rangos, usualmente sus algoritmos son muy parecidos pero cambia la fórmula que nos brinda la ganancia de información. Los no basados en clase son algoritmos en general más rápidos, aquí no se tiene algo que identifique a los datos, entonces no existe mucho de donde buscarle, simplemente ordenan la información y la distribuyen de manera equitativa en un número x de valores discretos.
En esta entrada nos centraremos en el algoritmo CAIM[1] por sus siglas en inglés (class attribute interdependence maximization).

Este algoritmo posee las siguientes ventajas:

  • Intenta reducir el número de intervalos a ser creados, el algoritmo determina cuantos rangos serán creados y no necesita supervisión alguna por parte de una persona.
  • Es rápido o al menos no tiene un alto coste computacional.
  • Maximiza la interdependencia entre los intervalos creados y las clases.
  • Minimiza la información perdida en el proceso de discretización.


Sin entrar más en terminologías veamos el algoritmo:

Entrada: un conjunto de datos, clases y atributos continuos, M, S, F respectivamente.
Para cada Fi realizar
Paso uno:
  • 1.1 Encontrar en valor mínimo (d0) y el valor máximo (dn)
  • 1.2 Formar un conjunto de todos los valores distintos de Fi, colocados en orden ascendente, crear una variable B que contendrá la siguiente información: d0, todos los valores intermedios sin repetir, dn. (Por valores intermedios se refiere a sumar los atributos y dividirlos entre dos, es decir, si tenemos  como datos 4,5 entonces un punto intermedio seria 4.5)
  • 1.3 Crear una variable D que contendrá el esquema de discretización, e inicializarla con D[0] = d0 y D[1] = dn. Establecer la variable GlobalCaim = 0;
Paso dos: 
  • 2.1  Inicializar una variable K = 1
  • 2.2 Tentativamente agregar algunos límites, de B que no se encuentren ya en D y calcular su    correspondiente valor CAIM
  • 2.3 Aceptar el límite que posea el valor mayor de CAIM
  • 2.4 Si (CAIM > GlobalCAIM or K < S (Donde S es la cantidad de clases existentes)) entonces actualiza  D con el limite aceptado en el paso 2.3 y establece GlobalCAIM = CAIM, sino terminar el proceso
  • 2.5 establece K = K + 1
Salida: El vector D que indica los valores discretizados



Como podemos observar no se trata de un algoritmo complicado, aunque claro, debemos de calcular el valor CAIM. La fórmula es la siguiente:



Para obtener las variables y calcular la fórmula debemos de hacer uso de una matriz llamada "quanta matrix":



En donde:

  • C1,Ci ...Cs. :Son las clases (para el caso de la tabla iris serian: Iris-setosa, Iris-versicolor, Iris-virginica.
  • [d0, d1]..[dn-1,dn] :  Son los intervalos.
  • q11.: Es la cantidad de atributos de la clase C1 es encontrado en el intervalo [d0,d1].
  • Interval Total: es la suma de las columnas de la matriz.
  • Class Total: Es la suma de las filas.
  • M: representa al total de atributos proporcionados
Ahora bien para crear la "quanta matrix" es necesario se creen los intervalos, estos se crean en el paso 2.2, y la matriz se creará una por cada nuevo limite a verificar es decir, supongamos que tenemos a D[0] = 4.5 y D[1]  = 7.9 (valores iniciales mínimo y máximo paso 1.3) y decidimos probar con el limite 6.8(obtenido aleatoriamente de B por ejemplo). Entonces tendríamos a D como:
  • D[0] = 4.5
  • D[1] = 6.8
  • D[2] = 7.9
Entonces nuestros intervalos serian:
  • 4.5-6.8
  • 6.8-7.9


Pues bien una vez creada la "quanta matrix" ya podemos obtener los valores para calcular la función de CAIM:

  • N: número de intervalos proporcionados por F
  •  Maxr : Este es el máximo valor de cada columna para cada intervalo (por supuesto sin incluir la suma, es decir , solo las variables q) 
  •  M+r: Es la suma de un atributo en particular, es decir el resultado de cada columna en “Interval Total” de la “quanta matrix”

Bueno ahora si ya con esto solo queda ir probando valores posibles, calcular su “quanta matrix” para cada valor, elegir aquel valor que nos entregue el máximo de la fórmula de CAIM y terminar el proceso.

Y por supuesto, he creado un programita en javascript que nos realiza esta tarea, el mismo lo pueden descargar de:

 Descargar CAIM.zip

El dataset debe de ser un archivo JSON configurado de la siguiente manera (el ejemplo esta dado para la base iris):
 

{tabla: [{ "sepallength": 5.1, "sepalwidth": 3.5, "petallength": 1.4, "petalwidth": 0.2, "clase": "Iris - setosa" },
        { "sepallength": 4.9, "sepalwidth": 3, "petallength": 1.4, "petalwidth": 0.2, "clase": "Iris - setosa" },
        { "sepallength": 4.7, "sepalwidth": 3.2, "petallength": 1.3, "petalwidth": 0.2, "clase": "Iris - setosa" },
        { "sepallength": 4.6, "sepalwidth": 3.1, "petallength": 1.5, "petalwidth": 0.2, "clase": "Iris - setosa" },
        { "sepallength": 7, "sepalwidth": 3.2, "petallength": 4.7, "petalwidth": 1.4, "clase": "Iris - versicolor" },
        { "sepallength": 6.4, "sepalwidth": 3.2, "petallength": 4.5, "petalwidth": 1.5, "clase": "Iris - versicolor" },
        { "sepallength": 6.9, "sepalwidth": 3.1, "petallength": 4.9, "petalwidth": 1.5, "clase": "Iris - versicolor" },
        { "sepallength": 5.5, "sepalwidth": 2.3, "petallength": 4, "petalwidth": 1.3, "clase": "Iris - versicolor" },
        { "sepallength": 6.3, "sepalwidth": 3.3, "petallength": 6, "petalwidth": 2.5, "clase": "Iris - virginica" },
        { "sepallength": 5.8, "sepalwidth": 2.7, "petallength": 5.1, "petalwidth": 1.9, "clase": "Iris - virginica" },
        { "sepallength": 7.1, "sepalwidth": 3, "petallength": 5.9, "petalwidth": 2.1, "clase": "Iris - virginica" }]};



 
Simplemente se debe mandar a llamar a la función:

var D = ObtenDatos(data, S, atributo_a_discretizar, numero_limites_inferiores_a_probar);

en donde:
  • data: es la tabla en formato JSON explicada anteriormente.
  • S: Es un vector con las clases(S[0] = "Iris - setosa",S[1] = "Iris - versicolor",S[2] = "Iris - versicolor").
  • atributo_a_discretizar: Este es el nombre de la columna que se desea discretizar, ejemplo : "sepallength"
  • numero_limites_inferiores_a_probar: Es el número de intentos a realizar en el paso 2.2 del algoritmo.
Y lo que nos regresara será un vector  D con todos los límites.

Espero les haya gustado la entrada. Cualquier duda pueden enviarme un correo a ferpitol@gmail.com


Referencias:


[3] http://archive.ics.uci.edu/ml/datasets/Iris