Está en la página 1de 358

ALGORITMOS TDIDT APLICADOS A LA MINERIA DE DATOS INTELIGENTE TESIS DE GRADO EN INGENIERIA INFORMATICA FACULTAD DE INGENIERIA UNIVERSIDAD DE BUENOS AIRES

LABORATORIO DE SISTEMAS INTELIGENTES


TESISTA: DIRECTOR: Srta. Magdalena SERVENTE Prof. Dr. Ramn GARCIA MARTINEZ

FEBRERO 2002

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

RESUMEN
La Minera de Datos (Data Mining) es la bsqueda de patrones interesantes y de regularidades importantes en grandes bases de datos. El Aprendizaje Automtico es el campo de la Ingeniera Informtica en el que se estudian y desarrollan algoritmos que implementan los distintos modelos de aprendizaje y su aplicacin a la resolucin de problemas prcticos. La minera de datos inteligente utiliza mtodos de aprendizaje automtico para descubrir y enumerar patrones presentes en los datos.

Uno de los mtodos ms conocidos para describir los atributos de una entidad de una base de datos es utilizar un rbol de decisin o de clasificacin, que puede transformarse sin inconveniente a un conjunto de reglas de decisin.

En este contexto, el propsito de este proyecto es estudiar de que manera la familia TDIDT, que aborda el problema de inducir rboles de decisin, puede utilizarse para descubrir automticamente reglas de negocio a partir de la informacin disponible en una base de datos. Se trabaj en particular con los mtodos ID3 y C4.5, miembros de dicha familia. El trabajo contempla el diseo, especificacin e implementacin de un ambiente de minera de datos que integra ambos algoritmos. Adems, se desarroll un mtodo de evaluacin de los resultados para determinar la calidad de las reglas obtenidas.

Palabras clave: minera de datos, aprendizaje automtico, rboles de decisin, reglas de decisin, TDIDT, ID3, C4.5

ABSTRACT
Data mining is the search of interesting patterns and relevant regularities in large data bases. Machine Learning is the Informatic Engineerings field devoted to the analysis and development of algorithms implementing the different learning models and their application to the solution of practical problems. Intelligent data mining uses machine learning methods to find and list the patterns present in the data.

One of the best known methods to describe the attributes of an entity of a data base is the use of a decision or classification tree, which can easily be turned into a set of decision rules.

Within this context, the purpose of the present project is to analyze the way in which the TDIDT family, which studies the problem of inducing decision trees, can be used to discover automatically business rules from the information available in a data base.

Resumen

Magdalena Servente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

The work was focused in the ID3 and C4.5 methods, which belong to the family above mentioned. The work includes the design, specification and implementation of a data mining system that combines both algorithms. Furthermore, to determine the quality of the rules obtained, an evaluation method of the corresponding results was developed.

Keywords: data mining, machine learning, decision trees, decision rules, TDIDT, ID3, C4.5

Resumen

Magdalena Servente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Indice

Magdalena Servente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

INDICE
CAPTULO 1: INTRODUCCIN CAPTULO 2: ESTADO DEL ARTE
2.1. Aprendizaje Automtico 2.1.1. Clasificacin general de los sistemas de Aprendizaje Automtico 2.1.2. Esquema general de un sistema de Aprendizaje Automtico 2.1.2.1. Aprendizaje de conceptos 2.1.2.2. Representacin de conceptos 2.1.3. Aprendizaje 2.1.3.1. Aprendizaje supervisado y no supervisado 2.1.3.2. Tipos de aprendizaje automtico 2.1.3.3 Mtodos clsicos de aprendizaje 2.2. Minera de Datos 2.2.1. Descubrimiento de conocimientos 2.2.2. Problemas inherentes al proceso de aprendizaje 2.2.3. Tareas realizadas por un sistema de Minera de Datos 2.2.4. Mtodos de Minera de Datos 2.2.5. Componentes de la Minera de Datos 2.2.5.1. Algoritmos de Clasificacin (Classification Algorithms) 2.2.5.2. Algoritmos de reglas de asociacin 2.2.5.3. Anlisis de Secuencias 2.3. Aprendizaje Automtico y Minera de Datos 2.3.1. Aplicaciones 2.3.1.1. ID3 2.3.1.2. C4.5 2.3.1.3. AQ15 2.3.1.4. CN2 2.3.1.5. DBLearn 2.3.1.6. Meta-Dendral 2.3.1.7. RADIX/RX 2.3.1.8. BACON 2.3.1.9. SLIQ 2.4 La Familia TDIDT 2.4.1. Construccin de los rboles de decisin
ii Magdalena Servente

1 5
6 8 8 8 10 11 11 12 14 14 15 16 17 18 20 20 21 22 22 23 23 24 24 24 25 25 26 26 26 27 27
Indice

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

2.4.1.1. Clculo de la Ganancia de Informacin 2.4.1.2. Datos Numricos 2.4.1.3. Poda de los rboles generados 2.4.1.4. El Principio de Longitud de Descripcin Mnima 2.4.2. Atributos Desconocidos 2.4.2.1. Estudio sobre datos con atributos desconocidos en la Induccin 2.4.3. Transformacin a Reglas de Decisin 2.5.Evaluacin de los Mtodos de Aprendizaje 2.5.1 Evaluacin en la familia TDIDT 2.5.2. Mtodos de evaluacin 2.5.2.1. Evaluacin Cruzada (Cross-Validation) 2.5.2.2 Dejar-uno-afuera (Leave-one-out) 2.5.2.3. Bootstrap 2.5.3. Estimacin del costo

28 29 30 31 32 33 35 36 37 37 37 39 39 40

CAPTULO 3: DESCRIPCIN DEL PROBLEMA


3.1. Contexto del Problema 3.2. Aplicacin de los Algoritmos de la Familia TDIDT a la Minera de Datos

43
43 44

CAPTULO 4: SOLUCIN PROPUESTA


4.1. Caractersticas Generales 4.1.1. Marco terico 4.1.2. Datos de Entrada 4.1.3. Resultados Generados 4.1.3.1. Caractersticas de los rboles de decisin 4.1.3.2. Caractersticas de las reglas de decisin 4.1.3.3. Presentacin de los resultados 4.2. Descripcin General de los Algoritmos 4.2.1. Divisin de los datos 4.2.1.1. Eleccin del criterio de divisin 4.3. ID3 4.3.1. Descripcin del ID3 4.3.1.1. Algoritmo ID3 4.3.1.2. Poda de los rboles de decisin 4.3.1.3. Pasaje a reglas de decisin 4.3.1.4. Atributos desconocidos
Indice Magdalena Servente

47
48 48 49 50 50 51 51 52 52 53 55 56 57 57 57 58
iii

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

4.3.1.5. Resolucin de un ejemplo utilizando el ID3 4.3.2. Limitaciones al ID3 4.3.2.1. Valores continuos 4.3.2.3. Ventanas 4.4. C4.5 4.4.1. Algoritmo C4.5 4.4.2. Caractersticas particulares del C4.5 4.4.2.1. Pruebas utilizadas 4.4.2.2. Pruebas sobre atributos continuos 4.4.2.2. Atributos desconocidos 4.4.3. Poda de los rboles de Decisin 4.4.3.1. Cundo debemos simplificar? 4.4.3.2. Poda en Base a Errores 4.4.4. Estimacin de la Proporcin de Errores para los rboles de Decisin 4.4.5. Construccin de un rbol de decisin utilizando el C4.5 4.4.6. Generalizacin de reglas 4.4.6.1. Conjuntos de Reglas 4.4.6.2. Orden de las clases y eleccin de la clase por defecto 4.4.6.3. Generalizacin de un rbol de decisin a reglas de decisin utilizando el C4.5 4.5. Sistema integrador 4.5.1. Descripcin general 4.5.2. Diseo del sistema integrador 4.5.2.1. Diseo para el ID3 4.5.2.2. Diseo para el C4.5

58 62 62 63 64 64 65 65 65 66 68 69 70 72 72 76 77 80 80 83 83 85 85 90

CAPTULO 5: RESULTADOS OBTENIDOS


5.1. Interpretacin de los resultados 5.1.1. Interpretacin de resultados en el ID3 5.1.1.1. rboles de decisin 5.1.1.2. Reglas de decisin 5.1.2. Interpretacin de resultados en el C4.5 5.1.2.1. rboles de decisin 5.1.2.2. Reglas de decisin 5.2. Descripcin de los dominios 5.2.1. Crditos 5.2.2. Cardiologa 5.2.3. Votaciones

97
97 97 97 98 98 98 100 100 101 102 102

iv

Magdalena Servente

Indice

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

5.2.4. Estudio sobre hongos 5.2.5. Elita: Base de Asteroides 5.2.6. Hipotiroidismo 5.2.7. Identificacin de vidrios 5.3. Resultados Obtenidos con el ID3 5.3.1. Crditos 5.3.1.1. ID3 utilizando la ganancia como criterio de decisin 5.3.1.2. ID3 utilizando la proporcin ganancia como criterio de decisin 5.3.1.3. Conclusiones 5.3.2. Cardiologa 5.3.2.1. ID3 utilizando la ganancia como criterio de decisin 5.3.2.2. ID3 utilizando la proporcin ganancia como criterio de decisin 5.3.2.3. Conclusiones 5.3.3. Votaciones 5.3.4.1. ID3 utilizando la ganancia como criterio de decisin 5.3.4.2. ID3 utilizando la proporcin ganancia como criterio de decisin 5.3.4.3. Conclusiones 5.3.4. Estudio sobre hongos 5.3.4.1. ID3 utilizando la ganancia como criterio de decisin 5.3.4.2 ID3. utilizando la proporcin ganancia como criterio de decisin 5.3.4.3. Conclusiones 5.4. Resultados Obtenidos con el C4.5 5.4.1. Crditos 5.4.1.1. Utilizando la ganancia como criterio de decisin 5.4.1.2. Utilizando la proporcin de ganancia como criterio de decisin 5.4.1.3. Conclusiones 5.4.2. Cardiologa 5.4.2.1. Utilizando la ganancia como criterio de decisin 5.4.2.2. Utilizando la proporcin ganancia como criterio de decisin 5.4.2.3. Conclusiones 5.4.3. Votaciones 5.4.3.1. Utilizando la ganancia como criterio de decisin 5.4.3.2. Utilizando la proporcin ganancia como criterio de decisin 5.4.3.3. Conclusiones 5.4.4. Estudio sobre hongos 5.4.4.1. Utilizando la ganancia como criterio de decisin 5.4.4.2. Utilizando la proporcin ganancia como criterio de decisin 5.4.4.3. Conclusiones 5.4.5. Elita
Indice Magdalena Servente

103 104 105 106 107 108 108 110 112 113 113 115 117 118 118 123 128 129 129 132 134 135 135 135 137 139 140 140 142 144 145 145 147 149 150 150 153 157 158
v

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

5.4.5.1. Utilizando la ganancia como criterio de decisin 5.4.3.2. Utilizando la proporcin ganancia como criterio de decisin 5.4.5.3. Conclusiones 5.4.6. Hipotiroidismo 5.4.6.1. Utilizando la ganancia como criterio de decisin 5.4.6.2. Utilizando la proporcin ganancia como criterio de decisin 5.4.6.3. Conclusiones 5.4.7. Identificacin de vidrios 5.4.7.1. Utilizando la ganancia como criterio de decisin 5.4.7.2. Utilizando la proporcin ganancia como criterio de decisin 5.4.7.3. Conclusiones 5.5. Comparacin de los resultados obtenidos con el ID3 y con el C4.5 5.5.1. Crditos 5.5.2. Cardiologa 5.5.3. Votaciones 5.5.4. Estudio sobre hongos 5.6. Anlisis general de los resultados obtenidos 5.6.1. Porcentaje de error 5.6.2. Cantidad de datos de entrenamiento

158 160 162 163 163 166 169 169 169 173 177 177 177 180 181 185 187 187 188

CAPTULO 6: CONCLUSIONES
6.1. Conclusiones Generales 6.1.1. Conceptos destacables 6.1.2. Espacio de hiptesis 6.2. Anlisis de los Resultados Obtenidos 6.3. Anlisis de la solucin propuesta 6.4. Una mirada al futuro 6.4.1. Atributos multivaluados en el ID3 y el C4.5 6.4.2. El futuro de la Minera de Datos Inteligente

191
191 191 192 193 193 195 195 196

ANEXO A: MANUAL DEL USUARIO


A.1. Caractersticas Generales A.2. Funcionalidad A.2.1. Pantalla principal

197
197 198 198

vi

Magdalena Servente

Indice

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

A.2.2. Descripcin del men A.2.2.1. Men Resolucin A.2.2.2. Men Evaluacin A.2.2.3. Men Opciones A.2.2.4. Men Ayuda

198 199 199 200 201

ANEXO B: CONJUNTOS DE DATOS ANEXO C: DOCUMENTACIN DEL SISTEMA


C.1. Interaccin de los Mdulos C.2. Descripcin de los archivos fuente C.2.1. TDIDT.cpp C.2.2. Mdulos de pantallas principales C.2.2.1. UPrincipal C.2.2.2. UInfoGral C.2.3. Mdulos de opciones generales C.2.3.1. UBD C.2.3.2. UCambioTabla C.2.3.3. frmOpcionesSist C.2.3.4. UElegirRendimiento C.2.3.5. URendimiento C.2.3.6. UArbol C.2.4. Mdulos de minera de datos C.2.4.1. UDMID3 C.2.4.2. UDMC45 C.2.5. Mdulos de clases de datos C.2.5.1. UTipos C.2.5.2. Types.h C.2.5.3. Defns.h C.2.5.4. Rulex.h C.3. Estructuras de datos C.3.1. Estructuras de datos generales C.3.2. Estructuras de datos del ID3 C.3.4. Estructuras de datos del C4.5

203 205
205 206 206 207 207 207 207 207 207 207 208 208 208 208 208 209 209 209 209 209 209 209 209 210 211

ANEXO D: CDIGO FUENTE


D.1. TDIDT.cpp
Indice Magdalena Servente

213
213
vii

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

D.2. Mdulos de Pantallas Principales D.2.1. UPrincipal D.2.1.1. UPrincipal.h D.2.1.1. UPrincipal.cpp D.2.2. UInfoGral D.2.2.1. UInfoGral.h D.2.2.2. UInfoGral.cpp D.3. Mdulos de opciones generales D.3.1. UBD D.3.1.1. UBD.h D.3.1.2. UBD.cpp D.3.2. UCambioTabla D.3.2.1. UCambioTabla.h D.3.2.2. UCambioTabla.cpp D.3.3. frmOpcionesSist D.3.3.1. frmOpcionesSist.h D.3.3.2. frmOpcionesSist.cpp D.3.4. UElegirRendimiento D.3.4.1. UElegirRendimiento.h D.3.4.2. UElegirRendmiento.cpp D.3.5. URendimiento D.3.5.1. URendimiento.h D.3.5.2. URendmiento.cpp D.3.6. Uarbol D.3.6.1. UArbol.h D.3.6.2. UArbol.cpp D.4. Mdulos de minera de datos D.4.1. UDMID3 D.4.1.1. UDMID3.h D.4.1.2. UDMID3.cpp D.4.2. UDMC45 D.4.2.1. UDMC45.h D.4.2.2. UDMC45.cpp D.5. Mdulos de clases de datos D.5.1. UTipos D.5.1.1. UTipos.h D.5.1.2. UTipos.cpp D.5.2. Types.h

214 214 214 215 217 217 218 219 219 219 219 220 220 220 223 223 224 225 225 226 228 228 228 229 229 229 231 231 231 233 251 251 256 332 332 332 333 337

viii

Magdalena Servente

Indice

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

D.5.3. Defns.h D.5.4. Rulex.h

339 339

REFERENCIAS

341

Indice

Magdalena Servente

ix

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

CAPTULO 1 INTRODUCCIN

La Minera de Datos (Data Mining) es la bsqueda de patrones interesantes y de regularidades importantes en grandes bases de datos [Fayad et al., 1996- Grossman et al., 1999]. Al hablar de minera de datos inteligente [Evangelos, 1996, Michalski et al., 1998] nos referimos especficamente a la aplicacin de mtodos de aprendizaje automtico u otros mtodos similares, para descubrir y enumerar patrones presentes en los datos.

El Aprendizaje Automtico es el campo de la Ingeniera Informtica en el que se estudian y desarrollan algoritmos que implementan los distintos modelos de aprendizaje y su aplicacin a la resolucin de problemas prcticos [Michalski, 1983- Dejong & Money 1986; Bergadano et al., 1992]. Entre los problemas abordados en este campo, est el de inducir conocimientos a partir de datos o ejemplos [Michalski, 1983,1991; Michie, 1988; Garca Martnez, 1994]. Esto resulta una alternativa de solucin a problemas que no pueden ser resueltos mediante algoritmos tradicionales, entre los cuales podemos mencionar especificacin de condiciones asociadas a diagnsticos tcnicos o clnicos, identificacin de caractersticas que permitan reconocimiento visual de objetos, descubrimiento de patrones o regularidades en estructuras de informacin (en particular en bases de datos de gran tamao), entre otros.

Los mtodos tradicionales de Anlisis de Datos incluyen el trabajo con variables estadsticas, varianza, desviacin estndar, covarianza y correlacin entre los atributos; anlisis de componentes (determinacin de combinaciones lineales ortogonales que maximizan una varianza determinada), anlisis de factores (determinacin de grupos correlacionados de atributos), anlisis de clusters (determinacin de grupos de conceptos que estn cercanos segn una funcin de distancia dada), anlisis de regresin (bsqueda de los coeficientes de una ecuacin de los puntos dados como datos), anlisis multivariable de la varianza, y anlisis de los discriminantes [Michalski et al., 1982]. numricamente. Son esencialmente cuantitativos. Todos estos mtodos estn orientados

En contraposicin, los mtodos basados en Aprendizaje Automtico, estn orientados principalmente hacia el desarrollo de descripciones simblicas de los datos, que puedan caracterizar uno o ms grupos de conceptos [Garca Martnez et al., 1987, Mitchel, 1996], diferenciar entre distintas clases, crear nuevas clases, crear una nueva clasificacin conceptual, seleccionar los atributos ms representativos, y ser capaces de predecir secuencias lgicas [Michalski et al., 1983; 1986; Michalski, Tecuci, 1994]. Son esencialmente cualitativos.

Introduccin

Magdalena Servente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

En las bases de datos las entidades se caracterizan generalmente por el valor de los atributos y no por las relaciones entre ellas, con lo cual se utilizan mtodos atribucionales. Uno de los mtodos ms conocidos para describir los atributos de una entidad es utilizar un rbol de decisin o de clasificacin [Michalski et al., 1998Grossman et al., 1999], cuyos nodos corresponden a los atributos, las ramas que salen de ellos son los valores de los atributos, y las hojas son corresponden a clases individuales. La gran ventaja de los rboles de clasificacin es que se pueden transformar sin inconveniente a un conjunto de reglas de decisin.

En este contexto, el propsito de este proyecto es estudiar de que manera la familia TDIDT [Quinlan, 1986; 1990], que aborda el problema de inducir rboles de decisin, puede utilizarse para descubrir automticamente reglas de negocio a partir de la informacin disponible en una base de datos.

En el captulo 2 se presenta el estado actual del Aprendizaje Automtico (Seccin 2.1), en mltiples aspectos, que incluyen la clasificacin general de este tipo de sistemas (Seccin 2.1.1) el esquema general de un sistema de Aprendizaje Automtico (Seccin 2.1.2) y los distintos tipos de aprendizaje en general (Seccin 2.1.3). Luego, se presenta el estado actual de la Minera de Datos (Seccin 2.2), incluyendo descripciones de: el descubrimiento de conocimientos (Seccin 2.2.1), los problemas inherentes al aprendizaje de conceptos (Seccin 2.2.2), las tareas realizadas por un sistema de Minera de Datos (Seccin 2.2.3), los principales mtodos de la Minera de Datos (Seccin 2.2.4) y sus componentes (Seccin 2.2.5). A partir de la presentacin de estos dos grandes temas, se presentan varias aplicaciones en las que se realiza Minera de Datos con sistemas de Aprendizaje Automtico (Seccin 2.3.1), entre los cuales se encuentra la familia TDIDT (Top-Down-Induction-Trees) (Seccin 2.4) en la cual centraremos nuestra atencin. Se explica la construccin de los rboles TDIDT (Seccin 2.4.1), el tratamiento de los atributos desconocidos (Seccin 2.4.2), y la transformacin de los rboles a reglas de decisin (Seccin 2.4.3). Finalmente, se presentan varios mtodos utilizados actualmente para evaluar los distintos mtodos de Aprendizaje Automtico (Seccin 2.5)

En el captulo 3 se presenta el contexto de nuestro problema de inters (Seccin 3.1) y las cuestiones que los algoritmos ID3 y C4.5 pertenecientes a la familia TDIDT deben resolver (Seccin 3.2).

En el captulo 4 se presentan todos los aspectos de la solucin propuesta. Para ello se describen las caractersticas generales de la misma (Seccin 4.1): el marco terico (Seccin 4.1.1), las condiciones que deben cumplir los datos sobre los que se realiza la Minera de Datos (Seccin 4.1.2) y los tipos de resultados obtenidos (Seccin 4.1.3). En la Seccin 4.2 se presenta una descripcin general de los algoritmos ID3 y C4.5 que se utilizan para estudiar el problema. Se explica cmo realizar la divisin de los datos de entrada (Seccin 4.2.1) y la eleccin del criterio de divisin (Seccin 4.2.1.1). Luego, se presenta una descripcin detallada del algoritmo ID3 (Seccin 4.3.1) y de sus limitaciones (Seccin 4.3.2). A modo de ejemplo, se muestra la utilizacin del ID3 para generar un rbol y reglas de decisin (Seccin 4.3.1.5). Tambin se detalla el algoritmo C4.5 (Seccin 4.4) y sus caractersticas particulares (Seccin 4.4.2), las cuales lo diferencian del ID3, resaltando la poda de los rboles de decisin (Seccin
2 Magdalena Servente Introduccin

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

4.4.3) y la estimacin de errores en dichos rboles (Seccin 4.4.4). En la seccin 4.4.5 se ejemplifican los mtodos anteriores. La generalizacin de las reglas de decisin realizada por el C4.5 se explica en la seccin 4.4.6. A continuacin, se detalla el diseo del sistema integrador utilizado para estudiar el xito de la solucin propuesta (Seccin 4.5). Para este sistema se presenta una descripcin general (Seccin 4.5.1) y el diseo de las secciones del sistema para el ID3 (Seccin 4.5.2.1) y para el C4.5 (Seccin 4.5.2.2)

En el captulo 5 se presentan los resultados obtenidos. Primero, se explica la manera en que debe realizarse la interpretacin de los mismos (Seccin 5.1), se presentan los formatos de los rboles y las reglas de decisin tanto para el ID3 (Seccin 5.1.1) como para el C4.5 (Seccin 5.1.2). Luego, se describen los dominios de datos sobre los que se trabaj (Seccin 5.2), y se analizan los resultados obtenidos con el ID3 (Seccin 5.3) y con el C4.5 (Seccin 5.4). En cada caso se presenta, el rbol y las reglas de decisin obtenidos, y la evaluacin de resultados sobre el conjunto de datos de prueba. En la seccin 5.5 se comparan los resultados obtenidos con el ID3 y con el C4.5 en los distintos dominios. Y en la seccin 5.6 se realiza un anlisis general de los resultados.

En el captulo 6 se presentan las conclusiones del trabajo realizado. Primero se destacan los conceptos ms importantes a tener en cuenta a la hora de aplicar algn mtodo como el ID3 y el C4.5 (Seccin 6.1.1). Luego, se analiza la bsqueda que realizan estos dos mtodos en el espacio de hiptesis (Seccin 6.1.2). Se extraen conclusiones a partir de los resultados obtenidos (Seccin 6.2) y se analiza la solucin propuesta (Seccin 6.3). Finalmente, se plantean mejoras y temas a tener en cuenta para continuar con el desarrollo de este tipo de algoritmos de aprendizaje aplicados a la Minera de Datos (Seccin 6.4).

El Anexo A describe el sistema en forma de un resumido manual del usuario. Se describen las caractersticas generales del sistema (Seccin A.1) y las funciones de cada uno de los menes (Seccin A.2), detallando las acciones que pueden realizarse con cada una de las opciones disponibles.

En el Anexo B se detallan los conjuntos de datos utilizados para realizar las pruebas descriptas en el Captulo 5. Para cada uno de los dominios, se muestran los conjuntos de datos de entrenamiento y prueba. Los datos presentados corresponden a los siguientes dominios: Crditos (Seccin B.1), Cardiologa (Seccin B.2), Votaciones (Seccin B.3), Estudio sobre hongos (Seccin B.4), Elita: Base de Asteroides (Seccin B.5), Hipotiroidismo (Seccin B.6), Identificacin de vidrios (Seccin B.7).

El Anexo C es un complemento a la explicacin de la funcionalidad del sistema de la Seccin 4.5. En la seccin C.1 se detalla la interaccin entre los mdulos del sistema. Las principales funciones de cada uno de estos mdulos se presentan en la seccin C.2. En la seccin C.3 se detallan las principales estructuras de datos utilizadas por el sistema

Introduccin

Magdalena Servente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Finalmente, en el anexo D se presenta el cdigo fuente del sistema desarrollado. En la seccin D.1 se presenta el cdigo fuente del archivo TDIDT.cpp que es el archivo inicial del proyecto y es quien inicializa al resto de los formularios requeridos. En la seccin D.2 se presenta el cdigo fuente de las pantallas principales. A continuacin, se detallan los cdigos fuentes de los mdulos de opciones generales (Seccin D:3), de los mdulos de minera de datos (Seccin D.4) y de los mdulos de clases o estructuras de datos (Seccin D.5)

En las Referencias se detallan la bibliografa y las referencias utilizadas para realizar el trabajo.

Magdalena Servente

Introduccin

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

CAPTULO 2: ESTADO DEL ARTE

Este captulo presenta el estado actual del Aprendizaje Automtico (Seccin 2.1), en mltiples aspectos, que incluyen la clasificacin general de este tipo de sistemas (Seccin 2.1.1) el esquema general de un sistema de Aprendizaje Automtico (Seccin 2.1.2) y los distintos tipos de aprendizaje en general (Seccin 2.1.3). Luego, se presenta el estado actual de la Minera de Datos (Seccin 2.2), incluyendo descripciones de: el descubrimiento de conocimientos (Seccin 2.2.1), los problemas inherentes al aprendizaje de conceptos (Seccin 2.2.2), las tareas realizadas por un sistema de Minera de Datos (Seccin 2.2.3), los principales mtodos de la Minera de Datos (Seccin 2.2.4) y sus componentes (Seccin 2.2.5). A partir de la presentacin de estos dos grandes temas, se presentan varias aplicaciones en las que se realiza Minera de Datos con sistemas de Aprendizaje Automtico (Seccin 2.3.1), entre los cuales se encuentra la familia TDIDT (Top-Down-Induction-Trees) (Seccin 2.4) en la cual centraremos nuestra atencin. Se explica la construccin de los rboles TDIDT (Seccin 2.4.1), el tratamiento de los atributos desconocidos (Seccin 2.4.2), y la transformacin de los rboles a reglas de decisin (Seccin 2.4.3). Finalmente, se presentan varios mtodos utilizados actualmente para evaluar los distintos mtodos de Aprendizaje Automtico (Seccin 2.5)

El Aprendizaje Automtico (Machine Learning) es el campo dedicado al desarrollo de mtodos computacionales para los procesos de aprendizaje, y a la aplicacin de los sistemas informticos de aprendizaje a problemas prcticos [Michalski et al, 1998]. La Minera de Datos (Data Mining) es la bsqueda de patrones e importantes regularidades en bases de datos de gran volumen [Michalski et al, 1998].

Estos dos campos han ido creciendo a lo largo de los aos, y han cobrado una importancia considerable. Hoy en da, como se almacenan grandes volmenes de informacin en todas las actividades humanas, la Minera de Datos est cobrando gran importancia, se busca obtener informacin valiosa a partir de los datos guardados. La Minera de Datos utiliza mtodos y estrategias de otras reas o ciencias, entre las cuales podemos nombrar al Aprendizaje Automtico. Cuando este tipo de tcnicas se utilizan para realizar la minera, decimos que estamos ante una Minera de Datos Inteligente.

El campo de aplicacin del Aprendizaje Automtico, no obstante, no se limita nicamente a la Minera de Datos, existen mltiples aplicaciones de Aprendizaje Automtico en funcionamiento. Si analizamos su aplicacin a la Minera de Datos en particular, encontramos que hay varios mtodos que se utilizan con xito hoy en da, entre los cuales se encuentran los mtodos de induccin. Nuestro anlisis se centrar en

Estado del Arte

Magdalena Servente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

una familia de mtodos de induccin conocida como la familia TDIDT (Top Down Induction Trees), y en particular en los algoritmos ID3 y C4.5 desarrollados por Quinlan, pertenecientes a la misma.

2.1. APRENDIZAJE AUTOMTICO


El Aprendizaje Automtico se enfrenta con el desafo de la construccin de programas computacionales que automticamente mejoren con la experiencia [Mitchell, 1997]. Estos programas computacionales son sistemas de aprendizaje capaces de adquirir conocimientos de alto nivel y/o estrategias para la resolucin de problemas mediante ejemplos, en forma anloga a la mente humana [Michalski et al, 1998]. A partir de los ejemplos provistos por un tutor o instructor y de los conocimientos de base o conocimientos previos, el sistema de aprendizaje crea descripciones generales de conceptos.

Cmo sabemos si un sistema ha adquirido algn conocimiento? Siguiendo el anlisis de Witten [Witten y Frank, 2000], podemos plantearnos las siguientes preguntas: qu es el aprendizaje?, y qu es el Aprendizaje Automtico? Si buscamos la definicin de Aprendizaje en la Enciclopedia, encontraremos las siguientes definiciones o alguna similar: Adquirir el conocimiento de alguna cosa por medio del estudio, de la experiencia o al ser instruido; Concebir alguna cosa por meras apariencias o con poco fundamento; Tomar algo en la memoria; Ser informado de; recibir instruccin [Espasa-Calpe, 1974]. Todas estas definiciones se aplican con facilidad a los seres humanos, veamos si pueden aplicarse tambin a los sistemas informticos. En trminos de Aprendizaje Automtico lo primero que debemos ser capaces de hacer es determinar si un sistema informtico ha aprendido o no. En el caso de las dos primeras definiciones esto es imposible: no existe ninguna manera de preguntarle si ha adquirido conocimiento, ya que si le hacemos preguntas acerca de las cosas que debera haber aprendido, no estaramos midiendo sus nuevos conocimientos, sino su capacidad de responder preguntas. En cuanto a las ltimas dos definiciones, el hecho de guardar en memoria y recibir instrucciones son triviales para una computadora, son actividades vitales para ella que realiza todo el tiempo. De esto se deduce que una computadora sera capaz de aprender a la luz de las ltimas dos definiciones.

Esta afirmacin no tiene nada de novedoso para nosotros. Si un sistema de informacin es capaz de aprender, entonces debe ser capaz de aplicar los conocimientos memorizados o instruidos en una nueva situacin. Esto es justamente lo que evaluamos para saber si un ser humano ha aprendido o no, evaluamos su respuesta ante una nueva situacin. Siguiendo esta lnea de pensamiento, podemos afirmar entonces que las cosas (y los seres humanos tambin) aprenden cuando cambian su comportamiento de manera tal que les permite desarrollarse mejor en el futuro. A la luz de esta definicin que asocia el aprendizaje a la performance ms que al conocimiento, el aprendizaje es ms fcil de medir: podemos analizar si un sistema ha aprendido al ponerlo en una situacin en la que estuvo anteriormente y observando si se desempea mejor.

Magdalena Servente

Estado del Arte

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Esta definicin sigue siendo engaosa. Una gran variedad de objetos modifican su comportamiento de manera tal que los hacen desempearse mejor y, sin embargo, no se puede decir que hayan aprendido. Tomemos por ejemplo, nuestras mejores pantuflas, podemos decir que han aprendido la forma de nuestro pie? Sin embargo, han cambiado su forma, su comportamiento para adaptarse mejor a nuestro pie y ciertamente son ms cmodas que cuando eran nuevas. Llamamos entrenamiento al tipo de aprendizaje que se realiza sin pensar. Entrenamos a los animales y a las plantas, pero hablar del entrenamiento de una pantufla sera ridculo. El aprendizaje, a diferencia del entrenamiento, requiere pensar, implica tener el propsito, directo o indirecto, de aprender; alguien o algo que aprende debe tener la intencin de hacerlo. El aprendizaje sin pensar es meramente un entrenamiento. Los sistemas de Aprendizaje Automtico tienen la intencin de construir un modelo a partir de los datos de entrada y cambian su comportamiento de manera tal que son capaces de clasificar nuevos datos y desarrollarse mejor en antiguas situaciones. En fin, podemos afirmar que los sistemas son capaces de aprender. An no sabemos, sin embargo, cmo hacer para que los sistemas aprendan en el mismo grado que los humanos. No obstante, se han creado algoritmos efectivos en ciertas tareas de aprendizaje, y el entendimiento terico del aprendizaje est comenzando a emerger [Mitchell, 1997].

Para complementar el enfoque anterior, debemos preguntarnos cmo aprenden los seres humanos y analizar si los si los sistemas son capaces de aprender de la misma manera. Los humanos aprendemos mediante tres mecanismos distinguibles: induccin, deduccin y abduccin. Podemos afirmar que los sistemas aprenden cuando son capaces de generar nuevos conocimientos, por cualquiera de los tres mtodos anteriores [Monter, 2001]. En un sistema de Aprendizaje Automtico, dicha generacin de conocimientos se realiza cuando los datos se transforman a un nivel superior que nos es ms til. Por ejemplo, cuando los datos presentes en una base de datos se transforman en un modelo de datos que los clasifica segn sus caractersticas o atributos.

Los algoritmos de la familia TDIDT que analizaremos, justamente construyen un modelo de nivel superior. Podemos afirmar entonces que son sistemas de Aprendizaje Automtico?

El tema fundamental para construir un sistema de aprendizaje automtico es, segn Mitchell [Mitchell, 1997], plantear el problema de aprendizaje de manera correcta. Para ello, debe contar con las tres partes esenciales de la siguiente definicin:

Se puede afirmar que un programa computacional es capaz de aprender a partir de la experiencia E con respecto a un grupo de tareas T y segn la medida de performance P, si su performance en las tareas T, medida segn P, mejora con la experiencia E.

Veremos que esto se cumple para los algoritmos de la familia TDIDT.

Estado del Arte

Magdalena Servente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

2.1.1. Clasificacin general de los sistemas de Aprendizaje Automtico


Los sistemas de aprendizaje se clasifican en dos categoras generales: mtodos de caja negra y mtodos orientados al conocimiento [Michalski et al, 1998]. Los primeros desarrollan su propia representacin de conceptos, que por lo general no es comprensible para los humanos; normalmente, realizan clculos numricos de coeficientes, distancias o vectores. Entre estos mtodos, se encuentran las redes neuronales y los mtodos estadstico-matemticos. Por otro lado, los mtodos orientados al conocimiento tratan de crear estructuras simblicas de conocimiento que sean comprensibles para el usuario. El Aprendizaje Automtico pertenece al segundo grupo de mtodos.

2.1.2. Esquema general de un sistema de Aprendizaje Automtico


El esquema general de un sistema de Aprendizaje Automtico se detalla en la Figura 2.1. El sistema recibe dos grupos de entradas: los ejemplos y los conocimientos previos y que genera una descripcin de conceptos como salida. Los ejemplos instancian un cierto concepto, lo describen mediante distintos valores de sus atributos.

ejemplos conocimientos previos C descripcin de conceptos

Figura 2.1 Caractersticas generales de un sistema de Aprendizaje Automtico

Los conocimientos previos contienen la informacin acerca del lenguaje utilizado para describir los ejemplos y los conceptos, es decir, son una suerte de metalenguaje. El sistema utiliza entonces, los conocimientos previos para interpretar los ejemplos y para generar descripciones a partir de ellos.

2.1.2.1. Aprendizaje de conceptos


El Aprendizaje Automtico trata de extraer conceptos de los datos que recibe como entrada. Por concepto se entiende una abstraccin para un conjunto de objetos que comparten ciertas propiedades que los diferencian de otros conceptos [Michalski et al, 1998]. Por ejemplo, podramos decir que el concepto ave se refiere a todos los seres vivos que tienen picos y alas (estas son algunas de las caractersticas que

Magdalena Servente

Estado del Arte

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

comparten todas las aves y que las diferencias del resto de los seres vivos). A la luz de esta definicin vemos que si los lmites entre conceptos no estn claramente definidos, puede no ser fcil clasificar un ejemplo en particular. Por ejemplo, cul es el lmite entre un edificio alto y un edificio bajo, entre una mujer atractiva y una no atractiva.

Existen dos tcnicas de inferencia generales que se utilizan para extraer descripciones a partir de los conceptos: la deduccin y la induccin. La deduccin es la tcnica que infiere informacin como una consecuencia lgica de los ejemplos y conocimientos de base [Holsheimer, Siebes, 1994]. La induccin es la tcnica que infiere informacin generalizada de los ejemplos y conocimientos de base.

En la induccin, podemos trabajar con jerarquas de generalizacin, representadas por rboles o grafos [Michalski et al, 1998]. En una jerarqua de generalizacin, un concepto puede describirse por los objetos del nivel base o por cualquier objeto en un nivel superior. Analizando la Figura 2.2, podemos describir a la Universidad de Buenos Aires con los objetos de nivel base, en cuyo caso decimos que es una institucin educativa, universitaria y pblica; o podemos describirla con los objetos de nivel superior diciendo que la Universidad de Buenos Aires es una institucin educativa.

Instituciones Educativas

Primarias

Secundarias

Terciarias

Universitarias

Pblicas

Privadas

UBA

UTN

Figura 2.2 Jerarqua de generalizacin

En este tipo de jerarquas, podemos identificar tres nociones que relacionan los conceptos: efecto de nivel bsico (basic-level effect), tipicalidad (typicality) y dependencia contextual (contextual dependency) [Michalski et al, 1998]. El efecto de nivel bsico hace referencia al hecho de que los conceptos de nivel base pueden ser descriptos por caractersticas fcilmente identificables por los humanos, lo cual hace que su aprendizaje sea simple para nosotros. Mientras que los conceptos de nivel superior se definen como grupos de conceptos de nivel bsico que comparten alguna caracterstica en comn. La segunda nocin, la tipicalidad, analiza cun tpico es un concepto. Puede medirse de acuerdo a la cantidad de caractersticas comunes que comparte con otros conceptos, y a la cantidad de caractersticas heredadas de los superconceptos (conceptos de nivel superior). En el aprendizaje, la tipicalidad es muy importante, por ejemplo, tratar de ensear el concepto de pjaro con los ejemplos de un pingino, un ganso y un avestruz,
Estado del Arte Magdalena Servente 9

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

no ser muy efectivo. En cambio, utilizar una golondrina, un gorrin y una paloma ser exitoso. Por ltimo, la dependencia contextual es importante porque los conceptos aprendidos dependen del contexto en el que estamos. Al definir estudiantes podemos estar pensando en estudiantes universitarios, estudiantes primarios, o estudiantes del curso de Anlisis Matemtico; el concepto que estamos tratando de ensear, depender del contexto en el que estamos.

2.1.2.2. Representacin de conceptos


La primera cuestin que debe solucionar el Aprendizaje Automtico al encarar el problema de aprendizaje, es cmo representar los conceptos, es decir, cmo llevar los ejemplos, conocimientos base y conceptos obtenidos a un lenguaje entendible por una computadora, que sea tambin, fcilmente interpretable por el usuario (recordemos que los mtodos de Aprendizaje Automtico son orientados al conocimiento y no cajas negras). Algunos mtodos que el Aprendizaje Automtico utiliza para representar los datos, en orden ascendente en cuanto a complejidad y capacidad expresiva, son [Michalski et al, 1998]: Lgica de orden cero (lgica proposicional), lgica de atributos, lgica de predicados de primer orden y lgica de segundo orden, entre otros.

En la lgica de orden cero, los ejemplos y conceptos se describen como conjunciones de constantes booleanas que representan valores de los atributos. El poder descriptivo de este tipo de lgica es bajo, por lo cual, el Aprendizaje Automtico lo utiliza nicamente para describir conceptos muy simples. Un ejemplo de una clusula en lgica de orden cero es:

Juego_Tenis <= Da_soleado ^ No_hay_viento ^ Poca_humedad

Para solucionar el problema del bajo poder descriptivo de la lgica de orden cero, puede utilizarse la lgica de atributos. La idea bsica detrs de la lgica de atributos es caracterizar los ejemplos y conceptos como valores de algunos atributos predefinidos. En lugar de utilizar conjunciones de valores fijos, cada atributo es una variable. El poder descriptivo de la lgica de atributos es mayor que el de la lgica de orden cero, aunque en sentido matemtico la expresividad es la misma. Una clusula en lgica de atributos podra ser Juego_Tenis <= Pronstico ^ Viento ^ Humedad). Los ejemplos generalmente se presentan en una tabla donde cada fila representa un ejemplo y cada columna, un atributo. La tabla 2.1 contiene ejemplos positivos y negativos para los das en que es posible jugar al tenis.

Objeto Da 1 Da 2 Da 3 Da 4 Da 5

Pronstico Sol Lluvia Nublado Sol Nublado

Viento No Rfagas Ventoso Ventoso No

Humedad Poca Poca Poca Alta Alta

Juego_Tenis Si No No Si No

Tabla 2.1 Ejemplos positivos y negativos del concepto Juego_Tenis <= Pronstico ^ Viento ^ Humedad 10 Magdalena Servente Estado del Arte

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Como lenguaje descriptivo, la lgica de atributos es mucho ms prctica que la lgica de orden cero. Por eso, es utilizada en muchos programas de Aprendizaje Automtico, como los de la familia TDIDT (rboles inductivos de arriba hacia abajo - Top-Down Induction Trees).

La lgica de predicados de primer orden utiliza las clusulas de Horn para representar conceptos. Estas clusulas simplifican las descripciones complicadas mediante el uso de predicados y variables. Son bastante potentes, incluso permiten la expresin de conceptos recursivos. El lenguaje Prolog se basa en la lgica de predicados de primer orden. Este tipo de lgica se utiliza en algunos programas de Aprendizaje Automtico, como el algoritmo FOIL. Un ejemplo de una clusula de Horn sera:

Abuelo(X,Z) :- Padre(X,Y), Padre(Y,Z)

Por ltimo, la lgica de predicados de segundo orden considera a los nombres de los predicados como variables. La expresin anterior quedara de la forma:

p(X,Z) :- q(X,Y), q(Y,Z)

donde p es Abuelo y q es Padre.

Este tipo de lgica es la de mayor poder descriptivo. Sin embargo, dada su complejidad rara vez se utiliza en los sistemas de Aprendizaje Automtico.

2.1.3. Aprendizaje
2.1.3.1. Aprendizaje supervisado y no supervisado
Existen dos tipos de aprendizaje: el supervisado y el no supervisado [Michalski et al, 1998], [Holsheimer, Siebes, 1994]. En el aprendizaje supervisado o aprendizaje a partir de ejemplos, el instructor o experto define clases y provee ejemplos de cada una. El sistema debe obtener una descripcin para cada clase. Cuando el instructor define una nica clase, provee ejemplos positivos (pertenecen a la clase) y negativos (no pertenecen a la clase). En este caso, los ejemplos importantes son los cercanos al lmite, porque proveen informacin til sobre los lmites de la clase. Cuando el instructor define varias clases, el sistema puede optar por realizar descripciones discriminantes o no. Un conjunto de descripciones es discriminante si el total de las descripciones cubren todas las clases, pero una descripcin cubre una sola clase en particular.

Estado del Arte

Magdalena Servente

11

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

En el aprendizaje no supervisado o aprendizaje a partir de observaciones y descubrimientos, el sistema debe agrupar los conceptos1 sin ayuda alguna de un instructor. El sistema recibe los ejemplos, pero no se predefine ninguna clase. Por lo tanto, debe observar los ejemplos y buscar caractersticas en comn que permitan formar grupos. Como resultado, este tipo de aprendizaje genera un conjunto de descripciones de clases, que juntas cubren todas las clases y en particular describen a una nica clase.

2.1.3.2. Tipos de aprendizaje automtico


Existen varios tipos de aprendizaje que pueden clasificarse como supervisados o no supervisados. A continuacin, se presentan los distintos tipos de aprendizaje automtico[Garca Martnez, 1997].

Aprendizaje por memorizacin

Aprendizaje por instruccin

Aprendizaje por deduccin

Aprendizaje por analoga

Aprendizaje por induccin

Aprendizaje por ejemplos

Aprendizaje por observacin - descubrimiento

Observacin pasiva

Experimentacin activa

En el aprendizaje por memorizacin los sistemas reciben conocimientos del medio ambiente y los guardan sin ningn tipo de procesamiento. Su complejidad se encuentra en el almacenamiento de los conocimientos y no en su adquisicin. Lo importante en estos casos es que la informacin est disponible

Tambin conocido como formacin de clusters.

12

Magdalena Servente

Estado del Arte

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

cuando se requiera; no hay ningn tipo de inferencia ni procesamiento, por lo tanto, los conocimientos deben ser adquiridos y almacenados en un nivel que los haga directamente utilizables.

En el caso del aprendizaje por instruccin, los conocimientos son provistos por un instructor o experto en la materia (aprendizaje supervisado). La informacin provista es abstracta o de ndole general, por lo tanto, el sistema tendr que inferir los detalles. Es decir, el sistema deber transformar la informacin provista en trminos abstractos de alto nivel, a reglas que puedan ser utilizadas directamente en la tarea del sistema.

El aprendizaje por deduccin o aprendizaje guiado por la especificacin destaca o especifica las relaciones existentes entre conceptos. El sistema transforma las especificaciones recibidas como entrada en un algoritmo que actualiza relaciones.

En el aprendizaje por analoga, el sistema, que recibe informacin relevante a problemas anlogos a los que est tratando de resolver, debe descubrir las analogas e inferir reglas aplicables al problema. Se trata de generar nuevos conocimientos utilizando informacin preexistente.

En el aprendizaje por induccin, el sistema genera nuevos conocimientos que no estn presentes en forma implcita dentro del conocimiento disponible. El aprendizaje por induccin abarca el aprendizaje por ejemplos y el aprendizaje por observacin y descubrimiento.

En el aprendizaje por ejemplos, el sistema recibe varios ejemplos como entrada y debe generalizarlos en un proceso inductivo para presentarlos como salida. Generalmente, en este tipo de aprendizaje existen dos tipos de ejemplos, los positivos y los negativos. Los ejemplos positivos fuerzan la generalizacin, mientras que los ejemplos negativos previenen que esta sea excesiva. Se trata de que el conocimiento adquirido cubra todos los ejemplos positivos y ningn ejemplo negativo. A este tipo de aprendizaje pertenece la familia TDIDT. Debe tenerse en cuenta, que los ejemplos a partir de los cuales aprende el sistema, deben ser representativos de los conceptos que se est tratando de ensear. Adems, la distribucin de las clases en el conjunto de ejemplos de entrenamiento, a partir de los que el sistema aprende, debe ser similar a la distribucin existente en los datos sobre los cuales se aplicar el modelo resultante.

En el aprendizaje por observacin y descubrimiento, el sistema forma teoras o criterios de clasificacin en jerarquas taxonmicas, a partir de la induccin realizando tareas de descubrimiento. Pertenece al tipo de aprendizaje no supervisado y, como tal, permite que el sistema clasifique la informacin de entrada para formar conceptos. Existen dos formas en las que el sistema interacta con el entorno: la observacin pasiva, en la cual el sistema clasifica las observaciones de mltiples puntos del medio; y la observacin activa, en la cual el sistema observa el entorno, realiza cambios en el mismo, y luego analiza los resultados.

Estado del Arte

Magdalena Servente

13

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

2.1.3.3 Mtodos clsicos de aprendizaje


Existen dos mtodos clsicos de aprendizaje inductivo a partir de ejemplos que debemos conocer: el aprendizaje AQ y el aprendizaje segn el mtodo de divide y reinars [Michalski et al, 1998].

2.1.3.3.1 Aprendizaje AQ

El aprendizaje AQ se basa en la idea de cubrir progresivamente los datos de entrenamiento a medida que se generan reglas de decisin. Su esencia est en la bsqueda de un conjunto de reglas (conjunciones de pares atributo-valor o predicados arbitrarios) que cubran todos los ejemplos positivos y ningn ejemplo negativo. En lugar de dividir los ejemplos en subconjuntos, el aprendizaje AQ generaliza, paso a paso, las descripciones de los ejemplos positivos seleccionados [Michalski et al, 1998].

2.1.3.3.2 Aprendizaje divide y reinars

El aprendizaje divide y reinars particiona el conjunto de ejemplos en subconjuntos sobre los cuales se puede trabajar con mayor facilidad. En la lgica proposicional, por ejemplo, se parte el conjunto de acuerdo a los valores de un atributo en particular, entonces, todos los miembros de un subconjunto tendrn un mismo valor para dicho atributo. Dentro de este tipo de aprendizaje, encontramos la familia TDIDT (Top-Down Induction Trees), la cual se explica con mayor detalle en la Seccin 2.4

2.2. MINERA DE DATOS


La enorme cantidad de bases de datos en todas las reas de aplicacin humana, demanda nuevas y poderosas tcnicas de transformacin de los datos en conocimientos tiles. Entre dichas tcnicas podemos nombrar a las pertenecientes al aprendizaje automtico, el anlisis estadstico de datos, la visualizacin de datos, y las redes neuronales. La Minera de Datos se refiere a la aplicacin de tcnicas de aprendizaje automtico, entre otros mtodos, para encontrar importantes patrones en los datos. El descubrimiento de conocimientos pone su nfasis en el ciclo de anlisis de datos en s, analiza su ciclo de vida.

La Minera de Datos busca generar informacin similar a la que podra producir un experto humano, que adems satisfaga el Principio de Comprensibilidad. La Minera de Datos es el proceso de descubrir conocimientos interesantes, como patrones, asociaciones, cambios, anomalas y estructuras significativas

14

Magdalena Servente

Estado del Arte

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

a partir de grandes cantidades de datos almacenadas en bases de datos, data warehouses, o cualquier otro medio de almacenamiento de informacin.

La Minera de Datos es un campo en pleno desarrollo en el que se aplican mtodos de varias disciplinas como los presentes en sistemas de bases de datos, data warehousing, estadstica, el Aprendizaje Automtico, visualizacin de datos, obtencin de informacin y computacin de alta performance. Adems tambin se utilizan mtodos de las reas de redes neuronales, reconocimiento de patrones, anlisis espacial de datos, bases de datos de imgenes, procesamiento de seales y programacin lgica inductiva (ILP). Numerosos especialistas sealan que la Minera de Datos necesita de la integracin de enfoques de mltiples disciplinas [Mitchell, 1997].

Una gran cantidad de mtodos de anlisis de datos han sido desarrollados en estadstica. El Aprendizaje Automtico ha contribuido en el rea de clasificacin e induccin. Las redes neuronales, por su lado, son efectivas en la clasificacin, prediccin y clustering de datos. Sin embargo, con la gran cantidad de datos almacenados en las bases de datos sobre los cuales se debe hacer la minera de datos, todos estos mtodos deben re-analizarse o escalarse para ser efectivos.

Adems para procesar grandes volmenes de datos de los cuales deben extraerse patrones automticamente, es necesario contar con una gran capacidad computacional de procesamiento. Es necesario, entonces, desarrollar mtodos de minera de datos distribuidos, paralelos e incrementales.

2.2.1. Descubrimiento de conocimientos


La Minera de Datos no debe confundirse con el descubrimiento de conocimientos (knowledge discovery), aunque muchos investigadores consideran que la Minera de Datos no es ms que un paso esencial en el descubrimiento de conocimientos. En general, un proceso de descubrimiento de conocimientos consiste de una repeticin iterativa de los siguientes pasos [S/A, 1999]: Limpieza de datos (Data cleaning) procesamiento de los datos ruidosos, errneos, faltantes o irrelevantes

Integracin de datos (Data integration) integracin de mltiples fuentes heterogneas de datos en una nica fuente.

Seleccin de datos (Data selection) extraccin de los datos relevantes al rea de anlisis del almacenamiento de datos.

Estado del Arte

Magdalena Servente

15

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Transformacin de datos (Data transformation) transformacin o consolidacin de los datos en formas apropiadas para la minera mediante procedimientos de agregacin.

Minera de Datos: proceso esencial donde se aplican diversos mtodos para extraer patrones de los datos.

Evaluacin de patrones (Pattern evaluation) identificacin de patrones interesantes basndose en algn parmetro de comparacin impuesto por el usuario.

Presentacin de los conocimientos (Knowledge presentation) tcnicas de visualizacin y representacin de los conocimientos obtenidos.

Con los sistemas de bases de datos relacionales existentes hoy en da, los cuatro procesos iniciales: limpieza, integracin, seleccin y transformacin de datos pueden realizarse mediante la construccin de data warehouses. Los procesos de minera de datos, evaluacin de patrones y presentacin de conocimientos generalmente se agrupan en el proceso que se conoce como Minera de Datos. De ah la confusin que puede llegar a existir con el nombre.

2.2.2. Problemas inherentes al proceso de aprendizaje


Una de las mayores clases de exploracin de datos est basada en mtodos para el aprendizaje inductivo simblico a partir de ejemplos. Dado un conjunto de ejemplos de clases de decisin diferentes y conocimientos de base, el aprendizaje inductivo genera descripciones para cada clase. En este sentido debe enfrentarse a varios problemas como [Michalski et al, 1998]:

Aprendizaje a partir de datos incorrectos

Aprendizaje a partir de datos incompletos

Aprendizaje a partir de datos distribuidos

Aprendizaje a partir de conceptos que evolucionan a travs del tiempo

Aprendizaje a partir de datos que se obtienen a travs del tiempo

16

Aprendizaje a partir de datos subjetivos


Magdalena Servente Estado del Arte

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Aprendizaje a partir de conceptos flexibles

Aprendizaje de conceptos en distintos niveles de generalizacin

Integracin de descubrimientos cualitativos y cuantitativos.

Prediccin cualitativa

Cabe destacar que muchos de estos problemas son los mismos con los que se enfrenta un sistema de Aprendizaje Automtico que aprende a partir de ejemplos, que pueden tener imperfecciones o pueden estar incompletos, o incluso, no ser representativos del problema que se est analizando.

2.2.3. Tareas realizadas por un sistema de Minera de Datos


Un sistema de Minera de Datos actual realiza una o ms de las siguientes tareas: Descripcin de clases: provee una clasificacin concisa y resumida de un conjunto de datos y los distingue unos de otros. La clasificacin de los datos se conoce como caracterizacin, y la distincin entre ellos como comparacin o discriminacin.

Asociacin: es el descubrimiento de relaciones de asociacin o correlacin en un conjunto de datos. Las asociaciones se expresan como condiciones atributo-valor y deben estar presentes varias veces en los datos.

Clasificacin: analiza un conjunto de datos de entrenamiento cuya clasificacin de clase se conoce y construye un modelo de objetos para cada clase. Dicho modelo puede representarse con rboles de decisin o con reglas de clasificacin, que muestran las caractersticas de los datos. El modelo puede ser utilizado para la mayor comprensin de los datos existentes y para la clasificacin de los datos futuros.

Prediccin: esta funcin de la minera predice los valores posibles de datos faltantes o la distribucin de valores de ciertos atributos en un conjunto de objetos.

Clustering: identifica clusters en los datos, donde un cluster es una coleccin de datos similares. La similitud puede medirse mediante funciones de distancia, especificadas por los usuarios o por expertos. La Minera de Datos trata de encontrar clusters de buena calidad que sean escalables a grandes bases de datos y a data warehouses multidimensionales.

Estado del Arte

Magdalena Servente

17

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Anlisis de series a travs del tiempo: analiza un gran conjunto de datos obtenidos con el correr del tiempo para encontrar en l regularidades y caractersticas interesantes, incluyendo la bsqueda de patrones secuenciales, peridicos, modas y desviaciones.

2.2.4. Mtodos de Minera de Datos


La Minera de Datos abarca un terreno muy amplio, no es solamente aplicar un algoritmo existente a un conjunto de datos. Las herramientas existentes actualmente incluyen mecanismos para la preparacin de los datos, su visualizacin y la interpretacin de los resultados. Muchas de las herramientas funcionan bien en espacios de pocas dimensiones con datos numricos, pero sus limitaciones comienzan a aparecer en espacios de mayores dimensiones o con datos no numricos. A continuacin se presentan algunos mtodos de minera de datos que resuelven distintos problemas inherentes a la misma [Thrun et al, 1998]. Aprendizaje activo/Diseo Experimental (Active Learning/Experimental design): el aprendizaje activo, por el lado de la Inteligencia Artificial, y el diseo experimental, por el lado de la Estadstica, tratan de resolver el problema de la eleccin del mtodo a aplicar durante el aprendizaje. Suponen que durante el proceso de aprendizaje, existe la oportunidad de influir sobre los datos, recordemos la diferencia entre la exploracin pasiva y la experimentacin activa. El aprendizaje activo afronta el problema de cmo explorar.

Aprendizaje acumulativo (Cumulative learning): Muchas bases de datos crecen continuamente. Tomemos por ejemplo, una base de datos sobre transacciones financieras en un banco. Aprender a partir de bases de datos de este tipo es difcil ya que los datos deben ser analizados acumulativamente a medida que se incorporan a la base. Nos encontramos entonces ante el desafo de disear algoritmos que puedan incorporar nuevos datos y adaptarse a los cambios generados por la incorporacin de los mismos.

Aprendizaje multitarea (Multitask learning): Muchos dominios se caracterizan por pertenecer a familias de problemas de aprendizaje relacionados o similares. Tomemos, por ejemplo, el dominio mdico. Mientras que cada enfermedad posee su aprendizaje individual con bases de datos dedicadas, muchas enfermedades tienen causas y/o sntomas en comn, sera provechoso entonces favorecer el intercambio de informacin entre los distintos resultados de los algoritmos.

Aprendizaje a partir de datos tabulados y no tabulados (Learning from labeled and unlabeled data): en muchas aplicaciones el problema no est en la obtencin de los datos, sino en la tabulacin de los mismos.

18

Magdalena Servente

Estado del Arte

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Aprendizaje relacional (Relational Learning): en muchos problemas de aprendizaje las entidades no se describen a partir de un conjunto esttico de atributos, sino a partir de las relaciones entre entidades. En las bases de datos inteligentes encontrar patrones o relaciones entre entidades es un problema primordial.

Aprendiendo a partir de bases de datos de gran tamao (Learning from extremely large databases): muchas bases de datos son demasiado grandes como para ser ledas y procesadas por una computadora ms de una vez. Lo cual imposibilita el uso de algoritmos que requieran mltiples pasadas sobre los datos. Debe afrontarse entonces, el desafo de encontrar algoritmos inteligentes que sean escalables eficientemente a grandes bases de datos.

Aprendiendo a partir de bases de datos extremadamente pequeas (Learning from extremely small databases): en el otro extremo, existen tambin bases de datos que son demasiado pequeas para los algoritmos existentes. Por ejemplo, en robtica la cantidad de ejemplos es limitada, sin embargo, muchos de los mtodos de aprendizaje actuales requieren un gran nmero de ejemplos. Debe encontrarse entonces un mtodo que trabaje eficientemente con un nmero limitado de datos, o bien, que se base en el conocimiento previo.

Aprendiendo con conocimientos previos (Learning with prior knowledge): En muchos casos, se poseen conocimientos efectivos acerca del fenmeno en estudio. Deben existir mtodos capaces de incorporar conocimientos previos tanto abstractos, como diversos o inciertos.

Aprendiendo a partir de datos de distintos tipos (Learning from mixed media data): Muchos juegos de datos contienen varios tipos de datos. Un buen ejemplo, se presenta en las bases de datos mdicas que contienen estadsticas acerca de los pacientes, grficos, rayos X, etc. La gran mayora de los algoritmos actuales slo pueden trabajar con un nico tipo de datos, con lo cual deben encontrarse mtodos capaces de manejar los distintos tipos o formatos de datos presentes en una base de datos.

Aprendiendo relaciones casuales (Learning casual relationships): La mayora de los algoritmos de aprendizaje detectan la correlacin entre los datos, pero son incapaces de determinar o modelar las casualidades, y, por lo tanto, fallan al tratar de predecir algunos efectos externos. Deben disearse, entonces, algoritmos que incorporen las casualidades.

Visualizacin y Minera de Datos interactiva (Visualization and Interactive Data Mining): En muchos casos, la minera de datos es un proceso interactivo, en el cual el anlisis de datos automtico se mezcla con las decisiones de control de un experto de campo. Deben disearse herramientas que contemplen el intercambio entre estas dos reas.

Estado del Arte

Magdalena Servente

19

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

2.2.5. Componentes de la Minera de Datos


La Minera de Datos cuenta con tres grandes componentes [Joshi, 1997]: Clustering o clasificacin, Reglas de asociacin y Anlisis de Secuencias.

En el Clustering o Clasificacin se analizan los datos y se generan conjuntos de reglas que agrupen y clasifiquen los datos futuros. Debe tenerse en cuenta que en la Minera de Datos se busca obtener reglas que particionen los datos en clases predefinidas, esto se torna complicado cuando hay una gran cantidad de atributos y millones de registros.

Una regla de asociacin es una regla que implica o presenta ciertas relaciones entre un grupo de objetos en una base de datos. En el proceso de la Minera de Datos se obtienen varias reglas de este tipo con distintos niveles de abstraccin. Nuevamente, no debemos olvidar que esto puede implicar el anlisis iterativo de bases de datos transaccionales o relacionales, con millones de registros, lo cual presenta un elevado costo operativo. Por lo tanto, la obtencin de reglas a partir de bases de datos relacionales o transaccionales es un importante tema de estudio.

Por ltimo, el anlisis de secuencias trata de encontrar patrones que ocurren con una secuencia determinada. Trabaja sobre datos que aparecen en distintas transacciones a diferencia de los datos que aparecen relacionados mediante reglas dentro de una misma transaccin -.

A continuacin se presentan ejemplos de algoritmos de Minera de Datos existentes, de cada uno de los tipos presentados.

2.2.5.1. Algoritmos de Clasificacin (Classification Algorithms)


En la Clasificacin de Datos se desarrolla una descripcin o modelo para cada una de las clases presentes en la base de datos. Existen muchos mtodos de clasificacin como aquellos basados en los rboles de decisin TDIDT como el ID3 y el C4.5, los mtodos estadsticos, las redes neuronales, y los conjuntos difusos, entre otros.

A continuacin se describen brevemente aquellos mtodos de Aprendizaje Automtico que han sido aplicados a la Minera de Datos con cierto xito:

Algoritmos estadsticos: Muchos algoritmos estadsticos han sido utilizados por los analistas para detectar patrones inusuales en los datos y explicar dichos patrones mediante la utilizacin de modelos estadsticos, como, por ejemplo, los modelos lineales. Estos mtodos se han ganado su lugar y seguirn siendo utilizados en los aos venideros.

20

Magdalena Servente

Estado del Arte

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Redes Neuronales: las redes neuronales imitan la capacidad de la mente humana para encontrar patrones. Han sido aplicadas con xito en aplicaciones que trabajan sobre la clasificacin de los datos.

Algoritmos genticos: tcnicas de optimizacin que utilizan procesos como el entrecruzamiento gentico, la mutacin y la seleccin natural en un diseo basado en los conceptos de la evolucin natural.

Mtodo del vecino ms cercano: es una tcnica que clasifica cada registro de un conjunto de datos en base a la combinacin de las clases de los k registros ms similares. Generalmente se utiliza en bases de datos histricas.

Reglas de induccin: la extraccin de reglas si-entonces a partir de datos de importancia estadstica.

Visualizacin de los datos: la interpretacin visual de las relaciones entre datos multidimensionales

Clasificadores basados en instancias o ejemplos: Una manera de clasificar un caso es a partir de un caso similar cuya clase es conocida, y predecir que el caso pertenecer a esa misma clase. Esta filosofa es la base para los sistemas basados en instancias, que clasifican nuevos casos refirindose a casos similares recordados. Un clasificador basado en instancias necesita teoras simblicas. Los problemas centrales de este tipo de sistemas se pueden resumir en tres preguntas: cules casos de entrenamiento deben ser recordados?, cmo puede medirse la similitud entre los casos?, y cmo debe relacionarse el nuevo caso a los casos recordados?

Los mtodos de aprendizaje basados en reglas de clasificacin buscan obtener reglas o rboles de decisin que particionen un grupo de datos en clases predefinidas. Para cualquier dominio real, el espacio de datos es demasiado grande como para realizar una bsqueda exhaustiva en el mismo.

En cuanto a los mtodos inductivos, la eleccin del atributo para cada uno de los nodos se basa en la ganancia de entropa generada por cada uno de los atributos. Una vez que se ha recopilado la informacin acerca de la distribucin de todas las clases, la ganancia en la entropa se calcula utilizando la teora de la informacin o bien el ndice de Gini [Joshi, 1997].

2.2.5.2. Algoritmos de reglas de asociacin


Una regla de asociacin es una regla que implica ciertas relaciones de asociacin entre distintos objetos de una base de datos, como puede ser: ocurren juntos o uno implica lo otro. Dado un conjunto de
Estado del Arte Magdalena Servente 21

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

transacciones, donde cada transaccin es un conjunto de tems, una regla de asociacin es una expresin de la forma XY, donde X e Y son conjuntos de tems. Un ejemplo de regla de asociacin sera: 30% de las transacciones que contienen nios, tambin contienen paales; 2% de las transacciones contienen ambas cosas. En este caso el 30% es el nivel de confianza de la regla y 2% es la cantidad de casos que respaldan la regla. La cuestin est en encontrar todas las reglas de asociacin que satisfagan los requerimientos de confianza mnima y mxima impuestos por el usuario.

2.2.5.3. Anlisis de Secuencias


En este caso se trabaja sobre datos que tienen una cierta secuencia entre s. Cada dato es una lista ordenada de transacciones (o tems). Generalmente, existe un tiempo de transaccin asociado con cada dato. El problema consiste en encontrar patrones secuenciales de acuerdo a un lmite mnimo impuesto por el usuario, dicho lmite se mide en funcin al porcentaje de datos que contienen el patrn. Por ejemplo, un patrn secuencial puede estar dado por los usuarios de un video club que alquilan Arma Mortal, luego Arma Mortal 2, Arma Mortal 3 y finalmente Arma Mortal 4, lo cual no implica que todos lo hagan en ese orden.

2.3. APRENDIZAJE AUTOMTICO Y MINERA DE DATOS


La automatizacin del proceso de aprendizaje se conoce como Aprendizaje Automtico. La Minera de Datos es un caso especial de Aprendizaje Automtico donde el escenario observado es una base de datos. Los grficos que se encuentran a continuacin explican este concepto [Holsheimer, Siebes, 1994].
codificacin de los ejemplos C ML

ejemplos E

Figura 2.6. Diagrama de Aprendizaje Automtico

En la figura 2.6, el entorno E representa el mundo real, el entorno sobre el cual se realiza el aprendizaje. E representa un nmero finito de observaciones u objetos que son codificados en algn formato legible para Aprendizaje Automtico. El conjunto de ejemplos codificados constituye el conjunto de entrenamiento para el sistema de aprendizaje automtico.

Por su lado, en la figura 2.7, la codificacin C es reemplazada por una base de datos, que modela el entorno. Cada estado en la base de datos refleja algn estado de E, y cada transicin de estados en la base
22 Magdalena Servente Estado del Arte

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

de datos representa una transicin de estados en E. El algoritmo utilizado para realizar la minera de datos construye entonces un modelo a partir de los datos en la base de datos.
ejemplos E BD codificacin de los ejemplos DM

Figura 2.7. Diagrama de Minera de Datos

Aunque a simple vista, la Minera de Datos parece muy similar a Aprendizaje Automtico, hay importantes diferencias que deben tenerse en cuenta. La base de datos generalmente se construye con fines distintos a la Minera de Datos, con lo cual la base se disea segn los requerimientos del sistema y no segn los requerimientos del algoritmo de aprendizaje.

2.3.1. Aplicaciones
A continuacin se describen algunos algoritmos de Aprendizaje Automtico que han sido utilizados con xito en la Minera de Datos. Algunos de ellos son generales y pueden ser utilizados en varios dominios de conocimiento, mientras que otros fueron diseados para dominios particulares.

2.3.1.1. ID3
Este sistema ha sido el que ms impacto ha tenido en la Minera de Datos. Desarrollado en los aos ochenta por Quinlan, ID3 significa Induction Decision Trees, y es un sistema de aprendizaje supervisado que construye rboles de decisin a partir de un conjunto de ejemplos. Estos ejemplos son tuplas compuestas por varios atributos y una nica clase. El dominio de cada atributo de estas tuplas est limitado a un conjunto de valores. Las primeras versiones del ID3 generaban descripciones para dos clases: positiva y negativa. En las versiones posteriores, se elimin esta restriccin, pero se mantuvo la restriccin de clases disjuntas. ID3 genera descripciones que clasifican cada uno de los ejemplos del conjunto de entrenamiento.

Este sistema tiene una buena performance en un amplio rango de aplicaciones, entre las cuales podemos nombrar, aplicaciones de dominios mdicos, artificiales y el anlisis de juegos de ajedrez. El nivel de precisin en la clasificacin es alto. Sin embargo, el sistema no hace uso del conocimiento del dominio. Adems, muchas veces los rboles son demasiado frondosos, lo cual conlleva a una difcil interpretacin. En estos casos pueden ser transformados en reglas de decisin para hacerlos ms comprensibles.

Estado del Arte

Magdalena Servente

23

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

2.3.1.2. C4.5
El C4.5 es una extensin del ID3 que permite trabajar con valores continuos para los atributos, separando los posibles resultados en dos ramas: una para aquellos Ai<=N y otra para Ai>N. Este algoritmo fue propuesto por Quinlan en 1993. El algoritmo C4.5 genera un rbol de decisin a partir de los datos mediante particiones realizadas recursivamente. El rbol se construye mediante la estrategia de profundidad-primero (depth-first). El algoritmo considera todas las pruebas posibles que pueden dividir el conjunto de datos y selecciona la prueba que resulta en la mayor ganancia de informacin. Para cada atributo discreto, se considera una prueba con n resultados, siendo n el nmero de valores posibles que puede tomar el atributo. Para cada atributo continuo, se realiza una prueba binaria sobre cada uno de los valores que toma el atributo en los datos.

2.3.1.3. AQ15
El AQ15 fue desarrollado por Michalski. Es un sistema de aprendizaje inductivo que genera reglas de decisin, donde el antecedente es una frmula lgica. Una caracterstica particular de este sistema es la induccin constructiva (constructive induction), es decir, el uso de conocimientos del dominio para generar nuevos atributos que no estn presentes en los datos de entrada.

Al igual que el ID3, el AQ15 est diseado para la generacin de reglas fuertes, es decir, que para cada clase, se construye una regla que cubre todos los ejemplos positivos y ningn ejemplo negativo. El sistema soluciona el problema de los ejemplos incompletos o inconsistentes mediante un pre o post procesamiento. En el post procesamiento, adems, se reduce de forma drstica la cantidad de reglas generadas mediante el truncamiento de reglas, el cual no afecta la precisin de las reglas obtenidas.

AQ15 ha sido testeado en dominios mdicos, como el diagnstico en la limfografa, diagnstico de cncer de mama y la ubicacin del tumor primario. En estos casos, se obtuvieron reglas con el mismo nivel de precisin que el de los expertos humanos. En todos los casos, los datos de entrenamiento son conjuntos chicos, de unos cientos de ejemplos.

2.3.1.4. CN2
El sistema CN2, desarrollado por Clark y Niblett, es una adaptacin del AQ15. La gran desventaja del AQ15 es que elimina los ruidos mediante pre y post procesamiento y no durante la ejecucin del algoritmo. El objetivo del CN2 es, entonces, incorporar el manejo de datos ruidosos al algoritmo en s. Combina entonces las tcnicas de poda utilizadas en el ID3, con las tcnicas de reglas condicionales utilizadas en el AQ15.
24 Magdalena Servente Estado del Arte

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

El CN2 genera reglas simples y comprensibles en dominios donde los datos pueden tener ruido. Construye reglas probabilsticas, es decir, el antecedente en cada regla cubre ejemplos positivos de una clase, pero tambin puede cubrir ejemplos de otra clase en menor nmero. De esta forma no restringe el espacio de bsqueda nicamente a aquellas reglas inferibles a partir de los ejemplos.

La performance el ID3, AQ15 y CN2 ha sido comparada en dominios mdicos y artificiales. Las estructuras de conocimiento generadas en cada caso son de similar calidad y complejidad.

2.3.1.5. DBLearn
El sistema DBLearn fue diseado por Cai, Han y Cercone y utiliza conocimientos del dominio para generar descripciones para subconjuntos predefinidos de una base de datos relacional. Las caractersticas especiales de este sistema son su estrategia de bsqueda de abajo hacia arriba (bottom up); el uso de conocimientos del dominio como jerarquas de valores de atributos y el uso del lgebra relacional. El conjunto de entrenamiento es una tabla de datos relacional con n-tuplas.

El sistema DBLearn es relativamente simple, ya que utiliza solo dos operaciones de generalizacin para construir los descriptores. La generalizacin est orientada a los atributos, lo cual limita el conjunto de descriptores que pueden ser construidos. La performance del sistema es buena, y la complejidad en el tiempo est en el orden de los O(N logN), siendo N la cantidad inicial de tuplas.

2.3.1.6. Meta-Dendral
El sistema Meta-Dendral es un sistema especial para la generacin de reglas de conocimiento en la estereoscopia. Esta ciencia estudia la estructura tridimensional de la molcula. El Meta-Dendral es interesante porque utiliza un sistema de representacin de conocimientos totalmente diferente a los anteriores. Al buscar generar reglas que puedan predecir dnde se romper la estructura de una molcula, toma las estructuras moleculares como entrada.

El sistema ha sido exitoso para encontrar reglas de fragmentacin desconocidas hasta el momento. Sin embargo, la estrategia de bsqueda es ineficiente, ya que genera muchas reglas de decisin que luego son eliminadas en la etapa de optimizacin. Es muy difcil encontrar heursticas que guen la bsqueda y no existen tcnicas explcitas que ayuden a eliminar ruidos o a destacar casos especiales.

Estado del Arte

Magdalena Servente

25

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

2.3.1.7. RADIX/RX
El sistema RX se utiliza para el descubrimiento de relaciones en bases de datos clnicas. La diferencia importante con otros sistemas es que incorpora la nocin de tiempo: un dato es un conjunto de ejemplos que guardan informacin de un paciente en diferentes momentos, y los conocimientos generados son de naturaleza causal. El sistema divide su proceso de descubrimiento en dos etapas: primero genera hiptesis y, luego, utiliza tcnicas avanzadas de estadstica para validarlas.

El sistema RX fue utilizado en una base de reumatologa y sirvi para probar hiptesis acerca de la cantidad de droga prodnisone que aumenta el colesterol en la sangre. Sin embargo, la principal desventaja de este sistema es que no utiliza informacin del dominio para guiar la bsqueda. Una versin mejorada del RX, el RADIX, s lo hace.

2.3.1.8. BACON
El sistema BACON utiliza algoritmos de anlisis de datos para descubrir relaciones matemticas entre datos numricos. Ha redescubierto leyes como la ley de Ohm para circuitos elctricos y la ley de desplazamiento de Arqumides. Los datos de entrenamiento son numricos y, normalmente, son

generadas en algn experimento previo. Cada tupla esta constituida por los valores de las mediciones durante el experimento.

El sistema BACON tiene varias desventajas: no considera el ruido en los datos, ni la inconsistencia o los datos incompletos. Adems, considera que todas las variables son relevantes, y explora todas las soluciones posibles utilizando un grafo, lo cual empeora considerablemente su performance.

2.3.1.9. SLIQ
El algoritmo SLIQ (Supervised Learning In Quest) fue desarrollado por el equipo Quest de IBM. Este algoritmo utiliza los rboles de decisin para clasificar grandes cantidades de datos. El uso de tcnicas de pre-ordenamiento en la etapa de crecimiento del rbol, evita los costos de ordenamiento en cada uno de los nodos. SLIQ mantiene una lista ordenada independiente de cada uno de los valores de los atributos continuos y una lista separada de cada una de las clases. Un registro en la lista ordenada de atributos consiste en el valor del atributo y un ndice a la clase correspondiente en la lista de clases. SLIQ construye el rbol de forma ancho-primero (breadth-first). Para cada uno de los atributos busca en la lista correspondiente y calcula los valores de entropa para cada uno de los nodos de la frontera simultneamente. A partir de la informacin obtenida se particionan los nodos de la frontera, y se expanden para obtener una nueva frontera.
26 Magdalena Servente Estado del Arte

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Aunque SLIQ trabaja con datos que pueden estar en disco mientras se ejecuta el algoritmo, necesita que cierta informacin resida en memoria permanentemente durante la totalidad de la ejecucin del mismo. Dicha informacin crece proporcionalmente a la cantidad de registros de entrada, lo cual limita en gran medida la cantidad de registros de entrenamiento. Para solucionar este problema el equipo de desarrollo del Quest, ha desarrollado otro algoritmo de clasificacin basado en rboles de decisin: el SPRINT (Scalable PaRallelizable INduction of decision Trees). El SPRINT elimina todas las restricciones de memoria presentes en el SLIQ.

2.4 LA FAMILIA TDIDT


La familia de los Top Down Induction Trees (TDIDT) pertenece a los mtodos inductivos del Aprendizaje Automtico que aprenden a partir de ejemplos preclasificados. En Minera de Datos, se utiliza para modelar las clasificaciones en los datos mediante rboles de decisin.

2.4.1. Construccin de los rboles de decisin


Los rboles TDIDT, a los cuales pertenecen los generados por el ID3 y pos el C4.5, se construyen a partir del mtodo de Hunt. El esqueleto de este mtodo para construir un rbol de decisin a partir de un conjunto T de datos de entrenamiento es muy simple. Sean las clases {C1, C2,. . ., Ck}. Existen tres posibilidades:

1. T contiene uno o ms casos, todos pertenecientes a un nica clase Cj:

El rbol de decisin para T es una hoja identificando la clase Cj .

2. T no contiene ningn caso:

El rbol de decisin es una hoja, pero la clase asociada debe ser determinada por informacin que no pertenece a T. Por ejemplo, una hoja puede escogerse de acuerdo a conocimientos de base del dominio, como ser la clase mayoritaria.

3. T contiene casos pertenecientes a varias clases:

En este caso, la idea es refinar T en subconjuntos de casos que tiendan, o parezcan tender hacia una coleccin de casos pertenecientes a una nica clase. Se elige una prueba basada en un nico
Estado del Arte Magdalena Servente 27

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

atributo, que tiene uno o ms resultados, mutuamente excluyentes {O1, O2,. . ., On}. T se particiona en los subconjuntos T1, T2,. . ., Tn donde Ti contiene todos los casos de T que tienen el resultado Oi para la prueba elegida. El rbol de decisin para T consiste en un nodo de decisin identificando la prueba, con una rama para cada resultado posible. El mecanismo de construccin del rbol se aplica recursivamente a cada subconjunto de datos de entrenamientos, para que la isima rama lleve al rbol de decisin construido por el subconjunto Ti de datos de entrenamiento.

2.4.1.1. Clculo de la Ganancia de Informacin


En los casos, en los que el conjunto T contiene ejemplos pertenecientes a distintas clases, se realiza una prueba sobre los distintos atributos y se realiza una particin segn el mejor atributo. Para encontrar el mejor atributo, se utiliza la teora de la informacin, que sostiene que la informacin se maximiza cuando la entropa se minimiza. La entropa determina la azarosidad o desestructuracin de un conjunto.

Supongamos que tenemos ejemplos positivos y negativos. En este contexto la entropa del subconjunto Si, H(Si), puede calcularse como:

H ( S i ) = pi+ log pi+ pi log pi

(2.1)

Donde

pi+ es la probabilidad de que un ejemplo tomado al azar de Si sea positivo. Esta probabilidad

puede calcularse como

pi+ =

ni+ ni+ + ni

(2.2)

Siendo ni la cantidad de ejemplos positivos de Si, y

ni la cantidad de ejemplos negativos.

La probabilidad

pi se calcula en forma anloga a pi+ , reemplazando la cantidad de ejemplos positivos

por la cantidad de ejemplos negativos, y viceversa.

Generalizando la expresin (2.1) para cualquier tipo de ejemplos, obtenemos la frmula general de la entropa:

H ( S i ) = p i log p i
i =1

(2.3)

28

Magdalena Servente

Estado del Arte

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

En todos los clculos relacionados con la entropa, definimos 0log0 igual a 0.

Si el atributo at divide el conjunto S en los subconjuntos Si, i = 1,2, . .. . . , n, entonces, la entropa total del sistema de subconjuntos ser:

H ( S , at ) = P(S i ) H (S i )
i =1

(2.4)

Donde

H (S i ) es la entropa del subconjunto S i y P(S i ) es la probabilidad de que un ejemplo

pertenezca a S i . Puede calcularse, utilizando los tamaos relativos de los subconjuntos, como:

P(S i ) =

Si S

(2.5)

La ganancia en informacin puede calcularse como la disminucin en entropa. Es decir:

I (S , at ) = H (S ) H (S , at )

(2.6)

Donde

H (S ) es el valor de la entropa a priori, antes de realizar la subdivisin, y H (S , at ) es el valor

de la entropa del sistema de subconjuntos generados por la particin segn at.

El uso de la entropa para evaluar el mejor atributo no es el nico mtodo existente o utilizado en Aprendizaje Automtico. Sin embargo, es el utilizado por Quinlan al desarrollar el ID3 y su sucesor el C4.5.

2.4.1.2. Datos Numricos


Los rboles de decisin pueden generarse tanto a partir de atributos discretos como de atributos numricos. Cuando se trabaja con atributos discretos, la particin del conjunto segn el valor de un atributo es simple. Por ejemplo, agrupamos todos los animales que tengan pico, siendo tiene_pico un atributo y sus posibles valores si y no. En el caso de los atributos numricos esta divisin no es tan simple. Por ejemplo, si queremos partir los das de un mes en funcin a la cantidad de lluvia cada, es casi imposible que encontremos dos das con exactamente la misma cantidad de precipitaciones.

Estado del Arte

Magdalena Servente

29

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Para solucionar este problema, puede recurrirse a la binarizacin. Este mtodo consiste en formar dos rangos de valores de acuerdo al valor de un atributo, que pueden tomarse como simblicos. Por ejemplo, si en un da hubo 100ml de lluvia, pueden crearse los intervalos [0,100) y [100, +) y el clculo de la entropa se realiza como si los dos intervalos fueran los dos valores simblicos que puede tomar el atributo.

2.4.1.3. Poda de los rboles generados


Existen varias razones para la poda de los rboles generados por los mtodos de TDIDT [Michalski et al, 1998]. Entre ellas podemos nombrar la sobregeneralizacin, la evaluacin de atributos poco importantes o significativos, y el gran tamao del rbol obtenido. En el primer caso, un rbol puede haber sido construido a partir de ejemplos con ruido, con lo cual algunas ramas del rbol pueden ser engaosas. En cuanto a la evaluacin de atributos no relevantes, stos deben podarse ya que slo agregan niveles en el rbol y no contribuyen a la ganancia de informacin. Por ltimo, si el rbol obtenido es demasiado profundo o demasiado frondoso, se dificulta la interpretacin por parte del usuario, con lo cual hubiera sido lo mismo utilizar un mtodo de caja negra.

Existen dos enfoques para podar los rboles: la pre-poda (preprunning) y la post-poda (postprunning). En el primer caso se detiene el crecimiento del rbol cuando la ganancia de informacin producida al dividir un conjunto no supera un umbral determinado. En la post-poda se podan algunas ramas una vez que se ha terminado de construir el rbol.

El primer enfoque, tiene la atraccin de que no se pierde tiempo en construir una estructura que luego ser simplificada en el rbol final. El mtodo tpico en estos casos es buscar la mejor manera de partir el subconjunto y evaluar la particin desde el punto de vista estadstico mediante la teora de la ganancia de informacin, reduccin de errores, etc. Si esta evaluacin es menor que un lmite predeterminado, la divisin se descarta y el rbol para el subconjunto es simplemente la hoja ms apropiada. Sin embargo, este tipo de mtodo tiene la contra de que no es fcil detener un particionamiento en el momento adecuado, un lmite muy alto puede terminar con la particin antes de que los beneficios de particiones subsiguientes parezcan evidentes, mientras que un lmite demasiado bajo resulta en una simplificacin demasiado leve.

El segundo enfoque es, entonces, el utilizado por el ID3 y el C4.5. Una vez construido el rbol se procede a su simplificacin segn los criterios propios de cada uno de los algoritmos.

30

Magdalena Servente

Estado del Arte

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

2.4.1.4. El Principio de Longitud de Descripcin Mnima


El fin ltimo de los sistemas de aprendizaje es aprender una teora del dominio de los ejemplos, una teora que es predictiva en el sentido de que es capaz de predecir la clase de nuevos instancias. Al hablar de teoras podemos estar refirindonos a rboles o reglas de decisin entre otros.

Existe un principio de la ciencia conocido como Afeitadora de Occam (Occams Razor) [Mitchell, 2000a], que determina que cuando todas las condiciones son iguales, se prefieren las teoras simples. Es decir, la mejor teora cientfica es aquella que explica todos los hechos y tiene el menor tamao. Como Einstein sostuvo: Todo debe hacerse lo ms simple posible, pero no ms simple que eso. Cmo aplicamos la Afeitadora de Occam al Aprendizaje Automtico? En el caso de estos sistemas, todas las teoras generadas contienen errores, podemos decir que estos errores son como las excepciones a la misma. Entonces, para asegurarnos que todas las condiciones sean iguales, debemos incluir las excepciones en la teora.

El Principio de Longitud de Descripcin Mnima (MDL) [Joachims et al, 1995], [Mitchell, 2000b], [Quinlan, 1993d;1995], [Quinlan y Cameron-Jones, 1995] sostiene que la mejor teora para un conjunto de datos es aquella que minimiza el tamao de la teora y la cantidad de informacin necesaria para especificar las excepciones. Desde el punto de vista del Aprendizaje Automtico esto significa que dado un conjunto de instancias, un sistema de aprendizaje infiere una teora a partir de ellas. Supongamos una analoga con el campo de las comunicaciones: la teora con las excepciones debe ser transmitida por un canal perfecto. El MDL sostiene que la mejor generalizacin es aquella que requiere la menor cantidad de bits para transmitir la generalizacin junto con los ejemplos a partir de la cual fue generada. Esto evita las teoras que satisfacen los datos al extremo sobreajuste, ya que los ejemplos se transmiten tambin, y las teoras demasiado extensas sern penalizadas. Por otro lado, tambin se puede transmitir la teora nula que no ayuda en lo ms mnimo al transmitir los ejemplos. Entonces, pueden transmitirse tanto las teoras simples como aquellas muy complejas y el MDL provee una forma de medir la performance de los algoritmos basndose en los datos de entrenamiento nicamente. Esta parece ser la solucin ideal al problema de medir la performance.

Veamos cmo aplicamos el principio MDL. Supongamos que un sistema de aprendizaje genera una teora T, basada en un conjunto de entrenamiento E, y requiere una cierta cantidad de bits L[T] para codificar la teora. Dada la teora, el conjunto de entrenamiento puede codificarse en una cantidad L[E/T] de bits. L[E/T] est dada por la funcin de ganancia de informacin sumando todos los miembros del conjunto de entrenamiento. La longitud de descripcin total de la teora es L[E]+L[E/T]. El principio MDL recomienda la teora T que minimiza esta suma.

Recordemos que los algoritmos de la familia TDIDT realizan una bsqueda en el espacio de hiptesis posibles, constituido por todos los rboles de decisin posibles. Su sesgo inductivo, siguiendo el principio

Estado del Arte

Magdalena Servente

31

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

de la Afeitadora de Occam, es una preferencia sobre los rboles pequeos frente a los rboles ms profundos y frondosos.

2.4.2. Atributos Desconocidos


Cuando explicamos el mtodo de Hunt, consideramos que todos los resultados de todas las pruebas para todos los casos eran conocidos. Dividimos el conjunto T de datos de entrenamiento en los subconjuntos {Ti} segn los resultados de una prueba en particular, y, una vez construido el rbol, clasificamos un caso tomando la rama correspondiente al resultado de la prueba de cada nodo de decisin. Como cada prueba se basa en un nico atributo, el resultado de una prueba no puede determinarse si no se conoce el valor del atributo.

Qu pasa cuando los datos estn incompletos como ocurre generalmente con cualquier conjunto de datos de la vida real? Podemos tomar dos caminos posibles ante los datos incompletos: descartar una proporcin importante de los datos por incompletos y declarar algunos casos como inclasificables, o adaptar los algoritmos para poder trabajar con valores de atributos faltantes. En la mayora de los casos, la primera opcin es inaceptable. Para poder aplicar la segunda opcin, hay tres cuestiones importantes que deben ser tenidas en cuenta:

1.

Seleccin de una prueba en la cual la particin del conjunto de entrenamiento se realiza en base a un criterio heurstico como ser la ganancia o la proporcin de ganancia. Si dos pruebas distintas utilizan atributos con distinta cantidad de valores desconocidos, cmo debe tenerse esto en cuenta al medir su importancia relativa?

2.

Una vez que una prueba ha sido seleccionada, los casos de entrenamiento con valores desconocidos para los atributos relevantes no pueden ser asociados con una respuesta particular de la prueba, y, por lo tanto, no pueden asignarse a un subconjunto {Ti}. Cmo deben tratarse estos casos durante la particin?

3.

Cuando el rbol de decisin se utiliza para clasificar un caso nuevo, cmo debe proceder el sistema al encontrarse con un valor de atributo desconocido para el nodo de decisin que est tratando de evaluar?

Varios autores han tratado de resolver estos problemas, generalmente rellenando los valores desconocidos con los valores ms frecuentes. En un estudio realizado por Quinlan, [Quinlan, 1989], se comparan las soluciones ms comunes a este problema. El autor llega a la conclusin general de que existen varios

32

Magdalena Servente

Estado del Arte

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

enfoques que son notablemente inferiores, pero no existe ningn enfoque que sea claramente superior. A continuacin se presenta un resumen del estudio.

2.4.2.1. Estudio sobre datos con atributos desconocidos en la Induccin


2.4.2.1.1. Mtodos analizados

Todos los enfoques descriptos a continuacin fueron implementados como variantes de un programa que construye un rbol de decisin utilizando la proporcin de ganancia [Quinlan, 1989]. Los rboles producidos no fueron podados. Varios enfoques para solucionar los tres problemas planteados fueron explorados. Cada uno de ellos tiene una letra identificatoria, tal que una combinacin de letras implica una combinacin de mtodos.

Al evaluar una prueba basada en el atributo A

IR-

Ignorar los casos del conjunto de entrenamiento con valores desconocidos Reducir la ganancia de informacin aparente al testear A en la proporcin de casos con valores desconocidos para A: si A tiene una proporcin de valores desconocidos del x%, la prueba sobre A no dar informacin x% del tiempo. Completar los valores desconocidos de A antes de calcular la ganancia de A [Shapiro, 1983], basndose en los valores de otros atributos Completar los valores de A con el valor ms frecuente para el atributo antes de calcular la ganancia.

S-

C-

Al partir el conjunto de entrenamiento utilizando una prueba sobre el atributo A y un caso de entrenamiento tiene un valor desconocido de A.

IS-

Ignorar el caso Determinar el valor de A utilizando el mtodo de Shapiro y asignarlo al subconjunto correspondiente. Tratar el caso como si tuviera el valor ms comn de A. Asignar el caso a uno de los subconjuntos con probabilidad proporcional al nmero de casos con valores conocidos en cada subconjunto. Asignar una fraccin del caso a cada subconjunto utilizando las proporciones explicadas en el inciso anterior. Incluir el caso en todos los subconjuntos Desarrollar una rama separada para los casos de valores desconocidos de A.

CP-

F-

AU-

Estado del Arte

Magdalena Servente

33

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Al clasificar un caso nuevo con un valor desconocido del atributo A que debe ser evaluado.

USCF-

Si existe una rama especial para los valores desconocidos de A, tomarla Determinar el resultado ms probable de A y actuar de acuerdo con ello. Tratar el caso como si fuese el del valor ms comn de A. Explorar todas las ramas, combinando los resultados para reflejar las probabilidades de los distintos resultados. Parar en este punto y asignar el caso a la clase ms frecuente.

H-

2.4.2.1.2. Casos analizados

Valores desconocidos al particionar: los resultados de las pruebas revelan una clara superioridad del RFF (asignar casos fraccionales a los subconjuntos) y una clara desventaja del RIF (ignorar los casos de entrenamiento con valores desconocidos).

Valores desconocidos al clasificar: la estrategia de parar ante los valores desconocidos dio muy malos resultados, mientras que todos las otras estrategias dieron resultados similares

Valores desconocidos al seleccionar las pruebas: ignorar los valores desconocidos dio resultados peores que reducir la ganancia o completar los valores, pero no existi un mtodo claramente superior entre estos dos ltimos.

2.4.2.1.3. Resultados obtenidos

El estudio se concentr en dominios con altos niveles de valores desconocidos y conjuntos de entrenamiento chicos. Este estudio proporcion evidencia para las siguientes hiptesis:

En la evaluacin de pruebas, los enfoques que ignoran los casos con valores desconocidos (y por lo tanto no tienen en cuenta la proporcin de desconocimiento) presentan malos resultados cuando esta proporcin vara de atributo en atributo.

Cuando el conjunto de entrenamiento se divide ignorando los casos con valores desconocidos para el atributo probado, se obtienen resultados pobres (esta es la forma en que el ID3 realiza las particiones). El enfoque de dividir los casos entre los subconjuntos result muy bueno.

34

Magdalena Servente

Estado del Arte

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Durante la clasificacin, tratar de determinar el resultado ms probable de una prueba, funciona bien en algunos dominios (aquellos en los cuales la sustitucin puede realizarse con confianza), pero muy mal en otros. La combinacin de todos los resultados posibles es ms resilente, dando una mayor certeza en la clasificacin general.

2.4.3. Transformacin a Reglas de Decisin


Los rboles de decisin demasiado grandes son difciles de entender porque cada nodo debe ser interpretado dentro del contexto fijado por las ramas anteriores. Cada prueba tiene sentido, solamente, si se analiza junto con los resultados de las pruebas previas. Cada prueba en el rbol tiene un contexto nico que es crucial a la hora de entenderla y puede ser muy difcil comprender un rbol en el cual el contexto cambia demasiado seguido al recorrerlo. Adems, la estructura de rbol puede hacer que un concepto en particular quede fragmentado, lo cual hace que el rbol sea an ms difcil de entender. Existen dos maneras de solucionar estos problemas: definir nuevos atributos que estn relacionados con las tareas o cambiar de mtodo de representacin, por ejemplo, a reglas de decisin.

En cualquier rbol de decisin, las condiciones que deben satisfacerse cuando un caso se clasifica por una hoja pueden encontrarse analizando los resultados de las pruebas en el camino recorrido desde la raz. Es ms, si el camino fuese transformado directamente en una regla de produccin, dicha regla podra ser expresada como una conjuncin de todas las condiciones que deben ser satisfechas para llegar a la hoja. Consecuentemente, todos los antecedentes de las reglas generadas de esta manera seran mutuamente excluyentes y exhaustivos.

Al hablar de reglas de decisin o de produccin nos referimos a una estructura de la forma:

Si atributo1=valorX y atributo2=valorY .... y atributon=valorZ

Entonces claseK

Diremos que una regla cubre un caso si el caso satisface todas las condiciones en el antecedente de la misma.

Estado del Arte

Magdalena Servente

35

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

2.5.EVALUACIN DE LOS MTODOS DE APRENDIZAJE


La evaluacin es la clave del progreso en la Minera de Datos. Existen varias maneras de inferir estructuras a partir de los datos; para determinar cul es el mejor mtodo para cada conjunto de datos, debe existir una manera de evaluar los mtodos de aprendizaje y compararlos entre s.

Si se cuenta con una gran cantidad de datos, la evaluacin no es problema: se genera un modelo a partir de un conjunto grande de entrenamiento y, luego, se lo prueba con otro gran conjunto de datos. Sin embargo, aunque la Minera de Datos implica por su definicin trabajar con grandes cantidades de datos, los conjuntos de datos de buena calidad son pocos. Los datos de entrenamiento deben ser cuidadosamente generados y analizados por expertos humanos, un recurso que escasea.

Existen varios indicadores de la performance de un algoritmo de aprendizaje. Algunos de ellos se describen a continuacin [Michalski et al, 1998]:

Precisin: cantidad de ejemplos positivos y negativos evaluados correctamente. Algunas veces, es importante distinguir entre dos tipos de errores: los ejemplos positivos clasificados como negativos (errores de omisin) y viceversa (errores de comisin). Estos dos tipos de errores nos ayudan a determinar si los conceptos aprendidos son demasiado generales o demasiado especficos. Para que un sistema sea preciso, es necesario que genere descripciones que sean consistentes (no cubran ningn ejemplo negativo) y que sean completas (cubran todos los ejemplos positivos).

Eficiencia: un sistema debe ser capaz de generar descripciones correctas con un nmero mnimo de ejemplos. Un instructor no siempre puede dotar al sistema de una cantidad infinita de ejemplos, y la velocidad en el aprendizaje es un indicador de inteligencia. Dentro de la eficiencia, debemos evaluar tambin los requerimientos computacionales. Estos se miden en funcin a la cantidad de tiempo y recursos que un sistema necesita para llegar a una buena descripcin.

Comprensibilidad: es importante que los conceptos generados sean comprensibles al usuario, ya que el fin ltimo de estos sistemas es que el usuario aprenda algo de ellos.

Robustez: contra el ruido y contra los ejemplos incompletos. Cada sistema maneja estos dos problemas de forma diferente, con lo cual debe evaluarse en cada sistema en particular.

Requerimientos especiales: en algunos dominios, se requiere que un sistema aprenda a medida que llegan los ejemplos. Esto se conoce como aprendizaje incremental y es, especialmente, importante en aquellas reas en que los conceptos evolucionan, cambian su significado a travs del tiempo.

36

Magdalena Servente

Estado del Arte

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

2.5.1 Evaluacin en la familia TDIDT


Para los problemas de clasificacin, como los de la familia TDIDT, es natural medir la performance del clasificador con una proporcin de error. El clasificador predice la clase de cada instancia: si la prediccin es correcta, estamos ante un xito; si no lo es, estamos ante un error. La proporcin de error, entonces, es simplemente la cantidad de errores sobre la cantidad total de instancias clasificadas.

Por supuesto, lo que nos interesa es estimar la proporcin de errores sobre los nuevos datos y no sobre los datos de entrenamiento, los cuales ya estn clasificados. Podemos decir que la proporcin de error estimada a partir de los datos de entrenamiento es correcta para los datos futuros? No, si los datos sobre los que se estim el error fueron utilizados al generar el clasificador. La proporcin de error sobre los datos de entrenamiento no es un buen indicador de los errores futuros; como el clasificador se gener a partir de estos datos, la proporcin de error es subjetiva y totalmente optimista. La proporcin de error generada a partir de los datos de entrenamiento se conoce como error de sustitucin, ya que se calcula al sustituir las instancias en un clasificador que fue construido a partir de ellas. A pesar de que no es un buen estimador para la prediccin de futuros errores, es muy til conocerlo.

Para predecir la performance del clasificador en los datos futuros, necesitamos evaluar la proporcin de error sobre datos no utilizados durante la construccin del mismo. El conjunto independiente de datos utilizado con este propsito es el conjunto de prueba. Es esencial que el conjunto de prueba no haya sido utilizado para nada en la generacin del clasificador. Entonces, aquellos esquemas en que la construccin se realiza en dos etapas o requieren probar el clasificador, trabajan con dos conjuntos de datos: el de entrenamiento y el de prueba.

Podemos decir que a mayor cantidad de datos, mejor clasificador y mejor estimador de error. El problema est cuando hay una pequea cantidad de datos de entrenamiento. En muchas situaciones, los datos de entrenamiento y prueba deben clasificarse manualmente. Debemos encontrar la forma de encontrar un buen estimador de error, an cuando los datos de prueba escasean. A continuacin, se explican varios mtodos para evaluar los algoritmos de clasificacin.

2.5.2. Mtodos de evaluacin


2.5.2.1. Evaluacin Cruzada (Cross-Validation)
Cuando existe una cantidad limitada de datos de entrenamiento y prueba, puede aplicarse el mtodo de retencin (holdout) para estimar la proporcin de error [Witten y Frank, 2000]. Este mtodo reserva una cierta cantidad de datos al azar para prueba y utiliza el resto para el entrenamiento. En general, se reserva un tercio para prueba y se utilizan dos tercios como datos de entrenamiento.

Estado del Arte

Magdalena Servente

37

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Por supuesto, siempre cabe la posibilidad de que los datos utilizados para entrenamiento y prueba no sean representativos de los datos sobre los que se utilizar el modelo posteriormente. En general, no se puede afirmar si un conjunto es representativo o no, pero existe una prueba muy simple que vale la pena realizar: cada una de las clases del conjunto total de datos debera estar representada en la misma proporcin en los datos de entrenamiento y prueba, y esta proporcin debera ser similar a la que se presentar cuando se aplique el modelo generado al caso real. Supongamos que todos los ejemplos de una clase determinada no entran en el conjunto de entrenamiento, el clasificador generado ser incorrecto. Al trabajar con la hiptesis del Universo Cerrado, no podemos pretender que clasifique correctamente los miembros de una clase que no saba que exista. Si en el conjunto de prueba hay datos de esa clase, la proporcin de error obtenida ser muy grande. Entonces, al dividir al azar los datos preclasificados entre los conjuntos de entrenamiento y prueba, debemos garantizar que cada clase est correctamente representada tanto en los datos de prueba como en los de entrenamiento. Este procedimiento se conoce como estratificacin (stratification), y podemos hablar de una retencin estratificada.

Una manera de evitar la tendencia introducida por los datos retenidos, es repetir el proceso completo (entrenamiento y prueba) varias veces con distintas divisiones de los datos. En cada iteracin, una misma proporcin de los datos se retiene al azar para las pruebas y el resto se utiliza para el entrenamiento. Las proporciones de error obtenidas en las mltiples iteraciones se promedian para obtener una proporcin de error general. Este mtodo se conoce como retencin repetida (repeated holdout).

En un procedimiento de retencin general podramos elegir cambiar los roles de los datos de entrenamiento y de prueba entre s. No obstante, esto es factible nicamente si trabajamos con una proporcin 50:50, lo cual no es ideal ya que conviene utilizar ms del 50% de los datos para el entrenamiento. Para solucionar este problema utilizamos una variacin del mtodo estadstico de validacin cruzada (cross-validation).

En la validacin cruzada, se determina con anterioridad una cierta cantidad de pliegos o particiones de los datos. Supongamos que utilizamos tres, es decir, los datos se dividen al azar en tres particiones de aproximadamente la misma cantidad, y cada una a su turno se utiliza para prueba mientras que las otras dos se utilizan para entrenamiento. Por lo tanto, utilizamos un tercio para prueba y dos tercios para entrenamiento, y repetimos el procedimiento tres veces. Las tres proporciones de error obtenidas se promedian para llegar a una proporcin de error general. Este procedimiento conocido como validacin cruzada de tres pliegues (threefold cross-validation), puede trabajar con datos estratificados, en cuyo caso sera validacin cruzada de tres pliegues estratificada.

Podemos generalizar el mtodo para llegar a una validacin cruzada de n pliegues, estratificada o no. El caso ms utilizado para predecir la proporcin de error de una tcnica de aprendizaje es utilizar una validacin cruzada de diez pliegues. Adems, las pruebas han demostrado que el uso de la estratificacin mejora los resultados levemente [Witten y Frank, 2000]. Utilizar una validacin cruzada de diez pliegues puede no ser suficiente para obtener un buen estimador de la proporcin de error. Distintas validaciones
38 Magdalena Servente Estado del Arte

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

cruzadas de diez pliegues dan distintos resultados dado que la divisin en pliegues se realiza al azar. La estratificacin reduce la variacin entre los resultados pero no la elimina. Si se quiere obtener una estimacin de la proporcin de error muy precisa, generalmente, se repite la validacin cruzada de diez pliegues diez veces y se promedian los resultados. Esto implica invocar al algoritmo de aprendizaje cien veces con conjuntos de datos del tamao del 90% del conjunto original. Obtener una buena medida de la performance es un mtodo que consume grandes recursos computacionales.

2.5.2.2 Dejar-uno-afuera (Leave-one-out)


La validacin cruzada de diez pliegues es una manera normalmente utilizada para estimar la proporcin de error, pero no es la nica. Existen otras tcnicas bastante populares como la de dejar-uno-afuera. Esta tcnica es simplemente una validacin cruzada de n pliegues donde n es el nmero de instancias del conjunto de datos. Por turnos, cada una de las instancias se deja afuera y se entrena el clasificador con el resto de las instancias. Se lo evala segn el resultado de la clasificacin de la instancia que haba quedado afuera. Los resultados de las n evaluaciones luego se promedian para determinar la proporcin de error.

Este procedimiento es atractivo por dos razones [Witten y Frank, 2000]. Primero, se utiliza la mayor cantidad de ejemplos posibles para el entrenamiento, lo cual se presume incrementa la posibilidad de que el clasificador sea correcto. Segundo, el procedimiento es determinstico: no se parten los datos al azar. Adems, no tiene sentido repetir el procedimiento diez ni cien veces, ya que siempre se obtendr el mismo resultado. Debe tenerse en cuenta que dado el alto costo computacional de aplicar este mtodo, no es factible utilizarlo para grandes conjunto de datos. Sin embargo, este mtodo es el mejor para pequeos conjuntos de datos porque, en cierta medida, evala todas las posibilidades.

2.5.2.3. Bootstrap
Este mtodo est basado en el procedimiento estadstico de obtener muestras con sustitucin. En los mtodos anteriores, cuando se tomaba una muestra de los datos de entrenamiento o de prueba, se lo haca sin reemplazo. Es decir, la misma instancia, una vez seleccionada, no poda seleccionarse nuevamente. La mayora de las tcnicas de aprendizaje pueden, no obstante, utilizar la misma instancia dos veces, y el hecho de repetirse genera una diferencia.

La idea del bootstrap es tomar muestras del conjunto de datos con remplazo para formar un conjunto de entrenamiento. Para ello, un conjunto de n instancias se muestrea n veces, con reemplazo, y se obtiene otro conjunto de datos de n instancias. Como algunas instancias del segundo conjunto estarn repetidas,
Estado del Arte Magdalena Servente 39

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

deben existir algunas instancias del conjunto original que no fueron seleccionadas. Utilizaremos estas instancias para el conjunto de prueba.

La probabilidad de que una instancia particular sea elegida para el conjunto de entrenamiento es de 1/n, y, por lo tanto, hay un 1-1/n de probabilidad de que no sea elegida. Si multiplicamos esto segn las n oportunidades de ser elegida, obtenemos la siguiente probabilidad de que no sea escogida:

1 -1 1 - = e = 0.368 n
Entonces, un conjunto de datos lo suficientemente grande contendr un 36.8% de instancias de prueba y un 63.2% de entrenamiento. Esta es la razn por la cual este mtodo se conoce como el 0.632 bootstrap.

El error estimado sobre el conjunto de prueba ser pesimista porque el clasificador tiene en cuenta slo el 63% de los datos del conjunto original, lo cual es poco frente al 90% de la validacin cruzada de diez pliegues. Para compensar el error del conjunto de entrenamiento se combina con el error en el conjunto de prueba de la siguiente manera:

e = 0.632 e prueba + 0.368 e entrenamiento

Luego, todo el proceso de bootstrap se repite varias veces, y todos los estimadores de error se promedian.

2.5.3. Estimacin del costo


Hasta ahora no hemos considerado el costo de tomar malas decisiones y malas clasificaciones. La optimizacin de las proporciones de clasificacin sin considerar el costo de los errores, generalmente lleva a resultados extraos. Existe un ejemplo famoso de un sistema de induccin utilizado para predecir los perodos frtiles de las vacas en un tambo. Las vacas se controlaron con un identificador electrnico en la oreja, y otros atributos como el volumen de leche y su composicin qumica. En las primeras pruebas del sistema de aprendizaje automtico, los resultados afirmaban que las vacas nunca estaban en el perodo frtil. El perodo menstrual de las vacas es similar al de los humanos, con lo cual la regla generada era correcta el 97% de las veces, un grado de precisin impresionante para el dominio de la agricultura. Sin embargo, lo que se buscaba eran reglas que predijeran cuando una vaca estaba frtil y no cuando no lo estaba, con lo cual, los costos de los dos casos de error son distintos. La evaluacin por exactitud en la clasificacin asume costos iguales por naturaleza.

40

Magdalena Servente

Estado del Arte

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Si los costos son conocidos, pueden incluirse en el anlisis de los mtodos. Restringiremos nuestro anlisis a los casos que tienen clases s y no nicamente. Los cuatro resultados posibles de una prediccin pueden listarse en una matriz de confusin como la que se muestra a continuacin.

Clase predicha Clase verdadera S No S Verdadero positivo Falso Positivo No Falso Negativo Verdadero Negativo

Los verdaderos positivos y verdaderos negativos son los casos sin error. Los falsos positivos corresponden a aquellas instancias negativas que fueron clasificadas como positivas, mientras que los falsos negativos son aquellas instancias clasificadas como negativas cuando en realidad son positivas. Estos dos casos de errores generalmente tienen distintos costos, como los casos clasificados correctamente tienen distintos beneficios. El hecho de pensar en el costo genera mejores decisiones.

No obstante, la mayora de los algoritmos de aprendizaje automtico no tienen en cuenta el costo al aprender. Existen, sin embargo, dos maneras de transformarlo fcilmente. La primera idea para transformar un clasificador para que tome en cuenta el costo, es variar la cantidad de ejemplos positivos y negativos en los datos de entrenamiento de acuerdo a la importancia de cada uno de los errores. Otra idea es ponderar las instancias. Por ejemplo, al generar un rbol de decisin, una instancia puede dividirse en partes con un esquema de ponderacin que indique la proporcin con que debe tomarse cada rama.

Estado del Arte

Magdalena Servente

41

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

42

Magdalena Servente

Estado del Arte

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

CAPTULO 3 DESCRIPCIN DEL PROBLEMA

En este captulo se presenta el contexto de nuestro problema de inters (Seccin 3.1) y las cuestiones que los algoritmos ID3 y C4.5 pertenecientes a la familia TDIDT deben resolver (Seccin 3.2).

3.1. CONTEXTO DEL PROBLEMA


Al haberse tornado econmico el almacenamiento de datos en medios fsicos y al tornarse relativamente fcil y/o accesible la recoleccin de dichos datos, las bases de datos crecen en forma desmesurada. Hoy en da se recolectan datos simplemente por estar al alcance de la mano, sin tener en cuenta su importancia lgica o prctica, o sin siquiera saber si son importantes en algn sentido. El almacenamiento masivo de informacin hace que la Minera de Datos tenga una importancia cada vez mayor. El anlisis de los datos que se recolectan actualmente para toda actividad humana y para cualquier evento o hecho del universo, excede las capacidades de una persona.

Existen muchos tipos de anlisis y muchos tipos de resultados obtenibles. Por ejemplo, podemos realizar un anlisis estadstico sobre la distribucin de una poblacin de ardillas en un bosque a lo largo de los aos; u obtener la varianza y desviacin estndar de los depsitos japoneses en el mercado americano de la ltima dcada; o realizar un anlisis de componentes para un determinado experimento fsico, entre otros.

Los mtodos nombrados hasta ahora son esencialmente cuantitativos. Sin embargo, qu pasa cuando ms all de los modelos matemticos encerrados en los datos, nos interesan los modelos lgicos? Cundo ms all de las direcciones para hacer un mailing de la base de personas, nos interesa hacer un mailing slo a los potenciales clientes? Cmo distinguimos a los potenciales clientes del resto de la gente? Qu caractersticas tienen en comn? Qu datos los distinguen? Cuando el anlisis de los datos que estamos buscando excede los alcances de un modelo cuantitativo y est orientado hacia una descripcin cualitativa de los datos, debemos utilizar los algoritmos inteligentes.

Estos algoritmos del Aprendizaje Automtico estn orientados hacia el desarrollo de descripciones simblicas de los datos que puedan caracterizar a uno o ms conceptos, diferenciar entre clases de

Descripcin del Problema

Magdalena Servente

43

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

conceptos y describir porqu razn un objeto pertenece a una clase y no a otra. Con este tipo de algoritmos nuestro problema del anlisis de los potenciales clientes estara resuelto.

Existen muchos tipos de algoritmos de Aprendizaje Automtico; no obstante, los ms tiles para nosotros son aquellos que no quedan encerrados en el cerebro de la computadora, sino que pueden adaptarse a nuestra forma de pensar. Si el resultado de realizar Minera de Datos inteligente sobre una base es una red neuronal, sta puede ser muy til para clasificar nuevos ejemplos, en la medida en que sean clasificados por medio de un programa entrenado para ello. Una persona jams ser capaz de aplicar rpida y efectivamente una red neuronal u otro modelo similar para clasificar distintos datos. En cambio si la persona se encuentra ante un rbol de decisin o un conjunto de reglas de decisin que debe aplicar en orden como resultado de la Minera, la clasificacin del nuevo caso es tan fcil como la lectura del rbol desde la raz hasta las hojas.

Este tipo de modelo de datos que representa los conceptos inherentes y ocultos en los datos, de forma tal que son fciles de interpretar, utilizar e incorporar para la persona humana son los que ms enriquecen nuestro conocimiento y, como tales, aquellos sobre los cuales focalizaremos nuestra atencin.

En las bases de datos, las entidades se caracterizan, generalmente, por un conjunto de atributos que las describen. Los atributos pueden ser tanto discretos como continuos, pero lo importante es que todas las entidades estn descriptas por el mismo grupo de atributos. En los problemas de clasificacin, un atributo particular, conocido como clase, describe al tipo de concepto.

3.2. APLICACIN DE LOS ALGORITMOS DE LA FAMILIA TDIDT A LA MINERA DE DATOS


En este contexto se plantea la siguiente cuestin:

En qu medida los algoritmos de la familia TDIDT pueden usarse para generar modelos vlidos en los problemas de clasificacin?

Analizar la aplicacin de todos los Algoritmos Inteligentes a la Minera de Datos excedera los alcances de este trabajo; por ende, vamos a centrar nuestro anlisis en aquellos algoritmos que generan rboles y reglas de decisin que son modelos que un ser humano puede interpretar y aplicar fcilmente. Un buen modelo de datos para clasificar fenmenos meteorolgicos descriptos en funcin de varias medidas ambientales tomadas en los das previos, pueden ayudar a un meteorlogo a determinar si habr sol, llover, o habr un tornado.

44

Magdalena Servente

Descripcin del Problema

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

De esta manera la cuestin previa se reformula en las siguientes:

Cuestin 1:

Qu tipos de sistemas generan como resultado rboles de decisin?

Cuestin 2:

Qu condiciones deben cumplir los datos para que su anlisis con el ID3 o el C4.5 sea til y vlido?

Cuestin 3:

Qu tan fcil es para un humano trabajar con estos algoritmos?

Cuestin 4:

Cules son los resultados del sistema?

Cuestin 5:

Cmo podemos medir la calidad de los resultados obtenidos?

Descripcin del Problema

Magdalena Servente

45

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

46

Magdalena Servente

Descripcin del Problema

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

CAPTULO 4 SOLUCIN PROPUESTA

En este captulo se presentan todos los aspectos de la solucin propuesta. Para ello se describen las caractersticas generales de la misma (Seccin 4.1): el marco terico (Seccin 4.1.1), las condiciones que deben cumplir los datos sobre los que se realiza la Minera de Datos (Seccin 4.1.2) y los tipos de resultados obtenidos (Seccin 4.1.3). En la Seccin 4.2 se presenta una descripcin general de los algoritmos ID3 y C4.5 que se utilizan para estudiar el problema. Se explica cmo realizar la divisin de los datos de entrada (Seccin 4.2.1) y la eleccin del criterio de divisin (Seccin 4.2.1.1). Luego, se presenta una descripcin detallada del algoritmo ID3 (Seccin 4.3.1) y de sus limitaciones (Seccin 4.3.2). A modo de ejemplo, se muestra la utilizacin del ID3 para generar un rbol y reglas de decisin (Seccin 4.3.1.5). Tambin se detalla el algoritmo C4.5 (Seccin 4.4) y sus caractersticas particulares (Seccin 4.4.2), las cuales lo diferencian del ID3, resaltando la poda de los rboles de decisin (Seccin 4.4.3) y la estimacin de errores en dichos rboles (Seccin 4.4.4). En la seccin 4.4.5 se ejemplifican los mtodos anteriores. La generalizacin de las reglas de decisin realizada por el C4.5 se explica en la seccin 4.4.6. A continuacin, se detalla el diseo del sistema integrador utilizado para estudiar el xito de la solucin propuesta (Seccin 4.5). Para este sistema se presenta una descripcin general (Seccin 4.5.1) y el diseo de las secciones del sistema para el ID3 (Seccin 4.5.2.1) y para el C4.5 (Seccin 4.5.2.2)

La mayora de las aplicaciones de la Inteligencia Artificial a tareas de importancia prctica construyen un modelo de conocimiento utilizable por un experto humano. En algunos casos, la tarea que el experto realiza es una clasificacin, es decir, asigna objetos a categoras o clases determinadas segn sus propiedades [Quinlan 1993d]. En un modelo de clasificacin, la conexin entre clases y propiedades puede definirse utilizando desde un simple diagrama de flujo hasta un manual de procedimientos complejo y desestructurado. Si restringimos nuestra discusin a modelos ejecutables, es decir, a aquellos que pueden ser representados como programas de computacin, existen dos maneras muy diferentes en las que se puede construir un modelo. Por un lado, el modelo puede obtenerse a partir de entrevistas relevantes con uno o ms expertos. Por otro lado, si se cuenta con clasificaciones almacenadas con anterioridad, stas pueden ser examinadas para construir un modelo inductivo a partir de ellas, mediante una generalizacin de ejemplos especficos. Los sistemas ID3 y C4.5 pertenecen a este segundo grupo [Blockeel y De Raedt, 1997].

Solucin Propuesta

Magdalena Servente

47

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

4.1. CARACTERSTICAS GENERALES


4.1.1. Marco terico
Si intentamos plantear el problema de aprendizaje de un modelo de datos a partir de ejemplos desde un marco terico, nos encontramos ante el siguiente esquema [Blockeel y De Raedt, 1997]:

Dados:

un conjunto C de clases,

un conjunto E de ejemplos preclasificados

Encontrar:

Una hiptesis H (conjunto de clusulas) tal que:

e E: H e = c H e c

(4.1)

Donde c es la clase del ejemplo e y c C-{c}

Presentar los resultados obtenidos como:

un rbol de decisin,

un conjunto de reglas de decisin.

El sistema generar un rbol de decisin fruto de la naturaleza en s de los algoritmos de la familia TDIDT. El rbol de induccin resultante ser construido desde raz hacia las hojas (top-down). El modelo generado es muy til para el usuario ya que permite una fcil visualizacin de los resultados. Adems, transformaremos el rbol a reglas de decisin que pueden ser utilizadas por otros programas de clasificacin o ser transformadas en sentencias SQL para clasificar nuevos datos rpidamente.

48

Magdalena Servente

Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

4.1.2. Datos de Entrada


Antes de analizar la familia TDIDT debemos tener en cuenta que no todas las tareas de clasificacin son apropiadas para este enfoque inductivo, a continuacin se listan los requerimientos que deben cumplirse [Mitchell, 1997], [Quinlan, 1986; 1993b]:

Descripciones de atributo-valor (Attriute-value description): los datos a ser analizados deben poder expresarse como un archivo plano, es decir, toda la informacin de un objeto o caso debe poder expresarse en trminos de una coleccin fija de propiedades o atributos2. Cada atributo puede ser discreto o numrico, pero los atributos utilizados para describir un caso no pueden variar de un caso a otro. Esto restringe los dominios de aplicacin en los cuales los objetos tienen inherentemente atributos variables. El hecho de que los atributos no puedan variar de un caso a otro, no restringe aquellos casos en los cuales los valores de algunos atributos son desconocidos.

Clases predefinidas: las categoras a las cuales se asignan los casos deben estar establecidas de antemano. Esto significa que los algoritmos se aplican sobre un conjunto de datos de entrenamiento previamente clasificados, del tipo {valor_atributo1, valor_atributo2, ...., valor_atributon, clasek}. En la terminologa del Aprendizaje Automtico, esto se conoce como aprendizaje supervisado, en contraposicin al aprendizaje no supervisado en el cual la agrupacin de casos se encuentra mediante y durante el anlisis.

Clases discretas y disjuntas: las clases a las cuales se asignan los casos deben ser totalmente disjuntas: un caso pertenece o no pertenece a una clase, pero no puede pertenecer a dos clases a la vez. Adems, deben existir muchos ms casos que clases para que el modelo generado sea vlido en el dominio analizado. Por otro lado, dado la naturaleza de los rboles de decisin, las clases deben ser discretas o discretizarse en caso de ser continuas.

Datos suficientes: los patrones generados por la generalizacin inductiva no sern vlidos si no se los pueden distinguir de las casualidades. Como esta diferenciacin se basa generalmente en pruebas estadsticas, deben existir casos suficientes para que dichas pruebas sean efectivas. La cantidad de datos requeridos est afectada por factores como la cantidad de propiedades y clases, y la complejidad del modelo de clasificacin; a medida que estos se incrementan, se necesitan ms datos para construir un modelo confiable.

El hecho de que los datos deben poder expresarse como un archivo plano, no restringe la aplicacin del ID3 o del C4.5 a una nica

tabla de una base de datos, sino que para aplicarse a mltiples tablas, stas deben ser desnormalizadas hasta obtener una tabla con los atributos que se desea analizar.

Solucin Propuesta

Magdalena Servente

49

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Los datos de entrenamiento pueden contener errores: segn Mitchell, los mtodos de aprendizaje utilizando rboles de decisin son robustos frente a los errores, tanto en los valores de las clases como en los valores de los atributos de los datos de entrenamiento [Mitchell 1997].

Los datos de entrenamiento pueden contener valores de atributos faltantes: los mtodos de la familia TDIDT pueden utilizarse an cuando no se conocen todos los valores de todos los atributos de los datos de entrenamiento. El tratamiento de valores faltantes vara de un algoritmo a otro y ser explicado para el ID3 en la seccin 4.3.1.3 y para el C4.5 en la seccin 4.4.2.2.

Modelos lgicos generados: los programas slo construyen clasificadores que pueden ser expresados como rboles de decisin o como un conjunto de reglas de produccin. Estos modelos restringen las descripciones de clases a una expresin lgica cuyas primitivas son afirmaciones acerca de los valores de atributos particulares. La expresin lgica representada por un rbol de decisin es una disyuncin de conjunciones. Todos aquellos casos que requieran un modelo de otra ndole no podrn ser analizados por los algoritmos ID3 o C4.5.

4.1.3. Resultados Generados


4.1.3.1. Caractersticas de los rboles de decisin
Los rboles de decisin representan una estructura de datos que organiza eficazmente los descriptores. Se construye un rbol de forma tal que en cada nodo se realiza una prueba sobre el valor de los descriptores y de acuerdo con la respuesta se va descendiendo en las ramas, hasta llegar al final del camino donde se encuentra el valor del clasificador. Se puede analizar un rbol de decisin como una caja negra en funcin de cuyos parmetros (descriptores) se obtiene un cierto valor del clasificador.

Entrada d1(p1)

Entrada: p1, p2

Nodos descriptores d2(p2)

F(d1(p1),d2(p2))=c c Hojas o Nodos de clasificadores Salida: c

Salida Figura 4.1: Estructura de un rbol de decisin

50

Magdalena Servente

Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Un rbol de decisin puede analizarse como una disyuncin de conjunciones. Cada camino desde la raz hasta las hojas representa una conjuncin, y todos los caminos son alternativos, es decir, son disyunciones.

4.1.3.2. Caractersticas de las reglas de decisin


Las reglas de decisin o de produccin son una alternativa a los rboles de decisin, y todo rbol de decisin puede llevarse a reglas de este tipo [Witten y Frank, 2000], [Korab, 1997], [Blurock, 1996].

Antecedente => Consecuente

Donde el antecedente es una conjuncin entre distintas pruebas de valor sobre los valores de los atributos; y el consecuente es una clase para todos los casos que satisfagan el antecedente. Por ejemplo,

Si atributo1=valor a y atributo2= valor y, entonces ClaseK

Las reglas de decisin se presentan en orden, y deben interpretarse de esa manera. El orden determina cules reglas deben ejecutarse primero. Al clasificar un nuevo caso se avanza en la lista hasta llegar a un antecedente que sea satisfecho por el caso, entonces la clase del caso es la correspondiente al consecuente de dicha regla. El C4.5 en particular, agregar una ltima regla a la lista, sta no tiene antecedente, es la regla con la clase por defecto, es decir, si el caso no satisfizo ninguna de las reglas anteriores, entonces es de la clase indicada por la ltima regla que no tiene antecedente.

En el caso de las reglas de decisin, agregar una nueva regla implica simplemente aadirla a la lista de reglas sin necesidad de hacer cambios de estructura, mientras que agregar una nueva regla en un rbol implicara rehacer la estructura del mismo.

4.1.3.3. Presentacin de los resultados


Tanto el ID3 como el C4.5 generan un clasificador de la forma de un rbol de decisin, cuya estructura es [Quinlan 1993d]:

Una hoja, indicando una clase, o

Solucin Propuesta

Magdalena Servente

51

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Un nodo de decisin que especifica alguna prueba a ser realizada sobre un nico atributo, con una rama y subrbol para cada valor posible de la prueba.

El rbol de decisin generado por el C4.5 cuenta con varias caractersticas particulares: cada hoja tiene asociados dos nmeros, que indican el nmero de casos de entrenamientos cubiertos por cada hoja y la cantidad de ellos clasificados errneamente por la hoja. Es en cierta manera, un estimador del xito del rbol sobre los casos de entrenamiento. El ID3, en cambio, no clasifica errneamente a los datos de entrenamiento, con lo cual no son necesarios este tipo de indicadores. Es por ello, que este algoritmo, a diferencia del C4.5, corre el riesgo de caer en sobreajuste.

El propsito de construir modelos de clasificacin no se limita al desarrollo de predictores precisos, tambin es esencial que el modelo construido sea comprensible para los seres humanos. Michie critica al ID3 al sostener que los resultados recientes demuestran que los programas construidos sobre la base de sistemas tales como el ID3 pueden ser considerados, de alguna manera, super-programas y al mismo tiempo ser incomprensibles para las personas. [Michie 1986, p.233] Se han estudiado varias maneras de simplificar los rboles de decisin. Por ejemplo, en el sistema integrado propuesto, los rboles generados por el C4.5 como por el ID3 se transforman en un conjunto de reglas de produccin o decisin, un formato que parece ms comprensible que los rboles, cuando estos ltimos son demasiado extensos o frondosos.

4.2. DESCRIPCIN GENERAL DE LOS ALGORITMOS


El algoritmo principal de los sistemas de la familia TDIDT, a la cual pertenecen el ID3 y su descendiente el C4.5, es el proceso de generacin de un rbol de decisin inicial a partir de un conjunto de datos de entrenamiento. La idea original est basada en un trabajo de Hoveland y Hunt de los aos 50, culminado en el libro Experiments in Induction [Hunt et al, 1966] que describe varios experimentos con varias implementaciones de sistemas de aprendizaje de conceptos (concept learning systems - CLS).

4.2.1. Divisin de los datos


Recordemos que el mtodo divide y reinars realiza en cada paso una particin de los datos del nodo segn una prueba realizada sobre el mejor atributo. Cualquier prueba que divida a T en una manera no trivial, tal que al menos dos subconjuntos distintos {Ti} no estn vacos, eventualmente resultar en una particin de subconjuntos de una nica clase, an cuando la mayora de los subconjuntos contengan un solo ejemplo. Sin embargo, el proceso de construccin del rbol no apunta meramente a encontrar cualquier particin de este tipo, sino a encontrar un rbol que revele una estructura del dominio y, por lo
52 Magdalena Servente Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

tanto, tenga poder predictivo. Para ello, necesitamos un nmero importante de casos en cada hoja o, dicho de otra manera, la particin debe tener la menor cantidad de clases posibles. En el caso ideal, nos gustara elegir en cada paso la prueba que genere el rbol ms pequeo.

Entonces, estamos buscando un rbol de decisin compacto que sea consistente con los datos de entrenamiento. Podramos explorar todos los rboles posibles y elegir el ms simple.

Desafortunadamente, un nmero exponencial de rboles debera ser analizado. El problema de encontrar el rbol de decisin ms pequeo consistente con un conjunto de entrenamiento es de complejidad NPcompleta.

La mayora de los mtodos de construccin de rboles de decisin, incluyendo el C4.5 y el ID3, no permiten volver a estados anteriores, es decir, son algoritmos golosos sin vuelta atrs. Una vez que se ha escogido una prueba para particionar el conjunto actual, tpicamente basndose en la maximizacin de alguna medida local de progreso, la particin se concreta y las consecuencias de una eleccin alternativa no se exploran. Por este motivo, la eleccin debe ser bien realizada.

4.2.1.1. Eleccin del criterio de divisin


Para realizar la divisin de los datos en cada paso, Quinlan propone la utilizacin de los mtodos de la Teora de la Informacin. En un principio, el ID3 utilizaba la ganancia como criterio de divisin. Sin embargo, a partir de numerosas pruebas se descubri que este criterio no era efectivo en todos los casos y se obtenan mejores resultados si se normalizaba el criterio en cada paso. Por lo tanto, comenz a utilizarse la ganancia de informacin, con mayor xito. El C4.5 tambin utiliza este ltimo criterio para realizar la divisin de los casos. Quinlan afirma que en su opinin el criterio de proporcin de ganancia es robusto y generalmente da resultados ms consistentes que el criterio de ganancia [Quinlan 1988b].

La solucin propuesta permite la utilizacin de ambos criterios. Se estudiarn y compararn los resultados obtenidos con el ID3 y con el C4.5 utilizando la ganancia y la proporcin de ganancia.

4.2.1.1.1. Criterio de Ganancia


Recordemos la definicin de ganancia presentada en la ecuacin 2.6. Supongamos que tenemos una prueba posible con n resultados que particionan al conjunto T de entrenamiento en los subconjuntos T1, T2,. . ., Tn. Si la prueba se realiza sin explorar las divisiones subsiguientes de los subconjuntos Ti, la nica informacin disponible para evaluar la particin es la distribucin de clases en T y sus subconjuntos.

Solucin Propuesta

Magdalena Servente

53

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Consideremos una medida similar luego de que T ha sido particionado de acuerdo a los n resultados de la prueba X. La informacin esperada (entropa) puede determinarse como la suma ponderada de los subconjuntos, de la siguiente manera

H (T , X ) =
i =1

Ti T

H (Ti )

(4.2)

La cantidad

I (T , X ) = H (T ) H (T , X )

(4.3)

mide la informacin ganada al partir T de acuerdo a la prueba X. El criterio de ganancia, entonces, selecciona la prueba que maximice la ganancia de informacin. Es decir, antes de particionar los datos en cada nodo, se calcula la ganancia que resultara de particionar el conjunto de datos segn cada uno de los atributos posibles. Se realiza la particin que resulta en la mayor ganancia.

4.2.1.1.2. Criterio de Proporcin de Ganancia


El criterio de ganancia tiene un defecto muy serio: presenta una tendencia muy fuerte a favorecer las pruebas con muchos resultados. Analicemos una prueba sobre un atributo que sea la clave primaria de un conjunto de datos, en la cual, obtendremos un nico subconjunto para cada caso, y para cada subconjunto tendremos I (T,X) = 0, entonces la ganancia de informacin ser mxima. Desde el punto de vista de la prediccin, este tipo de divisin no es til.

Esta tendencia inherente al criterio de ganancia puede corregirse mediante una suerte de normalizacin, en la cual se ajusta la ganancia aparente, atribuible a pruebas con muchos resultados. Consideremos el contenido de informacin de un mensaje correspondiente a los resultados de las pruebas. Por analoga a la definicin de la I(S) tenemos:

I _ divisin(X ) =
i =1

Ti

Ti log 2 T T

(4.4)

Esto representa la informacin potencial generada al dividir T en n subconjuntos, mientras que la ganancia de informacin mide la informacin relevante a una clasificacin que nace de la misma divisin. Entonces,

proporcin _ de _ ganancia( X ) =

I (T , X ) I _ divisin( X )

(4.5)

54

Magdalena Servente

Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

expresa la proporcin til de informacin generada en la particin. Si la particin es casi trivial, la informacin de la divisin ser pequea y esta proporcin se volver inestable. Para evitar este fenmeno, el criterio de proporcin de ganancia selecciona una prueba que maximice la expresin anterior, sujeto a la restriccin de que la informacin de la divisin sea grande, al menos tan grande como la ganancia promedio sobre todas las pruebas realizadas.

4.3. ID3
El algoritmo ID3 fue diseado en 1993 por J. Ross Quinlan [Quinlan, 93a, Quinlan, 1993b]. El ID3 toma objetos de una clase conocida y los describe en trminos de una coleccin fija de propiedades o de atributos, y produce un rbol de decisin sobre estos atributos que clasifica correctamente todos los objetos [Quinlan, 1993b]. Hay ciertas cualidades que diferencian a este algoritmo de otros sistemas generales de inferencia. La primera se basa en la forma en que el esfuerzo requerido para realizar una tarea de induccin crece con la dificultad de la tarea. El ID3 fue diseado especficamente para trabajar con masas de objetos, y el tiempo requerido para procesar los datos crece slo linealmente con la dificultad, como producto de:

la cantidad de objetos presentados como ejemplos,

la cantidad de atributos dados para describir estos objetos, y

la complejidad del concepto a ser desarrollado (medido por la cantidad de nodos en el rbol de decisin)

Esta linealidad se consigue a costo del poder descriptivo: los conceptos desarrollados por el ID3 slo toman la forma de rboles de decisin basados en los atributos dados, y este lenguaje es mucho ms restrictivo que la lgica de primer orden o la lgica multivaluada, en la cual otros sistemas expresan sus conceptos [Quinlan, 1993b].

El ID3 fue presentado como descendiente del CLS creado por Hunt. El ID3, como contrapartida de su antecesor, es un mecanismo mucho ms simple para el descubrimiento de una coleccin de objetos pertenecientes a dos o ms clases. Cada objeto debe estar descripto en trminos de un conjunto fijo de atributos, cada uno de los cuales cuenta con su conjunto de posibles valores de atributos. Por ejemplo, el atributo humedad puede tener los valores {alta, baja}, y el atributo clima, {soleado, nublado, lluvioso}.

Una regla de clasificacin en la forma de un rbol de decisin puede construirse para cualquier conjunto C de atributos de esa forma [Quinlan, 1993b]. Si C est vaco, entonces se lo asocia arbitrariamente a cualquiera de las clases. Si no, C contiene los representantes de varias clases; se selecciona un atributo y se particiona C en conjuntos disjuntos C1, C2,..., Cn, donde Ci contiene aquellos miembros de C que tienen
Solucin Propuesta Magdalena Servente 55

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

el valor i para el atributo seleccionado. Cada una de estos subconjuntos se maneja con la misma estrategia. El resultado es un rbol en el cual cada hoja contiene un nombre de clase y cada nodo interior especifica un atributo para ser testeado con una rama correspondiente al valor del atributo.

4.3.1. Descripcin del ID3


El objetivo del ID3 es crear una descripcin eficiente de un conjunto de datos mediante la utilizacin de un rbol de decisin. Dados datos consistentes, es decir, sin contradiccin entre ellos, el rbol resultante describir el conjunto de entrada a la perfeccin. Adems, el rbol puede ser utilizado para predecir los valores de nuevos datos, asumiendo siempre que el conjunto de datos sobre el cual se trabaja es representativo de la totalidad de los datos.

Dados:

Un conjunto de datos

Un conjunto de descriptores de cada dato

Un clasificador/conjunto de clasificadores para cada objeto.

Se desea obtener:

Un rbol de decisin simple basndose en la entropa, donde los nodos pueden ser:

1.

Nodos intermedios: en donde se encuentran los descriptores escogidos segn el criterio de entropa, que determinan cul rama es la que debe tomarse.

2.

Hojas: estos nodos determinan el valor del clasificador.

Este procedimiento de formacin de reglas funcionar siempre dado que no existen dos objetos pertenecientes a distintas clases pero con idntico valor para cada uno de sus atributos; si este caso llegara a presentarse, los atributos son inadecuados para el proceso de clasificacin.

Hay dos conceptos importantes a tener en cuenta en el algoritmo ID3[Blurock, 1996]: la entropa y el rbol de decisin. La entropa se utiliza para encontrar el parmetro ms significativo en la

caracterizacin de un clasificador. El rbol de decisin es un medio eficiente e intuitivo para organizar los descriptores que pueden ser utilizados con funciones predictivas.
56 Magdalena Servente Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

4.3.1.1. Algoritmo ID3


A continuacin se presenta el algoritmo del mtodo ID3 para la construccin de rboles de decisin en funcin de un conjunto de datos previamente clasificados.

Funcin ID3 (R: conjunto de atributos no clasificadores, C: atributo clasificador, S: conjunto de entrenamiento) devuelve un rbol de decisin; Comienzo Si S est vaco, devolver un nico nodo con Valor Falla; Si todos los registros de S tienen el mismo valor para el atributo clasificador, Devolver un nico nodo con dicho valor; Si R est vaco, entonces devolver un nico nodo con el valor ms frecuente del atributo clasificador en los registros de S [Nota: habr errores, es decir, registros que no estarn bien clasificados en este caso]; Si R no est vaco, entonces D ! atributo con mayor Ganancia(D,S) entre los atributos de R; Sean {dj| j=1,2, .., m} los valores del atributo D; Sean {Sj| j=1,2, .., m} los subconjuntos de S correspondientes a los valores de dj respectivamente; Devolver un rbol con la raz nombrada como D y con los arcos nombrados d1, d2, .., dm que van respectivamente a los rboles ID3(R-{D}, C, S1), ID3(R-{D}, C, S2), .., ID3(R-{D}, C, Sm); Fin

4.3.1.2. Poda de los rboles de decisin


La poda de los rboles de decisin se realiza con el objetivo de que stos sean ms comprensibles. Lo cual implica que tengan menos niveles y/o sean menos frondosos. La poda aplicada en el ID3 se realiza una vez que el rbol ha sido generado y es un mecanismo bastante simple: si de un nodo nacen muchas ramas, las cuales terminan todas en la misma clase, entonces se reemplaza dicho nodo por una hoja con la clase comn. En caso contrario, se analizan todos los nodos hijos.

4.3.1.3. Pasaje a reglas de decisin


Para pasar a reglas de decisin, el ID3 recorre el rbol desde la raz hasta las hojas y genera una regla por cada camino recorrido. El antecedente de cada regla estar compuesto por la conjuncin de las pruebas de valor de cada nodo visitado, y la clase ser la correspondiente a la hoja. El recorrido del rbol se basa en el recorrido de preorden (de raz a hojas, de izquierda a derecha). Como estamos trabajando con rboles n-arios, este recorrido es nico.

Solucin Propuesta

Magdalena Servente

57

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

4.3.1.4. Atributos desconocidos


Es necesario que todos los casos presentados al ID3 estn descriptos por los mismos atributos. Esto limita la aplicacin del algoritmo, ya que no siempre se cuenta con toda la informacin necesaria. Imaginemos una base de datos histrica en la que se fueron agregando atributos a medida que se lo consider necesario, para los primeros casos de la misma no se conocern los valores de los nuevos atributos. El ID3 puede trabajar con atributos desconocidos, los considera como si fuesen un nuevo valor, por ello, se llega a la convencin de que los valores desconocidos, deben expresarse con un ? en los datos. El ? constituye un nuevo valor posible para el atributo en cuestin.

4.3.1.5. Resolucin de un ejemplo utilizando el ID3


En esta seccin se presentarn un rbol y un conjunto de reglas de decisin obtenidos utilizando el ID3, para ejemplificar su aplicacin. Supongamos que queremos analizar cules das son convenientes para jugar al tenis basndonos en la humedad, el viento y el estado del tiempo. Los datos que se utilizarn se presentan en la siguiente tabla:

Estado Soleado Soleado Nublado Lluvia Lluvia Lluvia Nublado Soleado Soleado Lluvia Soleado Nublado Nublado Lluvia

Humedad Alta Alta Alta Alta Normal Normal Normal Alta Normal Normal Normal Alta Normal Alta

Viento Leve Fuerte Leve Leve Leve Fuerte Fuerte Leve Leve Leve Fuerte Fuerte Leve Fuerte

JuegoTenis No No Si Si Si No Si No Si Si Si Si Si Si

En el caso de este ejemplo, los rboles y las reglas obtenidos utilizando la ganancia y la proporcin de ganancia son iguales. Se mostrarn ambos ejemplos juntos con fines prcticos.

Construccin del rbol de decisin

A partir de todos los datos disponibles, el ID3 analiza todas las divisiones posibles segn los distintos atributos y calcula la ganancia y/o la proporcin de ganancia. Comecemos analizando el atributo Estado.

58

Magdalena Servente

Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

El atributo Estado tiene la siguiente distribucin de datos:

No Si Totales

Lluvia 1 4 5

Nublado 0 4 4

Soleado 3 2 5

Para calcular la ganancia y, por lo tanto, tambin la proporcin de ganancia, es necesario calcular la entropa del conjunto. Entonces,

H ( S ) = p Si log 2 p Si p No log 2 p No =

4 10 10 4 log 2 = 0.86312bits log 2 14 14 14 14

Calculamos ahora la entropa que tendran los conjuntos resultantes de la divisin de datos segn este atributo.

H ( S , Estado) = P(S i ) H (S i ) =
i =1

5 1 1 4 4 4 0 0 4 4 5 3 3 2 2 log 2 log 2 + log 2 log 2 + log 2 log 2 14 5 5 5 5 14 4 4 4 4 14 5 5 5 5

H ( S , Estado) =

4 5 5 0.7219 + 0 + 0.97095 = 0.6046bits 14 14 14

Ahora calculamos la ganancia resultante de dividir al subconjunto segn el atributo Estado, tendremos:

Ganancia(S , Estado) = H (S ) H (S , Estado ) = 0.25852bits

Para calcular la proporcin de ganancia debemos conocer primero la informacin de la divisin que se calcula como:

I _ divisin(S ) =
i =1

Si

Si 5 5 4 5 5 4 log 2 log 2 log 2 = 1.577bits log 2 S = 14 S 14 14 14 14 14

Finalmente, calculamos la proporcin de ganancia.

proporcin _ de _ ganancia( S ) =

Ganancia( S ) = 0.491042bits I _ divisin( S )

De la misma manera en que calculamos la ganancia y la proporcin de ganancia para el caso anterior, calculamos para el atributo Humedad los siguientes valores:

Solucin Propuesta

Magdalena Servente

59

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Ganancia=0.0746702 bits

Proporcin de ganancia =0.14934 bits

Para el caso del atributo Viento obtenemos los siguientes valores:

Ganancia=0.00597769 bits

Proporcin de ganancia =0.0122457 bits

Una vez que hemos calculado las ganancias y proporciones de ganancia para todos los atributos disponibles, debemos elegir el atributo segn el cual dividiremos a este conjunto de datos. Recordemos que tanto en el caso de la ganancia como en el de la proporcin de ganancia, el mejor atributo para la divisin es aquel que la maximiza. En este ejemplo, la divisin segn el atributo Estado es la que mayor ganancia y proporcin de ganancia ofrece. Esto significa que el nodo raz del rbol ser un nodo que evala el atributo Estado.

La figura 4.2 esquematiza la construccin de un rbol de decisin utilizando el ID3 para el conjunto de datos en cuestin. La figura 4.3 presenta el rbol de decisin obtenido.

Transformacin a reglas de decisin

Como se explic en la seccin 4.3.1.3 para pasar un rbol de decisin a reglas de decisin, el ID3 lo recorre en preorden y cada vez que llega a una hoja, escribe la regla que tiene como consecuente el valor de la misma, y como antecedente, la conjuncin de las pruebas de valor especificados en todos los nodos recorridos desde la raz para llegar a dicha hoja. Analicemos el pasaje del rbol de la figura 4.3 a reglas de decisin.

El recorrido del rbol comienza por la raz Estado, contina por los nodos Viento y Humedad hasta llegar a la hoja SI. La regla generada para este recorrido ser:

Regla 0 SI Estado = Lluvia Y Viento = Fuerte Y Humedad = Alta ENTONCES JuegoTenis = Si

Si seguimos el recorrido preorden, llegamos a continuacin a la hoja NO, obteniendo en este caso la siguiente regla:

Regla 1 SI Estado = Lluvia Y Viento = Fuerte Y Humedad = Normal ENTONCES JuegoTenis = No

60

Magdalena Servente

Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Estado Soleado Soleado Nublado Lluvia Lluvia Lluvia Nublado Soleado Soleado Lluvia Soleado Nublado Nublado Lluvia
Lluvia

Humedad Viento Alta Leve Alta Fuerte Alta Leve Alta Leve Normal Leve Normal Fuerte Normal Fuerte Alta Leve Normal Leve Normal Leve Normal Fuerte Alta Fuerte Normal Leve Alta Fuerte Estado
Nublado

JuegoTenis No No Si Si Si No Si No Si Si Si Si Si Si
Soleado

ESTADO ganancia=0.258521 proporcin de ganancia=0.491042 HUMEDAD Ganancia=0.0746702 Proporcin de ganancia =0.14934 VIENTO Ganancia=0.00597769 Proporcin de ganancia =0.0122457

Estado Lluvia Lluvia Lluvia Lluvia Lluvia

Humedad Alta Normal Normal Normal Alta Viento

Viento Leve Leve Fuerte Leve Fuerte

JuegoTenis Si Si No Si Si

Estado Nublado Nublado Nublado Nublado

Humedad Alta Normal Alta Normal SI

Viento Leve Fuerte Fuerte Leve

JuegoTenis Si Si Si Si

Estado Soleado Soleado Soleado Soleado Soleado Humedad

Humedad Alta Alta Alta Normal Normal

Viento Leve Fuerte Leve Leve Fuerte

JuegoTenis No No No Si Si

HUMEDAD Ganancia=0.170951 Proporcin de ganancia =0.358525 VIENTO Ganancia=0.321928 Proporcin de ganancia =0.675162

HUMEDAD Ganancia=0.970951 Proporcin de ganancai=2.03632 Alta Normal VIENTO Ganancia=0.0199731 Proporcin de ganancia=0.0418885

Leve

Fuerte

Estado Soleado Soleado Soleado

Humedad Alta Alta Alta NO

Viento Leve Fuerte Leve

JuegoTenis No No No

Estado Humedad Viento JuegoTenis Soleado Normal Leve Si Soleado Normal Fuerte Si SI

Estado Lluvia Lluvia Lluvia

Humedad Alta Normal Normal

Viento Leve Leve Leve SI

JuegoTenis Si Si Si

Estado Lluvia Lluvia

Humedad Normal Alta

Viento Fuerte Fuerte

JuegoTenis No Si

Humedad

Alta

Normal

Estado Lluvia

Humedad Alta SI

Viento Fuerte

JuegoTenis Si

Estado Lluvia

Humedad Normal

Viento Fuerte NO

JuegoTenis No

Figura 4.2: Esquema de la construccin de un rbol de decisin utilizando el ID3

Solucin Propuesta

Magdalena Servente

61

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Lluvia

Estado
Nublado

Soleado

Viento SI

Humedad

Leve Fuerte

Alta

Normal

SI Humedad

NO

SI

Alta

Normal

SI

NO

Figura 4.3: Arbol de decisin obtenido con el ID3

Recorriendo en este sentido el rbol, el resto de las reglas obtenidas se muestran a continuacin.

Regla 2 SI Estado = Lluvia Y Viento = Leve ENTONCES JuegoTenis = Si Regla 3 SI Estado = Nublado ENTONCES JuegoTenis = Si Regla 4 SI Estado = Soleado Y Humedad = Alta ENTONCES JuegoTenis = No Regla 5 SI Estado = Soleado Y Humedad = Normal ENTONCES JuegoTenis = Si

4.3.2. Limitaciones al ID3


4.3.2.1. Valores continuos
El ID3 puede aplicarse a cualquier conjunto de datos, siempre y cuando los atributos sean discretos. Este sistema no cuenta con la facilidad de trabajar con atributos continuos ya que analiza la entropa sobre cada uno de los valores de un atributo, por lo tanto, tomara cada valor de un atributo continuo individualmente en el clculo de la entropa, lo cual no es til en muchos de los dominios. Cuando se trabaja con atributos continuos generalmente se piensa en rangos de valores y no en valores particulares.
62 Magdalena Servente Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Existen varias maneras de solucionar este problema del ID3, como la agrupacin de valores presentada en [Gallion et al, 1993] o la discretizacin de los mismos explicada en [Blurock, 1996], [Quinlan, 1993d]. El C4.5 resolvi el problema de los atributos continuos mediante la discretizacin, explicada en la Seccin 2.4.1.2.

4.3.2.3. Ventanas
El proceso descripto para la construccin de rboles de decisin asume que las operaciones de clculo, especialmente, las de evaluacin de las frecuencias relativas (en las que se deben contar elementos) del conjunto C, pueden ser realizadas eficientemente, lo cual significa, en la prctica, que para que el proceso sea rpido, C debe residir en memoria. Qu pasa si C es tan grande que no cabe en memoria? La solucin aplicada por ID3 es una solucin iterativa, que crea sucesivos rboles de decisin de precisin cada vez mayor, hasta llegar al rbol de decisin ptimo. El mtodo puede resumirse como [Quinlan, 1993b]:

Elegir un conjunto aleatorio de instancias (llamado ventana). Repetir: Formar una regla para explicar la ventana actual Encontrar las excepciones a la regla en el resto de las instancias Crear una nueva ventana a partir de la ventana actual y las excepciones a la regla generada a partir de ella Hasta que no queden excepciones a la regla.

El proceso termina cuando se forma una regla que no tenga excepciones y sea correcta para todo C. Se han testeado dos mtodos para formar la nueva ventana. En el primero, la ventana actual crece por la adicin de excepciones hasta un nmero especificado. El segundo mtodo trata de identificar los objetos claves en la ventana actual y reemplaza el resto por excepciones. Ambos mtodos fueron probados con un problema de clasificacin no trivial de 14 atributos y cerca de 20.000 objetos para los cuales un rbol de decisin correcto contena 20 nodos [Quinlan, 1993b]. Las conclusiones obtenidas de estas pruebas fueron:

Los mtodos convergen rpidamente; generalmente, se precisaron slo 4 iteraciones para llegar a un rbol de decisin correcto.

Fue posible desarrollar un rbol correcto a partir de la ventana final que contena slo una pequea fraccin del total de los objetos

El proceso no fue sensible a parmetros como el tamao de la ventana inicial.

Solucin Propuesta

Magdalena Servente

63

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

El tiempo requerido para obtener un rbol de decisin correcto para el problema de clasificacin crece linealmente con la cantidad de ejemplos que estn siendo analizados.

4.4. C4.5
El C4.5 se basa en el ID3, por lo tanto, la estructura principal de ambos mtodos es la misma. El C4.5 construye un rbol de decisin mediante el algoritmo divide y reinars y evala la informacin en cada caso utilizando los criterios de entropa y ganancia o proporcin de ganancia, segn sea el caso. A continuacin, se explicarn las caractersticas particulares de este mtodo que lo diferencian de su antecesor.

4.4.1. Algoritmo C4.5


El algoritmo del mtodo C4.5 para la construccin de rboles de decisin a grandes rasgos muy similar al del ID3. Vara en la manera en que realiza las pruebas sobre los atributos, tal como se detalla en las secciones siguientes.

Funcin C4.5 (R: conjunto de atributos no clasificadores, C: atributo clasificador, S: conjunto de entrenamiento) devuelve un rbol de decisin; Comienzo Si S est vaco, devolver un nico nodo con Valor Falla; Si todos los registros de S tienen el mismo valor para el atributo clasificador, Devolver un nico nodo con dicho valor; Si R est vaco, entonces devolver un nico nodo con el valor ms frecuente del atributo clasificador en los registros de S [Nota: habr errores, es decir, registros que no estarn bien clasificados en este caso]; Si R no est vaco, entonces D ! atributo con mayor Proporcin de Ganancia(D,S) entre los atributos de R; Sean {dj| j=1,2, .., m} los valores del atributo D; Sean {Sj| j=1,2, .., m} los subconjuntos de S correspondientes a los valores de dj respectivamente; Devolver un rbol con la raz nombrada como D y con los arcos nombrados d1, d2, .., dm que van respectivamente a los rboles C4.5(R-{D}, C, S1), C4.5(R-{D}, C, S2), .., C4.5(R-{D}, C, Sm); Fin

64

Magdalena Servente

Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

4.4.2. Caractersticas particulares del C4.5


4.4.2.1. Pruebas utilizadas
En cada nodo, el sistema debe decidir cul prueba escoge para dividir los datos. Los tres tipos de pruebas posibles propuestas por el C4.5 son [Quinlan, 1993d]:

1.

La prueba estndar para los atributos discretos, con un resultado y una rama para cada valor posible del atributo.

2.

Una prueba

ms compleja, basada en un atributo discreto, en donde los valores posibles son

asignados a un nmero variable de grupos con un resultado posible para cada grupo, en lugar de para cada valor.

3.

Si un atributo A tiene valores numricos continuos, se realiza una prueba binaria con resultados A Z y A > Z, para lo cual debe determinarse el valor lmite Z.

Todas estas pruebas se evalan de la misma manera, mirando el resultado de la proporcin de ganancia, o alternativamente, el de la ganancia, resultante de la divisin que producen. Ha sido til agregar una restriccin adicional: para cualquier divisin, al menos dos de los subconjuntos Ti deben contener un nmero razonable de casos. Esta restriccin, que evita las subdivisiones casi triviales es tenida en cuenta solamente cuando el conjunto T es pequeo.

4.4.2.2. Pruebas sobre atributos continuos


Las pruebas para valores continuos trabajan con un valor lmite arbitrario. El mtodo utilizado para ello por el C4.5 es muy simple [Quinlan, 1993d] [Quinlan, 1996a]. Primero, los casos de entrenamiento T se ordenan segn los valores del atributo A continuo que est siendo considerado. Existe un nmero finito de estos valores.

Sean {v1, v2,. . ., vm} los valores que toma el atributo A. Cualquier valor lmite entre vi y vi+1 tendr el mismo efecto al dividir los casos entre aquellos cuyo valor para A pertenece al subconjunto {v1, v2,. . ., vi} y aquellos cuyo valor pertenece a {vi+1, vi+2,. . ., vm}. Entonces, existen slo m 1 divisiones posibles de segn el valor de A y todas son examinadas. Al estar ordenados, las sucesivas pruebas para todos los valores, pueden realizarse en una nica pasada.

Tpicamente se elige el punto medio del intervalo como valor lmite representativo, entonces el isimo valor lmite sera:
Solucin Propuesta Magdalena Servente 65

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

vi + v i +1 2

(4.6)

C4.5 se diferencia de otros algoritmos en que elige el mayor valor de A en todo el conjunto de casos de entrenamiento que no excede el punto medio presentado, en lugar del punto medio en s mismo, como valor lmite; de esta manera se asegura que todos los valores lmites que aparezcan en el rbol y/o las reglas ocurran al menos una vez en los datos.

El mtodo utilizado para la binarizacin de atributos tiene una gran desventaja. Mientras que todas las operaciones de construccin de un rbol de decisin crecen linealmente con el nmero de casos de entrenamiento, el ordenamiento de d valores continuos crece proporcionalmente a d x log(d). Entonces, el tiempo requerido para construir un rbol a partir de un gran conjunto de datos de entrenamiento, puede estar dominado por el ordenamiento de datos con valores continuos.

4.4.2.2. Atributos desconocidos


C4.5 asume que todos los resultados de pruebas desconocidos se distribuyen probabilsticamente segn la frecuencia relativa de los valores conocidos. Un caso (posiblemente fraccional) con un valor desconocido se divide en fragmentos cuyos pesos son proporcionales a dichas frecuencias relativas, dando por resultado que un caso puede seguir mltiples caminos en el rbol. Esto se aplica tanto cuando los casos de entrenamiento se dividen durante la construccin del rbol, como cuando el rbol se utiliza para clasificar casos.

4.4.2.2.1. Evaluacin de las pruebas

La modificacin del criterio de ganancia es bastante directa. La ganancia de una prueba mide la informacin sobre la pertenencia a una clase que puede esperarse como resultado de partir un conjunto de datos de entrenamiento, calculada al restar la informacin que se espera que sea necesaria para identificar la clase de un objeto despus de la particin a la misma cantidad antes de la particin. Es evidente que una prueba no puede proveer informacin de pertenencia a una clase si no se conoce el valor de un atributo.

Sea T el conjunto de datos de entrenamiento y X una prueba basada en un atributo A, supongamos que el valor de A se conoce nicamente en una fraccin F de casos en T. Sean I(T) e IX(T) calculadas segn la ecuacin 2.4, excepto que slo se tienen en cuenta los casos para los cuales el valor de A es conocido. La definicin de ganancia puede corregirse a:

66

Magdalena Servente

Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Ganancia(X ) = probabilidad _ A _ sea _ conocido (I (T ) I X (T )) + probabilidad _ A _ no _ sea _ conocido 0 = F (I (T ) I X (T ))

(4.7)

o, en otras palabras, la ganancia aparente de mirar a los casos con valores conocidos, multiplicada por la fraccin de dichos casos en el conjunto de entrenamiento.

El clculo de la proporcin de ganancia se realiza de la misma manera que en la ecuacin 4.5. La definicin de informacin de la divisin puede modificarse de manera similar, considerando los casos con valores desconocidos como un grupo ms, entonces, si una prueba tienen n resultados, su informacin de la divisin se calcula como la prueba dividido n+1subconjuntos.

I _ divisin(X ) =
i =1

n +1

Ti log 2 T + 1 T +1 Ti

(4.8)

4.4.1.2.2. Particin del conjunto de entrenamiento

Una prueba puede seleccionar del conjunto de pruebas posibles, como antes, pero utilizando las versiones modificadas de ganancia e informacin de la divisin. Si la prueba X con resultados O1, O2, ..., ON es escogida y tiene algunos valores desconocidos para algunos de los datos de entrenamiento, el concepto de particionamiento debe ser generalizado, segn un criterio probabilstico.

Cuando un caso T con un resultado conocido Oi es asignado al subconjunto Ti, esto significa que la probabilidad de que el caso pertenezca a Ti es 1 y de que pertenezca a todos los otros subconjuntos es 0. Cuando el resultado es desconocido, slo se puede realizar una afirmacin estadstica ms dbil. Entonces, se asocia con cada caso del subconjunto Ti un peso representando la probabilidad de que el caso pertenezca a cada subconjunto. Si el resultado para el caso es conocido, entonces el peso es 1; si el caso tiene un resultado desconocido, entonces el peso es simplemente la probabilidad del resultado Oi en este punto. Cada subconjunto Ti es una coleccin de casos fraccionales posibles, tal que |Ti| debe ser reinterpretada como la suma de los pesos fraccionales de los casos pertenecientes al subconjunto.

Los casos de entrenamiento en T pueden tener pesos no unitarios, ya que T puede ser el resultado de una particin previa. Entonces, en general, un caso de T con peso p cuyo resultado no se conoce, es asignado a cada subconjunto Ti con peso:

P x probabilidad_de_resultado_Oi

(4.9)

Solucin Propuesta

Magdalena Servente

67

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

La probabilidad_de_resultado_Oi se estima como la suma de los pesos de los casos en T con valores conocidos que tienen resultado Oi, sobre la suma de los pesos de los casos en T con resultado conocidos para la prueba.

4.4.1.2.3. Clasificacin de un nuevo caso

Se toma un enfoque similar cuando el rbol de decisin es utilizado para clasificar un caso. Si en un nodo de decisin el atributo relevante no se conoce, de manera tal que el resultado de la prueba no puede determinarse, el sistema explora todos los resultados posibles y combina aritmticamente las clasificaciones resultantes. Como para cada atributo pueden existir mltiples caminos desde la raz del rbol hasta las hojas, una clasificacin es una distribucin de clases ms que una nica clase. Cuando la distribucin de clases total para un caso nuevo ha sido establecida de esta manera, la clase con la probabilidad ms alta, es asignada como la clase predicha.

La informacin de la divisin an se determina a partir del conjunto de entrenamiento completo y es mayor, ya que existe una categora extra para los valores desconocidos.

Cada hoja en el rbol de decisin resultante tiene asociados dos valores: (N/E). N es la suma de los casos fraccionales que llegan a la hoja; y E es el nmero de casos cubiertos por la hoja, que no pertenecen a la clase de la misma.

4.4.3. Poda de los rboles de Decisin


El mtodo recursivo de particionamiento para construir los rboles de decisin descripto anteriormente, subdividir el conjunto de entrenamiento hasta que la particin contenga casos de una nica clase, o hasta que la prueba no ofrezca mejora alguna. Esto da como resultado, generalmente, un rbol muy complejo que sobreajusta los datos al inferir una estructura mayor que la requerida por los casos de entrenamiento [Mitchell, 2000b] [Quinlan, 1995]. Adems, el rbol inicial generalmente es extremadamente complejo y tiene una proporcin de errores superior a la de un rbol ms simple. Mientras que el aumento en complejidad se comprende a simple vista, la mayor proporcin de errores puede ser ms difcil de visualizar.

Para entender este problema, supongamos que tenemos un conjunto de datos dos clases, donde una proporcin p 0.5 de los casos pertenecen a la clase mayoritaria. Si un clasificador asigna todos los casos con valores indeterminados a la clase mayoritaria, la proporcin esperada de error es claramente 1 p. Si,
68 Magdalena Servente Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

en cambio, el clasificador asigna un caso a la clase mayoritaria con probabilidad p y a la otra clase con probabilidad 1 - p, su proporcin esperada de error es la suma de:

la probabilidad de que un caso perteneciente a la clase mayoritaria sea asignado a la otra clase, p x (1 p), y

la probabilidad de que un caso perteneciente a la otra clase sea asignado a la clase mayoritaria, (1 p) x p

que da como resultado 2 x p (1 p). Como p es al menos 0.5, esto es generalmente superior a 1 p, entonces el segundo clasificador tendr una mayor proporcin de errores. Un rbol de decisin complejo tiene una gran similitud con este segundo tipo de clasificador. Los casos no se relacionan a una clase, entonces, el rbol manda cada caso al azar a alguna de las hojas.

Un rbol de decisin no se simplifica borrando todo el rbol a favor de una rama, sino que se eliminan las partes del rbol que no contribuyen a la exactitud de la clasificacin para los nuevos casos, produciendo un rbol menos complejo, y por lo tanto, ms comprensible.

4.4.3.1. Cundo debemos simplificar?


Existen, bsicamente, dos maneras de modificar el mtodo de particionamiento recursivo para producir rboles ms simples: decidir no dividir ms un conjunto de casos de entrenamiento, o remover retrospectivamente alguna parte de la estructura construida por el particionamiento recursivo.

El primer enfoque, conocido como pre-poda, tiene la ventaja de que no se pierde tiempo en construir una estructura que luego ser simplificada en el rbol final. Los sistemas que lo aplican, generalmente buscan la mejor manera de partir el subconjunto y evalan la particin desde el punto de vista estadstico mediante la teora de la ganancia de informacin, reduccin de errores, etc. Si esta evaluacin es menor que un lmite predeterminado, la divisin se descarta y el rbol para el subconjunto es simplemente la hoja ms apropiada. Sin embargo, este tipo de mtodo tiene la desventaja de que no es fcil detener un particionamiento en el momento adecuado, un lmite muy alto puede terminar con la particin antes de que los beneficios de particiones subsiguientes parezcan evidentes, mientras que un lmite demasiado bajo resulta en una simplificacin demasiado leve.

El C4.5 utiliza el segundo enfoque, el mtodo de divide y reinars procesa los datos de entrenamiento libremente, y el rbol sobreajustado producido es podado despus. Los procesos computacionales extras invertidos en la construccin de partes del rbol que luego sern podadas pueden ser sustanciales, pero el

Solucin Propuesta

Magdalena Servente

69

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

costo no supera los beneficios de explorar una mayor cantidad de particiones posibles. El crecimiento y la poda de los rboles son ms lentos, pero ms confiables.

La poda de los rboles de decisin llevar, sin duda, a clasificar errneamente una mayor cantidad de los casos de entrenamiento. Por lo tanto, las hojas de un rbol podado no contendrn necesariamente una nica clase sino una distribucin de clases, como se explic con anterioridad. Asociado a cada hoja, habr una distribucin de clases especificando, para cada clase, la probabilidad de que un caso de entrenamiento en la hoja pertenezca a dicha clase.

4.4.3.2. Poda en Base a Errores


Generalmente, la simplificacin de los rboles de decisin se realiza descartando uno o ms subrboles y reemplazndolos por hojas. Al igual que en la construccin de rboles, las clases asociadas con cada hoja se encuentran al examinar los casos de entrenamiento cubiertos por la hoja y eligiendo el caso ms frecuente. Adems de este mtodo, el C4.5 permite reemplazar un subrbol por alguna de sus ramas.

Supongamos que fuera posible predecir la proporcin de errores de un rbol y sus subrboles. Esto inmediatamente llevara al siguiente mtodo de poda: Comenzar por las hojas y examinar cada subrbol. Si un reemplazo del subrbol por una hoja o por su rama ms frecuentemente utilizada, lleva a una proporcin de errores predicha (predicted error rate) menor, entonces podar el rbol de acuerdo a ello, recordando que las proporciones de errores predichas para todos los subrboles que lo contienen se vern afectadas. Como la proporcin de errores predicha para un rbol disminuye si disminuyen las proporciones de errores predichas en cada una de sus ramas, este proceso generara un rbol con una proporcin de errores predicha mnima.

Cmo podemos predecir la proporcin de errores? Est claro que calcular la proporcin de errores a partir de los datos de entrenamiento para los cuales el rbol fue construido, no es un estimador til, ya que en lo que respecta al conjunto de entrenamiento, la poda siempre aumenta la proporcin de errores. Existen dos familias de tcnicas para predecir la proporcin de errores. La primer familia predice la proporcin de errores de un rbol y sus subrboles utilizando un nuevo conjunto de casos distinto del conjunto de entrenamiento. Como estos casos no fueron examinados durante la construccin del rbol, los estimadores obtenidos a partir de ellos son insesgados y, de existir suficientes casos, confiables. Ejemplos de esta familia son:

Poda segn la complejidad del costo (Cost-complexity pruning) [Breinman et al, 1984] en la cual la proporcin de errores predicha para un rbol se modela como la suma ponderada de su complejidad y sus errores en los casos de entrenamiento, con los casos extras utilizados para determinar los coeficientes de la ponderacin.

70

Magdalena Servente

Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Poda de reduccin de errores (Reduced-error pruning)[Quinlan, 1987e], que evala la proporcin de errores de un rbol y sus componentes directamente a partir del nuevo conjunto de casos.

La desventaja de esta familia de tcnicas es simplemente que una parte del conjunto de datos preclasificados a partir de los que se construy el rbol debe guardarse para determinar los errores, entonces el rbol debe ser construido a partir de un conjunto de datos ms pequeo. Una solucin a este problema es utilizar un enfoque de referencias cruzadas. Este consiste en dividir los casos disponibles en bloques iguales de tamao C y, para cada bloque, un rbol se construye con todos los otros bloques y se miden los errores con el bloque elegido. Para valores moderados de C, se asume que el rbol construido a partir de todos los bloques menos uno ser muy similar al construido a partir de todos los datos. Por supuesto que deben construirse C rboles y no uno solo.

El enfoque tomado por el C4.5 pertenece a la segunda familia de tcnicas que utilizan nicamente el conjunto de entrenamiento a partir del cual se construy el rbol. La estimacin de la proporcin de errores pura se ajusta para reflejar su propia tendencia. El mtodo utilizado por el C4.5 se describe a continuacin.

Cuando una hoja cubre N casos de entrenamiento, E de ellos en forma errnea, el estimador de la proporcin de errores de resubstitucin para dicha hoja es N/E. Podemos entender esto de manera naif como E eventos en N pruebas. Si el conjunto de N casos de entrenamiento se tomase como una muestra (lo cual, por supuesto, no es cierto), nos podramos preguntar qu nos dice este resultado acerca de la probabilidad de un evento (error) en la totalidad de la poblacin de casos cubiertos por la hoja. La probabilidad de error no puede determinarse de forma exacta, pero cuenta con lmites de confianza. Para un lmite de confianza CF, el lmite superior de esta probabilidad puede encontrarse a partir de los lmites de confianza para la distribucin binomial; el lmite superior se expresa como UCF(E,N). Como en la distribucin binomial los lmites superior e inferior son simtricos, la probabilidad de que el promedio real de errores exceda UCF(E,N)es CF/2. El C4.5 simplemente iguala el estimador de error predicho de la hoja con su lmite superior, bajo el argumento de que el rbol fue construido para minimizar la proporcin de error observada. Aunque los fundamentos de esta heurstica son cuestionables y violan algunos principios estadsticos, las estimaciones producidas presentan frecuentemente resultados aceptables.

Para simplificar el clculo, las proporciones de error para las hojas y subrboles se computan asumiendo que fueron utilizados para clasificar un conjunto de nuevos casos del mismo tamao del conjunto de entrenamiento. Entonces, una hoja que cubre N casos de entrenamiento con un estimador de error predicho de UCF(E,N) generara N x UCF(E,N) errores predichos. Anlogamente, la cantidad de errores predichos asociados con un (sub)rbol es la suma de los errores predichos para cada una de sus ramas.

Solucin Propuesta

Magdalena Servente

71

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

4.4.4. Estimacin de la Proporcin de Errores para los rboles de Decisin


Una vez podados, las hojas de los rboles de decisin generados por el C4.5 tendrn dos nmeros asociados: N y E. N es la cantidad de casos de entrenamiento cubiertos por la hoja, y E es la cantidad de errores predichos si un conjunto de N nuevos casos fuera clasificados por el rbol.

La suma de los errores predichos en las hojas, dividido el nmero de casos de entrenamiento, es un estimador inmediato del error de un rbol podado sobre nuevos casos.

4.4.5. Construccin de un rbol de decisin utilizando el C4.5


Supongamos que queremos construir un rbol de decisin para los siguientes datos:

Estado ? Soleado Nublado Lluvia Lluvia Lluvia Nublado Soleado Soleado Lluvia Soleado Nublado Nublado Lluvia

Humedad Alta Alta Alta Alta Normal Normal Normal Alta Normal Normal Normal Alta Normal Alta

Viento Leve Fuerte Leve Leve Leve Fuerte Fuerte Leve Leve Leve Fuerte Fuerte Leve Fuerte

JuegoTenis No No Si Si Si No Si No Si Si Si Si Si Si

Este es el mismo conjunto de datos que fue utilizado en la seccin 4.3.1.5 para construir un rbol utilizando el ID3 con la diferencia que es el valor del atributo Estado para el primer caso es desconocido.

En este caso, la distribucin de datos para el atributo Estado es:

No Si Totales

Desconocido 1 0 1

Soleado 2 2 4

Nublado 0 4 4

Lluvia 1 4 5

72

Magdalena Servente

Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Primero calculamos la entropa del conjunto. Recordemos que, como se explic en la seccin 4.4.2.2, no debemos tener en cuenta los atributos desconocidos. Entonces, trabajamos sobre un total de 13 casos, de los cuales 3 son positivos. Tendremos,

H (S ) =

3 3 10 10 = 0.7793bits log 2 log 2 13 13 13 13

Calculamos ahora la entropa que tendran los conjuntos resultantes de la divisin de datos segn este atributo.

H ( S , Estado) =

4 2 2 2 log 2 log 2 13 4 4 4

2 4 0 0 4 + log 2 log 2 4 13 4 4 4

4 5 1 1 4 + log 2 log 2 4 13 5 5 5

4 = 0.58536bits 5

Ahora calculamos la ganancia resultante de dividir al subconjunto segn el atributo Estado, tendremos:

Ganancia(S , Estado ) =

13 (0.7793 0.58536) = 0.180bits 14

Al calcular al informacin de la divisin, debemos tener en cuenta una categora extra para el valor desconocido para el atributo. La informacin de la divisin se calcula como:

I _ divisin(S ) =

4 4 4 4 5 5 1 1 log 2 log 2 log 2 log 2 = 1.835bits 14 14 14 14 14 14 14 14

Finalmente, calculamos la proporcin de ganancia.

proporcin _ de _ ganancia( S ) =

Ganancia( S ) = 0.098bits I _ divisin( S )

De la misma manera en que calculamos la ganancia y la proporcin de ganancia para el caso anterior, calculamos para el atributo Humedad los siguientes valores:

Ganancia=0.0746702 bits

Proporcin de ganancia =0.0746702 bits

Para el caso del atributo Viento obtenemos los siguientes valores:

Ganancia=0.00597769 bits

Proporcin de ganancia =0.0060687 bits

Al igual que con el ID3, conviene dividir el conjunto segn el atributo Estado tanto si trabajamos con la ganancia como si trabajamos con la proporcin de ganancia. Al dividir los 14 casos para continuar con la construccin del rbol, los 13 casos para los que el valor de Estado es conocido, no presentan problemas y se reparten segn el valor de Estado. Mientras que el caso en que no se conoce el valor de Estado, se

Solucin Propuesta

Magdalena Servente

73

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

reparte entre los conjuntos que tienen Soleado, Nublado y Lluvia con los pesos 4/13, 4/16 y 5/13 respectivamente.

Tomemos por ejemplo, la divisin de los datos para el valor Nublado del atributo Estado. Los datos que se tienen en cuenta en este caso son:

Estado ? Nublado Nublado Nublado Nublado

Humedad Alta Alta Normal Alta Normal

Viento Leve Leve Fuerte Fuerte Leve

JuegoTenis No Si Si Si Si

Peso 4/13 1 1 1 1

La distribucin de datos para el atributo Humedad es:

No Si Totales

Desconocido 0 0 0

Alta 0.3 2 2.3

Normal 0 2 2

Con estos datos obtenemos para la Humedad los siguientes valores:

Ganancia=0.068 bits

Proporcin de ganancia =0.068 bits

Para el caso del atributo Viento obtenemos los siguientes valores:

Ganancia=0.068 bits

Proporcin de ganancia =0.068 bits

En este caso, vemos que la divisin del conjunto de datos no ofrece ninguna mejora, por lo tanto, colapsamos el rbol a la hoja Si, que es la que mayor peso tiene. La cantidad de casos cubiertos por la hoja, es decir, el N asociado a la misma, es 4.3. Y la cantidad de casos cubiertos incorrectamente, o el E asociado a la hoja, por la hoja son 0.3.

La figura 4.4 muestra un esquema de todos los pasos para la construccin del rbol de decisin en este caso. A continuacin se muestra el rbol obtenido.

Estado = Nublado: Si (4.3/0.3) Estado = Lluvia: Si (5.4/1.4) Estado = Soleado: Humedad = Alta: No (2.3) Humedad = Normal: Si (2.0) 74 Magdalena Servente Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Estado ? Soleado Nublado Lluvia Lluvia Lluvia Nublado Soleado Soleado Lluvia Soleado Nublado Nublado Lluvia
Lluvia

Humedad Alta Alta Alta Alta Normal Normal Normal Alta Normal Normal Normal Alta Normal Alta

Viento Leve Fuerte Leve Leve Leve Fuerte Fuerte Leve Leve Leve Fuerte Fuerte Leve Fuerte

JuegoTenis No No Si Si Si No Si No Si Si Si Si Si Si
Soleado

ESTADO ganancia=0.180 proporcin de ganancia=0.0.098 HUMEDAD Ganancia=0.075 Proporcin de ganancia =0.075 VIENTO Ganancia=0.006 Proporcin de ganancia =0.00609

Estado

Estado ? Lluvia Lluvia Lluvia Lluvia Lluvia SI N=5.4 E=1.4

Humedad Alta Alta Normal Normal Normal Alta

Viento Juego Peso Tenis Leve No 5/13 Leve Si 1 Leve Si 1 Fuerte No 1 Leve Si 1 Fuerte Si 1 Estado ? Nublado Nublado Nublado Nublado

Estado ? Soleado Soleado Soleado Soleado

Humedad Alta Alta Alta Normal Normal

Nublado

Viento Juego Peso Tenis Leve No 4/13 Fuerte No 1 Leve No 1 Leve Si 1 Fuerte Si 1

HUMEDAD Ganancia=0.029 Proporcin de ganancia =0.029 VIENTO Ganancia=0.130 Proporcin de ganancia =0.136

Humedad Alta Alta Normal Alta Normal

Viento Juego Peso Tenis Leve No 4/13 Leve Si 1 Fuerte Si 1 Fuerte Si 1 Leve Si 1
HUMEDAD Ganancia=0.068 Proporcin de ganancia =0.068

HUMEDAD Ganancia=0.996 Proporcin de ganancia =1 VIENTO Ganancia=0.003 Proporcin de ganancia =0.00301

Humedad

SI N=4.3 E=0.3

Alta VIENTO Ganancia=0.068 Proporcin de ganancia =0.068

Normal

SI N=2.3 E=0

SI N=2 E=0

Figura 4.4: Esquema de la construccin de un rbol de decisin utilizando el C4.5

Recordemos que el C4.5 analiza los errores predichos en cada uno de los subrboles y ramas del rbol generado para analizar si es conveniente simplificarlo. En este caso, el error total predicho para el rbol estar dado por:

Error _ predicho( Arbol ) = 4.3 U 25% (0.3,4.3) + 5.4 U 25% (1.4,5.4) + 2.3 U 25% (0,2.3) + 2 U 25% (0,2)
Ahora, calculamos el error total predicho de simplificar el rbol por la hoja Si:

Error _ predicho( Arbol _ simplifica do) = 14 U 25% (4,14 ) = 5.76


El error predicho para el rbol simplificado es menor que el error predicho para el rbol generado. Entonces, el C4.5 poda el rbol a la siguiente hoja:
Solucin Propuesta Magdalena Servente 75

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Si (14.0/5.76)

4.4.6. Generalizacin de reglas


Si reescribimos el rbol completamente en forma de un conjunto de reglas, una por cada hoja del rbol, no obtendremos una estructura ms simple que el rbol en s. Sin embargo, los antecedentes de las reglas pueden contener condiciones irrelevantes, con lo cual la regla puede ser generalizada eliminando dichas condiciones.

Para decidir cundo una condicin debe eliminarse, utilizaremos el siguiente mtodo. Sea R una regla de la forma:

si A entonces clase C

Y sea una regla ms general R-

si A- entonces clase C,

donde A- se obtiene borrando la condicin X de las condiciones de A. La evidencia para la importancia de X debe encontrarse en los casos de entrenamiento utilizados para la construccin del rbol de decisin. Cada caso que satisface el antecedente ms corto A- pertenece o no a la clase C, y satisface o no la condicin X. Los nmeros de casos en cada uno de estos cuatro grupos pueden organizarse en una tabla de contingencias de 2 x 2:

Satisface la condicin X No satisface la condicin X

Clase C Y1 Y2

Otras clases E1 E2

Qu significan los valores de la tabla?:

Y1+E1: casos que satisfacen A- y tambin X, por lo tanto, tambin estn cubiertos por la regla original R, E1 de ellos errneamente ya que pertenecen a clases distintas a C.

Y2+E2: casos que satisfacen A- pero no X que sern cubiertos por la regla generalizada R- pero no por la regla original. E2 de estos casos sern clasificados errneamente.

Y1+Y2 + E1+E2: nmero total de casos cubiertos por R-

76

Magdalena Servente

Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

De acuerdo a varios experimentos desarrollados por Quinlan [Quinlan, 1987] para medir la importancia de la tabla de contingencia al decidir si una condicin X debe ser eliminada o no, se encontr que se obtienen mejores resultados utilizando una estimacin pesimista de la precisin de las reglas R y R- sobre nuevos casos. No es muy probable que una hoja que cubre N casos con E errores tenga una proporcin de error tan baja como E/N al clasificar nuevos casos. En lugar de utilizar el estimador E/N al estimar la proporcin real de errores de una hoja como el lmite superior UCF(E,N) del intervalo de confianza para algn nivel de confianza CF. Si reemplazamos estos valores por los de las reglas R y R- obtendremos los siguientes estimadores pesimistas:

UCF(E1,Y1 + E1 ) para la regla R

UCF(E1 + E2, Y1 + Y2 + E1 + E2) para la regla R-

Si

U CF ( E1 + E 2 , Y1 + Y2 + E1 + E 2 ) U CF ( E1 , Y1 + E1 )

(4.10)

Entonces

tiene sentido eliminar la condicin X.

Durante el proceso de generalizacin ser necesario eliminar ms de una condicin. En lugar de analizar todos los subconjuntos posibles de condiciones que podran eliminarse, el sistema de C4.5 realiza una eliminacin directa golosa (straightforward greedy elimination): De todas las reglas que pueden eliminarse por el mtodo descripto, se elimina aquella que produce la menor proporcin pesimista de error en la regla generalizada. Como en todos las bsquedas golosas el hecho de buscar el mnimo en cada paso no nos asegura llegar al mnimo global.

4.4.6.1. Conjuntos de Reglas


El proceso de generalizacin de las reglas se repite para todos los caminos del rbol. Con lo cual, las reglas derivadas de algunos caminos pueden tener una proporcin de error inaceptable o pueden solaparse con otras derivadas de distintos caminos. Por lo tanto, podemos afirmar que el proceso de generalizacin produce menos reglas que el nmero de hojas del rbol, y adems las reglas dejan de ser mutuamente excluyentes y exhaustivas. Un caso puede satisfacer los antecedentes de ms de una regla o, si se descartan reglas por tener una alta proporcin de errores, de ninguna regla. En este ltimo caso debe existir una condicin por defecto que indique cmo proseguir. Para resolver estos conflictos el C4.5
Solucin Propuesta Magdalena Servente 77

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

plantea una solucin simple: ordenar las reglas y la primera regla que cubre el caso se toma como la regla operativa. Es necesario, entonces, establecer prioridades para el ordenamiento de las reglas y decidir la clasificacin por defecto a utilizar.

Para establecer las prioridades se sigui un mtodo propuesto por Michie que determina que todas las reglas de una misma clase deben aparecer juntas y estos subconjuntos de clases son los que estn ordenados en lugar de las reglas en s. Este agrupamiento hace que las reglas sean ms entendibles y tiene la ventaja que el ordenamiento de las reglas en particular no es importante.

Supongamos que del conjunto de reglas elegimos un subconjunto S de reglas que cubren la clase C. La performance de este subconjunto puede medirse mediante el nmero de casos de entrenamiento cubiertos por S que no pertenecen a la clase C (falsos positivos) y el nmero de casos de entrenamiento de la clase C que no son cubiertos por ninguna regla de S (falsos negativos).El valor del subconjunto S se mide utilizando el Principio de Longitud de Descripcin Mnima [Rissanen, 1983], explicado en la seccin 2.4.1.4. Recordemos que este principio puede expresarse de la siguiente manera: Un Emisor y un Receptor cuentan con copias idnticas de un conjunto de casos de entrenamiento, pero los casos del Emisor tambin especifican la clase de cada caso, mientras que los casos del Receptor no tienen informacin de las clases. El Emisor debe comunicar esta informacin faltante al Receptor mediante la transmisin de una teora de clasificacin junto con las excepciones a la misma. El Emisor puede elegir la complejidad de la teora que enva (una teora relativamente simple con muchas excepciones, o una teora muy compleja con pocas excepciones). El Principio MDL afirma que la mejor teora derivable de los datos de entrenamiento minimizar la cantidad de bits necesarios para codificar el mensaje completo consistente de la teora y sus excepciones.

La informacin a transmitir es la identidad en los casos de entrenamiento que pertenecen a la clase C, utilizando un esquema de codificacin para la teora (subconjunto S de reglas) y sus excepciones. El esquema utilizado por el C4.5 es aproximado ya que en lugar de utilizar un mtodo de codificacin en particular, trata de encontrar un lmite inferior al nmero de bits. Podemos resumirlo de la siguiente manera:

1.

Para codificar una regla, debemos especificar cada antecedente. El consecuente no necesita ser codificado, porque todas las reglas del subconjunto pertenecen a la misma clase C. Existe una pequea complicacin: las condiciones deben enviarse en algn orden, pero el orden no importa porque las condiciones pertenecen a una conjuncin. Si existen x condiciones en el antecedente, existen x! ordenamientos posibles que podran enviarse, todos equivalentes del punto de vista de la especificacin de la regla. Por lo tanto, la cantidad de bits requerida para enviar cualquier ordenamiento en particular debe ser reducida en un crdito de log2(x!).

78

Magdalena Servente

Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

2.

La codificacin de un conjunto de reglas requiere la suma de los bits para codificar cada regla, menos un crdito similar para el ordenamiento de las reglas (ya que todos los ordenamientos de reglas para una misma clase son equivalentes)

3.

Las excepciones se codifican indicando cules de los casos cubiertos por las reglas S son falsos positivos y cules falsos negativos. Si las reglas cubren r de los n casos de entrenamiento, con fp falsos positivos y fn falsos negativos, la cantidad de bits necesarios para codificar la excepcin es

r n r log 2 + log 2 fp fn

(4.11)

El primer trmino indica los bits necesarios para indicar los falsos positivos entre los casos cubiertos por las reglas y el segundo trmino indica los falsos negativos entre los casos no cubiertos por las reglas.

El valor de un subconjunto S en particular se mide con la suma de las longitudes de codificacin para las reglas y excepciones, a menor suma, mejor teora.

En la prctica, los mtodos de codificacin tienden a sobrestimar la cantidad de bits requeridos para codificar una teora relativa al conjunto de excepciones. Esto se explica por el hecho de que los conjuntos de atributos generalmente son redundantes, por lo que diferentes teoras pueden ser funcionalmente idnticas. Como la funcin de una teora para una clase es identificar un subconjunto de casos de entrenamiento, diferentes reglas que identifiquen al mismo conjunto son intercambiables, an cuando hayan sido codificadas de manera distinta. Para compensar este efecto, el sistema utiliza la suma ponderada:

Bits de excepcin + W X bits de teora

(4.12)

donde W < 1.

El valor apropiado de W depender de la probabilidad de que dos teoras representen los mismos casos, lo cual depender del grado de redundancia en los datos. C4.5 utiliza el valor 0.5 por defecto para W, pero puede ajustarse a un valor menor si se encuentra un gran grado de redundancia en los datos. Sin embargo, no se ha encontrado que el resultado del algoritmo dependa en gran medida del valor de W.

Entonces, para enviar las reglas debe encontrarse un subconjunto S de reglas para la clase C que minimice esta codificacin total. Esto es similar a la generalizacin de reglas descripta anteriormente, pero en este caso la eliminacin golosa no parece ser efectiva. En cambio, el sistema analiza todos los subconjuntos posibles de reglas para una clase, si no son demasiados, y utiliza recocido simulado (simulated annealing) en caso contrario. En este ltimo caso, el sistema repetidamente elige una regla al azar y considera incluirla en el subconjunto S (si an no pertenece al mismo), o eliminarla de S (si ya pertenece). Esta
Solucin Propuesta Magdalena Servente 79

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

accin producir un cambio B en el total de bits necesario para codificar el subconjunto y las excepciones y, si el caso es beneficioso, entonces se lo acepta inmediatamente. Si la accin incrementa la longitud total de la codificacin tal que B es positivo, el cambio se acepta con una probabilidad de e-B/K donde K es una especia de temperatura sinttica. Al reducir gradualmente el valor de K al ir explorando los cambios, el sistema tiende a converger a un conjunto de reglas con una codificacin cerca del mnimo (near-minimun encoding).

4.4.6.2. Orden de las clases y eleccin de la clase por defecto


Una vez que ya se ha encontrado un subconjunto de reglas para representar cada clase, queda determinar el ordenamiento para las clases y seleccionar un valor por defecto.

Al decidir el ordenamiento de las clases es importante tener en cuenta los falsos positivos ya que ocasionarn clasificaciones incorrectas. Entonces, a la hora de decidir sobre el ordenamiento, se elige primero a la clase que tiene menos falsos positivos. Luego, los falsos positivos de los casos de entrenamiento que an no han sido seleccionados se recomputan y se vuelve a elegir la clase con menos falsos positivos, y as sucesivamente.

Como la clase por defecto ser utilizada cuando un caso no sea cubierto por ninguna de las reglas, stas reglas deberan tenerse en cuenta para determinar cul ser la clase por defecto. El C4.5 elige como clase por defecto aquella clase que cubre la mayora de los casos de entrenamiento no cubiertos por ninguna regla, resolviendo empates a favor de la clase con la mayor frecuencia absoluta.

Una vez que se ha determinado el ordenamiento y la clase por defecto, el conjunto de reglas se examina por ltima vez. Si existe alguna regla cuya eliminacin reduzca el nmero de errores de clasificacin, se la elimina y se recomputan los errores. El conjunto vuelve a chequearse. Este paso fue diseado para evaluar el conjunto de reglas en la forma en que ser utilizado.

4.4.6.3. Generalizacin de un rbol de decisin a reglas de decisin utilizando el C4.5


Para aclarar los mtodos presentados en las secciones anteriores se proceder a la resolucin de un ejemplo. Supongamos que deseamos obtener las reglas de decisin para el conjunto de datos presentado en la seccin 4.4.5. Para generar las reglas de decisin, el C4.5 parte del rbol sin simplificar y construye una regla de decisin para cada hoja del mismo. En este caso, las reglas generadas a partir del rbol sin simplificar sern:
80 Magdalena Servente Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Regla 1 SI Estado = Soleado Y Humedad = Alta ENTONCES JuegoTenis = No Regla 2 SI Estado = Soleado Y Humedad = Normal ENTONCES JuegoTenis = Si Regla 3 SI Estado = Nublado ENTONCES JuegoTenis = Si Regla 4 SI Estado = Lluvia ENTONCES JuegoTenis = Si

A continuacin, el C4.5 generaliza cada una de estas reglas, eliminando aquellas condiciones que generan un estimador de error pesimstico mayor. Calculamos este estimador para cada una de las reglas

presentadas y para las reglas resultantes de eliminar cada una de sus condiciones.

Para la regla 1, tendremos:

Errores 0 4 2

Cant. de casos cubiertos 2 7 4

Estimador pesimstico del error 50% 75.5% 77.1%

Condicin ausente <regla actual> Estado=Soleado Humedad=Alta

Las reglas resultantes de eliminar cualquiera de las dos condiciones del antecedente, tienen un estimador pesimstico de error superior al de la regla actual, con lo cual no es conveniente eliminar ninguna de las dos condiciones. Mantenemos, entonces, la regla tal como fue generada, agregndole la precisin de la misma.

Regla 1 SI Estado = Soleado Y Humedad = Alta ENTONCES JuegoTenis = No [50%]

Repetimos estos clculos para las reglas restantes. En el caso de la regla 2 tendremos:

Errores 0 1 2

Cant. De casos cubiertos 2 7 4

Estimador pesimstico del error 50% 33.8% 77.1%

Condicin ausente <regla actual> Estado=Soleado Humedad=Normal

En este caso, la regla resultante de eliminar la primera condicin tiene un estimador pesimstico del error menor que el de la regla actual, entonces, eliminamos esta condicin y repetimos los clculos, obteniendo:
Solucin Propuesta Magdalena Servente 81

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Errores 1 4

Cant. De casos cubiertos Estimador pesimstico del error Condicin ausente 7 33.8% <regla actual> 14 41.3% Humedad=Normal

Regla 2 SI Estado = Soleado Y Humedad = Normal ENTONCES JuegoTenis = Si [66.2%]

En el caso de la regla 3 tendremos:

Errores 0 4

Cant. De casos cubiertos Estimador pesimstico del error Condicin ausente 4 29.3% <regla actual> 14 41.3% Estado=Nublado

Regla 3 SI Estado = Nublado ENTONCES JuegoTenis = Si [70.7%]

Finalmente, para la regla 4 los clculos son los siguientes:

Errores 1 4

Cant. De casos cubiertos Estimador pesimstico del error Condicin ausente 5 45.4% <regla actual> 14 41.3% Estado=Lluvia

Regla 4 SI Estado = Lluvia ENTONCES JuegoTenis = Si [54.6%]

Una vez que todas las reglas han sido generalizadas, el C4.5 agrupa las reglas segn la clase de su consecuente y busca los subconjuntos de reglas que generan una codificacin mnima para la clase. Entonces, calcula para cada subconjunto de reglas la cantidad de bits necesarios para codificar las reglas, y utiliza el mtodo del recocido simulado para determinar cules reglas son convenientes utilizar para representar cada clase. En este caso, las reglas escogidas son la regla 1 para la clase No y la regla 3 para la clase Si.

Finalmente, el C4.5 ordena las reglas y escoge la clase por defecto. Para ello, primero debemos computar los falsos positivos de cada una de las reglas para escoger la de menor falsos positivos como primera. En este caso, los falsos positivos para ambas reglas son nulos. Con lo cual, mantenemos el orden en que fueron generadas.
82 Magdalena Servente Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Para la eleccin de la clase por defecto, computamos la cantidad de casos de cada clase no cubiertos por las reglas escogidas. A continuacin se presentan la cantidad de casos de cada clase, especificndose la cantidad de casos de cada clase no cubiertos por ninguna de las reglas escogidas.

Casos 4 10

No cubiertos 2 6

Clase No Si

Como la mayora de los casos no cubiertos, pertenecen a la clase Si, sta es escogida como clase por defecto. Las reglas finales para este ejemplo se presentan a continuacin.

Regla 1 SI Estado = Soleado Y Humedad = Alta ENTONCES JuegoTenis = No [50.0%] Regla 3 SI Estado = Nublado ENTONCES JuegoTenis = Si [70.7%] Regla 5 Clase por defecto = Si

4.5. SISTEMA INTEGRADOR


4.5.1. Descripcin general
Para estudiar los algoritmos propuestos se desarroll un sistema que integra el ID3 y el C4.5. El sistema recibe los datos de entrenamiento como entrada y permite que el usuario elija cul algoritmo y con qu criterio de decisin (ganancia o proporcin de ganancia) desea aplicar. Una vez generados el rbol y las reglas de decisin, el usuario puede evaluar los resultados sobre los datos de prueba. En el caso del ID3, esta evaluacin se realiza a partir de las reglas de decisin cuya performance, como vimos en la seccin 4.3.1, es idntica a la de los rboles. La evaluacin de los resultados del C4.5, en cambio, se realiza por separado y se obtienen, por lo tanto, dos evaluaciones distintas, una para el rbol y otra para las reglas. Esto se debe a que, como se explic en la seccin 4.4.4, el modelo de clasificacin generado con el C4.5 como rbol de decisin es distinto al generado como reglas de decisin.

La figura 4.5. presenta un esquema general del funcionamiento del sistema.

Solucin Propuesta

Magdalena Servente

83

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

ID3
rbol de decisin podado Transformacin a reglas de decisin Evaluacin del modelo generado

Generacin del rbol de decisin

rbol de decisin

Poda del rbol de decisin

Reglas de decisin

Evaluacin de los resultados

DATOS DE ENTRENAMIENTO

DATOS DE PRUEBA

C4.5
rbol de decisin podado Transformacin a reglas de decisin

Generacin del rbol de decisin

rbol de decisin

Poda del rbol de decisin

Reglas de decisin

Evaluacin de los resultados

Evaluacin del modelo generado

Figura 4.5: Esquema general del sistema integrador propuesto

84

Magdalena Servente

Solucin Propuesta

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

4.5.2. Diseo del sistema integrador


A continuacin se presenta el diseo del sistema integrador desarrollado. Se explican, tanto para el ID3 como para el C4.5 los procesos realizados y resultados generados.

4.5.2.1. Diseo para el ID3


La figura 4.6 presenta el DFD general para la seccin del ID3. Con una mirada rpida, vemos que el rbol y las reglas de decisin se generan a partir de los datos de entrenamiento. A su vez, los procesos que los generan graban el rbol, las reglas y las sentencias SQL en sus correspondientes archivos. Adems, se genera un log del proceso. Por otro lado, la evaluacin de resultados se realiza a partir de las sentencias SQL y de los datos de prueba.

DATOS DE ENTRENAMIENTO

1 Generacin del rbol de decisin LOG DEL ID3 rbol de decisin sin podar

2 Poda del rbol de decisin

rbol de decisin podado

rbol de decisin podado

3 Impresin del rbol de decisin en pantalla

4 Transformacin a reglas de decisin

DATOS TRANSFORMACION

rbol de decisin podado REGLAS DE DECISIN 5 Guardado del rbol de decisin a disco SENTENCIAS SQL DATOS DE PRUEBA

6 Evaluacin de los resultados RBOL DE DECISIN Matriz de confusin

Figura 4.6: DFD general para la seccin del ID3

Solucin Propuesta

Magdalena Servente

85

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Cada uno de los procesos mostrados en la figura 4.6 se describe en las secciones siguientes.

4.5.2.1.1. Generacin del rbol de decisin Este proceso genera el rbol de decisin segn el algoritmo explicado para el ID3 en la seccin 4.3.1.1. El rbol se construye a partir de los datos de entrenamiento en formato Paradox, seleccionados por el usuario.

Durante este proceso se genera un archivo de log que guarda todos los clculos de ganancia y de proporcin de ganancia realizadas en cada paso; y el atributo escogido para realizar la divisin. El archivo de log se encuentra en el subdirectorio Log dentro del directorio donde est instalado el programa, y su nombre est compuesto de la siguiente manera: MtodoDD-MM-AA HH_MM_SSNombreTabla.log. Esto permite identificar fcilmente el log correspondiente a una corrida. El formato del archivo de log se especifica en la seccin 4.5.2.1.8.

4.5.2.1.2. Poda del rbol de decisin Este proceso realiza la poda del rbol de decisin segn la metodologa explicada en la seccin 4.3.1.2.

4.5.2.1.3. Impresin del rbol de decisin en pantalla Una vez podado, el rbol de decisin se muestra en pantalla, de forma tal que figure la prueba realizada en cada nodo y el valor de la prueba en cada rama, como aparece en la figura 4.7.

4.5.2.1.4. Transformacin a reglas de decisin A partir del rbol de decisin podado, se generan las reglas de decisin de acuerdo con el mtodo explicado en la seccin 4.3.1.3. Se guarda en disco un archivo de texto que contiene las reglas obtenidas, y un archivo de Paradox que contiene las sentencias SQL equivalentes. Tambin se genera otra tabla de Paradox, Datos Transformacin, que contiene los datos de necesarios para identificar la transformacin correspondiente a cada sentencia SQL.

86

Magdalena Servente

Solucin Propuesta

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Figura 4.7: Formato del rbol de decisin impreso en pantalla

4.5.2.1.4. Transformacin a reglas de decisin A partir del rbol de decisin podado, se generan las reglas de decisin de acuerdo con el mtodo explicado en la seccin 4.3.1.3. Se guarda en disco un archivo de texto que contiene las reglas obtenidas, y un archivo de Paradox que contiene las sentencias SQL equivalentes. Tambin se genera otra tabla de Paradox, Datos Transformacin, que contiene los datos de necesarios para identificar la transformacin correspondiente a cada sentencia SQL.

4.5.2.1.5. Guardado del rbol de decisin a disco Una vez presentado el rbol por pantalla, se le ofrece al usuario la posibilidad de guardarlo en el disco rgido. Si acepta, debe elegir en qu directorio y con qu nombre desea guardarlo. La extensin del archivo resultante es tree.

4.5.2.1.6. Evaluacin de los resultados A partir de una lista de corridas realizadas, el usuario elige cul corrida del ID3 desea evaluar. Los datos de las corridas previas estn almacenados en la tabla de Datos Transformacin. Una vez realizada la eleccin, se obtienen de la tabla de Sentencias SQL las sentencias SQL generadas durante la transformacin del rbol a reglas de decisin (Seccin 4.5.2.1.4). Estas sentencias se aplican al conjunto de datos de prueba determinado por el usuario.

Solucin Propuesta

Magdalena Servente

87

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Se genera una matriz de confusin que indica para cada clase la cantidad de casos correctamente clasificados y los incorrectamente clasificados. Se calcula la probabilidad de que un caso sea clasificado correctamente como perteneciente a esa clase. Finalmente, se obtienen los totales generales. La matriz de confusin obtenida se muestra en pantalla. La Figura 4.8 muestra un ejemplo de dicha matriz de confusin.

Figura 4.8: Matriz de confusin generada durante la evaluacin de resultados

4.5.2.1.7. Formato de los datos de entrenamiento y de prueba Los datos de entrenamiento y prueba deben estar en formato de Paradox 3 (.db o .dbf) para poder ser procesados por el sistema. Se eligi este formato porque la mayora de los programas de manejo de datos pueden exportar sus archivos y tablas al formato de Paradox 3; lo cual permite analizar datos alamacenados en casi cualquier formato.

4.5.2.1.8. Archivo de Log del ID3 Durante la generacin del rbol de decisin, se genera un archivo de log que almacena todos los clculos realizados. En cada paso, se almacenan:

1.

el Nivel en el que se est, entendindose por Nivel el numero de ciclo de procesamiento en el que se est

2.

Para cada descriptor:

El nombre del descriptor

Una matriz con la cantidad de instancias pertenecientes a cada clase para cada valor posible del descriptor.

El valor de la ganancia

88

Magdalena Servente

Solucin Propuesta

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

El valor de la proporcin de ganancia

3.

La ganancia o la proporcin de ganancia mxima (segn el criterio de divisin con el que se est trabajando).

A continuacin se presenta una entrada del archivo de log.

Nivel=0 Descriptor=Estado Lluvia Nublado No 1 0 Si 4 4 5 4 Gain=0.258521 Gain Ratio=0.491042 -------------------------------------Descriptor=Humedad Alta Normal No 3 1 Si 4 6 7 7 14 Gain=0.0746702 Gain Ratio=0.14934 -------------------------------------Descriptor=Viento Fuerte Leve No 2 2 Si 4 6 6 8 14 Gain=0.00597769 Gain Ratio=0.0122457 -------------------------------------0.258521

Soleado 3 2 5 14

4.5.2.1.9. Archivo de Reglas de decisin del ID3 El archivo de reglas de decisin generado durante la transformacin a reglas de decisin contiene las reglas para el rbol analizado. Por cada regla guarda el nmero de regla y la regla en s.

4.5.2.1.10. Archivo del rbol de decisin del ID3 Cuando el usuario elige guardar el rbol de decisin a disco, este se almacena en un archivo plano, tabulndose n veces cada rengln, siendo n el nivel del nodo de decisin. A continuacin se muestra el contenido de un archivo .tree a modo de ejemplo.

Estado = Lluvia Viento = Fuerte Humedad = Alta Si Humedad = Normal No Viento = Leve Solucin Propuesta Magdalena Servente 89

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Si Estado = Nublado Si Estado = Soleado Humedad = Alta No Humedad = Normal Si

4.5.2.2. Diseo para el C4.5

DATOS DE ENTRENAMIENTO

1 Generacin del rbol de decisin

rbol de decisin sin podar

rbol de decisin sin podar

RBOL DE DECISIN Y EVALUACIN DE RESULTADOS

2 Poda del rbol de decisin

rbol de decisin podado

rbol de decisin podado

3 Evaluacin del rbol de decisin

5 Transformacin a reglas de decisin

rbol de decisin podado y Resultados de la evaluacin

DATOS DE PRUEBA

Reglas de decisin

REGLAS DE DECISIN Y EVALUACIN DE RESULTADOS

4 Impresin del rbol de decisin en pantalla

6 Evaluacin de las reglas de decisin

Figura 4.9: DFD general para la seccin del C4.5

La figura 4.9 presenta el DFD general para la seccin del C4.5. A simple vista, vemos que el diseo de este proceso difiere ligeramente del diseo del ID3. Aunque los procesos principales (generacin y poda del rbol de decisin, generacin de las reglas de decisin, evaluacin de los resultados) se mantienen, encontramos que hay dos evaluaciones de resultados, una para el rbol de decisin y otra para las reglas.

90

Magdalena Servente

Solucin Propuesta

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Esto se debe a que, a diferencia del ID3, las reglas de decisin y el rbol generados por el C4.5 no son modelos de clasificacin equivalentes. Por otro lado, encontramos que tanto el archivo del rbol de decisin como el de las reglas de decisin se presentan junto a la evaluacin de resultados. Recordemos que, como se explic en la seccin 4.4, el C4.5 evala cada rama y cada regla en particular. Por lo tanto, la evaluacin no puede separarse de los modelos generados.

Cada uno de los procesos mostrados en la figura 4.9 se describe en las secciones siguientes.

4.5.2.2.1. Generacin del rbol de decisin Este proceso genera el rbol de decisin segn el algoritmo explicado para el C4.5 en las secciones 4.4.1 y 4.4.2. El rbol se construye a partir de los datos de entrenamiento en formato Paradox, seleccionados por el usuario.

4.5.2.2.2. Poda del rbol de decisin Este proceso realiza la poda del rbol de decisin segn la metodologa explicada en la seccin 4.4.3.

4.5.2.2.3. Evaluacin del rbol de decisin El rbol de decisin se evala segn el algoritmo explicado en la seccin 4.4.4. Se le agrega una prueba de valor a cada rama y se genera una matriz de confusin a partir de la performance del rbol sobre los datos de prueba.

4.5.2.2.4. Impresin del rbol de decisin en pantalla El rbol de decisin se muestra en pantalla para el usuario, de manera idntica al rbol generado para el ID3, explicado en la seccin 4.5.2.1.3.

Solucin Propuesta

Magdalena Servente

91

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

4.5.2.2.5. Transformacin a reglas de decisin El rbol de decisin generado, se transforma a reglas de decisin segn la metodologa explicada en la seccin 4.4.6. Las reglas se almacenan en un archivo plano cuyo formato se explica en la seccin 4.5.2.2.8.

4.5.2.2.6. Evaluacin de las reglas de decisin Una vez generadas las reglas de decisin, el sistema las evala contra los datos de prueba. Genera una apreciacin de exactitud para cada regla, segn lo explicado en la seccin 4.4.6, y una matriz de confusin general. Almacena todos los resultados en un archivo plano.

4.5.2.2.7. Formato de los datos de entrenamiento y de prueba Al igual que en el caso del ID3, los datos de entrenamiento y prueba deben estar en formato de Paradox 3 (.db o .dbf) para poder ser procesados por el sistema.

4.5.2.2.8. Archivo del rbol de decisin y evaluacin de resultados del C4.5 Durante la generacin del rbol de decisin, su correspondiente poda y su posterior evaluacin se genera un archivo de resultados obtenidos en cada paso. En este archivo se almacenan:

1.

el rbol de decisin sin podar, donde cada rama tiene asociados dos nmeros: N y E, cuyo sentido se detalla a continuacin:

N es la sumatoria de los casos de entrenamiento fraccionales que llegan a cada hoja

E es la cantidad de casos, cubiertos por la hoja, que no pertenecen a la clase de la misma.

2.

el rbol de decisin podado, tambin con dos nmeros N y E asociados, donde:

N es la cantidad de casos de entrenamiento cubiertos por la hoja

92

Magdalena Servente

Solucin Propuesta

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

E es la cantidad de errores predichos, segn la distribucin binomial, para la hoja si una cantidad N de nuevos casos fuese evaluada por el rbol

3.

la evaluacin sobre los datos de prueba con el siguiente formato:

Antes de podar Tamao Errores Donde:

Despus de podar Tamao Errores

Estimacin

Tamao = cantidad de nodos + cantidad de hojas

Errores = x (y%)

Con:

x = cantidad de casos clasificados errneamente

y= cantidad de casos clasificados errneamente / cantidad total de casos

Estimacin =
donde:

E
i =1

t es la cantidad de hojas del rbol

Ei es el E asociado a cada hoja

N es la cantidad total de casos de entrenamiento

4.

una matriz de confusin que indica para cada clase, la cantidad de casos clasificados errneamente y la cantidad de casos de la misma clasificados como pertenencientes a otra clase.

A continuacin se presenta un archivo de muestra.

C4.5 Generador de rboles de decisin -------------------------------------

Thu Sep 27 11:18:00 2001

Opciones: Datos <cardiolo> Los rboles sern evaluados sobre los datos de prueba Se utilizar el Gain criterion

Solucin Propuesta

Magdalena Servente

93

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

95 casos (7 atributos) ledos de cardiolo.data rbol de decisin: Duracin del Angor = MENOS DE 30 MIN: NO (48.0/1.0) Duracin del Angor = MAS DE 30 MIN: | Dolor de Pecho de Angor = TIPICO: SI (16.0/1.0) | Dolor de Pecho de Angor = AUSENTE: NO (16.0) | Dolor de Pecho de Angor = ATIPICO: | | Irradiacin del Angor = SI: SI (8.0) | | Irradiacin del Angor = NO: | | | Respuesta Vasodilatadora = POSITIVO: SI (4.0/1.0) | | | Respuesta Vasodilatadora = NEGATIVO: NO (3.0)

El rbol ha sido guardado

Evaluacin sobre los datos de prueba (95 tems): Antes de podar ---------------Tamao Errores 10 3( 3.2%) Despus de Podar --------------------------Tamao Errores Estimacin 10 3( 3.2%) (11.6%) <<

Evaluacin sobre los datos de prueba (95 tems): Antes de podar ---------------Tamao Errores 10 3( 3.2%) Despus de Podar --------------------------Tamao Errores Estimacin 10 3( 3.2%) (11.6%) <<

(a) (b) ---- ---26 1 2 66

<-clasificado como (a): clase SI (b): clase NO

4.5.2.2.9. Archivo de Reglas de decisin y evaluacin de resultados del C4.5 El formato del archivo de reglas de decisin y evaluacin de los resultados es el siguiente:

1.

Reglas obtenidas, con la proporcin de xito de cada una

2.

Evaluacin sobre los datos de entrenamiento, con el siguiente formato:

Regla Donde:

Tamao

Error

Usada

Errores

Ventaja

Clase

Regla es el nmero de regla

Tamao es la cantidad de pruebas de valor en el antecedente de la regla

Error es el estimador calculado como el complemento de la proporcin de xito asociada a cada regla

94

Magdalena Servente

Solucin Propuesta

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Usada indica la cantidad de veces que se utilizo la regla durante la evaluacin

Errores indica la cantidad de errores cometidos durante la evaluacin, y la proporcin de error calculada como dicha cantidad sobre la cantidad de veces en que se utiliz la regla.

La ventaja tiene el siguiente formato a(b|c), donde

b es la cantidad de casos que seran clasificados errneamente si dicha regla se omitiese.

c es la cantidad de casos que seran clasificados correctamente si dicha regla se omitiese por las reglas siguientes.

a es la el beneficio neto de omitir la regla, calculado como b-c.

3.

Matriz de confusin para los datos de entrenamiento, con el mismo formato que la presentada en la seccin 4.5.2.2.8 para la evaluacin de los resultados del rbol de decisin.

4.

Evaluacin de los datos de prueba con el mismo formato que la evaluacin sobre los datos de entrenamiento.

5.

Matriz de confusin para los datos de prueba con el mismo formato que la matriz presentada para los datos de entrenamiento.

A continuacin se muestra un ejemplo del archivo en cuestin.

C4.5 Generador de reglas ------------------------

Thu Sep 27 11:21:54 2001

Opciones: Datos <cardiolo> Conjuntos de reglas evaluados sobre casos nuevos 95 casos (7 atributos) ledos de cardiolo -----------------Procesando el rbol 0 Reglas finales del rbol 0: Regla 6: Dolor de Pecho de Angor = AUSENTE -> clase NO [95.8%] Regla 1: Duracin del Angor = MENOS DE 30 MIN -> clase NO [94.6%] Regla 5: Solucin Propuesta Magdalena Servente 95

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Dolor de Pecho de Angor = ATIPICO Irradiacin del Angor = NO Respuesta Vasodilatadora = NEGATIVO -> clase NO [82.0%] Regla 2: Dolor de Pecho de Angor = TIPICO Duracin del Angor = MAS DE 30 MIN -> clase SI [84.3%] Regla 3: Dolor de Pecho de Angor = ATIPICO Irradiacin del Angor = SI Duracin del Angor = MAS DE 30 MIN -> clase SI [84.1%] Regla 4: Dolor de Pecho de Angor = ATIPICO Duracin del Angor = MAS DE 30 MIN Respuesta Vasodilatadora = POSITIVO -> clase SI [70.0%] Clase por defecto: NO

Evaluacin sobre los datos de entrenamiento (95 tems): Regla ----6 1 5 2 3 4 Tamao -----1 1 3 2 3 3 Error ----4.2% 5.4% 18.0% 15.7% 15.9% 30.0% Usada ----32 32 3 16 8 4 Errores ------0 (0.0%) 1 (3.1%) 0 (0.0%) 1 (6.2%) 0 (0.0%) 1 (25.0%) << Ventaja ------0 0 0 14 4 2 (0|0) (0|0) (0|0) (15|1) (4|0) (3|1) NO NO NO SI SI SI

Probadas 95, errores 3 (3.2%)

(a) (b) ---- ---26 1 2 66

<-clasificado como (a): clase SI (b): clase NO

Evaluacin sobre los datos de prueba (95 tems): Regla ----6 1 5 2 3 4 Tamao -----1 1 3 2 3 3 Error ----4.2% 5.4% 18.0% 15.7% 15.9% 30.0% Usada ----32 32 3 16 8 4 Errores ------0 (0.0%) 1 (3.1%) 0 (0.0%) 1 (6.2%) 0 (0.0%) 1 (25.0%) << Ventaja ------0 0 0 14 4 2 (0|0) (0|0) (0|0) (15|1) (4|0) (3|1) NO NO NO SI SI SI

Probadas 95, errores 3 (3.2%)

(a) (b) <-clasificado como ---- ---26 1 (a): clase SI 2 66 (b): clase NO

96

Magdalena Servente

Solucin Propuesta

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

CAPTULO 5 RESULTADOS OBTENIDOS

En este captulo se presentan los resultados obtenidos. Primero, se explica la manera en que debe realizarse la interpretacin de los mismos (Seccin 5.1), se presentan los formatos de los rboles y las reglas de decisin tanto para el ID3 (Seccin 5.1.1) como para el C4.5 (Seccin 5.1.2). Luego, se describen los dominios de datos sobre los que se trabaj (Seccin 5.2), y se analizan los resultados obtenidos con el ID3 (Seccin 5.3) y con el C4.5 (Seccin 5.4). En cada caso se presenta, el rbol y las reglas de decisin obtenidos, y la evaluacin de resultados sobre el conjunto de datos de prueba. En la seccin 5.5 se comparan los resultados obtenidos con el ID3 y con el C4.5 en los distintos dominios. Y en la seccin 5.6 se realiza un anlisis general de los resultados.

5.1. INTERPRETACIN DE LOS RESULTADOS


Se realizaron mltiples pruebas tanto con el sistema ID3 como con el C4.5. A continuacin se presentan los dominios de datos sobre los cuales se trabaj. Debe recordarse que, al no tener la limitacin de datos nicamente discretos, el C4.5 pudo aplicarse a ms dominios que el ID3.

Para cada dominio, se presentan dos conjuntos de resultados para cada uno de los sistemas: uno utilizando la ganancia como medida de la ganancia de informacin en cada iteracin del sistema, y otra utilizando la proporcin de ganancia con el mismo propsito. Entonces, para cada combinacin dominio - sistema medidor de ganancia, se presentan el rbol y las reglas de decisin obtenidas.

5.1.1. Interpretacin de resultados en el ID3


5.1.1.1. rboles de decisin
En el caso del ID3, el rbol de decisin no presenta ninguna caracterstica en especial; de cada nodo sale una rama por valor del atributo que se est siendo testeado, y, as sucesivamente, hasta llegar a las hojas que indican la clase. El rbol de decisin presentado ha sido previamente podado, y es exhaustivo, de ramas mutuamente excluyentes.

Resultados

Magdalena Servente

97

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

5.1.1.2. Reglas de decisin


Las reglas de decisin en el ID3 se obtienen directamente a partir del rbol. Con lo cual, los antecedentes de las reglas son mutuamente excluyentes y exhaustivos. Por lo tanto, el orden en que se presentan las reglas no tiene importancia para la clasificacin de un nuevo caso. Si se evala un nuevo conjunto de datos con las reglas de decisin, se obtienen exactamente los mismos resultados que si se lo evala con el rbol de decisin.

Como estimacin del xito del modelo generado se presenta una tabla o matriz obtenida de la evaluacin de los datos de prueba tanto con el rbol como con las reglas de decisin. La tabla generada, presentada en la seccin 4.5.2.1.6, cuenta con las siguientes columnas:

Clases: Clases existentes en los datos

Correctos: cantidad de casos de los datos de prueba clasificados correctamente para cada clase

Errores: cantidad de casos de los datos de prueba clasificados errneamente para cada clase

Probabilidad: probabilidad de que un nuevo caso sea clasificado correctamente, se obtiene como:

correctos correctos + errores

(5.1)

5.1.2. Interpretacin de resultados en el C4.5


5.1.2.1. rboles de decisin
El rbol de decisin en el C4.5 es distinto del rbol generado en el ID3 en la medida en que cada una de las hojas del mismo cubre una distribucin de casos. Cada hoja tiene asociados entonces, dos nmeros N y E, como lo indica la figura 5.1. Cabe destacar que si E es nulo, entonces, no se lo expresa en el rbol.

Prueba 1 del atributo X: clase A (N/E) Prueba 2 del atributo X: Prueba 1 del atributo Y: Prueba 1 del atributo Z: clase A (N) Prueba 2 del atributo Z: clase B (N/E) Prueba 2 del atributo Y: clase A (N/E)

Figura 5.2 Esquema general de un rbol obtenido con el C4.5

98

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Como se explic previamente, en la seccin 4.5.2.2.8, en los rboles sin podar, N es la suma de los casos fraccionarios que llegan a cada hoja y E es la suma de los casos que pertenecen a una clase distinta de la correspondiente a la hoja, los falsos positivos. Es decir, que de los N casos cubiertos por la hoja, E casos son incorrectos. En los rboles podados, N es la cantidad de casos de entrenamiento cubiertos por la hoja, y E es la cantidad de errores predichos si una cantidad N de casos nuevos fuese clasificada por el rbol, segn la distribucin binomial. Con lo cual, puede obtenerse un rpido estimador de errores sobre datos nuevos de la siguiente manera:

E
i =1

(5.2)

N
Donde k es la cantidad de nodos, Ei es el error en la hoja i, y N es la cantidad total de casos de entrenamiento.

Para cada uno de los rboles se obtienen dos tablas de evaluacin de idntico formato: una a partir de los datos de entrenamiento y la otra a partir de los datos de prueba. Una tabla indica en cada caso:

Tamao: tamao del rbol obtenido (cantidad de nodos + cantidad de hojas)

Errores (porcentaje de error %): los errores indican la cantidad de casos clasificados errneamente; mientras que el porcentaje de error es dicha cantidad sobre la cantidad total de casos.

Estimacin: es un estimador del xito del rbol obtenido segn la ecuacin 5.1.

Adems, para cada uno de los rboles se presenta la matriz de confusin del tipo:

Clasificado Clase 1 Clase 1 Clase 2 ... Clase N

como Clasificado Clase 2

como ... ... ... ... ...

Clasificado como Clase N

...

...

...

Donde se indica para cada clase, la cantidad de casos que fueron clasificados correctamente y la cantidad de casos que no fueron clasificados correctamente. Para estos ltimos se indica en particular, de qu clase fueron clasificados.

Resultados

Magdalena Servente

99

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

5.1.2.2. Reglas de decisin


En el caso de las reglas de decisin producidas por el C4.5, cada regla tiene asociado un estimador del xito predicho durante su construccin. Recordemos que dicho estimador se obtiene como el valor de la distribucin binomial para un nivel de confianza especificado, a partir de la tabla de contingencia como fue explicado en la seccin 4.4.5.

Adems, a continuacin de las reglas obtenidas, se presenta una tabla de performance de las mismas sobre los datos de prueba, con los siguientes datos, descriptos en la seccin 4.5.2.2.9:

Regla: nmero de la regla.

Tamao: cantidad de conjunciones en el antecedente.

Error: estimador del error de la regla (se obtiene restndole a 100 el estimador de xito presente en cada regla)

Usada: cantidad de veces que la regla fue utilizada

Error (porcentaje de error %): el error indica la cantidad de casos que fueron clasificados errneamente, y el porcentaje de error es dicha cantidad sobre la cantidad de veces en que la regla fue usada.

Ventaja: indica la performance del conjunto de reglas, si la regla en cuestin fuese omitida. Se expresa como: a(b|c), donde b es la cantidad de casos que seran clasificados errneamente, si esta regla no existiese; c es la cantidad de casos que seran clasificados correctamente por las reglas siguientes; y a=b-c es el beneficio neto de eliminar la regla.

5.2. DESCRIPCIN DE LOS DOMINIOS


A continuacin se presentan los dominios sobre los cuales se realizaron las pruebas. Para cada dominio se presenta:

a) Una breve descripcin

b) Los atributos con sus correspondientes valores posibles

100

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

c) Las clases con sus valores

d) La cantidad de instancias y la distribucin de clases del dominio

Los datos de cada uno de los dominios se presentan en el Apndice B. En todos los casos, se dividieron los datos preclasificados en dos subconjuntos: uno de entrenamiento y uno de prueba, segn las proporciones 2:3 y 1:3, respectivamente.

5.2.1. Crditos
a) Descripcin Los ejemplos planteados en esta base de datos fueron provistos por el Gerente del Centro de Cmputos de Las Malvinas [Montalvetti, 1995] para el anlisis de solicitudes de crditos. Los campos de los ejemplos provistos son los parmetros que se tienen en cuenta al analizar un riesgo crediticio.

b) Atributos Nombre del campo Ingreso Composicin Familiar Vivienda Servicios Otros Crditos Valores Posibles ENTRE 451 Y 550, ENTRE 451 Y 550, MAS DE 551 SOLTERO, CASADO SIN HIJOS, CASADO Y UN HIJO, CASADO Y DOS HIJOS ALQUILA, PROPIA O IPVU BASICOS, BASICOS Y TIC, BASICOS TIC Y TEL UN CREDITO, DOS CREDITOS, TRES CREDITOS

c) Clases: SI, NO.

d) Cantidad de instancias y distribucin de las clases:: SI 69 35 104 NO 30 16 46 Totales 99 51 150

En el conjunto de entrenamiento En el conjunto de prueba Totales

Resultados

Magdalena Servente

101

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

5.2.2. Cardiologa
a) Descripcin Los ejemplos planteados en este caso corresponden a la patologa de Infarto Agudo de Miocardio, provistos por un cardilogo [Montalvetti, 1995]. En este caso, todos los ejemplos responden a personas de sexo masculino, entre 40 y 50 aos, fumadoras, con displidemia e hipertensin arterial presente. Pueden obtenerse dos diagnsticos de los ejemplos planteados: Si (Infarto Agudo de Miocardio) o No (no es un Infarto Agudo de Miocardio). Aunque en medicina es difcil realizar un diagnstico con una cantidad de variables reducidas, se determin que las variables planteadas en estos ejemplos alcanzan para realizar un diagnstico preliminar de gran ayuda al experto

b) Atributos Nombre del campo Dolor de Pecho de Angor Irradiacin del Angor Duracin del Angor Angor en Relacin Antigedad del Angor Respuesta Vasodilatadora Valores Posibles TIPICO, ATIPICO, AUSENTE SI, NO MENOS DE 30 MIN, MAS DE 30 MIN CON ESFUERZO, EN REPOSO RECIENTE, MAS DE 1 MES POSITIVO, NEGATIVO

c) Clases: SI, NO

d) Cantidad de instancias y distribucin de las clases: SI 18 9 27 NO 46 22 68 Totales 64 31 95

En el conjunto de entrenamiento En el conjunto de prueba Totales

5.2.3. Votaciones
a) Descripcin Estos datos fueron recolectados a partir del Almanaque Trimestral del Congreso, 2da sesin de 98 Congreso, 1984, Volumen XL: Congressional Quarterly Inc, Washington, D.C., 1985. Los datos incluyen los votos de cada congresista de la U.S. House of Representatives en 16 temas claves (CQA). Se identificaron nueve tipos diferentes de votos: votado a favor, convenio a favor, y pronunciado a favor (agrupados como a_favor), votado en contra, convenio en contra, y pronunciado en contra (agrupados

102

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

como en_contra), voto en persona, voto en persona para evitar conflictos de intereses, y abstencin de voto o no dio su voto a conocer (agrupados como desconocido). b) Atributos Nombre del campo Nios_discapacitados Participacin en el costo del proyecto del agua Adopcin de la resolucin sobre el presupuesto congelamiento de los honorarios mdicos ayuda a El Salvador grupos religiosos en las escuelas prohibicin de las pruebas anti satlites ayuda a los contras de Nicaragua misil mx inmigracin reduccin a la corporacin Synfuels presupuesto de educacin derecho a demandar de la Superfund crimen exportaciones sin impuestos acta sudafricana de administracin de exportaciones Valores Posibles A_favor, en_contra, desconocido A_favor, en_contra, desconocido A_favor, en_contra, desconocido A_favor, en_contra, desconocido A_favor, en_contra, desconocido A_favor, en_contra, desconocido A_favor, en_contra, desconocido A_favor, en_contra, desconocido A_favor, en_contra, desconocido A_favor, en_contra, desconocido A_favor, en_contra, desconocido A_favor, en_contra, desconocido A_favor, en_contra, desconocido A_favor, en_contra, desconocido A_favor, en_contra, desconocido A_favor, en_contra, desconocido

c) Clases: demcrata, republicano d) Cantidad de instancias y distribucin de las clases: Demcrata 184 83 267 republicano 116 52 168 Totales 300 135 435

En el conjunto de entrenamiento En el conjunto de prueba Totales

5.2.4. Estudio sobre hongos


a) Descripcin Esta base de datos incluye las descripciones de muestras hipotticas de 23 especies de hongos de las familias Agaricus y Lepiota. Cada especie es identificada como apta para ser ingerida, absolutamente venenosa, o de ingestin dudosa y ciertamente no recomendable. Esta ltima clase fue combinada con la venenosa. La Gua de donde se obtuvieron los datos explica que no existe una regla simple para determinar si un hongo es ingerible o no.

Resultados

Magdalena Servente

103

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

b) Atributos Forma_sombrero Superficie_sombrero Color_sombrero Magulladuras Olor Tipo_membrana Espaciado_membrana Tamao_membrana Color_membrana Forma_tronco Raiz_tronco Superfice_tronco_arriba_anillo Superfice_tronco_debajo_anillo Color_tronco_arriba_anillo Color_tronco_debajo_anillo Tipo_velo Color_velo Cantidad_anillos Tipo_anillo Color_esporas Poblacion Habitat acampanada, cnica, convexa, chata, abotonada, hundida Fibrosa, ranurada, escamosa, suave marrn, piel, canela, gris, verde, rosa, violeta, rojo, blanco, amarillo Si, no Almendra, ans, creosota, pescado, hediondo, mohoso, ninguno, punzante, especioso Adherida, descendente, libre, muescada Cercano, poblado, distante Ancha, fina Negro, marron, piel, chocolate, gris, verde, naranja, rosa, violeta, rojo, blanco, amarillo Abultada, cnica bulbosa, agarrotada, copa, igual, rizomorfa, arraizada, ? Fibrosa, escamosa, sedosa, suave Fibrosa, escamosa, sedosa, suave Marron, piel, canela, gris, naranja, rosa, rojo, blanco, amarillo Marron, piel, canela, gris, naranja, rosa, rojo, blanco, amarillo Parcial, universal Marrn, naranja, blanco, amarillo Ninguno, uno, dos Tejido, evanescente, resplandeciente, grande, ninguno, pendiente, cubierto, zonal Negra, marrn, piel, chocolate, verde, naranja, violeta, blanco, amarillo abundante, agrupada, numerosa, dispersa, varios, solitaria Pastos, hojas, praderas, caminos, urbano, basura, bosques

Cantidad de Atributos desconocidos: 2480 (denotados por un "?"), todos para el primer atributo

c) Clases: Ingerible, Venenoso.

d) Cantidad de instancias y distribucin de las clases: Ingerible 2805 1403 4208 Venenoso 2611 1305 3916 Totales 5416 2708 8124

En el conjunto de entrenamiento En el conjunto de prueba Totales

5.2.5. Elita: Base de Asteroides


a) Descripcin Existen muchas teoras fsicas que clasifican a los distintos asteroides en familias identificadas por un elemento en particular. Esta base de datos, resultado de varias mediciones realizadas sobre mltiples

104

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

valores continuos, ayuda a clasificar los asteroides en familias. Segn la teora de Hirayama, que examina la distribucin de los asteroides con respecto a sus elementos orbitales, en particular su movimiento principal, la inclinacin y la excentricidad, permite identificar a las familias KORONIS, EOS, THEMIS, FLORA, MARIA y PHOCAEA. Esta teora ha sido comprobada por Arnold

b) Atributos Nombre: Semieje Excentricidad Inclinacin seno_inclinacion argumento_perihelio Resonancia distancia_marte distancia_jupiter Clave Primaria Continuo Continuo Continuo Continuo Continuo Continuo Continuo Continuo

c) Clases: Las clases representan las familias de asteroides a las cuales cada asteroide puede pertenecer.

THEMIS, KORONIS, MARIA, EOS, PHOCAEA, FLORA.

d) Cantidad de instancias y distribucin de las clases: EOS 44 22 66 FLORA 103 53 156 KORONIS 25 12 37 MARIA 13 7 20 PHOCAEA 23 11 34 THEMIS 45 22 67 Totales 253 127 380

En el conjunto de entrenamiento En el conjunto de prueba Totales

5.2.6. Hipotiroidismo
a) Descripcin Estos datos fueron obtenidos de un estudio realizado sobre mltiples pacientes que presentaban sntomas de hipotiroidismo en el Garvan Institute.

b) Atributos Edad: Sexo: Toma tiroxina: Duda sobre tiroxina: Toma medicacin antitirodea: Enfermo:
Resultados

continuo M, F. f, v. f, v. f, v. f, v.
Magdalena Servente 105

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Embarazada: Ciruga tirodea: Tratamiento I131: Es hipotiroide: Es hipertiroide: Litio: bocio: tumor: Hipopituitario: Psicolgico: Medicin TSH: TSH: Medicin T3: T3: Medicin TT4: TT4: Medicin T4U: T4U: Medicin FTI: FTI: Medicin TBG: TBG: Fuente de referencia:

f, v. f, v. f, v. f, v. f, v. f, v. f, v. f, v. f, v. f, v. f, v. continuo f, v. Continuo f, v. Continuo. f, v. Continuo. f, v. Continuo. f, v. Continuo. WEST, STMW, SVHC, SVI, SVHD, otros.

c) Clases: hipertiroide, hipotiroide primario, hipotiroide compensado, hipotiroide secundario, negativo

d) Cantidad de instancias y distribucin de las clases: Hipertiroide En el conjunto de entrenamiento En el conjunto de prueba Totales 0 0 0 Hipotiroide primario 64 31 95 Hipotiroide compensado 129 65 194 Hipotiroide secundario 1 1 2 Negativo 2320 1161 3481 Totales 2514 1258 3772

5.2.7. Identificacin de vidrios


a) Descripcin Esta base de datos sirve para clasificar un vidrio como flotante o no. Dicha informacin es muy importante para los investigadores criminolgicos, ya que cualquier vidrio dejado en la escena del crimen sirve como evidencia, si est correctamente clasificado. Los datos fueron obtenidos del Central Research Establishment, Home Office Forensic Science Service de Aldermaston, Reading, Berkshire.

106

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

b) Atributos Id IR (ndice de refraccin) Na (Sodio medido como el porcentaje del peso del xido correspondiente, esto se aplica para los dems minerales) Mg (Magnesio) Al (Aluminio) Si (Silicio) K (Potasio) Ca (Calcio) Ba (Bario) Fe (Hierro) Clave Primaria continuo continuo continuo continuo continuo continuo continuo continuo continuo

c) Clases: vidrios_float_para_construcciones, vidrios_para_construcciones_no_float, vidrios_float_para_vehculos, vidrios_para_vehculos_no_float, contenedores, vajilla, lamparitas

d) Cantidad de instancias y distribucin de las clases: float contenedo vajilla Vidrios float para Vidrios para Vidrios construcciones construcciones para vehculos res no float 51 11 9 6 En el conjunto 47 de entrenamiento En el conjunto 23 25 6 4 3 de prueba Totales 70 76 17 13 9 lamparitas Totales

19

143

10 29

71 214

5.3. RESULTADOS OBTENIDOS CON EL ID3


A continuacin se presentan los resultados obtenidos con el ID3 en cada uno de los dominios analizados. Cada uno de los resultados consiste en un rbol de decisin, un conjunto de reglas de decisin y una matriz de resultados obtenida al aplicar los modelos sobre los datos de prueba. Dicha matriz informa por cada clase, la cantidad de instancias del conjunto de prueba que fueron clasificadas correctamente, la cantidad que fueron clasificadas errneamente y la probabilidad de que una nueva instancia sea clasificada correctamente.

Resultados

Magdalena Servente

107

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

5.3.1. Crditos
5.3.1.1. ID3 utilizando la ganancia como criterio de decisin
rbol de decisin
Otros_Creditos = DOS CREDITOS Composicin_Familiar = CASADO SIN HIJOS SI Composicin_Familiar = CASADO Y DOS HIJOS Ingreso = ENTRE 451 Y 550 Vivienda = ALQUILA NO Vivienda = PROPIA 0 IPVU Servicios = BASICOS Y TIC SI Servicios = BASICOS, TIC Y TEL NO Ingreso = MAS DE 551 SI Composicin_Familiar = CASADO Y UN HIJO SI Composicin_Familiar = SOLTERO Vivienda = ALQUILA Ingreso = ENTRE 451 Y 550 SI Ingreso = MAS DE 551 NO Vivienda = PROPIA 0 IPVU SI Otros_Creditos = TRES CREDITOS NO Otros_Creditos = UN CREDITO Composicin_Familiar = CASADO SIN HIJOS SI Composicin_Familiar = CASADO Y DOS HIJOS Ingreso = ENTRE 451 Y 550 Vivienda = ALQUILA NO Vivienda = PROPIA 0 IPVU SI Ingreso = MAS DE 551 SI Composicin_Familiar = CASADO Y UN HIJO SI Composicin_Familiar = SOLTERO SI

Reglas de decisin
Regla 0 SI Otros_Creditos = DOS CREDITOS Y Composicin_Familiar = CASADO SIN HIJOS ENTONCES Otorga_Creditos = SI Regla 1 SI Otros_Creditos = DOS CREDITOS Y Composicin_Familiar = CASADO Y DOS HIJOS Y Ingreso = ENTRE 451 Y 550 Y Vivienda = ALQUILA ENTONCES Otorga_Creditos = NO Regla 2 SI Otros_Creditos = DOS CREDITOS Y Composicin_Familiar = CASADO Y DOS HIJOS Y Ingreso = ENTRE 451 Y 550 Y Vivienda = PROPIA 0 IPVU Y Servicios = BASICOS Y TIC ENTONCES Otorga_Creditos = SI 108 Magdalena Servente Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Regla 3 SI Otros_Creditos = DOS CREDITOS Y Composicin_Familiar = CASADO Y DOS HIJOS Y Ingreso = ENTRE 451 Y 550 Y Vivienda = PROPIA 0 IPVU Y Servicios = BASICOS, TIC Y TEL ENTONCES Otorga_Creditos = NO Regla 4 SI Otros_Creditos = DOS CREDITOS Y Composicin_Familiar = CASADO Y DOS HIJOS Y Ingreso = MAS DE 551 ENTONCES Otorga_Creditos = SI Regla 5 SI Otros_Creditos = DOS CREDITOS Y Composicin_Familiar = CASADO Y UN HIJO ENTONCES Otorga_Creditos = SI Regla 6 SI Otros_Creditos = DOS CREDITOS Y Composicin_Familiar = SOLTERO Y Vivienda = ALQUILA Y Ingreso = ENTRE 451 Y 550 ENTONCES Otorga_Creditos = SI Regla 7 SI Otros_Creditos = DOS CREDITOS Y Composicin_Familiar = SOLTERO Y Vivienda = ALQUILA Y Ingreso = MAS DE 551 ENTONCES Otorga_Creditos = NO Regla 8 SI Otros_Creditos = DOS CREDITOS Y Composicin_Familiar = SOLTERO Y Vivienda = PROPIA 0 IPVU ENTONCES Otorga_Creditos = SI Regla 9 SI Otros_Creditos = TRES CREDITOS ENTONCES Otorga_Creditos = NO Regla 10 SI Otros_Creditos = UN CREDITO Y Composicin_Familiar = CASADO SIN HIJOS ENTONCES Otorga_Creditos = SI Regla 11 SI Otros_Creditos = UN CREDITO Y Composicin_Familiar = CASADO Y DOS HIJOS Y Ingreso = ENTRE 451 Y 550 Y Vivienda = ALQUILA ENTONCES Otorga_Creditos = NO Regla 12 SI Otros_Creditos = UN CREDITO Y Composicin_Familiar = CASADO Y DOS HIJOS Y Ingreso = ENTRE 451 Y 550 Y Vivienda = PROPIA 0 IPVU ENTONCES Otorga_Creditos = SI Regla 13 SI Otros_Creditos = UN CREDITO Y Composicin_Familiar = CASADO Y DOS HIJOS Y Ingreso = MAS DE 551 ENTONCES Otorga_Creditos = SI Regla 14 SI Otros_Creditos = UN CREDITO Y Composicin_Familiar = CASADO Y UN HIJO ENTONCES Otorga_Creditos = SI Regla 15 SI Otros_Creditos = UN CREDITO Y Composicin_Familiar = SOLTERO Resultados Magdalena Servente 109

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

ENTONCES Otorga_Creditos = SI

Evaluacin de los resultados Clases NO SI Totales Correctos 16 17 33 Errores 0 18 18 Probabilidad 1 0,485714 0,647058

5.3.1.2. ID3 utilizando la proporcin ganancia como criterio de decisin


rbol de decisin
Otros_Creditos = DOS CREDITOS Composicin_Familiar = CASADO SIN HIJOS SI Composicin_Familiar = CASADO Y DOS HIJOS Ingreso = ENTRE 451 Y 550 Vivienda = ALQUILA NO Vivienda = PROPIA 0 IPVU Servicios = BASICOS Y TIC SI Servicios = BASICOS, TIC Y TEL NO Ingreso = MAS DE 551 SI Composicin_Familiar = CASADO Y UN HIJO SI Composicin_Familiar = SOLTERO Vivienda = ALQUILA Ingreso = ENTRE 451 Y 550 SI Ingreso = MAS DE 551 NO Vivienda = PROPIA 0 IPVU SI Otros_Creditos = TRES CREDITOS NO Otros_Creditos = UN CREDITO Composicin_Familiar = CASADO SIN HIJOS SI Composicin_Familiar = CASADO Y DOS HIJOS Ingreso = ENTRE 451 Y 550 Vivienda = ALQUILA NO Vivienda = PROPIA 0 IPVU SI Ingreso = MAS DE 551 SI Composicin_Familiar = CASADO Y UN HIJO SI Composicin_Familiar = SOLTERO SI

Reglas de decisin

110

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Regla 0 SI Otros_Creditos = DOS CREDITOS Y Composicin_Familiar = CASADO SIN HIJOS ENTONCES Otorga_Creditos = SI Regla 1 SI Otros_Creditos = DOS CREDITOS Y Composicin_Familiar = CASADO Y DOS HIJOS Y Ingreso = ENTRE 451 Y 550 Y Vivienda = ALQUILA ENTONCES Otorga_Creditos = NO Regla 2 SI Otros_Creditos = DOS CREDITOS Y Composicin_Familiar = CASADO Y DOS HIJOS Y Ingreso = ENTRE 451 Y 550 Y Vivienda = PROPIA 0 IPVU Y Servicios = BASICOS Y TIC ENTONCES Otorga_Creditos = SI Regla 3 SI Otros_Creditos = DOS CREDITOS Y Composicin_Familiar = CASADO Y DOS HIJOS Y Ingreso = ENTRE 451 Y 550 Y Vivienda = PROPIA 0 IPVU Y Servicios = BASICOS, TIC Y TEL ENTONCES Otorga_Creditos = NO Regla 4 SI Otros_Creditos = DOS CREDITOS Y Composicin_Familiar = CASADO Y DOS HIJOS Y Ingreso = MAS DE 551 ENTONCES Otorga_Creditos = SI Regla 5 SI Otros_Creditos = DOS CREDITOS Y Composicin_Familiar = CASADO Y UN HIJO ENTONCES Otorga_Creditos = SI Regla 6 SI Otros_Creditos = DOS CREDITOS Y Composicin_Familiar = SOLTERO Y Vivienda = ALQUILA Y Ingreso = ENTRE 451 Y 550 ENTONCES Otorga_Creditos = SI Regla 7 SI Otros_Creditos = DOS CREDITOS Y Composicin_Familiar = SOLTERO Y Vivienda = ALQUILA Y Ingreso = MAS DE 551 ENTONCES Otorga_Creditos = NO Regla 8 SI Otros_Creditos = DOS CREDITOS Y Composicin_Familiar = SOLTERO Y Vivienda = PROPIA 0 IPVU ENTONCES Otorga_Creditos = SI Regla 9 SI Otros_Creditos = TRES CREDITOS ENTONCES Otorga_Creditos = NO Regla 10 SI Otros_Creditos = UN CREDITO Y Composicin_Familiar = CASADO SIN HIJOS ENTONCES Otorga_Creditos = SI Regla 11 SI Otros_Creditos = UN CREDITO Y Composicin_Familiar = CASADO Y DOS HIJOS Y Ingreso = ENTRE 451 Y 550 Y Vivienda = ALQUILA ENTONCES Otorga_Creditos = NO Regla 12 SI Otros_Creditos = UN CREDITO Resultados Magdalena Servente 111

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Y Composicin_Familiar = CASADO Y DOS HIJOS Y Ingreso = ENTRE 451 Y 550 Y Vivienda = PROPIA 0 IPVU ENTONCES Otorga_Creditos = SI Regla 13 SI Otros_Creditos = UN CREDITO Y Composicin_Familiar = CASADO Y DOS HIJOS Y Ingreso = MAS DE 551 ENTONCES Otorga_Creditos = SI Regla 14 SI Otros_Creditos = UN CREDITO Y Composicin_Familiar = CASADO Y UN HIJO ENTONCES Otorga_Creditos = SI Regla 15 SI Otros_Creditos = UN CREDITO Y Composicin_Familiar = SOLTERO ENTONCES Otorga_Creditos = SI

Evaluacin de los resultados Clases NO SI Totales Correctos 16 17 33 Errores 0 18 18 Probabilidad 1 0,485714 0,647058

5.3.1.3. Conclusiones
En este caso, tanto el rbol como las reglas obtenidas mediante el ID3 son idnticos para la ganancia y para la proporcin de ganancia. Si analizamos la tabla de evaluacin de los resultados, vemos que el clasificador3 obtenido es excelente para clasificar la clase NO, pero slo es exitoso en un 50% de los casos de la clase SI. Es decir, que un nuevo caso de clase NO tiene una probabilidad de 1 de ser clasificado correctamente. Mientras que un nuevo caso de clase SI, tiene solamente una probabilidad del 0,49 de ser clasificado como SI.

Creemos que este fenmeno puede deberse a una mala eleccin de los datos de entrenamiento y prueba. Un clasificador exitoso sobre los datos de entrenamiento, ser exitoso sobre los dems conjuntos de datos en la medida en que los datos de entrenamiento sean representativos de los otros conjuntos. Supongamos que tenemos para un dominio hipottico, los siguientes datos de entrenamiento:

Atributo A 1 1

Atributo B 5 90

Clase NO NO

En el caso del ID3, por clasificador nos referiremos tanto al rbol como a las reglas obtenidas, ya es indistinto utilizar uno u otro

para clasificar nuevos casos.

112

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

90

SI

A partir de estos datos, el ID3 generara las siguientes reglas de decisin:

1.

SI Atributo A =1 ENTONCES Clase=NO

2.

SI Atributo A =2 ENTONCES Clase=SI

Si aplicamos el clasificador a la siguiente tupla de prueba: {2,3,NO}, el resultado ser errneo. Si todos los casos de prueba de clase NO tuviesen valores distintos de 1 para el atributo A, entonces la performance de los modelos obtenidos sobre estos datos de prueba sera poco alentadora. El conjunto de entrenamiento en ese caso no sera representativo de los conjuntos en el cual se aplic el clasificador. Entonces, podemos conjeturar que la performance de los clasificadores generados por el ID3 para el dominio Crditos, puede deberse a que los datos de entrenamiento no eran representativos de los datos de prueba. Podemos extrapolar, este problema de representatividad de los datos de aprendizaje a los humanos: no podemos ensearle a un nio el concepto de pjaro mostrndole slo distintas clases de pinginos, ya que cuando vea cualquier otro pjaro como una golondrina, un gorrin o una paloma, pensar que no son pjaros; para l los pjaros no vuelan, son gordos, grandes y caminan por el hielo.

5.3.2. Cardiologa
5.3.2.1. ID3 utilizando la ganancia como criterio de decisin
rbol de decisin
DURACION_DEL_ANGOR = MAS DE 30 MIN DOLOR_DE_PECHO_DE_ANGOR = ATIPICO IRRADIACION_DEL_ANGOR = NO RESPUESTA_VASODILATADORA = NEGATIVO NO RESPUESTA_VASODILATADORA = POSITIVO SI IRRADIACION_DEL_ANGOR = SI SI DOLOR_DE_PECHO_DE_ANGOR = AUSENTE NO DOLOR_DE_PECHO_DE_ANGOR = TIPICO ANGOR_EN_RELACION = CON ESFUERZO RESPUESTA_VASODILATADORA = NEGATIVO SI RESPUESTA_VASODILATADORA = POSITIVO IRRADIACION_DEL_ANGOR = NO NO IRRADIACION_DEL_ANGOR = SI SI ANGOR_EN_RELACION = EN REPOSO SI DURACION_DEL_ANGOR = MENOS DE 30 MIN DOLOR_DE_PECHO_DE_ANGOR = ATIPICO Resultados Magdalena Servente 113

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

NO DOLOR_DE_PECHO_DE_ANGOR = AUSENTE NO DOLOR_DE_PECHO_DE_ANGOR = TIPICO IRRADIACION_DEL_ANGOR = NO ANTIGEDAD_DEL_ANGOR = MAS DE 1 MES NO ANTIGEDAD_DEL_ANGOR = RECIENTE ANGOR_EN_RELACION = CON ESFUERZO SI ANGOR_EN_RELACION = EN REPOSO NO IRRADIACION_DEL_ANGOR = SI NO

Reglas de decisin
Regla 0 SI DURACION_DEL_ANGOR = MAS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = ATIPICO Y IRRADIACION_DEL_ANGOR = NO Y RESPUESTA_VASODILATADORA = NEGATIVO ENTONCES DIAGNOSTICO = NO

Regla 1 SI DURACION_DEL_ANGOR = MAS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = ATIPICO Y IRRADIACION_DEL_ANGOR = NO Y RESPUESTA_VASODILATADORA = POSITIVO ENTONCES DIAGNOSTICO = SI Regla 2 SI DURACION_DEL_ANGOR = MAS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = ATIPICO Y IRRADIACION_DEL_ANGOR = SI ENTONCES DIAGNOSTICO = SI Regla 3 SI DURACION_DEL_ANGOR = MAS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = AUSENTE ENTONCES DIAGNOSTICO = NO Regla 4 SI DURACION_DEL_ANGOR = MAS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = TIPICO Y ANGOR_EN_RELACION = CON ESFUERZO Y RESPUESTA_VASODILATADORA = NEGATIVO ENTONCES DIAGNOSTICO = SI Regla 5 SI DURACION_DEL_ANGOR = MAS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = TIPICO Y ANGOR_EN_RELACION = CON ESFUERZO Y RESPUESTA_VASODILATADORA = POSITIVO Y IRRADIACION_DEL_ANGOR = NO ENTONCES DIAGNOSTICO = NO Regla 6 SI DURACION_DEL_ANGOR = MAS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = TIPICO Y ANGOR_EN_RELACION = CON ESFUERZO Y RESPUESTA_VASODILATADORA = POSITIVO Y IRRADIACION_DEL_ANGOR = SI ENTONCES DIAGNOSTICO = SI Regla 7 SI DURACION_DEL_ANGOR = MAS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = TIPICO Y ANGOR_EN_RELACION = EN REPOSO ENTONCES DIAGNOSTICO = SI

114

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Regla 8 SI DURACION_DEL_ANGOR = MENOS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = ATIPICO ENTONCES DIAGNOSTICO = NO Regla 9 SI DURACION_DEL_ANGOR = MENOS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = AUSENTE ENTONCES DIAGNOSTICO = NO Regla 10 SI DURACION_DEL_ANGOR = MENOS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = TIPICO Y IRRADIACION_DEL_ANGOR = NO Y ANTIGEDAD_DEL_ANGOR = MAS DE 1 MES ENTONCES DIAGNOSTICO = NO Regla 11 SI DURACION_DEL_ANGOR = MENOS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = TIPICO Y IRRADIACION_DEL_ANGOR = NO Y ANTIGEDAD_DEL_ANGOR = RECIENTE Y ANGOR_EN_RELACION = CON ESFUERZO ENTONCES DIAGNOSTICO = SI Regla 12 SI DURACION_DEL_ANGOR = MENOS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = TIPICO Y IRRADIACION_DEL_ANGOR = NO Y ANTIGEDAD_DEL_ANGOR = RECIENTE Y ANGOR_EN_RELACION = EN REPOSO ENTONCES DIAGNOSTICO = NO Regla 13 SI DURACION_DEL_ANGOR = MENOS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = TIPICO Y IRRADIACION_DEL_ANGOR = SI ENTONCES DIAGNOSTICO = NO

Evaluacin de los resultados Clases NO SI Totales Correctos 20 9 29 Errores 2 0 2 Probabilidad 0,909090 1 0,935483

5.3.2.2. ID3 utilizando la proporcin ganancia como criterio de decisin


rbol de decisin
DURACION_DEL_ANGOR = MAS DE 30 MIN DOLOR_DE_PECHO_DE_ANGOR = ATIPICO IRRADIACION_DEL_ANGOR = NO RESPUESTA_VASODILATADORA = NEGATIVO NO RESPUESTA_VASODILATADORA = POSITIVO SI IRRADIACION_DEL_ANGOR = SI SI DOLOR_DE_PECHO_DE_ANGOR = AUSENTE NO DOLOR_DE_PECHO_DE_ANGOR = TIPICO ANGOR_EN_RELACION = CON ESFUERZO RESPUESTA_VASODILATADORA = NEGATIVO SI Resultados Magdalena Servente 115

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

RESPUESTA_VASODILATADORA = POSITIVO IRRADIACION_DEL_ANGOR = NO NO IRRADIACION_DEL_ANGOR = SI SI ANGOR_EN_RELACION = EN REPOSO SI DURACION_DEL_ANGOR = MENOS DE 30 MIN DOLOR_DE_PECHO_DE_ANGOR = ATIPICO NO DOLOR_DE_PECHO_DE_ANGOR = AUSENTE NO DOLOR_DE_PECHO_DE_ANGOR = TIPICO IRRADIACION_DEL_ANGOR = NO ANTIGEDAD_DEL_ANGOR = MAS DE 1 MES NO ANTIGEDAD_DEL_ANGOR = RECIENTE ANGOR_EN_RELACION = CON ESFUERZO SI ANGOR_EN_RELACION = EN REPOSO NO IRRADIACION_DEL_ANGOR = SI NO

Reglas de decisin
Regla 0 SI DURACION_DEL_ANGOR = MAS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = ATIPICO Y IRRADIACION_DEL_ANGOR = NO Y RESPUESTA_VASODILATADORA = NEGATIVO ENTONCES DIAGNOSTICO = NO Regla 1 SI DURACION_DEL_ANGOR = MAS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = ATIPICO Y IRRADIACION_DEL_ANGOR = NO Y RESPUESTA_VASODILATADORA = POSITIVO ENTONCES DIAGNOSTICO = SI Regla 2 SI DURACION_DEL_ANGOR = MAS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = ATIPICO Y IRRADIACION_DEL_ANGOR = SI ENTONCES DIAGNOSTICO = SI Regla 3 SI DURACION_DEL_ANGOR = MAS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = AUSENTE ENTONCES DIAGNOSTICO = NO Regla 4 SI DURACION_DEL_ANGOR = MAS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = TIPICO Y ANGOR_EN_RELACION = CON ESFUERZO Y RESPUESTA_VASODILATADORA = NEGATIVO ENTONCES DIAGNOSTICO = SI Regla 5 SI DURACION_DEL_ANGOR = MAS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = TIPICO Y ANGOR_EN_RELACION = CON ESFUERZO Y RESPUESTA_VASODILATADORA = POSITIVO Y IRRADIACION_DEL_ANGOR = NO ENTONCES DIAGNOSTICO = NO Regla 6 SI DURACION_DEL_ANGOR = MAS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = TIPICO Y ANGOR_EN_RELACION = CON ESFUERZO Y RESPUESTA_VASODILATADORA = POSITIVO Y IRRADIACION_DEL_ANGOR = SI 116 Magdalena Servente Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

ENTONCES DIAGNOSTICO =

SI

Regla 7 SI DURACION_DEL_ANGOR = MAS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = TIPICO Y ANGOR_EN_RELACION = EN REPOSO ENTONCES DIAGNOSTICO = SI Regla 8 SI DURACION_DEL_ANGOR = MENOS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = ATIPICO ENTONCES DIAGNOSTICO = NO Regla 9 SI DURACION_DEL_ANGOR = MENOS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = AUSENTE ENTONCES DIAGNOSTICO = NO Regla 10 SI DURACION_DEL_ANGOR = MENOS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = TIPICO Y IRRADIACION_DEL_ANGOR = NO Y ANTIGEDAD_DEL_ANGOR = MAS DE 1 MES ENTONCES DIAGNOSTICO = NO Regla 11 SI DURACION_DEL_ANGOR = MENOS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = TIPICO Y IRRADIACION_DEL_ANGOR = NO Y ANTIGEDAD_DEL_ANGOR = RECIENTE Y ANGOR_EN_RELACION = CON ESFUERZO ENTONCES DIAGNOSTICO = SI Regla 12 SI DURACION_DEL_ANGOR = MENOS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = TIPICO Y IRRADIACION_DEL_ANGOR = NO Y ANTIGEDAD_DEL_ANGOR = RECIENTE Y ANGOR_EN_RELACION = EN REPOSO ENTONCES DIAGNOSTICO = NO Regla 13 SI DURACION_DEL_ANGOR = MENOS DE 30 MIN Y DOLOR_DE_PECHO_DE_ANGOR = TIPICO Y IRRADIACION_DEL_ANGOR = SI ENTONCES DIAGNOSTICO = NO

Evaluacin de los resultados Clases NO SI Totales Correctos 20 9 29 Errores 2 0 2 Probabilidad 0,909090 1 0,935483

5.3.2.3. Conclusiones
Al igual que en el caso anterior, vemos que tanto el rbol como las reglas de decisin obtenidas son iguales para el criterio de ganancia como para el de proporcin de ganancia. En este caso, no obstante, la performance del clasificador es notablemente mejor que en el caso anterior. El modelo generado tiene un 93% de probabilidad de clasificar correctamente un caso negativo, y un 100% de clasificar correctamente uno positivo.

Resultados

Magdalena Servente

117

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Cabe destacar que la cantidad de casos de entrenamiento es menor a la del caso anterior y no obstante la cantidad de reglas obtenidas es 13, contra 15 obtenidas en el caso anterior. Entonces, podramos concluir, grosso modo, que la cantidad de datos de entrada no es proporcional al tamao del rbol ni la cantidad de reglas obtenidas.

5.3.3. Votaciones
5.3.4.1. ID3 utilizando la ganancia como criterio de decisin
rbol de decisin
Cong_honorarios_medicos = a_favor Reduccion_corp_Synfuels = a_favor Export_sin_impuestos = a_favor democrata Export_sin_impuestos = desconocido republicano Export_sin_impuestos = en_contra Presupuesto_de_educacion = a_favor Der_demanda_Superfund = a_favor Particip_proy_agua = a_favor republicano Particip_proy_agua = en_contra Acta_sudaf_admin_export = a_favor republicano Acta_sudaf_admin_export = desconocido republicano Acta_sudaf_admin_export = en_contra Nios discapacitados = a_favor republicano Nios discapacitados = en_contra democrata Der_demanda_Superfund = en_contra democrata Presupuesto_de_educacion = desconocido democrata Presupuesto_de_educacion = en_contra Acta_sudaf_admin_export = a_favor Adop_resolucion_presup = a_favor republicano Adop_resolucion_presup = en_contra Ayuda_a_El_Salvador = a_favor republicano Ayuda_a_El_Salvador = en_contra democrata Acta_sudaf_admin_export = desconocido democrata Acta_sudaf_admin_export = en_contra democrata Reduccion_corp_Synfuels = desconocido republicano Reduccion_corp_Synfuels = en_contra Export_sin_impuestos = a_favor Inmigracion = a_favor republicano Inmigracion = en_contra Acta_sudaf_admin_export = a_favor democrata Acta_sudaf_admin_export = desconocido Particip_proy_agua = a_favor republicano Particip_proy_agua = en_contra democrata Acta_sudaf_admin_export = en_contra republicano Export_sin_impuestos = desconocido republicano Export_sin_impuestos = en_contra 118 Magdalena Servente Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Adop_resolucion_presup = a_favor Acta_sudaf_admin_export = a_favor republicano Acta_sudaf_admin_export = desconocido Nios discapacitados = a_favor republicano Nios discapacitados = en_contra democrata Adop_resolucion_presup = en_contra republicano Cong_honorarios_medicos = desconocido Misil_mx = a_favor Prohib_pruebas_anti_satel = a_favor democrata Prohib_pruebas_anti_satel = desconocido democrata Prohib_pruebas_anti_satel = en_contra republicano Misil_mx = desconocido republicano Misil_mx = en_contra democrata Cong_honorarios_medicos = en_contra Presupuesto_de_educacion = a_favor democrata Presupuesto_de_educacion = desconocido Adop_resolucion_presup = a_favor democrata Adop_resolucion_presup = en_contra republicano Presupuesto_de_educacion = en_contra democrata

Reglas de decisin
Regla 0 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = a_favor ENTONCES Clase = democrata Regla 1 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = desconocido ENTONCES Clase = republicano Regla 2 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = a_favor Y Der_demanda_Superfund = a_favor Y Particip_proy_agua = a_favor ENTONCES Clase = republicano Regla 3 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = a_favor Y Der_demanda_Superfund = a_favor Y Particip_proy_agua = en_contra Y Acta_sudaf_admin_export = a_favor ENTONCES Clase = republicano Regla 4 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = a_favor Y Der_demanda_Superfund = a_favor Resultados Magdalena Servente 119

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Y Particip_proy_agua = en_contra Y Acta_sudaf_admin_export = desconocido ENTONCES Clase = republicano Regla 5 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = a_favor Y Der_demanda_Superfund = a_favor Y Particip_proy_agua = en_contra Y Acta_sudaf_admin_export = en_contra Y Nios discapacitados = a_favor ENTONCES Clase = republicano Regla 6 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = a_favor Y Der_demanda_Superfund = a_favor Y Particip_proy_agua = en_contra Y Acta_sudaf_admin_export = en_contra Y Nios discapacitados = en_contra ENTONCES Clase = democrata Regla 7 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = a_favor Y Der_demanda_Superfund = en_contra ENTONCES Clase = democrata Regla 8 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = desconocido ENTONCES Clase = democrata Regla 9 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = en_contra Y Acta_sudaf_admin_export = a_favor Y Adop_resolucion_presup = a_favor ENTONCES Clase = republicano Regla 10 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = en_contra Y Acta_sudaf_admin_export = a_favor Y Adop_resolucion_presup = en_contra Y Ayuda_a_El_Salvador = a_favor ENTONCES Clase = republicano Regla 11 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = en_contra Y Acta_sudaf_admin_export = a_favor Y Adop_resolucion_presup = en_contra Y Ayuda_a_El_Salvador = en_contra ENTONCES Clase = democrata Regla 12 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = en_contra Y Acta_sudaf_admin_export = desconocido ENTONCES Clase = democrata 120 Magdalena Servente Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Regla 13 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = en_contra Y Acta_sudaf_admin_export = en_contra ENTONCES Clase = democrata Regla 14 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = desconocido ENTONCES Clase = republicano Regla 15 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = a_favor Y Inmigracion = a_favor ENTONCES Clase = republicano Regla 16 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = a_favor Y Inmigracion = en_contra Y Acta_sudaf_admin_export = a_favor ENTONCES Clase = democrata Regla 17 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = a_favor Y Inmigracion = en_contra Y Acta_sudaf_admin_export = desconocido Y Particip_proy_agua = a_favor ENTONCES Clase = republicano Regla 18 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = a_favor Y Inmigracion = en_contra Y Acta_sudaf_admin_export = desconocido Y Particip_proy_agua = en_contra ENTONCES Clase = democrata Regla 19 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = a_favor Y Inmigracion = en_contra Y Acta_sudaf_admin_export = en_contra ENTONCES Clase = republicano Regla 20 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = desconocido ENTONCES Clase = republicano Regla 21 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = en_contra Y Adop_resolucion_presup = a_favor Y Acta_sudaf_admin_export = a_favor ENTONCES Clase = republicano Regla 22 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = en_contra Y Adop_resolucion_presup = a_favor Y Acta_sudaf_admin_export = desconocido Y Nios discapacitados = a_favor ENTONCES Clase = republicano Resultados Magdalena Servente 121

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Regla 23 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = en_contra Y Adop_resolucion_presup = a_favor Y Acta_sudaf_admin_export = desconocido Y Nios discapacitados = en_contra ENTONCES Clase = democrata Regla 24 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = en_contra Y Adop_resolucion_presup = en_contra ENTONCES Clase = republicano Regla 25 SI Cong_honorarios_medicos = desconocido Y Misil_mx = a_favor Y Prohib_pruebas_anti_satel = a_favor ENTONCES Clase = democrata Regla 26 SI Cong_honorarios_medicos = desconocido Y Misil_mx = a_favor Y Prohib_pruebas_anti_satel = desconocido ENTONCES Clase = democrata Regla 27 SI Cong_honorarios_medicos = desconocido Y Misil_mx = a_favor Y Prohib_pruebas_anti_satel = en_contra ENTONCES Clase = republicano Regla 28 SI Cong_honorarios_medicos = desconocido Y Misil_mx = desconocido ENTONCES Clase = republicano

Regla 29 SI Cong_honorarios_medicos = desconocido Y Misil_mx = en_contra ENTONCES Clase = democrata Regla 30 SI Cong_honorarios_medicos = en_contra Y Presupuesto_de_educacion = a_favor ENTONCES Clase = democrata Regla 31 SI Cong_honorarios_medicos = en_contra Y Presupuesto_de_educacion = desconocido Y Adop_resolucion_presup = a_favor ENTONCES Clase = democrata Regla 32 SI Cong_honorarios_medicos = en_contra Y Presupuesto_de_educacion = desconocido Y Adop_resolucion_presup = en_contra ENTONCES Clase = republicano Regla 33 SI Cong_honorarios_medicos = en_contra Y Presupuesto_de_educacion = en_contra ENTONCES Clase = democrata

Evaluacin de los resultados Clases


122

Correctos

Errores

Probabilidad
Resultados

Magdalena Servente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Demcrata 81 Republicano 47 Totales 128

2 5 7

0,9759036 0,903846 0,948148

5.3.4.2. ID3 utilizando la proporcin ganancia como criterio de decisin


rbol de decisin
Cong_honorarios_medicos = a_favor Reduccion_corp_Synfuels = a_favor Export_sin_impuestos = a_favor democrata Export_sin_impuestos = desconocido republicano Export_sin_impuestos = en_contra Presupuesto_de_educacion = a_favor Der_demanda_Superfund = a_favor Particip_proy_agua = a_favor republicano Particip_proy_agua = en_contra Acta_sudaf_admin_export = a_favor republicano Acta_sudaf_admin_export = desconocido republicano Acta_sudaf_admin_export = en_contra Nios discapacitados = a_favor republicano Nios discapacitados = en_contra democrata Der_demanda_Superfund = en_contra democrata Presupuesto_de_educacion = desconocido democrata Presupuesto_de_educacion = en_contra Acta_sudaf_admin_export = a_favor Adop_resolucion_presup = a_favor republicano Adop_resolucion_presup = en_contra Ayuda_a_El_Salvador = a_favor republicano Ayuda_a_El_Salvador = en_contra democrata Acta_sudaf_admin_export = desconocido democrata Acta_sudaf_admin_export = en_contra democrata Reduccion_corp_Synfuels = desconocido republicano Reduccion_corp_Synfuels = en_contra Export_sin_impuestos = a_favor Inmigracion = a_favor republicano Inmigracion = en_contra Acta_sudaf_admin_export = a_favor democrata Acta_sudaf_admin_export = desconocido Particip_proy_agua = a_favor republicano Particip_proy_agua = en_contra democrata Acta_sudaf_admin_export = en_contra republicano Export_sin_impuestos = desconocido republicano Export_sin_impuestos = en_contra Adop_resolucion_presup = a_favor Acta_sudaf_admin_export = a_favor republicano Acta_sudaf_admin_export = desconocido Nios discapacitados = a_favor Resultados Magdalena Servente 123

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

republicano Nios discapacitados = en_contra democrata Adop_resolucion_presup = en_contra republicano Cong_honorarios_medicos = desconocido Misil_mx = a_favor Prohib_pruebas_anti_satel = a_favor democrata Prohib_pruebas_anti_satel = desconocido democrata Prohib_pruebas_anti_satel = en_contra republicano Misil_mx = desconocido republicano Misil_mx = en_contra democrata Cong_honorarios_medicos = en_contra Adop_resolucion_presup = a_favor democrata Adop_resolucion_presup = desconocido democrata Adop_resolucion_presup = en_contra Presupuesto_de_educacion = a_favor democrata Presupuesto_de_educacion = desconocido republicano Presupuesto_de_educacion = en_contra democrata

Reglas de decisin
Regla 0 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = a_favor ENTONCES Clase = democrata Regla 1 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = desconocido ENTONCES Clase = republicano Regla 2 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = a_favor Y Der_demanda_Superfund = a_favor Y Particip_proy_agua = a_favor ENTONCES Clase = republicano Regla 3 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = a_favor Y Der_demanda_Superfund = a_favor Y Particip_proy_agua = en_contra Y Acta_sudaf_admin_export = a_favor ENTONCES Clase = republicano Regla 4 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = a_favor Y Der_demanda_Superfund = a_favor Y Particip_proy_agua = en_contra Y Acta_sudaf_admin_export = desconocido ENTONCES Clase = republicano 124 Magdalena Servente Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Regla 5 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = a_favor Y Der_demanda_Superfund = a_favor Y Particip_proy_agua = en_contra Y Acta_sudaf_admin_export = en_contra Y Nios discapacitados = a_favor ENTONCES Clase = republicano Regla 6 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = a_favor Y Der_demanda_Superfund = a_favor Y Particip_proy_agua = en_contra Y Acta_sudaf_admin_export = en_contra Y Nios discapacitados = en_contra ENTONCES Clase = democrata Regla 7 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = a_favor Y Der_demanda_Superfund = en_contra ENTONCES Clase = democrata Regla 8 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = desconocido ENTONCES Clase = democrata Regla 9 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = en_contra Y Acta_sudaf_admin_export = a_favor Y Adop_resolucion_presup = a_favor ENTONCES Clase = republicano Regla 10 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = en_contra Y Acta_sudaf_admin_export = a_favor Y Adop_resolucion_presup = en_contra Y Ayuda_a_El_Salvador = a_favor ENTONCES Clase = republicano Regla 11 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = en_contra Y Acta_sudaf_admin_export = a_favor Y Adop_resolucion_presup = en_contra Y Ayuda_a_El_Salvador = en_contra ENTONCES Clase = democrata Regla 12 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = en_contra Y Acta_sudaf_admin_export = desconocido ENTONCES Clase = democrata Regla 13 Resultados Magdalena Servente 125

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = a_favor Y Export_sin_impuestos = en_contra Y Presupuesto_de_educacion = en_contra Y Acta_sudaf_admin_export = en_contra ENTONCES Clase = democrata Regla 14 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = desconocido ENTONCES Clase = republicano Regla 15 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = a_favor Y Inmigracion = a_favor ENTONCES Clase = republicano Regla 16 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = a_favor Y Inmigracion = en_contra Y Acta_sudaf_admin_export = a_favor ENTONCES Clase = democrata Regla 17 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = a_favor Y Inmigracion = en_contra Y Acta_sudaf_admin_export = desconocido Y Particip_proy_agua = a_favor ENTONCES Clase = republicano Regla 18 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = a_favor Y Inmigracion = en_contra Y Acta_sudaf_admin_export = desconocido Y Particip_proy_agua = en_contra ENTONCES Clase = democrata Regla 19 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = a_favor Y Inmigracion = en_contra Y Acta_sudaf_admin_export = en_contra ENTONCES Clase = republicano Regla 20 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = desconocido ENTONCES Clase = republicano Regla 21 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = en_contra Y Adop_resolucion_presup = a_favor Y Acta_sudaf_admin_export = a_favor ENTONCES Clase = republicano Regla 22 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = en_contra Y Adop_resolucion_presup = a_favor Y Acta_sudaf_admin_export = desconocido Y Nios discapacitados = a_favor ENTONCES Clase = republicano

126

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Regla 23 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = en_contra Y Adop_resolucion_presup = a_favor Y Acta_sudaf_admin_export = desconocido Y Nios discapacitados = en_contra ENTONCES Clase = democrata Regla 24 SI Cong_honorarios_medicos = a_favor Y Reduccion_corp_Synfuels = en_contra Y Export_sin_impuestos = en_contra Y Adop_resolucion_presup = en_contra ENTONCES Clase = republicano Regla 25 SI Cong_honorarios_medicos = desconocido Y Misil_mx = a_favor Y Prohib_pruebas_anti_satel = a_favor ENTONCES Clase = democrata Regla 26 SI Cong_honorarios_medicos = desconocido Y Misil_mx = a_favor Y Prohib_pruebas_anti_satel = desconocido ENTONCES Clase = democrata Regla 27 SI Cong_honorarios_medicos = desconocido Y Misil_mx = a_favor Y Prohib_pruebas_anti_satel = en_contra ENTONCES Clase = republicano Regla 28 SI Cong_honorarios_medicos = desconocido Y Misil_mx = desconocido ENTONCES Clase = republicano Regla 29 SI Cong_honorarios_medicos = desconocido Y Misil_mx = en_contra ENTONCES Clase = democrata Regla 30 SI Cong_honorarios_medicos = en_contra Y Adop_resolucion_presup = a_favor ENTONCES Clase = democrata Regla 31 SI Cong_honorarios_medicos = en_contra Y Adop_resolucion_presup = desconocido ENTONCES Clase = democrata Regla 32 SI Cong_honorarios_medicos = en_contra Y Adop_resolucion_presup = en_contra Y Presupuesto_de_educacion = a_favor ENTONCES Clase = democrata Regla 33 SI Cong_honorarios_medicos = en_contra Y Adop_resolucion_presup = en_contra Y Presupuesto_de_educacion = desconocido ENTONCES Clase = republicano Regla 34 SI Cong_honorarios_medicos = en_contra Y Adop_resolucion_presup = en_contra Y Presupuesto_de_educacion = en_contra ENTONCES Clase = democrata

Evaluacin de los resultados


Resultados Magdalena Servente 127

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Clases Demcrata Republicano Totales

Correctos 81 47 128

Errores 2 5 7

Probabilidad 0,9759036 0,903846 0,948148

5.3.4.3. Conclusiones
En comparacin con los dominios anteriores, los modelos obtenidos en este caso son de gran tamao. Los rboles de decisin tienen un tamao de 57 y 58 para la ganancia y proporcin de ganancia respectivamente, y se obtuvieron 34 reglas con la ganancia y 35 con la proporcin de ganancia. Los modelos generados utilizando la ganancia y la proporcin de ganancia son muy similares. Si analizamos los rboles de decisin, vemos que esta diferencia en tamao se origina en la rama Cong_honorarios_medicos=a_favor, donde el atributo Presupuesto_de_educacion genera la mayor ganancia, y el atributo Adop_resolucion_presup genera la mayor proporcin de ganancia.

Si miramos los tamaos de los modelos obtenidos a la luz de los dominios analizados anteriormente, podramos decir que, en este caso, los modelos obtenidos son de mayor tamao porque el sistema analiz una mayor cantidad de datos de entrenamiento. Con lo cual, nuestra hiptesis acerca de que la cantidad de datos de entrenamiento no afecta el tamao de los modelos generados se vera afectada. Podramos hilar ms fino, tomando la nueva hiptesis de que la cantidad de datos de entrenamiento influye en el tamao de los modelos generados, en la medida en que analizamos grandes diferencias en la cantidad de datos de entrenamiento. En cambio, cuando estas diferencias son ms pequeas, la cantidad de datos de entrenamiento no influye. Es decir, si construimos un modelo a partir de 400 datos de entrenamiento, obtenemos rboles de decisin del orden de X; y si construimos un modelo a partir de 40 datos de entrenamiento, obtenemos rboles de decisin del orden de Y, siendo Y menor que X. Sin embargo, si construimos un rbol de decisin a partir de 450 datos de entrenamiento, probablemente el rbol tenga un tamao del orden de X; y si lo construimos a partir de 35 datos de entrenamiento, uno de orden Y.

En cuanto a la proporcin de error sobre los datos de prueba, es de 5.19% en todos los casos. Adems, la probabilidad de clasificar un caso de prueba correctamente es alta para ambas clases.

128

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

5.3.4. Estudio sobre hongos


5.3.4.1. ID3 utilizando la ganancia como criterio de decisin
rbol de decisin
Olor = almendra ingerible Olor = anis ingerible Olor = creosota venenoso Olor = especioso venenoso Olor = hediondo venenoso Olor = mohoso venenoso Olor = ninguno Color_sombrero = amarillo venenoso Color_sombrero = blanco Magulladuras = no ingerible Magulladuras = si venenoso Color_sombrero = canela ingerible Color_sombrero = gris ingerible Color_sombrero = marron Sup_tronco_arriba_anillo = escamosa ingerible Sup_tronco_arriba_anillo = fibrosa ingerible Sup_tronco_arriba_anillo = sedosa venenoso Sup_tronco_arriba_anillo = suave ingerible Color_sombrero = piel Forma_sombrero = abotonada ingerible Forma_sombrero = acampanada venenoso Forma_sombrero = chata ingerible Forma_sombrero = convexa ingerible Color_sombrero = rojo ingerible Color_sombrero = rosa Color_esporas = blanca ingerible Color_esporas = verde venenoso Color_sombrero = verde ingerible Color_sombrero = violeta ingerible Olor = pescado venenoso Olor = punzante Venenoso

Reglas de decisin
Regla 0 SI Olor = almendra ENTONCES Tipo_Hongo = ingerible Resultados Magdalena Servente 129

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Regla 1 SI Olor = anis ENTONCES Tipo_Hongo = ingerible Regla 2 SI Olor = creosota ENTONCES Tipo_Hongo = venenoso Regla 3 SI Olor = especioso ENTONCES Tipo_Hongo = venenoso Regla 4 SI Olor = hediondo ENTONCES Tipo_Hongo = venenoso Regla 5 SI Olor = mohoso ENTONCES Tipo_Hongo = venenoso Regla 6 SI Olor = ninguno Y Color_sombrero = amarillo ENTONCES Tipo_Hongo = venenoso Regla 7 SI Olor = ninguno Y Color_sombrero = blanco Y Magulladuras = no ENTONCES Tipo_Hongo = ingerible Regla 8 SI Olor = ninguno Y Color_sombrero = blanco Y Magulladuras = si ENTONCES Tipo_Hongo = venenoso Regla 9 SI Olor = ninguno Y Color_sombrero = canela ENTONCES Tipo_Hongo = ingerible Regla 10 SI Olor = ninguno Y Color_sombrero = gris ENTONCES Tipo_Hongo = ingerible Regla 11 SI Olor = ninguno Y Color_sombrero = marron Y Sup_tronco_arriba_anillo = escamosa ENTONCES Tipo_Hongo = ingerible Regla 12 SI Olor = ninguno Y Color_sombrero = marron Y Sup_tronco_arriba_anillo = fibrosa ENTONCES Tipo_Hongo = ingerible Regla 13 SI Olor = ninguno Y Color_sombrero = marron Y Sup_tronco_arriba_anillo = sedosa ENTONCES Tipo_Hongo = venenoso Regla 14 SI Olor = ninguno Y Color_sombrero = marron Y Sup_tronco_arriba_anillo = suave ENTONCES Tipo_Hongo = ingerible Regla 15 SI Olor = ninguno Y Color_sombrero = piel Y Forma_sombrero = abotonada ENTONCES Tipo_Hongo = ingerible 130 Magdalena Servente Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Regla 16 SI Olor = ninguno Y Color_sombrero = piel Y Forma_sombrero = acampanada ENTONCES Tipo_Hongo = venenoso Regla 17 SI Olor = ninguno Y Color_sombrero = piel Y Forma_sombrero = chata ENTONCES Tipo_Hongo = ingerible Regla 18 SI Olor = ninguno Y Color_sombrero = piel Y Forma_sombrero = convexa ENTONCES Tipo_Hongo = ingerible Regla 19 SI Olor = ninguno Y Color_sombrero = rojo ENTONCES Tipo_Hongo = ingerible Regla 20 SI Olor = ninguno Y Color_sombrero = rosa Y Color_esporas = blanca ENTONCES Tipo_Hongo = ingerible Regla 21 SI Olor = ninguno Y Color_sombrero = rosa Y Color_esporas = verde ENTONCES Tipo_Hongo = venenoso Regla 22 SI Olor = ninguno Y Color_sombrero = verde ENTONCES Tipo_Hongo = ingerible Regla 23 SI Olor = ninguno Y Color_sombrero = violeta ENTONCES Tipo_Hongo = ingerible Regla 24 SI Olor = pescado ENTONCES Tipo_Hongo = venenoso Regla 25 SI Olor = punzante ENTONCES Tipo_Hongo = venenoso

Evaluacin de los resultados Clases Ingerible Venenoso Totales Correctos 1403 1293 2696 Errores 0 12 12 Probabilidad 1 0,990804 0,995568

Resultados

Magdalena Servente

131

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

5.3.4.2 ID3. utilizando la proporcin ganancia como criterio de decisin


rbol de decisin
Olor = almendra ingerible Olor = anis ingerible Olor = creosota venenoso Olor = especioso venenoso Olor = hediondo venenoso Olor = mohoso venenoso Olor = ninguno Color_velo = amarillo venenoso Color_velo = blanco Tamao_membrana = ancha Color_esporas = blanca ingerible Color_esporas = marron ingerible Color_esporas = negro ingerible Color_esporas = verde venenoso Tamao_membrana = fina Magulladuras = no Sup_tronco_arriba_anillo = fibrosa ingerible Sup_tronco_arriba_anillo = sedosa venenoso Sup_tronco_arriba_anillo = suave ingerible Magulladuras = si venenoso Color_velo = marron ingerible Color_velo = naranja ingerible Olor = pescado venenoso Olor = punzante venenoso

Reglas de decisin
Regla 0 SI Olor = almendra ENTONCES Tipo_Hongo = ingerible Regla 1 SI Olor = anis ENTONCES Tipo_Hongo = ingerible Regla 2 SI Olor = creosota ENTONCES Tipo_Hongo = Regla 3 SI Olor = especioso ENTONCES Tipo_Hongo = Regla 4 SI Olor = hediondo ENTONCES Tipo_Hongo =

venenoso

venenoso

venenoso

132

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Regla 5 SI Olor = mohoso ENTONCES Tipo_Hongo =

venenoso

Regla 6 SI Olor = ninguno Y Color_velo = amarillo ENTONCES Tipo_Hongo = venenoso Regla 7 SI Olor = ninguno Y Color_velo = blanco Y Tamao_membrana = ancha Y Color_esporas = blanca ENTONCES Tipo_Hongo = ingerible Regla 8 SI Olor = ninguno Y Color_velo = blanco Y Tamao_membrana = ancha Y Color_esporas = marron ENTONCES Tipo_Hongo = ingerible Regla 9 SI Olor = ninguno Y Color_velo = blanco Y Tamao_membrana = ancha Y Color_esporas = negro ENTONCES Tipo_Hongo = ingerible Regla 10 SI Olor = ninguno Y Color_velo = blanco Y Tamao_membrana = ancha Y Color_esporas = verde ENTONCES Tipo_Hongo = venenoso Regla 11 SI Olor = ninguno Y Color_velo = blanco Y Tamao_membrana = fina Y Magulladuras = no Y Sup_tronco_arriba_anillo = fibrosa ENTONCES Tipo_Hongo = ingerible Regla 12 SI Olor = ninguno Y Color_velo = blanco Y Tamao_membrana = fina Y Magulladuras = no Y Sup_tronco_arriba_anillo = sedosa ENTONCES Tipo_Hongo = venenoso Regla 13 SI Olor = ninguno Y Color_velo = blanco Y Tamao_membrana = fina Y Magulladuras = no Y Sup_tronco_arriba_anillo = suave ENTONCES Tipo_Hongo = ingerible Regla 14 SI Olor = ninguno Y Color_velo = blanco Y Tamao_membrana = fina Y Magulladuras = si ENTONCES Tipo_Hongo = venenoso Regla 15 SI Olor = ninguno Y Color_velo = marron ENTONCES Tipo_Hongo = ingerible Regla 16 SI Olor = ninguno Y Color_velo = naranja ENTONCES Tipo_Hongo = ingerible Resultados Magdalena Servente 133

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Regla 17 SI Olor = pescado ENTONCES Tipo_Hongo = Regla 18 SI Olor = punzante ENTONCES Tipo_Hongo =

venenoso

venenoso

Evaluacin de los resultados Clases Ingerible Venenoso Totales Correctos 1403 1305 2708 Errores 0 0 0 Probabilidad 1 1 1

5.3.4.3. Conclusiones
Los resultados obtenidos en este dominio son muy interesantes. Vemos que los rboles de decisin y, a raz de ello las reglas, no son iguales para el caso de la ganancia y de la proporcin de ganancia. Si analizamos los rboles, vemos que en primer trmino, el atributo olor es el que ms informacin brinda tanto utilizando la ganancia como la proporcin de ganancia como medidores de informacin. Pero una vez en el caso de los ejemplos que tienen olor=ninguno, la ganancia considera que el atributo color_sombrero es el que brinda ms informacin, mientras que la proporcin de ganancia considera que el atributo color_velo brinda ms informacin que los dems. Analizando el archivo de log generado por el programa (seccin 4.5.2.1.8) para el caso de los ejemplos que tienen olor=ninguno, tenemos:

Divisin Segn Color_sombrero Color_velo

Ganancia 0,0370 0,02376

Proporcin de ganancia 0,079699 0,2295

He aqu la diferencia en la eleccin de atributos de divisin para ambos medidores de informacin. Si analizamos las caractersticas de los datos, vemos que el atributo color_sombrero toma diez valores distintos, mientras que el atributo Color_velo toma cuatro valores distintos. Recordemos que la ganancia favorece a los atributos con ms valores y esa es la razn por la que se comenz a utilizar la proporcin de ganancia, que promedia o normaliza, el clculo de la ganancia de informacin en un conjunto de datos. Este es un ejemplo claro del porqu de esta tendencia.

A pesar de esta diferencia entre los modelos obtenidos en uno y otro caso, vemos que la proporcin de error en ambos casos es baja. Con lo cual, aunque la ganancia favorezca a los atributos con mayor cantidad de valores posibles, no podemos afirmar que esto influya en gran medida en el anlisis sobre los datos de prueba. Para el clasificador obtenido mediante la proporcin de ganancia no se realizaron errores al clasificar los casos de prueba.
134 Magdalena Servente Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

5.4. RESULTADOS OBTENIDOS CON EL C4.5


A continuacin, se presentan los resultados obtenidos con el sistema C4.5. Se realizaron pruebas sobre los mismos dominios que para el sistema ID3 y para otros dominios que presentan atributos continuos. Al igual que en el caso anterior, se presentan los resultados para el sistema utilizando la ganancia y la proporcin de ganancia para medir la ganancia de informacin en cada paso del algoritmo.

5.4.1. Crditos
5.4.1.1. Utilizando la ganancia como criterio de decisin
rbol de decisin

Otros Creditos = TRES CREDITOS: NO (23.0) Otros Creditos = UN CREDITO: Composicin Familiar = SOLTERO: SI (10.0) Composicin Familiar = CASADO SIN HIJOS: SI Composicin Familiar = CASADO Y UN HIJO: SI Composicin Familiar = CASADO Y DOS HIJOS: Ingreso = ENTRE 451 Y 550: SI (0.0) Ingreso = MAS DE 551: SI (5.0) Ingreso = ENTRE 451 Y 550: Vivienda = ALQUILA: NO (2.0) Vivienda = PROPIA 0 IPVU: SI (2.0) Otros Creditos = DOS CREDITOS: Composicin Familiar = CASADO SIN HIJOS: SI Composicin Familiar = CASADO Y UN HIJO: SI Composicin Familiar = SOLTERO: Vivienda = PROPIA 0 IPVU: SI (6.0) Vivienda = ALQUILA: Ingreso = ENTRE 451 Y 550: SI (2.0) Ingreso = ENTRE 451 Y 550: SI (0.0) Ingreso = MAS DE 551: NO (2.0) Composicin Familiar = CASADO Y DOS HIJOS: Ingreso = ENTRE 451 Y 550: NO (4.0/1.0) Ingreso = ENTRE 451 Y 550: SI (0.0) Ingreso = MAS DE 551: SI (5.0)

(10.0) (10.0)

(9.0) (9.0)

rbol de decisin simplificado

Otros Creditos = UN CREDITO: SI (39.0/3.8) Otros Creditos = DOS CREDITOS: SI (37.0/7.2) Otros Creditos = TRES CREDITOS: NO (23.0/1.3)

Evaluacin de los resultados del rbol de decisin

Evaluacin sobre los datos de entrenamiento:

Resultados

Magdalena Servente

135

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Antes de podar Tamao Errores 25 1 (1.0%)

Despus de podar Tamao Errores 4 7 (7.1%)

Estimacin (12.4%)

Evaluacin sobre los datos de prueba:

Antes de podar Despus de podar Tamao Errores Tamao Errores 25 19 (37.3%) 4 22 (43.1%)

Estimacin (12.4%)

Clasificacin general en los datos de prueba:

Clase SI Clase NO

Clasificado como SI 17 4

Clasificado como NO 18 12

Reglas de decisin

Regla 12 SI Otros Creditos = TRES CREDITOS ENTONCES clase=NO [94.2%] Regla 2 SI Ingreso = ENTRE 451 Y 550 Y Composicin Familiar = CASADO Y DOS HIJOS Y Vivienda = ALQUILA ENTONCES clase=NO [79.4%] Regla 6 SI Ingreso = MAS DE 551 Y Composicin Familiar = SOLTERO Y Vivienda = ALQUILA Y Otros Creditos = DOS CREDITOS ENTONCES clase=NO [50.0%] Regla 1 SI Otros Creditos = UN CREDITO Y clase=SI [90.3%] Regla 11 SI Otros Creditos = DOS CREDITOS ENTONCES clase=SI [80.6%] Regla 13 Clase=SI

136

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Evaluacin de los resultados de las reglas de decisin

Evaluacin sobre los datos de entrenamiento:

Regla Tamao 12 1 2 3 6 4 1 1 11 1 Probadas 99, errores 1 (1.0%)

Error 5.8% 20.6% 50.0% 9.7% 19.4%

Usada 23 4 2 37 33

Errores 0(0.0%) 0(0.0%) 0(0.0%) 0(0.0%) 1(3.0%)

Ventaja 21(21|0) 4(4|0) 2(2|0) 0(0|0) 0(0|0)

Clase NO NO NO SI SI

Evaluacin sobre los datos de prueba:

Regla Tamao Error 12 1 5.8% 2 3 20.6% 6 4 50.0% 1 1 9.7% 11 1 19.4% Probadas 51, errores 18 (35.3%)

Usada 30 2 2 8 9

Errores 18(60.0%) 0(0.0%) 0(0.0%) 0(0.0%) 0(0.0%)

Ventaja -8(10|18) 2(2|0) 2(2|0) 0(0|0) 0(0|0)

Clase NO NO NO SI SI

Clasificacin general de los datos de prueba:

Clase SI Clase NO

Clasificado como SI 17 0

Clasificado como NO 18 16

5.4.1.2. Utilizando la proporcin de ganancia como criterio de decisin


rbol de decisin

Otros Creditos = TRES CREDITOS: NO (23.0) Otros Creditos = UN CREDITO: Composicin Familiar = SOLTERO: SI (10.0) Composicin Familiar = CASADO SIN HIJOS: SI Composicin Familiar = CASADO Y UN HIJO: SI Composicin Familiar = CASADO Y DOS HIJOS: Vivienda = PROPIA 0 IPVU: SI (5.0) Vivienda = ALQUILA: Ingreso = ENTRE 451 Y 550: NO (2.0) Ingreso = ENTRE 451 Y 550: SI (0.0) Ingreso = MAS DE 551: SI (2.0) Otros Creditos = DOS CREDITOS: Composicin Familiar = CASADO SIN HIJOS: SI Composicin Familiar = CASADO Y UN HIJO: SI Composicin Familiar = SOLTERO: Vivienda = PROPIA 0 IPVU: SI (6.0) Vivienda = ALQUILA: Ingreso = ENTRE 451 Y 550: SI (2.0) Ingreso = ENTRE 451 Y 550: SI (0.0) Ingreso = MAS DE 551: NO (2.0) Resultados

(10.0) (10.0)

(9.0) (9.0)

Magdalena Servente

137

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Composicin Ingreso Ingreso Ingreso

Familiar = CASADO Y DOS HIJOS: = ENTRE 451 Y 550: NO (4.0/1.0) = ENTRE 451 Y 550: SI (0.0) = MAS DE 551: SI (5.0)

rbol de decisin simplificado

Otros Creditos = UN CREDITO: SI (39.0/3.8) Otros Creditos = DOS CREDITOS: SI (37.0/7.2) Otros Creditos = TRES CREDITOS: NO (23.0/1.3)

Evaluacin de los resultados del rbol de decisin

Evaluacin sobre los datos de entrenamiento:

Antes de podar Tamao Errores 25 1 (1.0%)

Despus de podar Tamao Errores 4 7 (7.1%)

Estimacin (12.4%)

Evaluacin sobre los datos de prueba:

Antes de podar Despus de podar Tamao Errores Tamao Errores 25 19 (37.3%) 4 22 (43.1%)

Estimacin (12.4%)

Clasificacin general de los datos de prueba:

Clase SI Clase NO

Clasificado como SI 17 4

Clasificado como NO 18 12

Reglas de decisin

Regla 12 SI Otros Creditos = TRES CREDITOS ENTONCES clase=NO [94.2%] Regla 2 SI Ingreso = ENTRE 451 Y 550 Y Composicin Familiar = CASADO Y DOS HIJOS Y Vivienda = ALQUILA ENTONCES clase=NO [79.4%] Regla 6 SI Ingreso = MAS DE 551 138 Magdalena Servente Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Y Composicin Familiar = SOLTERO Y Vivienda = ALQUILA Y Otros Creditos = DOS CREDITOS ENTONCES clase=NO [50.0%] Regla 1 SI Otros Creditos = UN CREDITO ENTOCNES clase=SI [90.3%] Regla 11 SI Otros Creditos = DOS CREDITOS ENTONCES clase=SI [80.6%] Regla 13 clase=SI

Evaluacin de los resultados de las reglas de decisin

Evaluacin sobre los datos de entrenamiento:

Regla Tamao 12 1 2 3 6 4 1 1 11 1 Probadas 99, errores 1 (1.0%)

Error 5.8% 20.6% 50.0% 9.7% 19.4%

Usada 23 4 2 37 33

Errores 0(0.0%) 0(0.0%) 0(0.0%) 0(0.0%) 1(3.0%)

Ventaja 21(21|0) 4(4|0) 2(2|0) 0(0|0) 0(0|0)

Clase NO NO NO SI SI

Evaluacin sobre los datos de prueba:

Regla Tamao 12 1 2 3 6 4 1 1 11 1 Probadas 51, errores 18 (35.3%)

Error 5.8% 20.6% 50.0% 9.7% 19.4%

Usada 30 2 2 8 9

Errores Ventaja 18(60.0%) -8(10|18) 0(0.0%) 2(2|0) 0(0.0%) 2(2|0) 0(0.0%) 0(0|0) 0(0.0%) 0(0|0)

Clase NO NO NO SI SI

Clasificacin general de los datos de prueba:

Clase SI Clase NO

Clasificado como SI 17 0

Clasificado como NO 18 16

5.4.1.3. Conclusiones
Los rboles de decisin sin simplificar obtenidos utilizando la ganancia y la proporcin de ganancia se diferencian solamente en la rama de Otros Crditos=UN CRDITO y Composicin Familiar=CASADO Y DOS HIJOS. Al llegar a este punto, se encontr que la mayor ganancia se obtena dividiendo a los
Resultados Magdalena Servente 139

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

datos segn el atributo Ingreso, mientras que la mayor proporcin de ganancia se obtuvo con el atributo Vivienda. A pesar de estas diferencias encontradas en los rboles sin simplificar, los rboles

simplificados son idnticos y tienen un nico nodo, lo cual los hace muy fciles de comprender.

En cuanto a las reglas obtenidas, son idnticas en ambos casos. Cabe destacar que, como el rbol de decisin simplificado es tan simple, el modelo de clasificacin ofrecido en ese caso se entiende ms rpidamente que el conjunto de reglas de decisin.

Analicemos la columna ventaja de la tabla de resultados para las reglas de decisin. Recordemos que la ventaja se expresa de la forma a(b|c) donde b es la cantidad de casos que seran clasificados errneamente por las reglas siguientes, de omitirse esa regla; c es la cantidad de casos que seran clasificados correctamente; y a es el beneficio neto de omitir la regla. En el caso de la regla 12, tenemos un beneficio neto negativo, con lo cual, a pesar de que con los mtodos utilizados por el C4.5 se consider que no era conveniente eliminarla, de utilizar este modelo para clasificar nuevos casos, debera analizarse la posibilidad de no tener esta regla en cuenta y trabajar con un modelo ms simple.

En cuanto al valor E asociado, en el rbol original representa la cantidad de casos cubiertos por una hoja que pertenece a una clase diferente de la indicada por la misma. Mientras que en el caso del rbol podado, E es la cantidad de errores predichos, segn la distribucin binomial, en dicha hoja si un conjunto de N nuevos casos fuesen evaluados por el rbol. Recordemos que los valores E tienen especial importancia, ya que el estimador del xito del modelo obtenido se calcula realizando la sumatoria de todos los valores E y dividindola por la cantidad de casos de entrenamiento. En este caso, la estimacin del xito del modelo es de un 12.4%.

5.4.2. Cardiologa
5.4.2.1. Utilizando la ganancia como criterio de decisin
rbol de decisin

Duracin del Angor = MENOS DE 30 MIN: NO (33.0/1.0) Duracin del Angor = MAS DE 30 MIN: Dolor de Pecho de Angor = TIPICO: SI (11.0/1.0) Dolor de Pecho de Angor = AUSENTE: NO (11.0) Dolor de Pecho de Angor = ATIPICO: Irradiacin del Angor = SI: SI (5.0) Irradiacin del Angor = NO: Respuesta Vasodilatadora = POSITIVO: SI (2.0) Respuesta Vasodilatadora = NEGATIVO: NO (2.0)

Evaluacin de los resultados del rbol de decisin


140 Magdalena Servente Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Evaluacin sobre los datos de entrenamiento:

Antes de podar Tamao Errores 10 2 (3.1%)

Despus de podar Tamao Errores 10 2 (3.1%)

Estimacin (14.9%)

Evaluacin sobre los datos de prueba:

Antes de podar Tamao Errores 10 2 (6.5%)

Despus de podar Tamao Errores 10 2 (6.5%)

Estimacin (14.9%)

Clasificacin general en los datos de prueba:

Clase SI Clase NO

Clasificado como SI 8 1

Clasificado como NO 1 21

Reglas de decisin

Regla 2 SI Dolor de Pecho de Angor = TIPICO Y Duracin del Angor = MAS DE 30 MIN ENTONCES clase=SI [77.7%] Regla 3 SI Dolor de Pecho de Angor = ATIPICO Y Irradiacin del Angor = SI Y Duracin del Angor = MAS DE 30 MIN ENTONCES clase=SI [75.8%] Regla 4 SI Dolor de Pecho de Angor = ATIPICO Y Duracin del Angor = MAS DE 30 MIN Y Respuesta Vasodilatadora = POSITIVO ENTONCES clase=SI [75.8%] Regla 6 SI Dolor de Pecho de Angor = AUSENTE ENTONCES clase=NO [93.9%] Regla 1 SI Duracin del Angor = MENOS DE 30 MIN ENTONCES clase=NO [92.2%] Regla 5 SI Dolor de Pecho de Angor = ATIPICO Y Irradiacin del Angor = NO Y Respuesta Vasodilatadora = NEGATIVO ENTONCES clase=NO [75.8%] Regla 7 Clase=NO

Resultados

Magdalena Servente

141

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Evaluacin de los resultados de las reglas de decisin

Evaluacin sobre los datos de entrenamiento:

Regla Tamao 2 2 3 3 4 3 6 1 1 1 5 3 Probadas 64, errores 2 (3.1%)

Error 22.3% 24.2% 24.2% 6.1% 7.8% 24.2%

Usada 11 5 2 22 22 2

Errores 1(9.1%) 0(0.0%) 0(0.0%) 0(0.0%) 1(4.5%) 0(0.0%)

Ventaja 9(10|1) 2(2|0) 2(2|0) 0(0|0) 0(0|0) 0(0|0)

Clase SI SI SI NO NO NO

Evaluacin sobre los datos de prueba:

Regla Tamao 2 2 3 3 4 3 6 1 1 1 5 3 Probadas 31, errores 2 (6.5%)

Error 22.3% 24.2% 24.2% 6.1% 7.8% 24.2%

Usada 3 3 3 10 11 1

Errores 0(0.0%) 0(0.0%) 1(33.3%) 0(0.0%) 1(9.1%) 0(0.0%)

Ventaja 3(3|0) 2(2|0) 1(2|1) 0(0|0) 0(0|0) 0(0|0)

Clase SI SI SI NO NO NO

Clasificacin general en los datos de prueba:

Clase SI Clase NO

Clasificado como SI 8 1

Clasificado como NO 1 21

5.4.2.2. Utilizando la proporcin ganancia como criterio de decisin


rbol de decisin

Duracin del Angor = MENOS DE 30 MIN: NO (33.0/1.0) Duracin del Angor = MAS DE 30 MIN: Dolor de Pecho de Angor = TIPICO: SI (11.0/1.0) Dolor de Pecho de Angor = AUSENTE: NO (11.0) Dolor de Pecho de Angor = ATIPICO: Respuesta Vasodilatadora = POSITIVO: SI (5.0) Respuesta Vasodilatadora = NEGATIVO: Irradiacin del Angor = SI: SI (2.0) Irradiacin del Angor = NO: NO (2.0)

Evaluacin de los resultados del rbol de decisin

142

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Evaluacin sobre los datos de entrenamiento:

Antes de podar Tamao Errores 10 2 (3.1%)

Despus de podar Tamao Errores 10 2 (3.1%)

Estimacin (14.9%)

Evaluacin sobre los datos de prueba:

Antes de podar Tamao Errores 10 2 (6.5%)

Despus de podar Tamao Errores 10 2 (6.5%)

Estimacin (14.9%)

Clasificacin general en los datos de prueba:

Clase SI Clase NO

Clasificado como SI 8 1

Clasificado como NO 1 21

Reglas de decisin

Regla 2 SI Dolor de Pecho de Angor = TIPICO Y Duracin del Angor = MAS DE 30 MIN ENTONCES clase=SI [77.7%] Regla 3 SI Dolor de Pecho de Angor = ATIPICO Y Duracin del Angor = MAS DE 30 MIN Y Respuesta Vasodilatadora = POSITIVO ENTONCES clase=SI [75.8%] Regla 4 SI Dolor de Pecho de Angor = ATIPICO Y Irradiacin del Angor = SI Y Duracin del Angor = MAS DE 30 MIN ENTONCES clase=SI [75.8%] Regla 6 SI Dolor de Pecho de Angor = AUSENTE ENTONCES clase=NO [93.9%] Regla 1 SI Duracin del Angor = MENOS DE 30 MIN ENTONCES clase=NO [92.2%] Regla 5 SI Dolor de Pecho de Angor = ATIPICO Y Irradiacin del Angor = NO Y Respuesta Vasodilatadora = NEGATIVO ENTONCES clase=NO [75.8%] Regla 7 Clase= NO

Resultados

Magdalena Servente

143

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Evaluacin de los resultados de las reglas de decisin

Evaluacin sobre los datos de entrenamiento:

Regla Tamao 2 2 3 3 4 3 6 1 1 1 5 3 Probadas 64, errores 2 (3.1%)

Error 22.3% 24.2% 24.2% 6.1% 7.8% 24.2%

Usada 11 5 2 22 22 2

Errores 1(9.1%) 0(0.0%) 0(0.0%) 0(0.0%) 1(4.5%) 0(0.0%)

Ventaja 9(10|1) 2(2|0) 2(2|0) 0(0|0) 0(0|0) 0(0|0)

Clase SI SI SI NO NO NO

Evaluacin sobre los datos de prueba:

Regla Tamao 2 2 3 3 4 3 6 1 1 1 5 3 Probadas 31, errores 2 (6.5%)

Error 22.3% 24.2% 24.2% 6.1% 7.8% 24.2%

Usada 3 4 2 10 11 1

Errores 0(0.0%) 1(25.0%) 0(0.0%) 0(0.0%) 1(9.1%) 0(0.0%)

Ventaja 3(3|0) 1(2|1) 2(2|0) 0(0|0) 0(0|0) 0(0|0)

Clase SI SI SI NO NO NO

Clasificacin general en los datos de prueba:

Clase SI Clase NO

Clasificado como SI 8 1

Clasificado como NO 1 21

5.4.2.3. Conclusiones
En este caso, tanto los rboles de decisin como las reglas que derivan de ellos, difieren entre la ganancia y la proporcin de ganancia. Esta diferencia surge del hecho de que frente a una misma situacin (Duracin del Angor=MAS DE 30 MIN Y Dolor de Pecho de Angor=Atipico), la ganancia y la proporcin de ganancia son distintas. Se obtuvo mejor proporcin de ganancia con el atributo Respuesta Vasodilatadora, y mejor ganancia con el atributo Irradiacin de Pecho de Angor. No obstante, al igual que en el caso del dominio de Estudio sobre Hongos utilizando el ID3, esta diferencia no influye en las proporciones de error de los modelos.

Podemos encontrar la misma diferencia en las reglas de decisin. Y, al igual que en el caso anterior, no influye en gran medida en la performance de los clasificadores sobre los datos de prueba

144

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Notemos que en este caso los rboles de decisin no han sido podados. Dada su simplicidad, esto no fue necesario.

5.4.3. Votaciones
5.4.3.1. Utilizando la ganancia como criterio de decisin
rbol de decisin

cong_honorarios_medicos = en_contra: democrata (168.0/1.0) cong_honorarios_medicos = a_favor: reduccion_corp_Synfuels = en_contra: republicano (97.0/3.0) reduccion_corp_Synfuels = desconocido: republicano (4.0) reduccion_corp_Synfuels = a_favor: export_sin_impuestos = a_favor: democrata (2.0) export_sin_impuestos = desconocido: republicano (1.0) export_sin_impuestos = en_contra: presupuesto_de_educacin = a_favor: republicano (13.0/2.0) presupuesto_de_educacin = en_contra: democrata (5.0/2.0) presupuesto_de_educacin = desconocido: democrata (1.0) cong_honorarios_medicos = desconocido: misil_mx = a_favor: democrata (4.0/1.0) misil_mx = en_contra: democrata (3.0) misil_mx = desconocido: republicano (2.0)

rbol de decisin simplificado

cong_honorarios_medicos = a_favor: republicano (123.0/13.9) cong_honorarios_medicos = en_contra: democrata (168.0/2.6) cong_honorarios_medicos = desconocido: misil_mx = a_favor: democrata (4.0/2.2) misil_mx = en_contra: democrata (3.0/1.1) misil_mx = desconocido: republicano (2.0/1.0)

Evaluacin de los resultados del rbol de decisin

Evaluacin sobre los datos de entrenamiento:

Antes de podar Tamao Errores 16 9 (3.0%)

Despus de podar Tamao Errores 7 13 (4.3%)

Estimacin (6.9%)

Evaluacin sobre los datos de prueba:

Antes de podar
Resultados

Despus de podar
Magdalena Servente 145

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Tamao 16

Errores 7 (5.2%)

Tamao 7

Errores 4 (3.0%)

Estimacin (6.9%)

Clasificacin general en los datos de prueba:

Clase demcrata Clase republicano

Clasificado como demcrata 80 1

Clasificado como republicano 3 51

Reglas de decisin

Regla 7 SI cong_honorarios_medicos = en_contra ENTONCES clase=democrata [98.4%] Regla 3 SI reduccion_corp_Synfuels = a_favor Y presupuesto_de_educacin = en_contra ENTONCES clase=democrata [94.3%] Regla 9 SI cong_honorarios_medicos = desconocido Y misil_mx = en_contra ENTONCES clase=democrata [63.0%] Regla 5 SI cong_honorarios_medicos = a_favor ENTONCES clase=republicano [88.7%] Regla 10 SI cong_honorarios_medicos = desconocido Y misil_mx = desconocido ENTONCES clase=republicano [50.0%] Regla 11 clase=democrata

Evaluacin de los resultados de las reglas de decisin

Evaluacin sobre los datos de entrenamiento:

Regla Tamao 7 1 3 2 9 2 5 1 10 2 Probadas 300, errores 11 (3.7%)

Error 1.6% 5.7% 37.0% 11.3% 50.0%

Usada 168 8 2 117 2

Errores 1(0.6%) 2(25.0%) 0(0.0%) 7(6.0%) 0(0.0%)

Ventaja 0(0|0) 2(4|2) 0(0|0) 103(110|7) 2(2|0)

Clase Demcrata Demcrata Demcrata Republicano Republicano

Evaluacin sobre los datos de prueba:

146

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Regla Tamao 7 1 3 2 5 1 Probadas 135, errores 5 (3.7%)

Error 1.6% 5.7% 11.3%

Usada 79 3 53

Errores 1(1.3%) 1(33.3%) 3(5.7%)

Ventaja 0(0|0) -1(0|1) 47(50|3)

Clase Demcrata Demcrata Republicano

Clasificacin general en los datos de prueba:

Clase demcrata Clase republicano

Clasificado como demcrata 80 2

Clasificado como republicano 3 50

5.4.3.2. Utilizando la proporcin ganancia como criterio de decisin


rbol de decisin

cong_honorarios_medicos = a_favor: reduccion_corp_Synfuels = en_contra: republicano (97.0/3.0) reduccion_corp_Synfuels = desconocido: republicano (4.0) reduccion_corp_Synfuels = a_favor: export_sin_impuestos = a_favor: democrata (2.0) export_sin_impuestos = desconocido: republicano (1.0) export_sin_impuestos = en_contra: presupuesto_de_educacin = a_favor: republicano (13.0/2.0) presupuesto_de_educacin = en_contra: democrata (5.0/2.0) presupuesto_de_educacin = desconocido: democrata (1.0) cong_honorarios_medicos = en_contra: adop_resolucion_presup = a_favor: democrata (151.0) adop_resolucion_presup = desconocido: democrata (1.0) adop_resolucion_presup = en_contra: presupuesto_de_educacin = a_favor: democrata (9.0) presupuesto_de_educacin = en_contra: democrata (6.0) presupuesto_de_educacin = desconocido: republicano (1.0) cong_honorarios_medicos = desconocido: particip_proy_agua = a_favor: democrata (4.0) particip_proy_agua = en_contra: democrata (0.0) particip_proy_agua = desconocido: misil_mx = a_favor: democrata (3.0/1.0) misil_mx = en_contra: republicano (0.0) misil_mx = desconocido: republicano (2.0)

rbol de decisin simplificado

cong_honorarios_medicos = a_favor: republicano (123.0/13.9) cong_honorarios_medicos = en_contra: democrata (168.0/2.6) cong_honorarios_medicos = desconocido: misil_mx = a_favor: democrata (4.0/2.2) misil_mx = en_contra: democrata (3.0/1.1) misil_mx = desconocido: republicano (2.0/1.0)

Evaluacin de los resultados del rbol de decisin

Resultados

Magdalena Servente

147

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Evaluacin sobre los datos de entrenamiento:

Antes de podar Tamao Errores 25 8 (2.7%)

Despus de podar Tamao Errores 7 13 (4.3%)

Estimacin (6.9%)

Evaluacin sobre los datos de prueba:

Antes de podar Tamao Errores 25 7 (5.2%)

Despus de podar Tamao Errores 7 4 (3.0%)

Estimacin (6.9%)

Clasificacin general en los datos de prueba:

Clase demcrata Clase republicano

Clasificado como demcrata 80 1

Clasificado como republicano 3 51

Reglas de decisin

Regla 1 SI reduccion_corp_Synfuels = a_favor Y export_sin_impuestos = a_favor ENTONCES clase=democrata [97.5%] Regla 11 SI particip_proy_agua = a_favor Y cong_honorarios_medicos = desconocido ENTONCES clase=democrata [70.7%] Regla 6 SI cong_honorarios_medicos = a_favor Y reduccion_corp_Synfuels = en_contra ENTONCES clase=republicano [94.8%] Regla 2 SI cong_honorarios_medicos = a_favor Y presupuesto_de_educacin = a_favor Y export_sin_impuestos = en_contra ENTONCES clase=republicano [94.0%] Regla 10 SI adop_resolucion_presup = en_contra Y presupuesto_de_educacin = desconocido ENTONCES clase=republicano [82.0%] Regla 13 SI cong_honorarios_medicos = desconocido Y misil_mx = desconocido ENTONCES clase=republicano [50.0%]

Regla 14 clase=democrata

148

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Evaluacin de los resultados de las reglas de decisin

Evaluacin sobre los datos de entrenamiento:

Regla Tamao 1 2 11 2 6 2 2 3 10 2 13 2 Probadas 300, errores 9 (3.0%)

Error 2.5% 29.3% 5.2% 6.0% 18.0% 50.0%

Usada 54 3 97 15 3 2

Errores 0(0.0%) 0(0.0%) 3(3.1%) 2(13.3%) 0(0.0%) 0(0.0%)

Ventaja 0(0|0) 0(0|0) 21(23|2) 11(13|2) 3(3|0) 2(2|0)

Clase Demcrata Demcrata Republicano Republicano Republicano Republicano

Evaluacin sobre los datos de prueba:

Regla Tamao 1 2 11 2 6 2 2 3 10 2 Probadas 135, errores 7 (5.2%)

Error 2.5% 29.3% 5.2% 6.0% 18.0%

Usada 24 1 41 8 2

Errores 2(8.3%) 0(0.0%) 0(0.0%) 3(37.5%) 0(0.0%)

Ventaja 0(0|0) 0(0|0) 6(6|0) 2(5|3) 2(2|0)

Clase Demcrata Demcrata Republicano Republicano Republicano

Clasificacin general en los datos de prueba:

Clase demcrata Clase republicano

Clasificado como demcrata 80 4

Clasificado como republicano 3 48

5.4.3.3. Conclusiones
Los resultados obtenidos en este dominio con el C4.5 parecen satisfactorios a simple vista, ya que la proporcin de error no supera el 6% en ninguno de los casos. En cuanto a los rboles de decisin simplificados son iguales para la ganancia y para la proporcin de ganancia. No obstante, en los rboles sin simplificar hay una diferencia de tamao: el rbol obtenido con la ganancia es de tamao menor que el obtenido con la proporcin de ganancia. Esto se debe a que en la rama

cong_honorarios_medicos=desconocido en la ganancia se opt por dividir al conjunto segn el atributo misil_mx, y en la proporcin de ganancia se los dividi segn particip_proy_agua y luego en uno de los casos por misil_mx. Esta diferencia de tamao no influye en la performance de los rboles. Es decir, nos encontramos ante dos rboles de igual porcentaje de error, pero de distinto tamao. Con lo cual, de tener que optar entre ambos, eligiramos el obtenido con la ganancia.

Resultados

Magdalena Servente

149

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

En cuanto a las reglas de decisin, las primeras, derivadas utilizando la ganancia, tienen una proporcin de error similar a la de los rboles y son menos que las obtenidas con la proporcin de ganancia. Estas segundas, tienen una mayor proporcin de error. Nuevamente, en este caso, eligiramos las obtenidas utilizando la ganancia.

5.4.4. Estudio sobre hongos


5.4.4.1. Utilizando la ganancia como criterio de decisin
rbol de decisin

Olor = almendra: ingerible (168.0) Olor = anis: ingerible (178.0) Olor = creosota: venenoso (37.0) Olor = pescado: venenoso (489.0) Olor = hediondo: venenoso (1348.0) Olor = mohoso: venenoso (36.0) Olor = punzante: venenoso (164.0) Olor = especioso: venenoso (516.0) Olor = ninguno: Color_sombrero = canela: ingerible (28.0) Color_sombrero = gris: ingerible (716.0) Color_sombrero = verde: ingerible (14.0) Color_sombrero = violeta: ingerible (9.0) Color_sombrero = rojo: ingerible (483.0) Color_sombrero = amarillo: venenoso (10.0) Color_sombrero = marron: Sup_tronco_arriba_anillo = fibrosa: ingerible (87.0) Sup_tronco_arriba_anillo = escamosa: ingerible (13.0) Sup_tronco_arriba_anillo = sedosa: venenoso (3.0) Sup_tronco_arriba_anillo = suave: ingerible (744.0) Color_sombrero = piel: Tipo_anillo = tejido: ingerible (0.0) Tipo_anillo = evanescente: ingerible (41.0) Tipo_anillo = resplandescient: ingerible (0.0) Tipo_anillo = grande: ingerible (0.0) Tipo_anillo = ninguno: ingerible (0.0) Tipo_anillo = pendiente: venenoso (2.0) Tipo_anillo = cubierto: ingerible (0.0) Tipo_anillo = zonal: ingerible (0.0) Color_sombrero = rosa: Color_esporas = negro: ingerible (0.0) Color_esporas = marron: ingerible (0.0) Color_esporas = piel: ingerible (0.0) Color_esporas = chocolate: ingerible (0.0) Color_esporas = verde: venenoso (2.0) Color_esporas = naranja: ingerible (0.0) Color_esporas = violeta: ingerible (0.0) Color_esporas = blanca: ingerible (49.0) Color_esporas = amarillo: ingerible (0.0) Color_sombrero = blanco: Habitat = pastos: ingerible (259.0) Habitat = hojas: venenoso (1.0) Habitat = praderas: venenoso (3.0) Habitat = caminos: ingerible (0.0) Habitat = urbano: ingerible (0.0) Habitat = basura: ingerible (0.0) Habitat = bosque: ingerible (16.0)

150

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

rbol de decisin simplificado:

Olor = almendra: ingerible (168.0/1.4) Olor = anis: ingerible (178.0/1.4) Olor = creosota: venenoso (37.0/1.4) Olor = pescado: venenoso (489.0/1.4) Olor = hediondo: venenoso (1348.0/1.4) Olor = mohoso: venenoso (36.0/1.4) Olor = punzante: venenoso (164.0/1.4) Olor = especioso: venenoso (516.0/1.4) Olor = ninguno: Color_sombrero = marron: ingerible (847.0/5.1) Color_sombrero = canela: ingerible (28.0/1.4) Color_sombrero = gris: ingerible (716.0/1.4) Color_sombrero = verde: ingerible (14.0/1.3) Color_sombrero = violeta: ingerible (9.0/1.3) Color_sombrero = rojo: ingerible (483.0/1.4) Color_sombrero = amarillo: venenoso (10.0/1.3) Color_sombrero = piel: Tipo_anillo = tejido: ingerible (0.0) Tipo_anillo = evanescente: ingerible (41.0/1.4) Tipo_anillo = resplandescient: ingerible (0.0) Tipo_anillo = grande: ingerible (0.0) Tipo_anillo = ninguno: ingerible (0.0) Tipo_anillo = pendiente: venenoso (2.0/1.0) Tipo_anillo = cubierto: ingerible (0.0) Tipo_anillo = zonal: ingerible (0.0) Color_sombrero = rosa: Color_esporas = negro: ingerible (0.0) Color_esporas = marron: ingerible (0.0) Color_esporas = piel: ingerible (0.0) Color_esporas = chocolate: ingerible (0.0) Color_esporas = verde: venenoso (2.0/1.0) Color_esporas = naranja: ingerible (0.0) Color_esporas = violeta: ingerible (0.0) Color_esporas = blanca: ingerible (49.0/1.4) Color_esporas = amarillo: ingerible (0.0) Color_sombrero = blanco: Habitat = pastos: ingerible (259.0/1.4) Habitat = hojas: venenoso (1.0/0.8) Habitat = praderas: venenoso (3.0/1.1) Habitat = caminos: ingerible (0.0) Habitat = urbano: ingerible (0.0) Habitat = basura: ingerible (0.0) Habitat = bosque: ingerible (16.0/1.3)

Evaluacin de los resultados del rbol de decisin

Evaluacin sobre los datos de entrenamiento:

Antes de podar Tamao Errores 48 0(0.0%)

Despus de podar Tamao Errores 44 3 (0.1%)

Estimacin (0.6%)

Evaluacin sobre los datos de prueba:

Antes de podar Tamao Errores 48 12 (0.4%)


Resultados

Despus de podar Tamao Errores 44 25 (0.9%)


Magdalena Servente

Estimacin (0.6%)
151

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Evaluacin general sobre los datos de prueba:

Clase ingerible Clase venenoso

Clasificado como ingerible 1403 25

Clasificado como venenoso 0 1280

Reglas de decisin

Regla 5 SI Olor = hediondo ENTONCES Tipo_hongo = Regla 23 SI Olor = especioso ENTONCES Tipo_hongo = Regla 4 SI Olor = pescado ENTONCES Tipo_hongo = Regla 9 SI Color_sombrero = marron Y Sup_tronco_arriba_anillo = sedosa ENTONCES Tipo_hongo = venenoso [99.6%] Regla 22 SI Olor = punzante ENTONCES Tipo_hongo = Regla 3 SI Olor = creosota ENTONCES Tipo_hongo = Regla 6 SI Olor = mohoso ENTONCES Tipo_hongo = venenoso [96.2%] venenoso [96.3%] venenoso [99.7%] venenoso [99.9%]

venenoso

[99.7%]

venenoso

[99.2%]

Regla 21 SI Color_sombrero = amarillo Y Olor = ninguno ENTONCES Tipo_hongo = venenoso Regla 14 SI Color_esporas = verde ENTONCES Tipo_hongo = venenoso Regla 2 SI Olor = anis ENTONCES Tipo_hongo = Regla 1 SI Olor = almendra ENTONCES Tipo_hongo = Regla 11 SI Olor = ninguno ENTONCES Tipo_hongo = Regla 24 Tipo_hongo = ingerible ingerible ingerible

[87.1%]

[82.0%]

[99.2%]

[99.2%]

ingerible

[99.0%]

152

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Evaluacin de los resultados

Evaluacin sobre los datos de entrenamiento:

Regla Tamao 5 1 23 1 4 1 9 2 22 1 3 1 6 1 21 2 14 1 2 1 1 1 11 1 Probadas 5416, errores 1 (0.00%)

Error 0.10% 0.30% 0.30% 0.40% 0.80% 3.70% 3.80% 12.90% 18.00% 0.80% 0.80% 1.00%

Usada 1348 516 489 15 164 37 24 10 7 178 168 2460

Errores 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 1(0.00%)

Ventaja 1228(1228|0) 400(400|0) 372(372|0) 3(3|0) 164(164|0) 37(37|0) 24(24|0) 10(10|0) 7(7|0) 0(0|0) 0(0|0) 0(0|0)

Clase venenoso venenoso venenoso venenoso venenoso venenoso venenoso venenoso venenoso ingerible ingerible ingerible

Evaluacin sobre los datos de prueba:

Regla Tamao 5 1 23 1 4 1 9 2 22 1 3 1 21 2 14 1 2 1 1 1 11 1 Probadas 2708, errores 7 (0.30%)

Error 0.10% 0.30% 0.30% 0.40% 0.80% 3.70% 12.90% 18.00% 0.80% 0.80% 1.00%

Usada 812 60 87 13 92 155 14 65 222 232 956

Errores 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 7(0.70%)

Ventaja 788(788|0) 32(32|0) 60(60|0) 13(13|0) 92(92|0) 155(155|0) 14(14|0) 65(65|0) 0(0|0) 0(0|0) 0(0|0)

Clase venenoso venenoso venenoso venenoso venenoso venenoso venenoso venenoso ingerible ingerible ingerible

Clasificacin general en los datos de prueba:

Clase ingerible Clase venenoso

Clasificado como ingerible 1403 7

Clasificado como venenoso 0 1298

5.4.4.2. Utilizando la proporcin ganancia como criterio de decisin


rbol de decisin

Olor = almendra: ingerible (168.0) Resultados Magdalena Servente 153

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Olor = anis: ingerible (178.0) Olor = creosota: venenoso (37.0) Olor = pescado: venenoso (489.0) Olor = hediondo: venenoso (1348.0) Olor = mohoso: venenoso (36.0) Olor = punzante: venenoso (164.0) Olor = especioso: venenoso (516.0) Olor = ninguno: Tamao_membrana = ancha: Color_esporas = negro: ingerible (847.0) Color_esporas = marron: ingerible (921.0) Color_esporas = piel: ingerible (45.0) Color_esporas = chocolate: ingerible (0.0) Color_esporas = verde: venenoso (7.0) Color_esporas = naranja: ingerible (40.0) Color_esporas = violeta: ingerible (0.0) Color_esporas = blanca: ingerible (439.0) Color_esporas = amarillo: ingerible (43.0) Tamao_membrana = fina: ColorTronco_arriba_anillo = marron: ingerible (0.0) ColorTronco_arriba_anillo = piel: ingerible (0.0) ColorTronco_arriba_anillo = canela: ingerible (0.0) ColorTronco_arriba_anillo = gris: ingerible (0.0) ColorTronco_arriba_anillo = naranja: ingerible (0.0) ColorTronco_arriba_anillo = rosa: ingerible (0.0) ColorTronco_arriba_anillo = rojo: ingerible (0.0) ColorTronco_arriba_anillo = amarillo: venenoso (8.0) ColorTronco_arriba_anillo = blanco: Sup_tronco_arriba_anillo = fibrosa: ingerible (21.0) Sup_tronco_arriba_anillo = escamosa: ingerible (0.0) Sup_tronco_arriba_anillo = sedosa: venenoso (5.0) Sup_tronco_arriba_anillo = suave: Poblacion = abundante: ingerible (0.0) Poblacion = agrupada: venenoso (1.0) Poblacion = numerosa: ingerible (0.0) Poblacion = dispersa: ingerible (0.0) Poblacion = varios: ingerible (63.0) Poblacion = solitaria: ingerible (40.0)

rbol de decisin simplificado

Olor = almendra: ingerible (168.0/1.4) Olor = anis: ingerible (178.0/1.4) Olor = creosota: venenoso (37.0/1.4) Olor = pescado: venenoso (489.0/1.4) Olor = hediondo: venenoso (1348.0/1.4) Olor = mohoso: venenoso (36.0/1.4) Olor = punzante: venenoso (164.0/1.4) Olor = especioso: venenoso (516.0/1.4) Olor = ninguno: Tamao_membrana = ancha: Color_esporas = negro: ingerible (847.0/1.4) Color_esporas = marron: ingerible (921.0/1.4) Color_esporas = piel: ingerible (45.0/1.4) Color_esporas = chocolate: ingerible (0.0) Color_esporas = verde: venenoso (7.0/1.3) Color_esporas = naranja: ingerible (40.0/1.4) Color_esporas = violeta: ingerible (0.0) Color_esporas = blanca: ingerible (439.0/1.4) Color_esporas = amarillo: ingerible (43.0/1.4) Tamao_membrana = fina: Sup_tronco_arriba_anillo = fibrosa: ingerible (21.0/1.3) Sup_tronco_arriba_anillo = escamosa: venenoso (8.0/1.3) Sup_tronco_arriba_anillo = sedosa: venenoso (5.0/1.2) Sup_tronco_arriba_anillo = suave: ingerible (104.0/2.6)

154

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Evaluacin de los resultados del rbol de decisin

Evaluacin sobre los datos de entrenamiento:

Antes de podar Tamao Errores 40 0(0.0%)

Despus de podar Tamao Errores 25 1 (0.0%)

Estimacin (0.5%)

Evaluacin sobre los datos de prueba:

Antes de podar Tamao Errores 40 0 (0.0%)

Despus de podar Tamao Errores 25 7 (0.3%)

Estimacin (0.5%)

Evaluacin general sobre los datos de prueba:

Clase ingerible Clase venenoso

Clasificado como ingerible 1403 7

Clasificado como venenoso 0 1298

Reglas de decisin

Regla 5 SI Olor = hediondo ENTONCES Tipo_Hongo = venenoso [99.9%]

Regla 13 SI Tamao_membrana = fina Y Sup_tronco_arriba_anillo = sedosa ENTONCES Tipo_Hongo = venenoso [99.8%] Regla 19 SI Olor = especioso ENTONCES Tipo_Hongo = Regla 4 SI Olor = pescado ENTONCES Tipo_Hongo = Regla 18 SI Olor = punzante ENTONCES Tipo_Hongo = Regla 3 SI Olor = creosota ENTONCES Tipo_Hongo = Regla 6 SI Olor = mohoso ENTONCES Tipo_Hongo = venenoso [96.2%] venenoso [96.3%] venenoso [99.7%]

venenoso

[99.7%]

venenoso

[99.2%]

Regla 17 SI ColorTronco_arriba_anillo = amarillo ENTONCES Tipo_Hongo = venenoso [84.1%] Resultados Magdalena Servente 155

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Regla 10 SI Color_esporas = verde ENTONCES Tipo_Hongo = venenoso Regla 9 SI Olor = ninguno Y Tamao_membrana = ancha ENTONCES Tipo_Hongo = ingerible

[82.0%]

[99.6%]

Regla 15 SI Olor = ninguno Y Sup_tronco_arriba_anillo = suave ENTONCES Tipo_Hongo = ingerible [99.5%] Regla 12 SI Olor = ninguno Y Sup_tronco_arriba_anillo = fibrosa ENTONCES Tipo_Hongo = ingerible [99.4%] Regla 2 SI Olor = anis ENTONCES Tipo_Hongo = Regla 1 SI Olor = almendra ENTONCES Tipo_Hongo = Regla 20 Tipo_Hongo = ingerible ingerible [99.2%] ingerible [99.2%]

Evaluacin de los resultados de las reglas de decisin

Evaluacin sobre los datos de entrenamiento:

Regla Tamao 5 1 13 2 19 1 4 1 18 1 3 1 6 1 17 1 10 1 9 2 15 2 12 2 2 1 1 1 Probadas 5416, errores 1 (0.00%)

Error 0.10% 0.20% 0.30% 0.30% 0.80% 3.70% 3.80% 15.90% 18.00% 0.40% 0.50% 0.60% 0.80% 0.80%

Usada 1348 497 261 252 164 37 36 8 7 2335 104 21 178 168

Errores 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 1(1.00%) 0(0.00%) 0(0.00%) 0(0.00%)

Ventaja 1088(1088|0) 5(5|0) 261(261|0) 252(252|0) 164(164|0) 37(37|0) 36(36|0) 8(8|0) 7(7|0) 0(0|0) 0(0|0) 0(0|0) 0(0|0) 0(0|0)

Clase venenoso venenoso venenoso venenoso venenoso venenoso venenoso venenoso venenoso ingerible ingerible ingerible ingerible ingerible

Evaluacin sobre los datos de prueba:

Regla Tamao Error 5 1 0.10% 13 2 0.20%


156

Usada Errores Ventaja 812 0(0.00%) 784(784|0) 111 0(0.00%) 27(27|0)


Magdalena Servente

Clase venenoso venenoso


Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

19 1 4 1 18 1 3 1 10 1 9 2 15 2 12 2 2 1 1 1 Probadas 2708, errores 7 (0.30%)

0.30% 0.30% 0.80% 3.70% 18.00% 0.40% 0.50% 0.60% 0.80% 0.80%

27 36 92 155 65 881 72 3 222 232

0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 7(9.70%) 0(0.00%) 0(0.00%) 0(0.00%)

27(27|0) 36(36|0) 92(92|0) 155(155|0) 65(65|0) 0(0|0) 0(0|0) 0(0|0) 0(0|0) 0(0|0)

venenoso venenoso venenoso venenoso venenoso ingerible ingerible ingerible ingerible ingerible

Clasificacin general en los datos de prueba:

Clase ingerible Clase venenoso

Clasificado como ingerible 1403 7

Clasificado como venenoso 0 1298

5.4.4.3. Conclusiones
El rbol de decisin obtenido utilizando la ganancia como criterio de decisin es de mayor tamao que el obtenido utilizando la proporcin de ganancia. Esta diferencia se origina por la preferencia de la ganancia por atributos con ms cantidad de valores. Veamos que en la rama Olor=ninguno, el mtodo que utiliz la ganancia dividi los datos segn el atributo color_sombrero que toma diez valores distintos, mientras que el mtodo que utiliz la proporcin de ganancia, dividi los datos segn el atributo Tamao_membrana que tiene dos valores posibles. En este caso, el hecho de que un rbol sea de mayor tamao no favorece la performance del mismo: el segundo rbol, ms pequeo, tuvo una mejor performance en los casos de prueba, ya que clasific solo 7 de ellos errneamente, mientras que el rbol generado con la ganancia clasific 25 errneamente. A pesar de esta diferencia, la estimacin del error sobre futuros casos es muy buena para los dos rboles: del 0.6% para el generado utilizando la ganancia y del 0.5% para el generado utilizando la proporcin de ganancia.

Cabe destacar que en el rbol de decisin generado utilizando la proporcin de ganancia, el subrbol olor=ninguno y tamao_membrana=fina se simplific por una rama hija, que no contiene al atributo por el cual se realiz la primera divisin. Es decir, en el rbol sin simplificar la divisin en el nodo en cuestin se realiz segn el atributo ColorTronco_arriba_anillo; este atributo no aparece en el rbol simplificado.

En cuanto a las reglas de decisin, a pesar de que las primeras fueron obtenidas a partir de un rbol de mayor tamao, son menos que la cantidad de reglas obtenidas a partir del segundo rbol. Sin embargo, la performance sobre los datos de prueba fue igual en ambos casos.

Resultados

Magdalena Servente

157

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

5.4.5. Elita
5.4.5.1. Utilizando la ganancia como criterio de decisin
rbol de decisin

distancia_jupiter <= 0.2 : resonancia > 5.42 : EOS (45.0/1.0) resonancia <= 5.42 : distancia_jupiter <= 0.18 : THEMIS (45.0) distancia_jupiter > 0.18 : KORONIS (24.0) distancia_jupiter > 0.2 : resonancia <= 11.51 : FLORA (103.0/1.0) resonancia > 11.51 : distancia_jupiter <= 0.24 : MARIA (13.0) distancia_jupiter > 0.24 : PHOCAEA (23.0)

Evaluacin de los resultados del rbol de decisin

Evaluacin sobre los datos de entrenamiento:

Antes de podar Tamao Errores 11 2(0.8%)

Despus de podar Tamao Errores 11 2(0.8%)

Estimacin (4.2%)

Evaluacin sobre los datos de prueba:

Antes de podar Tamao Errores 11 0 (0%)

Despus de podar Tamao Errores 11 0(0%)

Estimacin (4.2%)

Evaluacin general:

Clase EOS Clase FLORA Clase KORONIS Clase MARIA Clase PHOCAEA Clase THEMIS

Clasificado Clasificado Clasificado como EOS como como FLORA KORONIS 22 0 0 0 12 0 0 0 7 0 0 0 0 0 0 0 0 0

Clasificado como MARIA 0 0 0 22 0 0

Clasificado como PHOCAEA 0 0 0 0 11 0

Clasificado como THEMIS 0 0 0 0 0 53

158

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Reglas de decisin

Regla 1 SI resonancia <= 5.42 Y distancia_jupiter <= 0.18 ENTONCES Familia = THEMIS Regla 2 SI distancia_jupiter > 0.18 Y distancia_jupiter <= 0.2 ENTONCES Familia = KORONIS Regla 5 SI resonancia > 11.51 Y distancia_jupiter <= 0.24 ENTONCES Familia = MARIA [89.9%] Regla 6 SI resonancia > 11.51 Y distancia_jupiter > 0.24 ENTONCES Familia = PHOCAEA Regla 3 SI resonancia > 5.42 Y distancia_jupiter <= 0.2 ENTONCES Familia = EOS [94.3%] Regla 4 SI resonancia <= 11.51 Y distancia_jupiter > 0.2 ENTONCES Familia = FLORA Regla 7 Familia = FLORA

[97.0%]

[94.4%]

[94.2%]

[97.5%]

Evaluacin de los resultados de las reglas de decisin

Evaluacin sobre los datos de entrenamiento:

Regla Tamao 1 2 2 2 5 2 6 2 3 2 4 2 Probadas 253, errores 2 (0.80%)

Error 3.00% 5.60% 10.10% 5.80% 5.70% 2.50%

Usada 45 24 13 23 45 103

Errores 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 1(2.20%) 1(1.00%)

Ventaja 45(45|0) 24(24|0) 13(13|0) 23(23|0) 43(44|1) 0(0|0)

Clase THEMIS KORONIS MARIA PHOCAEA EOS FLORA

Evaluacin sobre los datos de prueba:

Regla 1 2 5 6 3 4
Resultados

Tamao 2 2 2 2 2 2

Error 3.00% 5.60% 10.10% 5.80% 5.70% 2.50%

Usada 22 12 8 11 21 53

Errores 0(0.00%) 0(0.00%) 1(12.50%) 0(0.00%) 0(0.00%) 0(0.00%)

Ventaja 22(22|0) 12(12|0) 6(7|1) 11(11|0) 21(21|0) 0(0|0)

Clase THEMIS KORONIS MARIA PHOCAEA EOS FLORA


159

Magdalena Servente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Probadas 127, errores 1 (0.80%)

Clasificacin general sobre los datos de prueba:

Clase EOS Clase FLORA Clase KORONIS Clase MARIA Clase PHOCAEA Clase THEMIS

Clasificado Clasificado como EOS como FLORA 22 0 0 12 0 0 0 0 0 0 0 0

Clasificado como KORONIS 0 0 7 1 0 0

Clasificado como MARIA 0 0 0 21 0 1

Clasificado como PHOCAEA 0 0 0 0 11 0

Clasificad o como THEMIS 0 1 0 0 0 53

5.4.3.2. Utilizando la proporcin ganancia como criterio de decisin


rbol de decisin

distancia_jupiter <= 0.2 : resonancia > 5.42 : EOS (45.0/1.0) resonancia <= 5.42 : distancia_jupiter <= 0.18 : THEMIS (45.0) distancia_jupiter > 0.18 : KORONIS (24.0) distancia_jupiter > 0.2 : resonancia <= 11.51 : FLORA (103.0/1.0) resonancia > 11.51 : distancia_jupiter <= 0.24 : MARIA (13.0) distancia_jupiter > 0.24 : PHOCAEA (23.0)

Evaluacin de los resultados del rbol de decisin

Evaluacin sobre los datos de entrenamiento:

Antes de podar Tamao Errores 11 2(0.8%)

Despus de podar Tamao Errores 11 2(0.8%)

Estimacin (4.2%)

Evaluacin sobre los datos de prueba:

Antes de podar Tamao Errores 11 0 (0%)

Despus de podar Tamao Errores 11 0(0%)

Estimacin (4.2%)

160

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Evaluacin general:

Clase EOS Clase FLORA Clase KORONIS Clase MARIA Clase PHOCAEA Clase THEMIS

Clasificad o como EOS 22 0 0 0 0 0

Clasificado Clasificado como FLORA como KORONIS 0 0 12 0 0 7 0 0 0 0 0 0

Clasificado como MARIA 0 0 0 22 0 0

Clasificado como PHOCAEA 0 0 0 0 11 0

Clasificad o como THEMIS 0 0 0 0 0 53

Reglas de decisin

Regla 1 SI resonancia <= 5.42 Y distancia_jupiter <= 0.18 ENTONCES Familia = THEMIS Regla 2 SI distancia_jupiter > 0.18 Y distancia_jupiter <= 0.2 ENTONCES Familia = KORONIS Regla 5 SI resonancia > 11.51 Y distancia_jupiter <= 0.24 ENTONCES Familia = MARIA [89.9%] Regla 6 SI resonancia > 11.51 Y distancia_jupiter > 0.24 ENTONCES Familia = PHOCAEA Regla 3 SI resonancia > 5.42 Y distancia_jupiter <= 0.2 ENTONCES Familia = EOS [94.3%] Regla 4 SI resonancia <= 11.51 Y distancia_jupiter > 0.2 ENTONCES Familia = FLORA Regla 7 Familia = FLORA

[97.0%]

[94.4%]

[94.2%]

[97.5%]

Evaluacin de los resultados de las reglas de decisin

Evaluacin sobre los datos de entrenamiento

Regla 1 2 5 6
Resultados

Tamao 2 2 2 2

Error 3.00% 5.60% 10.10% 5.80%

Usada 45 24 13 23

Errores 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%)

Ventaja 45(45|0) 24(24|0) 13(13|0) 23(23|0)

Clase THEMIS KORONIS MARIA PHOCAEA


161

Magdalena Servente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

3 2 4 2 Probadas 253, errores 2 (0.80%)

5.70% 2.50%

45 103

1(2.20%) 43(44|1) EOS 1(1.00%) 0(0|0) FLORA

Evaluacin sobre los datos de prueba:

Regla Tamao 1 2 2 2 5 2 6 2 3 2 4 2 Probadas 127, errores 1 (0.80%)

Error 3.00% 5.60% 10.10% 5.80% 5.70% 2.50%

Usada 22 12 8 11 21 53

Errores 0(0.00%) 0(0.00%) 1(12.50%) 0(0.00%) 0(0.00%) 0(0.00%)

Ventaja 22(22|0) 12(12|0) 6(7|1) 11(11|0) 21(21|0) 0(0|0)

Clase THEMIS KORONIS MARIA PHOCAEA EOS FLORA

Clasificacin general sobre los datos de prueba:

Clase EOS Clase FLORA Clase KORONIS Clase MARIA Clase PHOCAEA Clase THEMIS

Clasificado Clasificado como EOS como FLORA 22 0 0 12 0 0 0 0 0 0 0 0

Clasificado como KORONIS 0 0 7 1 0 0

Clasificado como MARIA 0 0 0 21 0 1

Clasificado como PHOCAEA 0 0 0 0 11 0

Clasificad o como THEMIS 0 1 0 0 0 53

5.4.5.3. Conclusiones
En este caso, tanto los rboles como las reglas obtenidas son iguales si se utiliza la ganancia o la proporcin de ganancia como criterio de decisin. Los rboles son pequeos y poco frondosos, lo cual facilita su comprensin. Adems, no clasifican ningn ejemplo errneamente en los datos de prueba.

Las reglas de decisin generadas, tambin son pocas, lo cual hace que su lectura sea ms comprensible. Y clasifican slo un caso errneamente sobre los datos de entrenamiento. Por lo tanto, podemos decir que tanto los rboles como las reglas obtenidas en este dominio constituyen un buen clasificador.

Analicemos la diferencia entre trabajar con atributos discretos y con atributos continuos. Cuando trabajamos con atributos discretos y elegimos un atributo para dividir el conjunto en la raz, este atributo no participa en las divisiones posteriores. Es decir, como hay una rama descendiente de ese nodo para cada uno de los valores del atributo, todos los subconjuntos posteriores tienen un nico valor para ese atriburo, con lo cual, nunca ofrecer una mayor ganancia o proporcin de ganancia que los dems atributos. Por lo tanto, no existir otro nodo, descendiente del anterior, que utilice a dicho atributo como prueba de valor. En cambio, cuando un atributo continuo se utiliza como prueba de valor en un nodo, el
162 Magdalena Servente Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

C4.5 divide a los datos de acuerdo al resultado de la mejor binarizacin, con lo cual, la prueba de valor realizada en el nodo es una pregunta acerca de si el valor del atributo supera o no un determinado umbral. Puede utilizarse, no obstante, el mismo atributo para dividir los datos en un nodo hijo, variar el valor umbral por el que se realiza la binarizacin. Lo mismo ocurre con los antecedentes en las reglas de decisin. Observemos que este fenmeno se presenta tanto en los rboles como en las reglas de decisin obtenidos en este caso, ya que la prueba de valor distancia_jupiter se repite en nodos padres e hijos, y est presente en ms de un antecedente en las reglas de decisin.

5.4.6. Hipotiroidismo
5.4.6.1. Utilizando la ganancia como criterio de decisin
rbol de decisin

TSH <= 6 : negativo (2246.8/1.0) TSH > 6 : FTI <= 64 : Medicin T4U = f: Medicin TSH = f: negativo (4.1) Medicin TSH = v: hipotiroide compensado (4.5/2.1) Medicin T4U = v: Ciruga tirodea = v: negativo (3.0/1.0) Ciruga tirodea = f: Sexo = F: hipotiroide primario (41.4) Sexo = M: Fuente de referencia = WEST: hipotiroide primario (0.0) Fuente de referencia = STMW: hipotiroide primario (0.0) Fuente de referencia = SVHC: hipotiroide primario (0.0) Fuente de referencia = SVI: hipotiroide primario (7.3) Fuente de referencia = SVHD: hipotiroide primario (0.0) Fuente de referencia = otros: TT4 <= 46 : hipotiroide primario (8.3) TT4 > 46 : negativo (2.2/1.0) FTI > 64 : Toma tiroxina = v: negativo (35.2) Toma tiroxina = f: Medicin TSH = f: negativo (21.2) Medicin TSH = v: TT4 > 150 : negativo (6.1/0.1) TT4 <= 150 : Ciruga tirodea = v: negativo (3.7) Ciruga tirodea = f: Medicin T4U = v: hipotiroide compensado (120.0) Medicin T4U = f:[S1]

Subrbol [S1] Fuente Fuente Fuente Fuente Fuente Fuente de de de de de de referencia referencia referencia referencia referencia referencia = = = = = = WEST: hipotiroide compensado (0.0) STMW: hipotiroide primario (1.4) SVHC: hipotiroide compensado (0.0) SVI: hipotiroide primario (3.6/1.5) SVHD: hipotiroide compensado (0.0) otros: hipotiroide compensado (5.1)

Resultados

Magdalena Servente

163

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

rbol simplificado:

TSH <= 6 : negativo (2246.8/2.6) TSH > 6 : FTI <= 64 : Medicin T4U = f: Medicin TSH = f: negativo (4.1/1.2) Medicin TSH = v: hipotiroide compensado (4.5/3.3) Medicin T4U = v: Ciruga tirodea = f: hipotiroide primario (59.2/2.9) Ciruga tirodea = v: negativo (3.0/2.1) FTI > 64 : Toma tiroxina = v: negativo (35.2/1.4) Toma tiroxina = f: Medicin TSH = f: negativo (21.2/1.3) Medicin TSH = v: TT4 > 150 : negativo (6.1/1.4) TT4 <= 150 : Ciruga tirodea = f: hipotiroide compensado (130.2/5.7) Ciruga tirodea = v: negativo (3.7/1.2)

Evaluacin de los resultados del rbol de decisin

Evaluacin sobre los datos de entrenamiento:

Antes de podar Tamao Errores 37 5 (0.2%)

Despus de podar Tamao Errores 19 8(0.3%)

Estimacin (0.9%)

Evaluacin sobre los datos de prueba:

Antes de podar Tamao Errores 37 6 (0.5%)

Despus de podar Tamao Errores 19 7(0.6%)

Estimacin (0.9%)

Evaluacin general:

Clasificad o como hipertiroid e Clase hipertiroide 0 Clase hipotiroide 0 primario Clase hipotiroide 0 compensado Clase hipotiroide 0 secundario Clase negativo 0

Clasificado hipotiroide primario 0 28 0 0 1

como Clasificado como Clasificado hipotiroide como compensado hipotiroide secundario 0 0 2 0 65 0 2 0 0 0

Clasificado como negativo 0 1 0 1 1158

164

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Reglas de decisin

Regla 12 SI Toma tiroxina = f Y Ciruga tirodea = f Y TSH > 6 Y TT4 <= 150 Y FTI > 64 ENTONCES clase = hipotiroide compensado Regla 1 SI TSH <= 6 ENTONCES clase = negativo [99.9%]

[98.9%]

Regla 15 SI Toma tiroxina = v Y FTI > 64 ENTONCES clase = negativo Regla 9 SI Medicin TSH = f ENTONCES clase = negativo Regla 14 SI TT4 > 150 ENTONCES clase = Regla 8 SI Ciruga tirodea = v ENTONCES clase = negativo Regla 4

[99.5%]

[99.5%]

negativo

[99.4%]

[92.7%]

SI Ciruga tirodea = f Y TSH > 6 Y FTI <= 64 ENTONCES clase = hipotiroide primario Regla 11 SI Medicin T4U = f Y Fuente de referencia = SVI Y TSH > 6 ENTONCES clase = hipotiroide primario Regla 16 Clase = hipotiroide compensado

[95.6%]

[35.2%]

Evaluacin de los resultados de las reglas de decisin

Evaluacin sobre los datos de entrenamiento:

Regla Tamao Error 12 5 1.10% 1 1 0.10% 15 2 0.50% 9 1 0.50% 14 1 0.60% 8 1 7.30% 4 3 4.40% 11 3 64.80% Probadas 2514, errores 9 (0.4%)

Usada 120 2018 41 247 6 7 59 5

Errores 0(0.00%) 1(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 1(14.30%) 1(1.70%) 2(40.00%)

Ventaja 0(0|0) 1620(1620|0) 28(28|0) 232(232|0) 6(6|0) 6(6|0) 58(58|0) 1(3|2)

Clase hipotiroide compensado negativo negativo negativo negativo negativo hipotiroide primario hipotiroide primario

Resultados

Magdalena Servente

165

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Evaluacin sobre los datos de prueba:

Regla Tamao Error 12 5 1.10% 1 1 0.10% 15 2 0.50% 9 1 0.50% 14 1 0.60% 8 1 7.30% 4 3 4.40% 11 3 64.80% Probadas 1258, errores 6 (0.5%)

Usada 59 1019 22 111 3 5 29 3

Errores 2(3.40%) 1(0.10%) 0(0.00%) 0(0.00%) 0(0.00%) 1(20.00%) 1(3.40%) 1(33.33%)

Ventaja 0(0|0) 816(816|0) 20(20|0) 106(106|0) 3(3|0) 3(3|0) 28(28|0) 1(2|1)

Clase hipotiroide compensado negativo negativo negativo negativo negativo hipotiroide primario hipotiroide primario

Clasificacin general sobre los datos de prueba:

Clasificado como hipertiroide Clase hipertiroide Clase hipotiroide primario Clase hipotiroide compensado Clase hipotiroide secundario Clase negativo 0 0 0 0 0

Clasificado como Clasificado como Clasificado hipotiroide hipotiroide como primario compensado hipotiroide secundario 0 0 0 30 1 0 1 0 64 0 2 0 0 0 0

Clasificado como negativo 0 1 0 1 1158

5.4.6.2. Utilizando la proporcin ganancia como criterio de decisin


rbol de decisin

TSH <= 6 : negativo (2246.8/1.0) TSH > 6 : FTI <= 64 : Medicin TSH = f: negativo (4.3) Medicin TSH = v: Medicin T4U = f: hipotiroide compensado (4.5/2.1) Medicin T4U = v: Ciruga tirodea = f: hipotiroide primario (59.0/1.0) Ciruga tirodea = v: negativo (3.0/1.0) FTI > 64 : Toma tiroxina = v: negativo (35.2) Toma tiroxina = f: Medicin TSH = f: negativo (21.2) Medicin TSH = v: Ciruga tirodea = v: negativo (3.7) Ciruga tirodea = f: TT4 > 150 : negativo (6.1/0.1) TT4 <= 150 : Medicin TT4 = f: hipotiroide primario (2.8/0.7) Medicin TT4 = v: hipotiroide compensado (127.4/1.5)

166

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Evaluacin de los resultados del rbol de decisin

Evaluacin sobre los datos de entrenamiento:

Antes de podar Tamao Errores 21 6 (0.2%)

Despus de podar Tamao Errores 21 6(0.2%)

Estimacin (0.9%)

Evaluacin sobre los datos de prueba:

Antes de podar Tamao Errores 21 8 (0.6%)

Despus de podar Tamao Errores 21 8(0.6%)

Estimacin (0.9%)

Evaluacin general:

Clasificado como hipertiroide Clase hipertiroide Clase hipotiroide primario Clase hipotiroide compensado Clase hipotiroide secundario Clase negativo 0 0 0 0 0

Clasificado como Clasificado como Clasificado como hipotiroide hipotiroide hipotiroide compensado primario secundario 0 0 0 28 1 0 1 2 64 0 2 0 0 0 0

Clasificado como negativo 0 1 0 1 1158

Reglas de decisin

Regla 7 SI Toma tiroxina = f Y Ciruga tirodea = f Y TSH > 6 Y TT4 <= 150 Y FTI > 64 ENTONCES clase = hipotiroide compensado Regla 4 SI Ciruga tirodea = f Y TSH > 6 Y FTI <= 64 ENTONCES clase = hipotiroide primario Regla 6 SI Toma tiroxina = f Y Medicin TT4 = f Y TSH > 6 ENTONCES clase = hipotiroide primario Resultados

[98.9%]

[95.6%]

[45.3%] 167

Magdalena Servente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Regla 1 SI TSH <= 6 ENTONCES clase = negativo [99.9%]

Regla 10 SI Toma tiroxina = v Y FTI > 64 ENTONCES clase = negativo Regla 2 SI Medicin TSH = f Y ENTONCES clase = Regla 8 SI TT4 > 150 ENTONCES clase = Regla 5 SI Ciruga tirodea = v ENTONCES clase = negativo negativo

[99.5%]

negativo

[99.5%]

[99.4%]

[92.7%]

Regla 11 Clase = hipotiroide compensado

Evaluacin de los resultados de las reglas de decisin

Evaluacin sobre los datos de prueba:

Regla Tamao Error 7 5 1.10% 4 3 4.40% 6 3 54.70% 1 1 0.10% 10 2 0.50% 2 1 0.50% 8 1 0.60% 5 1 7.30% Probadas 2514, errores 8 (0.3%)

Usada 120 59 4 2018 41 247 6 7

Errores 0(0.00%) 1(1.70%) 1(25.00%) 1(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 1(14.30%)

Ventaja 0(0|0) 58(58|0) 2(3|1) 1620(1620|0) 28(28|0) 232(232|0) 6(6|0) 6(6|0)

Clase hipotiroide compensado hipotiroide primario hipotiroide primario negativo negativo negativo negativo negativo

Evaluacin sobre los datos de entrenamiento:

Regla Tamao Error 7 5 1.10% 4 3 4.40% 6 3 54.70% 1 1 0.10% 10 2 0.50% 2 1 0.50% 8 1 0.60% 5 1 7.30% Probadas 1258, errores 8 (0.6%)

Usada 59 29 1 1019 22 111 3 5

Errores Ventaja 2(3.40%) 0(0|0) 1(3.40%) 28(28|0) 1(100.00%) -1(0|1) 1(0.10%) 816(816|0) 0(0.00%) 20(20|0) 0(0.00%) 106(106|0) 0(0.00%) 3(3|0) 1(20.00%) 4(4|0)

Clase hipotiroide compensado hipotiroide primario hipotiroide primario negativo negativo negativo negativo negativo

168

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Clasificacin general de los datos de prueba:

Clasificado como hipertiroide Clase hipertiroide Clase hipotiroide primario Clase hipotiroide compensado Clase hipotiroide secundario Clase negativo 0 0 0 0 0

Clasificado como Clasificado como Clasificado hipotiroide hipotiroide como primario compensado hipotiroide secundario 0 0 0 28 1 0 1 2 64 0 2 0 0 0 0

Clasificado como negativo 0 1 0 1 1158

5.4.6.3. Conclusiones
El rbol de decisin obtenido utilizando la ganancia sin simplificar tiene mayor tamao que el obtenido utilizando la proporcin de ganancia. No obstante, al simplificar el primer rbol se obtiene un rbol ms pequeo que ambos. En cuanto a la proporcin de error, es igual para el rbol generado utilizando la ganancia y el generado utilizando la proporcin de ganancia. Por lo tanto, podramos afirmar que el tamao no parece estar relacionado con la performance.

En cuanto a las reglas de decisin, en ambos casos se obtuvieron nueve reglas. La proporcin de error observada en las reglas generadas utilizando la ganancia, es la menor de todas las observadas para este dominio.

5.4.7. Identificacin de vidrios


5.4.7.1. Utilizando la ganancia como criterio de decisin
rbol de decisin

Mg <= 1 : Ca <= 9 : Al > 2 : contenedores (2.0) Al <= 2 : Al > 1 : lamparitas (12.0/1.0) Al <= 1 : Ba > 0 : lamparitas (4.0) Ba <= 0 : Na <= 13 : lamparitas (2.0) Na > 13 : vajilla (3.0) Ca > 9 : Al <= 0 : vidrios_para_construcciones_no_float (4.0/1.0) Al > 0 : Si <= 72 : vidrios_para_construcciones_no_float (6.0/1.0) Si > 72 : contenedores (4.0) Mg > 1 : Ca <= 7 : Ca <= 6 : contenedores (2.0/1.0) Resultados Magdalena Servente 169

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Ca > 6 : vidrios_para_construcciones_no_float (13.0/1.0) Ca > 7 : Mg <= 2 : Na <= 12 : vidrios_para_construcciones_no_float (4.0/1.0) Na > 12 : vidrios_float_para_construcciones (5.0/3.0) Mg > 2 : Si > 72 : vidrios_float_para_construcciones (21.0/6.0) Si <= 72 : Al <= 0 : vidrios_float_para_construcciones (13.0/4.0) Al > 0 : Si <= 71 : vidrios_float_para_construcciones (6.0/2.0) Si > 71 : vidrios_para_construcciones_no_float (42.0/23.0)

rbol simplificado

Mg <= 1 : Ca <= 9 : Al > 2 : contenedores (2.0/1.0) Al <= 2 : Al > 1 : lamparitas (12.0/2.5) Al <= 1 : Ba > 0 : lamparitas (4.0/1.2) Ba <= 0 : Na <= 13 : lamparitas (2.0/1.0) Na > 13 : vajilla (3.0/1.1) Ca > 9 : Al <= 0 : vidrios_para_construcciones_no_float (4.0/2.2) Al > 0 : Si <= 72 : vidrios_para_construcciones_no_float (6.0/2.3) Si > 72 : contenedores (4.0/1.2) Mg > 1 : Ca > 7 : vidrios_float_para_construcciones (91.0/48.8) Ca <= 7 : Ca <= 6 : contenedores (2.0/1.8) Ca > 6 : vidrios_para_construcciones_no_float (13.0/2.5)

Evaluacin de los resultados del rbol de decisin

Evaluacin sobre los datos de entrenamiento:

Antes de podar Tamao Errores 31 44 (30.8%)

Despus de podar Tamao Errores 21 50(35%)

Estimacin (45.8%)

Evaluacin sobre los datos de prueba:

Antes de podar Tamao Errores 31 31 (43.7%)

Despus de podar Tamao Errores 21 34(47.9%)

Estimacin (45.8%)

170

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Evaluacin general:

Clase vidrios_float_para_ construcciones Clase vidrios_para_constr ucciones_no_float Clase vidrios_float_para_ vehiculos Clase vidrios_para_vehc ulos_no_float Clase contenedores Clase vajilla Clase lamparitas

Clasificados como vidrios_float _para_constr ucciones 22

Clasificados como vidrios_para _construccio nes_no_float 1

Clasificados como vidrios_float _para_vehic ulos 0

Clasificados como vidrios_para _vehculos_ no_float 0

Clasificados Clasifica Clasifica dos como dos como contenedores como lamparit vajilla as 0 0 0

19

0 2 0

3 1 1

0 0 0

0 0 0

1 0 1

0 0 0

0 0 8

Reglas de decisin

Regla 8 SI Al > 0 Y Si > 72 Y Ca > 9 ENTONCES clase = Regla 5 SI Al > 2 ENTONCES clase = Regla 2 SI Na > 13 Y Mg <= 1 Y Al <= 1 Y Ca <= 9 Y Ba <= 0 ENTONCES clase = Regla 3 SI Al <= 2 Y Ca <= 9 Y Ba > 0 ENTONCES clase = Regla 4 SI Mg <= 1 Y Al > 1 Y Al <= 2 Y Ca <= 9 ENTONCES clase = Regla 1 SI Na <= 13 Y Mg <= 1 Y Al <= 1 Y Ca <= 9 ENTONCES clase = contenedores [63.0%]

contenedores

[70.7%]

vajilla

[63.0%]

lamparitas

[84.1%]

lamparitas

[79.4%]

lamparitas

[50.0%]

Resultados

Magdalena Servente

171

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Regla 10 SI Mg > 1 Y Ca > 6 Y Ca <= 7 ENTONCES clase = Regla 7 SI Mg <= 1 Y Si <= 72 Y Ca > 9 ENTONCES clase = Regla 14 SI Mg > 2 Y Ca > 7 ENTONCES clase =

vidrios_para_construcciones_no_float

[80.9%]

vidrios_para_construcciones_no_float

[66.2%]

vidrios_float_para_construcciones

[48.0%]

Regla 15 Clase = vidrios_para_construcciones_no_float

Evaluacin de los resultados de las reglas de decisin

Evaluacin sobre los datos de entrenamiento:

Regla Tamao Error Usada 8 3 29.30% 4 5 1 37.00% 3 2 5 37.00% 3 3 3 15.90% 8 4 4 20.60% 9 1 4 50.00% 2 10 3 19.10% 13 7 3 33.80% 7 14 2 52.00% 82 Probadas 143, errores 48 (33.6%)

Errores 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 1(11.10%) 0(0.00%) 1(7.70%) 1(14.30%) 39(47.60%)

Ventaja 4(4|0) 3(3|0) 3(3|0) 5(5|0) 8(8|0) 2(2|0) 0(0|0) 0(0|0) 16(43|27)

Clase contenedores contenedores vajilla lamparitas lamparitas lamparitas vidrios_para_construcciones_no_float vidrios_para_construcciones_no_float vidrios_float_para_construcciones

Evaluacin sobre los datos de prueba:

Regla Tamao Error Usada 8 3 29.30% 1 3 3 15.90% 6 4 4 20.60% 3 10 3 19.10% 4 7 3 33.80% 6 14 2 52.00% 42 Probadas 71, errores 30 (42.3%)

Errores 0(0.00%) 0(0.00%) 0(0.00%) 1(25.00%) 4(66.67%) 21(50.00%)

Ventaja 1(1|0) 5(5|0) 3(3|0) 0(0|0) 0(0|0) 6(21|15)

Clase contenedores lamparitas lamparitas vidrios_para_construcciones_no_float vidrios_para_construcciones_no_float vidrios_float_para_construcciones

172

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Clasificacin general en los datos de prueba:

Clase vidrios_float_para_ construcciones Clase vidrios_para_constr ucciones_no_float Clase vidrios_float_para_ vehiculos Clase vidrios_para_vehc ulos_no_float Clase contenedores Clase vajilla Clase lamparitas

Clasificados como vidrios_float _para_constr ucciones 21

Clasificados como vidrios_para _construccio nes_no_float 2

Clasificados como vidrios_float _para_vehic ulos 0

Clasificados como vidrios_para _vehculos_ no_float 0

Clasificados Clasificado s como como contenedore vajilla s 0 0

Clasif icados como lampa ritas 0

15

10

0 0 0

3 3 1

0 0 0

0 0 0

1 0 0

0 0 0

0 0 9

5.4.7.2. Utilizando la proporcin ganancia como criterio de decisin


rbol de decisin

Mg <= 1 : Ca <= 9 : Al > 2 : contenedores (2.0) Al <= 2 : Al > 1 : lamparitas (12.0/1.0) Al <= 1 : Ba > 0 : lamparitas (4.0) Ba <= 0 : Na <= 13 : lamparitas (2.0) Na > 13 : vajilla (3.0) Ca > 9 : Al <= 0 : vidrios_para_construcciones_no_float (4.0/1.0) Al > 0 : Si <= 72 : vidrios_para_construcciones_no_float (6.0/1.0) Si > 72 : contenedores (4.0) Mg > 1 : Ba > 0 : contenedores (2.0/1.0) Ba <= 0 : Mg <= 2 : Ca <= 8 : vidrios_para_construcciones_no_float (2.0) Ca > 8 : vidrios_float_para_construcciones (7.0/4.0) Mg > 2 : Ca <= 7 : vidrios_para_construcciones_no_float (13.0/1.0) Ca > 7 : Na > 13 : vidrios_float_para_construcciones (6.0/3.0) Na <= 13 : Si > 72 : vidrios_float_para_construcciones (21.0/6.0) Si <= 72 : Al <= 0 : vidrios_float_para_construcciones (7.0/1.0) Al > 0 :[S1] Subrbol [S1] Si <= 71 : vidrios_float_para_construcciones (6.0/2.0) Si > 71 : vidrios_para_construcciones_no_float (42.0/23.0) Resultados Magdalena Servente 173

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

rbol simplificado

Mg <= 1 : Ca <= 9 : Al > 2 : contenedores (2.0/1.0) Al <= 2 : Al > 1 : lamparitas (12.0/2.5) Al <= 1 : Ba > 0 : lamparitas (4.0/1.2) Ba <= 0 : Na <= 13 : lamparitas (2.0/1.0) Na > 13 : vajilla (3.0/1.1) Ca > 9 : Al <= 0 : vidrios_para_construcciones_no_float (4.0/2.2) Al > 0 : Si <= 72 : vidrios_para_construcciones_no_float (6.0/2.3) Si > 72 : contenedores (4.0/1.2) Mg > 1 : Ba > 0 : contenedores (2.0/1.8) Ba <= 0 : Ca <= 7 : vidrios_para_construcciones_no_float (13.0/2.5) Ca > 7 : vidrios_float_para_construcciones (91.0/48.8)

Evaluacin de los resultados del rbol de decisin

Evaluacin sobre los datos de entrenamiento:

Antes de podar Tamao Errores 31 44 (30.8%) Evaluacin sobre los datos de prueba:

Despus de podar Tamao Errores 21 50(35%)

Estimacin (45.8%)

Antes de podar Tamao Errores 31 31 (43.7%)

Despus de podar Tamao Errores 21 34(47.9%)

Estimacin (45.8%)

Evaluacin general:

Clase vidrios_float_para_ construcciones Clase 19 vidrios_para_constr ucciones_no_float 6 Clase vidrios_float_para_ vehiculos


174

Clasificados como vidrios_float _para_constr ucciones 22

Clasificados como vidrios_para _construccio nes_no_float 1

Clasificados como vidrios_float _para_vehic ulos 0

Clasificados como vidrios_para _vehculos_ no_float 0

Clasificados Clasificado como s como contenedore vajilla s 0 0

Clasifica dos como lamparita s 0

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Clase vidrios_para_vehc ulos_no_float Clase contenedores Clase vajilla Clase lamparitas

0 2 0

3 1 1

0 0 0

0 0 0

1 0 1

0 0 0

0 0 8

Reglas de decisin

Regla 8 SI Al > 0 Y Si > 72 Y Ca > 9 ENTONCES clase = Regla 5 SI Al > 2 ENTONCES clase = Regla 2 SI Na > 13 Y Mg <= 1 Y Al <= 1 Y Ca <= 9 Y Ba <= 0 ENTONCES clase = Regla 3 SI Al <= 2 Y Ca <= 9 Y Ba > 0 ENTONCES clase = Regla 4 SI Mg <= 1 Y Al > 1 Y Al <= 2 Y Ca <= 9 ENTONCES clase = Regla 1 SI Na <= 13 Y Mg <= 1 Y Al <= 1 Y Ca <= 9 ENTONCES clase = Regla 11 SI Mg > 1 Y Ca <= 7 Y Ba <= 0 ENTONCES clase = Regla 7 SI Mg <= 1 Y Si <= 72 Y Ca > 9 ENTONCES clase = Regla 15 SI Mg > 2 Y Si > 72 Y Ca > 7 ENTONCES clase = Regla 10 SI Mg > 1 Y Ca > 8 ENTONCES clase = Resultados contenedores [63.0%]

contenedores

[70.7%]

vajilla

[63.0%]

lamparitas

[84.1%]

lamparitas

[79.4%]

lamparitas

[50.0%]

vidrios_para_construcciones_no_float

[80.9%]

vidrios_para_construcciones_no_float

[66.2%]

vidrios_float_para_construcciones

[61.7%]

vidrios_float_para_construcciones Magdalena Servente

[51.5%] 175

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Regla 16 Clase = vidrios_para_construcciones_no_float

Evaluacin de los resultados de las reglas de decisin

Evaluacin sobre los datos de entrenamiento:

Regla 8 5 2 3 4 1 11

Tamao 3 1 5 3 4 4 3

Error 29.30% 37.00% 37.00% 15.90% 20.60% 50.00% 19.10%

Usada 4 3 3 8 9 2 13

Errores 0(0.00%) 0(0.00%) 0(0.00%) 0(0.00%) 1(11.10%) 0(0.00%) 1(7.70%)

Ventaja 4(4|0) 3(3|0) 3(3|0) 5(5|0) 8(8|0) 2(2|0) 0(0|0)

33.80%

1(14.30%)

0(0|0)

15

38.30%

21

6(28.60%)

9(15|6)

10

48.50%

23

9(39.10%)

10(14|4)

Clase contenedores contenedores vajilla lamparitas lamparitas lamparitas vidrios_para_c onstrucciones_ no_float vidrios_para_c onstrucciones_ no_float vidrios_float_p ara_construccio nes vidrios_float_p ara_construccio nes

Probadas 143, errores 45 (31.5%)

Evaluacin sobre los datos de prueba:

Regla 8 3 4 11

Tamao 3 3 4 3

Error 29.30% 15.90% 20.60% 19.10%

Usada 1 6 3 4

Errores 0(0.00%) 0(0.00%) 0(0.00%) 1(25.00%)

Ventaja 1(1|0) 5(5|0) 3(3|0) 0(0|0)

33.80%

4(66.67%)

0(0|0)

15

38.30%

5(55.60%)

1(4|3)

10

48.50%

14

6(42.90%)

5(8|3)

Clase contenedores lamparitas lamparitas vidrios_para_c onstrucciones_ no_float vidrios_para_c onstrucciones_ no_float vidrios_float_p ara_construccio nes vidrios_float_p ara_construccio nes

Probadas 71, errores 30 (42.3%)

176

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Clasificacin general en los datos de prueba:

Clase vidrios_float_para_ construcciones Clase vidrios_para_constr ucciones_no_float Clase vidrios_float_para_ vehiculos Clase vidrios_para_vehc ulos_no_float Clase contenedores Clase vajilla Clase lamparitas

Clasificados como vidrios_float _para_constr ucciones 12

Clasificados como vidrios_para _construccio nes_no_float 11

Clasificados como vidrios_float _para_vehic ulos 0

Clasificados como vidrios_para _vehculos_ no_float 0

Clasificados Clasificado s como como contenedore vajilla s 0 0

Clasific ados como lampari tas 0

19

0 2 1

3 1 0

0 0 0

0 0 0

1 0 0

0 0 0

0 0 9

5.4.7.3. Conclusiones
En este caso los modelos obtenidos utilizando la ganancia y la proporcin de ganancia son distintos, aunque el tamao de los rboles de decisin sea el mismo, y la diferencia en la cantidad de reglas obtenidas sea de una regla. Para ambos rboles de decisin el porcentaje de error sobre los datos de prueba es del 47.9%. Mientras que para los conjuntos de reglas de decisin es del 42.3%. Aunque en este segundo caso la performance sea mejor, no podemos afirmar que un clasificador con el 42% de error sea confiable.

5.5. COMPARACIN DE LOS RESULTADOS OBTENIDOS CON EL ID3 Y CON EL C4.5


5.5.1. Crditos
Analizando la figura 5.1 vemos que para los rboles obtenidos con el C4.5 se obtuvo una proporcin de error del 43%, mientras que para el resto de los casos, se obtuvo una proporcin de error del 35%. No obstante, en los rboles generados con el C4.5 la estimacin del error sobre casos futuros es del 12.4%.

Resultados

Magdalena Servente

177

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

50.00% 45.00% 40.00% 35.25% 35.00% 30.00% 25.00% 20.00% 15.00% 10.00% 5.00% 0.00% ID3-rbol- ID3-Reglas- ID3-rbol- ID3-Reglas- C4.5-rbolganancia ganancia proporcin proporcin ganancia de ganancia de ganancia Figura 5.1: Porcentajes de error obtenidos en el dominio Crditos C4.5C4.5-rbolC4.5Reglasproporcin Reglasganancia de ganancia proporcin de ganancia 35.25% 35.25% 35.25% 35.29% 35.29% 43.10% 43.10%

Los rboles generados con el ID3 son similares a los generados con el C4.5 sin simplificar. La nica diferencia destacable es que la rama expresada en el ID3 como:

Otros_Creditos = DOS CREDITOS Composicin_Familiar = CASADO Y DOS HIJOS Ingreso = ENTRE 451 Y 550 Vivienda = ALQUILA NO Vivienda = PROPIA 0 IPVU Servicios = BASICOS Y TIC SI Servicios = BASICOS, TIC Y TEL NO

Se simplific en el C4.5 a:

Otros Creditos = DOS CREDITOS: Composicin Familiar = CASADO Y DOS HIJOS: Ingreso = ENTRE 451 Y 550: NO (4.0/1.0)

Notemos que de los cuatro casos clasificados en el C4.5 por esta rama, slo uno se clasifica errneamente, y el rbol es ms claro.

En este caso, el modelo ms simple es el presentado por los rboles de decisin simplificados generados por el C4.5: representan en un rbol de decisin que tiene nicamente una raz y tres hojas aquello que los rboles generados por el ID3 representan en un rbol de tamao 26 y con una mayor proporcin de error. El modelo ms simple, ayuda a destacar los atributos importantes del problema, y, por lo tanto, a
178 Magdalena Servente Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

entenderlo ms profundamente. No obstante, es el que mayor proporcin de error tuvo en la prctica. Entonces, antes de decidirnos por un modelo, debemos analizar la relacin simplicidad - proporcin de error.

Analicemos los tamaos de los modelos obtenidos. La figura 5.2 compara los tamaos de los rboles de decisin obtenidos para el dominio Crditos. La figura 5.3 compara la cantidad de reglas de decisin obtenidas con cada algoritmo.

30 25 20 15 10 5 0 ID3-rbol-ganancia C4.5-rbolganancia ID3-rbolproporcin de ganancia C4.5-rbolproporcin de ganancia

Figura 5.2: Tamao de los rboles obtenidos en el dominio Crditos

Del anlisis de estos dos grficos anteriores vemos que los modelos generados para este dominio por el C4.5 fueron ms pequeos y, por lo tanto, ms comprensibles que los generados por el ID3. Si tuviramos que elegir un modelo entre estos cuatro para representar al dominio, eligiramos las reglas generadas por el C4.5, ya que son ms simples que las generadas por el ID3 y tienen una proporcin de error similar.

18 16 14 12 10 8 6 4 2 0 ID3-Reglasganancia C4.5-Reglasganancia ID3-Reglasproporcin de ganancia C4.5-Reglasproporcin de ganancia

Figura 5.3: Cantidad de reglas obtenidas en el dominio Crditos

Resultados

Magdalena Servente

179

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

5.5.2. Cardiologa
La figura 5.4 muestra los porcentajes de error obtenidos con cada uno de los mtodos para el dominio Cardiologa. Vemos que todos los porcentajes se encuentran entre el 6.45% y el 6.50%. Con lo cual, no hay ningn modelo que sea claramente superior que otro en este aspecto.

7.00% 6.00% 5.00% 4.00% 3.00% 2.00% 1.00% 0.00%

6.45%

6.45%

6.45%

6.45%

6.50%

6.50%

6.50%

6.50%

Las figuras 5.5 y 5.6 comparan los tamaos de los modelos obtenidos. Vemos que la cantidad de reglas obtenidas con el ID3 es el doble de la cantidad de reglas obtenidas con el C4.5. En el caso de los rboles de decisin, el tamao de los rboles obtenidos con el C4.5 es menor que la mitad del tamao de los rboles obtenidos con el ID3.

180

rb ol -g an an ID 3ci ID Re a 3 gl rb as ol -g -p an ro an po ID ci 3rc a Re i n gl de as ga -p ro na po nc rc ia i n de ga na C4 nc .5 ia - rb ol -g an C4 an C4 .5 ci -R .5 a eg - la rb sol ga -p ro na C4 po nc .5 rc ia -R i eg n de la sga pr na op nc or ia ci n de ga na nc ia


Figura 5.4: Porcentajes de error obtenidas en el dominio Cardiologa 30 25 20 15 10 5 0 25 10 25 10 ID3-rbolganancia C4.5-rbolganancia ID3-rbolproporcin de ganancia C4.5-rbolproporcin de ganancia Figura 5.5: Tamaos de los rboles de decisin Magdalena Servente Resultados

ID 3

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

30 25 20 15 10 5 0

14 7

14 7

ID3-Reglasganancia

C4.5-Reglasganancia

ID3-Reglas- C4.5-Reglasproporcin proporcin de ganancia de ganancia

Figura 5.6: Cantidad de reglas obtenidas en el dominio Cardiologa

Analizando los rboles de decisin obtenidos para este dominio, podemos deducir que esta diferencia en tamaos se debe a que el ID3 ajusta el rbol de decisin para cubrir todos y cada uno de los datos de entrada, mientras que cada hoja de un rbol generado con el C4.5 cubre una distribucin de casos y puede contener errores. Veamos, por ejemplo, los rboles obtenidos utilizando la ganancia con ambos algoritmos. En el caso de DURACION_DEL_ANGOR = MENOS DE 30 MIN, en el rbol obtenido con el C4.5 nos encontramos con una hoja, que cubre 33 casos, 1 slo incorrectamente. Mientras que en el rbol obtenido con el ID3, nos encontramos con un subrbol de tamao 10, este subrbol tambin cubre 33 casos, ninguno incorrectamente. Ambos rboles tienen proporciones de errores similares. Cabe entonces preguntarnos si no es ms conveniente tener hoja con un 3.03% de error en lugar de un subrbol que cubra todos los casos, sin ningn error. Recordemos que la performance general de ambos rboles frente a los datos de prueba fue muy similar.

5.5.3. Votaciones
La figura 5.7 presenta los porcentajes de error obtenidos para el dominio de Votaciones. Vemos que con el ID3 el porcentaje de error ronda el 5.20%, mientras que con el C4.5, el porcentaje de error es ms bajo en el caso de ambos rboles de decisin y de las reglas utilizando la ganancia. Esto es destacable ya que si analizamos las figuras 5.8 y 5.9, que presentan el tamao de los modelos obtenidos, vemos que los modelos obtenidos con el C4.5 son mucho menores que los obtenidos con el ID3. Si a esto le agregamos el hecho de que el porcentaje de error en tres de los modelos es menor, podemos concluir que en este caso la performance del C4.5 es mejor que la del ID3.

Podemos preguntarnos a qu se debe la diferencia en los tamaos de los modelos generados con el ID3 y con el C4.5. Tomemos, por ejemplo, los rboles de decisin. En el caso de los rboles generados utilizando la ganancia, los atributos elegidos por el ID3 y por el C4.5 para realizar la particin de los datos son los mismos. Sin embargo, recordemos que cada hoja del C4.5 cubre una distribucin de casos (an en los rboles sin simplificar), entonces el rbol resultante es ms simple.

Resultados

Magdalena Servente

181

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

6.00% 5.00% 4.00%

5.19%

5.19%

5.19%

5.19% 3.70% 3.00% 3.00%

5.20%

3.00% 2.00% 1.00% 0.00%


rb ol -g an an ID 3ci ID Re a 3 gl rb as ol -g -p an ro an po ID ci 3rc a Re i n gl de as ga -p ro na po nc rc ia i n de ga na C4 nc .5 ia - rb ol -g an C4 an C4 .5 ci -R .5 a eg - la rb sol ga -p ro na C4 po nc .5 rc ia -R i eg n de la sga pr na op nc or ia ci n de ga na nc ia
Figura 5.7: Porcentajes de error obtenidas en el dominio Votaciones

ID 3

40 30 20 10 0

34

35

ID3-Reglasganancia

C4.5-Reglasganancia

ID3-Reglas- C4.5-Reglasproporcin proporcin de ganancia de ganancia

Figura 5.8: Tamao de los rboles de decisin obtenidos en el dominio Votaciones

70 60 50 40 30 20 10 0

57

58

ID3-rbolganancia

C4.5-rbolganancia

ID3-rbolC4.5-rbolproporcin de proporcin de ganancia ganancia

Figura 5.9: Cantidad de reglas de decisin obtenidas en el dominio Votaciones

A continuacin, en las figuras 5.10 y 5.11 se presentan ambos rboles de decisin y se pueden apreciar las simplificaciones realizadas por el C4.5.

182

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Cong_honorarios_medicos = a_favor Reduccion_corp_Synfuels = a_favor Export_sin_impuestos = a_favor democrata Export_sin_impuestos = desconocido republicano Export_sin_impuestos = en_contra Presupuesto_de_educacion = a_favor Der_demanda_Superfund = a_favor Particip_proy_agua = a_favor republicano Particip_proy_agua = en_contra Acta_sudaf_admin_export = a_favor republicano Acta_sudaf_admin_export = desconocido republicano Acta_sudaf_admin_export = en_contra Nios discapacitados = a_favor republicano Nios discapacitados = en_contra democrata Der_demanda_Superfund = en_contra Democrata (1) Presupuesto_de_educacion = desconocido democrata Presupuesto_de_educacion = en_contra Acta_sudaf_admin_export = a_favor Adop_resolucion_presup = a_favor republicano Adop_resolucion_presup = en_contra Ayuda_a_El_Salvador = a_favor republicano Ayuda_a_El_Salvador = en_contra democrata Acta_sudaf_admin_export = desconocido democrata Acta_sudaf_admin_export = en_contra Democrata (2) Reduccion_corp_Synfuels = desconocido republicano Reduccion_corp_Synfuels = en_contra Export_sin_impuestos = a_favor Inmigracion = a_favor republicano Inmigracion = en_contra Acta_sudaf_admin_export = a_favor democrata Acta_sudaf_admin_export = desconocido Particip_proy_agua = a_favor republicano Particip_proy_agua = en_contra democrata Acta_sudaf_admin_export = en_contra republicano Export_sin_impuestos = desconocido republicano Export_sin_impuestos = en_contra Adop_resolucion_presup = a_favor Acta_sudaf_admin_export = a_favor republicano Acta_sudaf_admin_export = desconocido Nios discapacitados = a_favor republicano Nios discapacitados = en_contra democrata Adop_resolucion_presup = en_contra Republicano (3) Cong_honorarios_medicos = desconocido Misil_mx = a_favor Prohib_pruebas_anti_satel = a_favor democrata Prohib_pruebas_anti_satel = desconocido democrata Prohib_pruebas_anti_satel = en_contra Republicano (4) Misil_mx = desconocido republicano Resultados Magdalena Servente 183

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Misil_mx = en_contra democrata Cong_honorarios_medicos = en_contra Presupuesto_de_educacion = a_favor democrata Presupuesto_de_educacion = desconocido Adop_resolucion_presup = a_favor democrata Adop_resolucion_presup = en_contra republicano Presupuesto_de_educacion = en_contra Democrata

(5)

Figura 5.10: rbol generado por el ID3 para el dominio Votaciones utilizando la ganancia

cong_honorarios_medicos = en_contra: democrata (168.0/1.0) cong_honorarios_medicos = a_favor: reduccion_corp_Synfuels = en_contra: republicano (97.0/3.0) reduccion_corp_Synfuels = desconocido: republicano (4.0) reduccion_corp_Synfuels = a_favor: export_sin_impuestos = a_favor: democrata (2.0) export_sin_impuestos = desconocido: republicano (1.0) export_sin_impuestos = en_contra: presupuesto_de_educacin = a_favor: republicano (13.0/2.0) presupuesto_de_educacin = en_contra: democrata (5.0/2.0) presupuesto_de_educacin = desconocido: democrata (1.0) cong_honorarios_medicos = desconocido: misil_mx = a_favor: democrata (4.0/1.0) misil_mx = en_contra: democrata (3.0) misil_mx = desconocido: republicano (2.0)

(5) (3)

(1) (2)

(4)

Figura 5.11: rbol generado por el C4.5 para el dominio Votaciones utilizando la ganancia

En el caso (1), podemos observar que el subrbol de tamao 10 generado por el ID3, se represent en el C4.5 con una hoja que cubre 13 casos, dos incorrectamente. En el caso (2), el C4.5 presenta una hoja que cubre 5 casos, dos de ellos errneamente, mientras que el ID3 presenta un subrbol de tamao 8. En el caso (3), el subrbol presentado por el ID3 es de tamao 17 y la hoja presentada en el mismo caso por el C4.5 clasifica 3 casos errrneamente de los 97 que cubre. La diferencia en el caso (4) no es tan notable, ya que el C4.5 representa en una hoja con N=4 y E=2, lo que el ID3 presenta en un nodo de decisin con tres hojas hijas. Finalmente, en el caso (5), el C4.5 se equivoca una sola vez en los 168 casos que cubre la hoja, mientras que el ID3 los clasifica a todos correctamente con un subrbol de tamao 6.

El ID3 no generaliza los resultados de una hoja, es decir, no permite que una hoja cubra casos de una clase distinta a la expresada. Por lo tanto, cubre exhaustivamente todos los casos de entrenamiento. Mientras que la generalizacin realizada por el C4.5 permite obtener rboles ms pequeos a un precio que parece ser no tan alto. Pensemos que, muchas veces es preferible tener una hoja con performance del 96.9%, como en el caso (3), que un rbol de tamao 17. Este fenmeno que ocurre en los rboles generados por el ID3 y, como consecuencia lgica, tambin en las reglas generadas por el mismo sistema, se conoce como sobreajuste. Como su nombre lo indica, se origina en que el ID3 cubre absolutamente todos los casos de entrenamiento correctamente, ajusta el modelo a todos los casos de entrenamiento.
184 Magdalena Servente Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Existen muchas maneras de solucionar el sobreajuste. Podramos, por ejemplo, realizar una poda del rbol cuando un subrbol tenga una performance mayor a una cota predefinida, es decir, cuando (E*100)/N sea superior a una cota mnima de performance. Otra opcin sera realizar esta simplificacin y adjuntarle al rbol las reglas de decisin con las excepciones.

5.5.4. Estudio sobre hongos


1.00% 0.90% 0.80% 0.70% 0.60% 0.50% 0.40% 0.30% 0.20% 0.10% 0.00% 0.90%

0.30%

0.30%

0.30%

0.00%

0.00%

0.00%

0.00%

En el caso de este dominio el porcentaje de error registrado con todos los clasificadores no supera el 1%, como lo muestra la figura 5.12. El mayor porcentaje de error se obtuvo con el rbol de decisin generado por el C4.5 utilizando la ganancia, y el menor, y ms destacable, se obtuvo utilizando el ID3 con la proporcin de ganancia. En este caso, todos los datos de entrenamiento fueron clasificados correctamente.

En caso de tener que optar entre alguno de los clasificadores generados, optaramos por los generados con el ID3 utilizando la proporcin de ganancia, ya que adems de no presentar errores, el tamao del rbol es aceptable, como lo muestra la figura 5.13. Mientras que la cantidad de reglas generadas en el mismo caso es superior a las generadas con el C4.5 utilizando la ganancia (figura 5.14), que tienen un porcentaje de error bajo.

Como se destac en las conclusiones particulares de este dominio para el ID3 (Seccin 5.3.4.3) y para el C4.5 (Seccin 5.4.4.3), vimos que la ganancia favoreci a atributos con muchos valores diferentes frente a otros atributos que generaban una mayor ganancia neta de informacin pero que tenan menos valores.
Resultados Magdalena Servente 185

rb ol -g an ID an 3ID ci Re 3a gl rb as ol -g -p an ro an po ID ci 3rc a Re i n gl de as -p ga ro na po nc rc ia i n de ga na C4 nc .5 ia - rb ol -g an C4 an C4 .5 ci -R .5 a eg - la rb sol ga -p ro na C4 po nc .5 rc ia -R i eg n de la sga pr na op nc or ci ia n de ga na nc ia


Figura 5.12: Porcentajes de error obtenidas en el dominio Estudio sobre hongos

ID 3

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Este es un problema general de la ganancia y es una de las razones por las que se comenz a utilizar la proporcin de ganancia.

50 45 40 35 30 25 20 15 10 5 0

44 32 25 25

ID3-rbolganancia

C4.5-rbolganancia

ID3-rbolproporcin de ganancia

C4.5-rbolproporcin de ganancia

Figura 5.13: Tamao de los rboles de decisin obtenidos en el dominio Estudio sobre hongos

30 25 20 15 10 5 0

26 19 13 15

ID3-Reglasganancia

C4.5-Reglasganancia

ID3-Reglasproporcin de ganancia

C4.5-Reglasproporcin de ganancia

Figura 5.14: Cantidad de reglas de decisin obtenidas en el dominio Estudio sobre hongos

Si comparamos los rboles obtenidos en cada caso, veremos que en los rboles generados con el C4.5 existen muchas ramas en las que N=E=0. Es decir, ramas que no cubren ningn caso, pero que existen porque el C4.5 toma la informacin de dominio y tiene en cuenta esos posibles valores al analizar la ganancia y la proporcin de ganancia en todos los casos. El ID3, en cambio, no tiene en cuenta informacin de dominio, entonces, trabaja con la hiptesis de que los nicos valores vlidos para los atributos son aquellos que ocurren en los datos.

186

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

5.6. ANLISIS GENERAL DE LOS RESULTADOS OBTENIDOS


5.6.1. Porcentaje de error
La figura 5.15 muestra el porcentaje de error obtenido con cada uno de los mtodos, para cada dominio. A simple vista nos damos cuenta que en los dominios de Crditos y Anlisis de Vidrios los porcentajes de error son altos para todos los mtodos.

60.00%

50.00%

40.00%

Crditos Cardiologa Votaciones

30.00%

Hongos Elita Hipotiroidismo

20.00%

Vidrios

10.00%

0.00% ID3-rboles- ID3-reglas- ID3-rboles- ID3-reglasganancia ganancia proporcin proporcin de ganancia de ganancia C4.5rbolesganancia C4.5-reglasganancia C4.5-reglasC4.5proporcin rbolespropocin de ganancia de ganancia

Figura 5.15: Porcentaje de error obtenido para cada uno de los mtodos en cada dominio de datos

En la figura 5.16 se han eliminado estos dos dominios para poder analizar ms claramente el porcentaje de error en el resto de los dominios. A partir de estos dos grficos, podramos decir que no hay un mtodo4 que genere un modelo claramente superior al resto para todos los dominios. Al contrario, podramos decir que el porcentaje de error en todos los casos no parece depender del mtodo utilizado sino del dominio analizado. Es decir, el rango de porcentajes de error dentro de cada uno de los dominios parecera estar acotado.

En este caso, por mtodo nos referimos a la combinacin de un algoritmo (ID3 o C4.5) utilizando ganancia o proporcin de

ganancia y generando un rbol o reglas de decisin (combinacin algoritmo criterio de decisin tipo de resultado).

Resultados

Magdalena Servente

187

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

7.00%

6.00%

5.00% Cardiologa 4.00% Votaciones Hongos 3.00% Elita Hipotiroidismo 2.00%

1.00%

0.00% ID3-rbolesganancia ID3-reglasganancia ID3-rboles- ID3-reglasproporcin proporcin de ganancia de ganancia C4.5rbolesganancia C4.5-reglasganancia C4.5-reglasC4.5proporcin rbolespropocin de ganancia de ganancia

Figura 5.16: Porcentaje de error obtenido para cada uno de los mtodos en distintos dominios de datos

5.6.2. Cantidad de datos de entrenamiento


En la figura 5.15 se presenta el porcentaje de error en funcin de la cantidad de datos de entrenamiento, con una lnea de tendencia logartmica para cada uno de los mtodos. A partir de este grfico podramos decir que el porcentaje de error disminuye a medida que aumenta la cantidad de datos de entrenamiento. Esto pareciera ser una conclusin lgica e intuitiva, y es similar a la forma en que aprendemos los humanos: cuando nos encontramos ante una situacin a la que nos hemos enfrentado mltiples veces, generalmente ya hemos aprendido cmo reaccionar.

A pesar de lo que muestra el grfico no podemos afirmar que la relacin menor porcentaje de error a mayor cantidad de datos de entrenamiento sea una regla absoluta que se cumple siempre. Para ello, habra que hacer una cantidad de pruebas que excede los alcances de este trabajo.

188

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

60.00%

C4.5-rboles-ganancia

50.00%

C4.5-reglas-ganancia

Porcentaje de error

40.00%

C4.5-rboles-propocin de ganancia

30.00%

C4.5-reglas-proporcin de ganancia

20.00% ID3-rboles-ganancia 10.00% ID3-reglas-ganancia 0.00% 0 -10.00% Cantidad de datos de entrenam iento ID3-reglas-proporcin de ganancia 1000 2000 3000 4000 5000 6000 ID3-rboles-proporcin de ganancia

Figura 5.15: Porcentaje de error en funcin de la cantidad de datos de entrenamiento. Se ha agregado una lnea de tendencia logartmica para cada uno de los mtodos.

Resultados

Magdalena Servente

189

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

190

Magdalena Servente

Resultados

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

CAPTULO 6 CONCLUSIONES

En este captulo se presentan las conclusiones del trabajo realizado. Primero se destacan los conceptos ms importantes a tener en cuenta a la hora de aplicar algn mtodo como el ID3 y el C4.5 (Seccin 6.1.1). Luego, se analiza la bsqueda que realizan estos dos mtodos en el espacio de hiptesis (Seccin 6.1.2). Se extraen conclusiones a partir de los resultados obtenidos (Seccin 6.2) y se analiza la solucin propuesta (Seccin 6.3). Finalmente, se plantean mejoras y temas a tener en cuenta para continuar con el desarrollo de este tipo de algoritmos de aprendizaje aplicados a la Minera de Datos (Seccin 6.4).

6.1. CONCLUSIONES GENERALES


6.1.1. Conceptos destacables
A partir del estudio realizado sobre la Minera de Datos y el Aprendizaje Automtico en general, y de los mtodos de la familia TDIDT en particular, podemos concluir que hay varios puntos claves a tener en cuenta al realizar Minera de Datos con algoritmos inteligentes. Entre ellos, podemos destacar:

El Aprendizaje de Conceptos puede verse como una bsqueda en un gran espacio de hiptesis predefinidas [Mitchell, 1997]. En el caso de la familia TDIDT este espacio de hiptesis, est constituido por todos los rboles de decisin posibles para los datos que se estn analizando.

Los datos ruidosos y faltantes pueden influir en la performance del algoritmo, y depende de cada mtodo en particular ser robusto o no ante estas situaciones.

Los algoritmos de aprendizaje son capaces de clasificar nuevos casos, nunca vistos para ellos, porque tienen un sesgo inductivo implcito, es decir, realizan alguna suposicin que les permite construir el modelo. En el caso de los algoritmos de la familia TDIDT, esta suposicin implcita se divide en dos:

1. Los datos sobre los que se construye el problema son representativos del dominio sobre el que se aplicar el modelo obtenido.

2. Las hiptesis (rboles de decisin en este caso) ms simples se prefieren sobre las hiptesis ms complejas, es decir, se aplica la Afeitadora de Occam.
Conclusiones Magdalena Servente 191

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Si el espacio de hiptesis se extendiera hasta cubrir todos los casos posibles, se eliminara este sesgo inductivo. Sin embargo, trabajar con todos los rboles de decisin posibles para un conjunto de datos, no permitira realizar la clasificacin de un caso no presente en los datos de entrenamiento, ya que no sera clasificado por ningn rbol. Es decir, un modelo totalmente insesgado, no podra clasificar nuevos casos [Mitchell, 1997].

Recordemos que no cualquier problema de Minera de Datos es apto para ser analizado mediante los algoritmos de la familia TDIDT. Debe cumplirse que las instancias estn constituidas por pares atributovalor, y que los resultados de la funcin de clasificacin sean discretos. Adems, es conveniente que los algoritmos sean capaces de trabajar con atributos ruidosos y con atributos faltantes.

6.1.2. Espacio de hiptesis


Como se destac en la seccin anterior, tanto el ID3 como el C4.5 realizan una bsqueda en un espacio de hiptesis constituido por los rboles de decisin posibles. El espacio de hiptesis para estos algoritmos es un espacio completo segn los atributos disponibles. Como cualquier funcin de prueba de valor de atributos puede representarse como un rbol de decisin, estos mtodos evitan uno de los mayores riesgos de los mtodos inductivos que trabajan con un espacio de hiptesis reducido: que la funcin resultado, en nuestro caso el rbol de decisin, no se encuentre en el espacio de hiptesis analizado.

A medida que exploran el espacio de hiptesis, los algoritmos analizados mantienen una sola hiptesis actual y no todas aquellas consistentes con los datos analizados. Esto ocasiona que estos mtodos no sean capaces de representar todos los rboles consistentes con los datos de entrada.

Por otro lado, recordemos que estos mtodos no tienen vuelta atrs. Es decir, una vez que se seleccion un atributo como nodo del rbol, ste nunca se cambiar; los algoritmos no vuelven atrs para reconsiderar sus elecciones. Esto ocasiona que los algoritmos sean susceptibles de caer en un mximo local y que converjan a una solucin que no es globalmente ptima [Mitchell, 1997]. El C4.5 agrega un cierto grado de reconsideracin de sus elecciones en la postpoda que realiza.

Por ltimo, cabe destacar que el ID3 y el C4.5 utilizan todos los datos de entrenamiento en cada paso para elegir el mejor atributo; esta eleccin se realiza estadsticamente. Esto es favorable frente a otros mtodos de aprendizaje automtico que analizan los datos de entrada en forma incremental. El hecho de tener en cuenta todos los datos disponibles en cada paso, resulta en una bsqueda mucho menos sensible a errores en casos individuales.

192

Magdalena Servente

Conclusiones

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

6.2. ANLISIS DE LOS RESULTADOS OBTENIDOS


Del anlisis de los resultados obtenidos podramos concluir que no hay ningn mtodo que sea predominante frente a los otros. Es decir, no podemos decir, por ejemplo, que el C4.5 que utiliza la ganancia es claramente superior en todos los dominios. Sin embargo, podemos afirmar que los resultados muestran que la proporcin de error parecera ser funcin del dominio. En cada dominio, la proporcin de error para los cuatro mtodos analizados es similar: si la proporcin de error es grande para alguno de los mtodos en un dominio, seguramente lo sea tambin para el resto de los mtodos. Si la proporcin de error para alguno de los cuatro mtodos en un dominio es pequea, probablemente tambin sea pequea con los otros tres mtodos.

Como lnea futura de trabajo, se propone analizar los datos de entrada con los cuatro mtodos (ID3 utilizando ganancia, ID3 utilizando proporcin de ganancia, C4.5 utilizando ganancia y C4.5 utilizando proporcin de ganancia) y elegir para el nuevo dominio, el modelo que presenta la menor proporcin de error. Teniendo en cuenta que si con el primer mtodo la proporcin de error es inaceptable, probablemente tambin sea inaceptable para el resto de los mtodos. En cuyo caso, convendra analizar el problema con otros mtodos de aprendizaje que enfoquen la resolucin del mismo desde otro ngulo.

La cantidad de datos presentada como entrada de los algoritmos debe ser la mayor posible, ya que los casos analizados parecen mostrar que proporcin de error disminuye a medida que la cantidad de datos de entrenamiento aumenta.

6.3. ANLISIS DE LA SOLUCIN PROPUESTA


A partir de la solucin propuesta y de los resultados analizados, podemos responder a las cuestiones planteadas en el Captulo 3:

Cuestin 1:

Qu tipos de sistemas generan como resultado rboles de decisin? La familia de los Top Down Induction Trees (TDIDT) analiza datos previamente clasificados y genera rboles de induccin para los mismos. Nuestro anlisis se enfoc en dos algoritmos de dicha familia, el ID3 creado por Quinlan a mediados de los aos 80 [Quinlan, 1986] y el C4.5 creado por Quinlan unos aos ms tarde [Quinlan, 1993d]. Estos algoritmos generan como resultado rboles de decisin que pueden aplicarse tanto por un operador humano como por una mquina para clasificar nuevos casos.

Conclusiones

Magdalena Servente

193

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Cuestin 2:

Qu condiciones deben cumplir los datos para que su anlisis con el ID3 o el C4.5 sea til y vlido? Como expresamos con anterioridad, no todos los datos son aptos para ser analizados con el ID3 y el C4.5. En lneas generales, estos algoritmos trabajan con problemas de clasificacin, es decir, problemas donde las instancias pertenecen o no a una clase. De esta manera, el rbol de decisin generado contiene en las hojas las distintas clases a las que pueden pertenecer los datos.

Cuestin 3:

Qu tan fcil es para un humano trabajar con estos algoritmos? Se plante el desarrollo de un ambiente integrado, en el que un usuario puede fcilmente aplicar estos dos algoritmos a bases de datos existentes. El usuario debe lidiar con una interface grfica mucho ms amigable de por s que la lnea de comandos, en donde, con una simple marca puede aplicar el ID3 o el C4.5 a la base de datos que seleccion previamente.

Cuestin 4:

Cules son los resultados del sistema? Adems, de producir los rboles de decisin, el sistema genera un conjunto de reglas de produccin que pueden aplicarse para clasificar nuevos casos. La interpretacin de este conjunto de reglas debe hacerse en orden: se leen hasta que el antecedente de alguna de las reglas satisfaga el caso en cuestin, entonces se lee el consecuente para obtener la clase. El sistema tambin presenta como resultado, la evaluacin de los modelos generados sobre un nuevo conjunto de datos de prueba.

Cuestin 5:

Cmo podemos medir la calidad de los resultados obtenidos? Una vez generado el modelo de decisin, el usuario puede elegir la opcin de evaluarlo contra un conjunto de datos de prueba, inditos para el sistema. Bsicamente, el sistema clasifica estos datos de prueba y compara las clases obtenidas contra las que debera haber obtenido, generando una matriz de clasificacin. De esta manera, se obtiene una medida de la calidad del sistema de informacin generado, bajo el supuesto que tanto los datos de entrenamiento como los de prueba sean representativos de la realidad a la cual el modelo de clasificacin generado se ver enfrentado una vez que entre en funcionamiento.

194

Magdalena Servente

Conclusiones

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

6.4. UNA MIRADA AL FUTURO


Los algoritmos analizados no clasifican perfectamente a todos los nuevos casos, a pesar de que los modelos de clasificacin presentados son entendibles y aceptables. Quedan cuestiones sin resolver, posibles mejoras y futuras lneas de trabajo que se plantean a continuacin

6.4.1. Atributos multivaluados en el ID3 y el C4.5


Cuando alguno de los algoritmos realiza la particin de los casos de entrenamiento segn los valores de los atributos siguiendo el mtodo de divide y reinars, los resultados son tiles en la medida en que los valores del atributo segn el cual se particiona no sean demasiados. Si existen demasiados valores para el atributo se presentan bsicamente dos inconvenientes:

1.

Una de las consecuencias de particionar un conjunto de entrenamiento en numerosos subconjuntos es que cada subconjunto es pequeo. Por lo tanto, aquellos patrones tiles del subconjunto pueden tornarse indetectables por insuficiencia de datos.

2.

Si los atributos discretos varan en forma notable en sus valores, podemos estar seguros de que un criterio como la proporcin de ganancia los est evaluando de la mejor manera? La proporcin de ganancia mide la proporcin de informacin relevante a la clasificacin, que provee la divisin sobre la informacin producida por la divisin en s. El denominador crece rpidamente a medida que la cantidad de subconjuntos se incrementa, por lo cual, el estimador deja de ser efectivo al existir muchos valores para un atributo. Recordemos el ejemplo del clculo de la informacin de la divisin sobre la clave primaria de un conjunto de datos (Seccin 4.2.1.1.2)

Si deseamos reducir el nmero de resultados de un atributo multivaluado, debemos asociar uno o ms de sus valores en una coleccin de valores de atributos o grupo de valores. En los primeros trabajos sobre el tema [Hunt et al., 1966] la nica forma de agrupar valores era mediante la divisin binaria o binarizacin, como la realizada por el C4.5.

En lugar de realizar este tipo de divisin, los algoritmos podran asociar cada grupo de valores con una de las ramas en cantidad variable. En algunos dominios, la agrupacin de valores podra determinarse de acuerdo a los conocimientos sobre el dominio. De esta manera, adems de mejorar el manejo de atributos multivaluados, estaramos incorporando informacin previa al sistema. De no existir agrupaciones determinables de acuerdo al dominio, debera seguirse otro mtodo. Si un atributo tiene n valores, existen 2n-1-1 divisiones binarias no triviales de estos valores, entonces para un valor de n grande se hace imposible explorar todas estas combinaciones.

Conclusiones

Magdalena Servente

195

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

En cuanto al ID3, que no maneja atributos continuos, podra incorporrsele la binarizacin utilizada por el C4.5, o un mtodo similar, para que pueda trabajar con atributos de este tipo. El ID3 tal como fue presentado, no puede aplicarse a todos los dominios, adems de descartarse los dominios con clases continuas, como en el C4.5, se descartan los dominios con cualquier atributo continuo. El agregado de una mejora de este tipo lo liberara de esta restriccin y no es demasiado cara.

6.4.2. El futuro de la Minera de Datos Inteligente


En qu medida podemos afirmar que la Minera de Datos Inteligente es efectiva? Ms an, cmo podemos estar seguros de que es til realizar Minera de Datos Inteligente frente a cualquier problema de Minera de Datos? Podemos afirmar que siempre ser efectivo aplicar, por ejemplo, la familia TDIDT cuando se busca obtener un modelo a partir de una gran cantidad de datos?

La Ley de Conservacin sostiene que ningn algoritmo puede superar a otro cuando la medida de performance es la precisin de generalizacin esperada, sobre la suposicin de que todos los resultados posibles son igualmente probables. El hecho de promediar la performance de un algoritmo sobre todos los casos posibles, asumiendo que todos son igualmente probables, sera como evaluar la performance de un auto en todos los terrenos posibles, asumiendo que todos son igualmente probables. Esta afirmacin es falsa para la prctica, ya que en un dominio en particular, es claro que no todos los casos son igualmente probables.

Quinlan, quien ha identificado familias de dominios paralelos y secuenciales, sostiene que las redes neuronales son ms eficientes en los dominios paralelos, mientras que los algoritmos que construyen rboles de decisin obtienen mejores resultados en los dominios secuenciales. Por lo tanto, aunque un nico algoritmo de induccin puede no ser ptimo en todas las situaciones posibles, debe analizarse el mejor algoritmo para cada situacin en particular.

El campo de la Minera de Datos es un campo en pleno desarrollo, donde la mayora de las herramientas utilizadas provienen de otros campos relacionados como el reconocimiento de patrones, la Estadstica o la teora de complejidad. Dada la novedad de las investigaciones en esta rea quedan todava varios problemas por afrontar, como ser el tamao de los datos y el ruido en los mismos.

En los ltimos aos se han desarrollado muchos sistemas de Minera de Datos y se espera que este desarrollo contine floreciendo dada la enorme cantidad de datos que son almacenados da a da, que requiere algn tipo de anlisis, entendimiento o clasificacin. La diversidad de los datos, y de las tcnicas y enfoques de la minera de datos, son un desafo para el crecimiento de este rea de la tecnologa.

196

Magdalena Servente

Conclusiones

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

ANEXO A MANUAL DEL USUARIO

En este Anexo se describen las caractersticas generales del sistema (Seccin A.1) y las funciones de cada uno de los menes (Seccin A.2), detallando las acciones que pueden realizarse con cada una de las opciones disponibles.

A.1. CARACTERSTICAS GENERALES


El objetivo del sistema desarrollado es permitir que el usuario realice una minera de datos sobre las tablas de su eleccin. La minera se lleva a cabo mediante dos algoritmos inteligentes de la familia de los rboles inductivos construidos de raz hacia las hojas (Top Down Induction Trees TDIDT): el ID3 y, su sucesor, el C4.5.

Cuando el usuario ingresa al sistema debe seleccionar la tabla sobre la cual desea trabajar y la columna de la tabla que servir como clasificador. Dicha tabla debe estar en formato de Paradox 4. Una vez seleccionada la tabla de trabajo, el usuario podr elegir el mtodo con el cual desea realizar la minera. Los mtodos disponibles son el ID3 utilizando la ganancia como criterio de decisin, el ID3 utilizando la proporcin de ganancia como criterio de decisin, el C4.5 utilizando la ganancia como criterio de decisin y el C4.5 utilizando la proporcin de ganancia con el mismo propsito.

Una vez finalizada la minera, el sistema mostrar en pantalla el rbol de decisin generado. El usuario tendr la opcin de guardar dicho rbol en disco. Adems, el sistema genera un conjunto de reglas de decisin. El formato de estas reglas es lo suficientemente general como para que puedan aplicarse y utilizarse a posteriori para clasificar datos cuya clase no se conoce. Es decir, tanto el rbol como las reglas nos sirven para comprender el modelo de clasificacin presente en los datos, y las reglas nos sirven para clasificar nuevos datos de la misma base de datos que no fueron utilizados por el sistema.

Manual del usuario

Magdalena Servente

197

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

A.2. FUNCIONALIDAD
A.2.1. Pantalla principal
Cuando el usuario ingresa al sistema se encontrar con la pantalla mostrada en la Figura A.1, donde podr ver un men de acceso rpido que detalla la tabla que el usuario eligi como predeterminada para trabajar, y el atributo clasificador de la misma. Si el usuario desea realizar una minera segn sus opciones por defecto puede hacerlo rpidamente, presionando los botones de ID3 o de C4.5, dependiendo en el tipo de mtodo que desee utilizar.

Figura A.1: Pantalla principal del sistema

A.2.2. Descripcin del men


A continuacin se detalla cada una de las funciones que se pueden realizar mediante las opciones del men del sistema.

198

Magdalena Servente

Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

A.2.2.1. Men Resolucin


A.2.2.1.1. ID3 Con la opcin ID3 del men Resolucin, se aplica el ID3 a la tabla elegida en la pantalla de Cambio de Tabla (Men Opciones/Cambio de Tabla). El ID3 puede aplicarse utilizando la ganancia o la proporcin de ganancia como criterio de decisin, el criterio de decisin se escoge segn la subopcin del men que el usuario elija.

A.2.2.1.2. C4.5 Al igual que con la opcin anterior, con la opcin C4.5 del men Resolucin, se aplica el C4.5 a la tabla elegida en la seccin de Cambio de Tabla (Men Opciones/Cambio de Tabla). Nuevamente, se utilizar la ganancia o la proporcin de ganancia de acuerdo a la opcin del men desplegable en que el usuario haya marcado.

A.2.2.1.3. Salir La opcin Salir del men Resolucin, cierra el programa.

A.2.2.2. Men Evaluacin


A.2.2.2.1. ID3 Cuando el usuario elige esta opcin se encuentra con la pantalla de la figura A.2 donde puede elegir una tabla y una corrida sobre la cual desea obtener una evaluacin de los resultados obtenidos. Por corrida, se entiende, una fecha y hora determinadas en las cuales se aplic el ID3 sobre la tabla. De esta manera, cuando el usuario hace clic sobre el botn Aceptar de esta pantalla, se realiza una evaluacin sobre los datos de la tabla de prueba predefinida por el usuario y se muestran la cantidad de casos clasificados correcta e incorrectamente para cada una de las clases de la tabla.

A.2.2.2.1. C4.5 Al hacer clic sobre esta opcin de men, el usuario podr evaluar de manera similar a la explicada en la seccin anterior, las corridas realizadas con el C4.5.

Manual del usuario

Magdalena Servente

199

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Figura A.2: Eleccin de la tabla y la corrida que se desean evaluar

A.2.2.3. Men Opciones


A.2.2.3.1. Ver Tabla Esta funcin muestra los datos de la tabla sobre la que se est trabajando.

A.2.2.3.2. Cambiar Tabla Esta opcin despliega la pantalla mostrada en la figura A.3 donde el usuario puede cambiar la tabla de trabajo y la columna del clasificador (clase) de la misma. Si el usuario hace clic en Aceptar esta tabla se utilizar para todas las corridas hasta que se cierre el sistema. Si el usuario hace clic en Aplicar esta tabla quedar predeterminada, con lo cual se utilizar para todas las corridas posteriores y para las corridas realizadas cuando se utilice el sistema por prxima vez; queda determinada como tabla por defecto.

A.2.2.3.3. Parmetros del sistema Esta pantalla, permite cambiar los parmetros generales de trabajo que utiliza el sistema por defecto. Los parmetros que se pueden cambiar son el sistema de minera por defecto: ID3 o C4.5; el criterio de decisin por defecto: ganancia o proporcin de ganancia; y si se realiza o no la poda del rbol de decisin obtenido.

200

Magdalena Servente

Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Figura A.3: Pantalla de cambio de tabla y eleccin de la clase

A.2.2.4. Men Ayuda


Este men despliega una ayuda para el usuario del sistema.

Manual del usuario

Magdalena Servente

201

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

202

Magdalena Servente

Manual del usuario

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

ANEXO B CONJUNTOS DE DATOS

En este Anexo se detallan los conjuntos de datos utilizados para realizar las pruebas descriptas en el Captulo 5. Para cada uno de los dominios, se muestran los conjuntos de datos de entrenamiento y prueba. Los datos presentados corresponden a los siguientes dominios: Crditos (Seccin B.1), Cardiologa (Seccin B.2), Votaciones (Seccin B.3), Estudio sobre hongos (Seccin B.4), Elita: Base de Asteroides (Seccin B.5), Hipotiroidismo (Seccin B.6), Identificacin de vidrios (Seccin B.7).

Los datos del anexo B se encuentran en el CD que acompaa este trabajo. Estn divididos en archivos segn los dominios a los que pertenecen:

Crditos: AnexoB-Creditos.doc

Cardiologa: AnexoB-Cardiologia.doc

Votaciones: AnexoB-Votaciones.doc

Estudio sobre hongos: AnexoB-Hongos.doc

Elita: Base de Asteroides: AnexoB-Asteroides.doc

Hipotiroidismo: AnexoB-Hipotiroidismo.doc

Identificacin de vidrios: AnexoB-Vidrios.doc.

Conjuntos de datos

Magdalena Servente

203

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

204

Magdalena Servente

Conjuntos de datos

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

ANEXO C DOCUMENTACIN DEL SISTEMA

Este anexo es un complemento a la explicacin de la funcionalidad del sistema de la Seccin 4.5. En la seccin C.1 se detalla la interaccin entre los mdulos del sistema. Las principales funciones de cada uno de estos mdulos se presentan en la seccin C.2. En la seccin C.3 se detallan las principales estructuras de datos utilizadas por el sistema.

C.1. INTERACCIN DE LOS MDULOS


El sistema est compuesto bsicamente por diez mdulos o formularios (archivos de extensin cpp), complementados por cuatro archivos de definiciones de tipos (archivos de extensin h y cpp) y un archivo de arranque del sistema (Archivo de extensin cpp). Este ltimo es el primero que corre al iniciar el programa y es quien inicializa los dems mdulos.

Existe un mdulo principal, el Uprincipal, desde donde se realizan los llamados a los dems mdulos. Este mdulo es el formulario principal con el cual interacta el usuario. El corazn del sistema reside en los mdulos UDMID3 y UDMC45, quienes aplican el ID3 y el C4.5 respectivamente.

La figura C.1 detalla la interaccin entre los mdulos del sistema. Las flechas representan los mensajes entre ellos. Hemos divididos los mdulos en cuatro grupos: mdulos de pantallas principales, mdulos de opciones generales, mdulos de Minera de Datos y mdulos de clases de datos. Los mdulos de pantallas principales son aquellos que representan la pantalla principal y el men de acceso rpido. Su objetivo es llamar a los otros mdulos para llevar a cabo las acciones que el usuario indica en los menes. Los mdulos de opciones generales son aquellos mdulos que realizan todas las operaciones comunes al ID3 y al C4.5, como el cambio de la tabla de datos, el cambio del criterio de decisin utilizado por defecto, o la eleccin de la tabla sobre la cual se desea evaluar el rendimiento, entre otros. Por otro lado, los mdulos de Minera de Datos son aquellos que construyen los rboles y las reglas de decisin a partir de las tablas, para ello utilizan las estructuras de datos definidas en los mdulos de clases de datos.

El mdulo TDIDT no pertenece a ninguno de estos grupos ya es el mdulo de inicio del programa.

Las funciones principales de cada uno de estos mdulos se detallan en la Seccin C.2.

Documentacin del sistema

Magdalena Servente

205

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Mdulos de clases de datos

UTipos

defns.h

Rulex.h

Types.h

TDIDT.cpp Inicializar

Utilizacin

Utilizacin

Inicializar

Mdulos de Minera de Datos

Mdulos de pantallas principales Inicializar UInfoGral Aplicar mtodo Aplicar ID3 UPrincipal Aplicar C4.5

UDMID3

UDMC45

Evaluar RendimientoMostrar rendimiento Determinar Evaluar Preferencias Rendimiento

Evaluar Rendimiento Mostrar rbol

Mostrar Mostrar rbol rendimiento

Mostrar Tabla

Cambiar Tabla

UBD

UCambioTabla

frmOpcionesSist

UElegirRendimiento

URendimiento

UArbol

Mdulos de Opciones Generales

Figura C.1:Esquema de la interaccin de los mdulos del sistema

C.2. DESCRIPCIN DE LOS ARCHIVOS FUENTE


C.2.1. TDIDT.cpp
Es el mdulo inicial del sistema. Inicializa las variables de entorno Windows, las libreras estndar y el mdulo de la Uprincipal, el mdulo UinfoGral y el mdulo DMID3.

206

Magdalena Servente

Documentacin del sistema

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

C.2.2. Mdulos de pantallas principales


C.2.2.1. UPrincipal
Este mdulo administra el men del sistema y transforma los clics del usuario en llamados a los procedimientos correspondientes.

C.2.2.2. UInfoGral
Este es un men de acceso rpido que aparece apenas se inicia el programa. El usuario puede elegir aplicar el ID3 o el C4.5 en las opciones previamente elegidas por defecto.

C.2.3. Mdulos de opciones generales


C.2.3.1. UBD
Lista por pantalla todos los casos de la tabla sobre la cual se est trabajando. Es un mdulo de consulta para el usuario.

C.2.3.2. UCambioTabla
Lista todos los datos de la tabla sobre la cual se est trabajando por pantalla. Permite que el usuario seleccione otra tabla sobre la cual trabajar, y permite determinar la clase de los datos, es decir, el campo de tabla que cumple la funcin de clasificador.

Si el usuario aplica los cambios, la eleccin de la tabla y del campo clasificador sern guardadas como elecciones por defecto. En cambio, si el usuario acepta los cambios, la tabla y el campo escogidos sern utilizados hasta que se cierre el programa o hasta que el usuario modifique su eleccin.

C.2.3.3. frmOpcionesSist
En esta pantalla el usuario puede modificar las opciones por defecto del sistema. Estas opciones son el mtodo (ID3 o C4.5) aplicado con mayor preferencia, el criterio de decisin (ganancia o proporcin de

Documentacin del sistema

Magdalena Servente

207

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

ganancia) utilizado y la poda o no por defecto. Estas opciones se utilizan cuando el usuario realiza la Minera de Datos a travs del men de acceso rpido detallado en la Seccin C.2.2.2.

C.2.3.4. UElegirRendimiento
Cuando el usuario desea evaluar el rendimiento de alguno de los modelos generados con el sistema, deber entrar en este mdulo para elegir la tabla sobre la que desea trabajar y la fecha y hora en que se gener el modelo que est tratando de evaluar. Una vez que el usuario ha determinado todos estos datos, se realiza la evaluacin del rendimiento del modelo escogido.

C.2.3.5. URendimiento
Muestra por pantalla la matriz de evaluacin del rendimiento del modelo escogido por el usuario en la pantalla descripta en la seccin C.2.3.4. La matriz de evaluacin muestra, para cada clase, la cantidad de casos que fueron evaluados correctamente y la cantidad de casos que fueron evaluados incorrectamente, segn lo descripto en el Captulo 5.

C.2.3.6. UArbol
Este mdulo muestra el rbol obtenido por pantalla. El usuario puede guardar este rbol en el archivo de texto de su preferencia.

C.2.4. Mdulos de minera de datos


C.2.4.1. UDMID3
Este mdulo agrupa todas las funciones necesarias para aplicar el ID3 a una tabla. Se utiliza tanto para generar el rbol de decisin como para construir las reglas de decisin y evaluar los modelos obtenidos.

208

Magdalena Servente

Documentacin del sistema

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

C.2.4.2. UDMC45
Al igual que el mdulo anterior, este mdulo agrupa todas las funciones necesarias para aplicar el C4.5 a una tabla. Genera el rbol y las reglas de decisin, y evala los modelos generados.

C.2.5. Mdulos de clases de datos

C.2.5.1. UTipos
En este modulo se definen todos los tipos de datos propios del sistema, principalmente aquellos utilizados por el ID3.

C.2.5.2. Types.h
En este modulo se definen todos los principales tipos de datos utilizados en el C4.5.

C.2.5.3. Defns.h
Este mdulo complementa al anterior, y define an ms tipos de datos utilizados por el C4.5.

C.2.5.4. Rulex.h
En este modulo se definen los tipos de datos necesarios para aplicar el C4.5

C.3. ESTRUCTURAS DE DATOS


C.3.1. Estructuras de datos generales
La clase Tparams es una clase general que guarda todos los parmetros necesarios para aplicar el C4.5 y el ID3. Su estructura se detalla a continuacin:

Documentacin del sistema

Magdalena Servente

209

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

class TParametros { public: AnsiString ArchivoIni; AnsiString NombreBD; AnsiString TablaBD; AnsiString TablaReglas; AnsiString ColClasificador; AnsiString ExtensionFileReglas; TStringList *LClasificadores; int iFormatoReglas; /* 0: Insight2+ 1: KappaPC 2: ambos 3: ninguno*/ int iSistema; /* 0: ID3 1: C4.5 */ int iCriterio; /* 0: Ganancia 1: Proporcin de ganancia */ int iPoda; /* 0: Si 1: No */ int iConjuntos; /* indica si las pruebas en el C4.5 se realizan sobre grupos de atributos discretos 0: Si 1: No */ int iMinObjs; /* Cantidad mnima de objetos que debe tener una rama en el C4.5 */ int iCF; /* Nivel de confianza para la poda en el C4.5 */ TParametros(AnsiString ArchIni); //constructor //Toma los parmetros del archivo .ini ~TParametros(); //destructor //Refresca los parmetros a partir del archivo .ini /*Devuelve 0 si no hubo problemas, -1 en caso contrario*/ int RefrescarParams(); //Guardar los parmetros en el .ini /*Devuelve 0 si no hubo problemas, -1 en caso contrario*/ int GrabarParams(); };

C.3.2. Estructuras de datos del ID3


La estructura principal utilizada por el ID3 es el rbol de decisin, implementado mediante el uso de punteros. Cada nodo del rbol de decisin contiene un indicador para determinar si es una hoja o un nodo, indica el descriptor que est evaluando, con sus valores vlidos, y tiene un vector de punteros a sus nodos hijos. La declaracin de este tipo de datos se muestra a continuacin.

typedef struct tree_node *tree_ptr; struct tree_node { short int flag_hoja;

/* 0 si es hoja y todos los valores son "Yes" 1 si es hoja y todos los valores son "No" 2 si es hoja y sus valores son mixtos 3 si no es hoja*/

int desc; tree_ptr pHijos[MAX_HIJOS]; //hijo derecho short int D[MAX_CANT_DESCRIPTORES];/*Descriptores vlidos para el nodo*/ }; typedef tree_ptr DECISION_TREE;

210

Magdalena Servente

Documentacin del sistema

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

C.3.4. Estructuras de datos del C4.5


La estructura del rbol utilizada en el C4.5 es similar a la detallada para el ID3 aunque tiene una mayor cantidad de objetos, necesarios para trabajar con atributos continuos. La definicin de esta estructura de datos se encuentra a continuacin.

typedef struct tree_record *Tree; struct tree_record { short NodeType; ClassNo Leaf; ItemCount Items, *ClassDist, Errors; Attribute Tested; short Forks; float Cut, Lower, Upper; Conjunto *Subset; Tree *Branch; }; typedef Tree DECISION_TREE_C45;

/* /* /* /* /* /* /* /* /* /* /* /*

0=hoja 1=rama 2=corte 3=subconj */ clase ms frecuente del nodo */ nro de items en el nodo */ distrib de clase de los items */ nro de errores en el nodo */ atribute referenciado en la prueba */ nro de ramas en el nodo */ lmite para los atrib continuos */ lmite inferior del valor lmite */ lmite superior del valor lmite */ subconj de valores discretos */ Branch[x] = (sub)rbol para el resultado x */

Documentacin del sistema

Magdalena Servente

211

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

212

Magdalena Servente

Documentacin del sistema

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

ANEXO D CDIGO FUENTE

En este anexo se presenta el cdigo fuente del sistema desarrollado. En la seccin D.1 se presenta el cdigo fuente del archivo TDIDT.cpp que es el archivo inicial del proyecto y es quien inicializa al resto de los formularios requeridos. En la seccin D.2 se presenta el cdigo fuente de las pantallas principales. A continuacin, se detallan los cdigos fuentes de los mdulos de opciones generales (Seccin D:3), de los mdulos de minera de datos (Seccin D.4) y de los mdulos de clases o estructuras de datos (Seccin D.5)

D.1. TDIDT.CPP
//--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop USERES("TDIDT.res"); USEFORM("UPrincipal.cpp", FormPrincipal); USEFORM("UArbol.cpp", frm_Arbol); USEFORM("UDMID3.cpp", DMID3); /* TDataModule: DesignClass */ USEUNIT("UTipos.cpp"); USEFORM("UBD.cpp", frmBD); USEFORM("frmOpcionesSist.cpp", frmOpciones); USEFORM("UInfoGral.cpp", frmInfoGral); USEFORM("URendimiento.cpp", FrmRendimiento); USEFORM("UElegirRendimiento.cpp", frmElegirRendimiento); USEFORM("UCambioTabla.cpp", frmCambioTabla); USEFILE("C45\defns.h"); USEFILE("C45\TYPES.h"); USEFORM("C45\UDMC45.cpp", DMC45); /* TDataModule: DesignClass */ USEFILE("C45\Rulex.h"); //--------------------------------------------------------------------------WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TDMID3), &DMID3); Application->CreateForm(__classid(TFormPrincipal), &FormPrincipal); Application->CreateForm(__classid(TfrmInfoGral), &frmInfoGral); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } return 0; }

Cdigo Fuente

Magdalena Servente

213

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

D.2. MDULOS DE PANTALLAS PRINCIPALES


D.2.1. UPrincipal
D.2.1.1. UPrincipal.h
//--------------------------------------------------------------------------#ifndef UPrincipalH #define UPrincipalH //--------------------------------------------------------------------------#include <Classes.hpp> #include <Menus.hpp> #include #include #include #include #include #include #include #include #include "frmOpcionesSist.h" "UDMID3.h" "UArbol.h" "UBD.h" "UInfoGral.h" "UElegirRendimiento.h" "URendimiento.h" "UCambioTabla.h" "UDMC45.h"

//--------------------------------------------------------------------------class TFormPrincipal : public TForm { __published: // IDE-managed Components TMainMenu *MenuPpal; TMenuItem *mnuGral; TMenuItem *mnuSep; TMenuItem *mnu_Salir; TMenuItem *mnuID3; TMenuItem *mnuC45; TMenuItem *mnuID3G; TMenuItem *mnuID3GR; TMenuItem *mnuC45G; TMenuItem *mnuC45GR; TMenuItem *mnuAyuda; TMenuItem *mnuHelpIndex; TMenuItem *mnuSep3; TMenuItem *mnuAcercaDe; TMenuItem *mnuEvaluacion; TMenuItem *mnuEvalID3; TMenuItem *mnuEvalC45; TMenuItem *mnuOpciones; TMenuItem *mnuTabla; TMenuItem *mnuCambiarTabla; TMenuItem *mnuParametros; void __fastcall FormCreate(TObject *Sender); void __fastcall FormClose(TObject *Sender, TCloseAction &Action); void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose); void __fastcall mnu_ID3GainClick(TObject *Sender); void __fastcall mnu_ID3GainRatioClick(TObject *Sender); void __fastcall mnu_SalirClick(TObject *Sender); void __fastcall mnuID3GClick(TObject *Sender); void __fastcall mnuID3GRClick(TObject *Sender); void __fastcall FormShow(TObject *Sender); void __fastcall mnuEvalID3Click(TObject *Sender); void __fastcall mnuTablaClick(TObject *Sender); void __fastcall mnuParametrosClick(TObject *Sender); void __fastcall mnuCambiarTablaClick(TObject *Sender); void __fastcall mnuEvalC45Click(TObject *Sender); void __fastcall mnuC45GClick(TObject *Sender); void __fastcall mnuC45GRClick(TObject *Sender); private: TParametros *Params; public: __fastcall TFormPrincipal(TComponent* Owner); // void ActualizarParametros(TStringList *ListaParam); /* Esta funcin actualiza los parmetros del formulario La lista de parmetros debe tener el siguiente orden: ExtensionArchivoReglas; AliasBD; TablaBD ColClasificador; Lista de Clasificadores*/ 214 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

void ID3(short int MedidorGanancia); //llama al algoritmo ID3 sobre la tabla actual int EvalRendimiento; //indica si el usuario desea evaluar el rendimiento de una corrida o no }; //--------------------------------------------------------------------------extern PACKAGE TFormPrincipal *FormPrincipal; //--------------------------------------------------------------------------#endif

D.2.1.1. UPrincipal.cpp
//--------------------------------------------------------------------------#pragma hdrstop #include "UPrincipal.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TFormPrincipal *FormPrincipal; Tfrm_Arbol *frm_Arbol; TfrmOpciones *frmOpciones; TfrmElegirRendimiento *frmElegirRendimiento; TFrmRendimiento *FrmRendimiento; TfrmBD *frmBD; TfrmCambioTabla *frmCambioTabla; //----------------------------------------------------------------------------//----------------------------------------------------------------------------// IMPLEMENTACION //----------------------------------------------------------------------------//----------------------------------------------------------------------------__fastcall TFormPrincipal::TFormPrincipal(TComponent* Owner) : TForm(Owner) { Params=new TParametros("Gap.ini"); } //--------------------------------------------------------------------------void __fastcall TFormPrincipal::FormCreate(TObject *Sender) { DMID3->RecibirParametros(Params); } //--------------------------------------------------------------------------void __fastcall TFormPrincipal::FormClose(TObject *Sender, TCloseAction &Action) { delete Params; } //---------------------------------------------------------------------------

void __fastcall TFormPrincipal::FormCloseQuery(TObject *Sender, bool &CanClose) { int rta; rta=MessageBox(FormPrincipal->Handle, "Est seguro de que desea salir de la aplicacin?", "Tesis", MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON1|MB_SYSTEMMODAL); if (rta==IDNO) //el usuario no desea salir de la aplicacin CanClose=false; } //---------------------------------------------------------------------------

void __fastcall TFormPrincipal::mnu_ID3GainClick(TObject *Sender) { ID3(0); } Cdigo Fuente Magdalena Servente 215

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

//--------------------------------------------------------------------------void __fastcall TFormPrincipal::mnu_ID3GainRatioClick(TObject *Sender) { ID3(1); } //--------------------------------------------------------------------------void TFormPrincipal::ID3(short int MedidorGanancia) {tree_ptr pRoot; TVecValores VecVal, VecDesc; int i; Cursor=crHourGlass; DMID3->RecibirParametros(Params); pRoot=DMID3->Principal(MedidorGanancia); DMID3->PruneTree(pRoot); DMID3->InformarValores(VecVal); DMID3->InformarDescrip(VecDesc); frm_Arbol= new Tfrm_Arbol(this); frm_Arbol->Cursor=crHourGlass; frm_Arbol->RecibirParametros(Params->LClasificadores,VecVal,VecDesc); frm_Arbol->PrintTree(pRoot); DMID3->ArmarReglas(pRoot); DMID3->EliminarTree(pRoot); free(pRoot); frm_Arbol->Cursor=crArrow; FormPrincipal->Cursor=crArrow; for (i=0;i<MAX_NIVELES;i++) { VecVal[i].~AnsiString(); VecDesc[i].~AnsiString(); } }

//--------------------------------------------------------------------------void __fastcall TFormPrincipal::mnu_SalirClick(TObject *Sender) { FormPrincipal->Close(); } //---------------------------------------------------------------------------

void __fastcall TFormPrincipal::mnuID3GClick(TObject *Sender) { ID3(0); } //--------------------------------------------------------------------------void __fastcall TFormPrincipal::mnuID3GRClick(TObject *Sender) { ID3(1); } void __fastcall TFormPrincipal::FormShow(TObject *Sender) { frmInfoGral->RecibirParametros(Params->TablaBD,Params->ColClasificador,Params>iCriterio); } //--------------------------------------------------------------------------void __fastcall TFormPrincipal::mnuEvalID3Click(TObject *Sender) { EvalRendimiento=0; frmElegirRendimiento= new TfrmElegirRendimiento(this); frmElegirRendimiento->ActualizarDatos(0,Params->NombreBD); frmElegirRendimiento->ShowModal(); if (EvalRendimiento==0) { FrmRendimiento= new TFrmRendimiento(this); FrmRendimiento->Cursor=crHourGlass; 216 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

DMID3->EvaluarReglas(frmElegirRendimiento->CodigoReglas); FrmRendimiento->Cursor=crArrow; } } //--------------------------------------------------------------------------void __fastcall TFormPrincipal::mnuTablaClick(TObject *Sender) { frmBD=new TfrmBD(this); frmBD->RecibirParametros(Params); } //--------------------------------------------------------------------------void __fastcall TFormPrincipal::mnuParametrosClick(TObject *Sender) { frmOpciones=new TfrmOpciones(this); frmOpciones->RecibirParametros(Params); frmOpciones->Show(); } //--------------------------------------------------------------------------void __fastcall TFormPrincipal::mnuCambiarTablaClick(TObject *Sender) { frmCambioTabla=new TfrmCambioTabla(this); frmCambioTabla->RecibirParametros(Params); frmCambioTabla->Show(); } //--------------------------------------------------------------------------void __fastcall TFormPrincipal::mnuEvalC45Click(TObject *Sender) { EvalRendimiento=0; frmElegirRendimiento= new TfrmElegirRendimiento(this); frmElegirRendimiento->ActualizarDatos(0,Params->NombreBD); frmElegirRendimiento->ShowModal(); if (EvalRendimiento==0) { FrmRendimiento= new TFrmRendimiento(this); FrmRendimiento->Cursor=crHourGlass; DMC45->EvaluacionRendimiento(); FrmRendimiento->Cursor=crArrow; } } //--------------------------------------------------------------------------void __fastcall TFormPrincipal::mnuC45GClick(TObject *Sender) { Params->iCriterio=0; DMC45->RecibirParametros(Params); DMC45->C45(); } //--------------------------------------------------------------------------void __fastcall TFormPrincipal::mnuC45GRClick(TObject *Sender) { Params->iCriterio=1; DMC45->RecibirParametros(Params); DMC45->C45(); } //---------------------------------------------------------------------------

D.2.2. UInfoGral
D.2.2.1. UInfoGral.h
//--------------------------------------------------------------------------#ifndef UInfoGralH #define UInfoGralH Cdigo Fuente Magdalena Servente 217

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

//--------------------------------------------------------------------------#include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Buttons.hpp> #include "UPrincipal.h" //--------------------------------------------------------------------------class TfrmInfoGral : public TForm { __published: // IDE-managed Components TLabel *lblTabla; TLabel *lblClase; TEdit *txtClase; TEdit *txtTabla; TBitBtn *BtnC45; TBitBtn *BtnID3; void __fastcall FormClose(TObject *Sender, TCloseAction &Action); void __fastcall BtnID3Click(TObject *Sender); private: short MedidorGanancia; public: __fastcall TfrmInfoGral(TComponent* Owner); void RecibirParametros(AnsiString tabla, AnsiString clase, short Ganancia); }; //--------------------------------------------------------------------------extern PACKAGE TfrmInfoGral *frmInfoGral; //--------------------------------------------------------------------------#endif

D.2.2.2. UInfoGral.cpp
//--------------------------------------------------------------------------#pragma hdrstop #include "UInfoGral.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TfrmInfoGral *frmInfoGral; //--------------------------------------------------------------------------__fastcall TfrmInfoGral::TfrmInfoGral(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TfrmInfoGral::FormClose(TObject *Sender, TCloseAction &Action) { Action = caFree; } //--------------------------------------------------------------------------void TfrmInfoGral::RecibirParametros(AnsiString tabla, AnsiString clase, short Ganancia) { txtTabla->Text=tabla; txtClase->Text=clase; MedidorGanancia=Ganancia; } void __fastcall TfrmInfoGral::BtnID3Click(TObject *Sender) { TFormPrincipal *pForm; pForm=FormPrincipal; pForm->Cursor=crHourGlass; pForm->ID3(MedidorGanancia); pForm->Cursor=crArrow; } //---------------------------------------------------------------------------

218

Magdalena Servente

Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

D.3. MDULOS DE OPCIONES GENERALES


D.3.1. UBD
D.3.1.1. UBD.h
//--------------------------------------------------------------------------#ifndef UBDH #define UBDH //--------------------------------------------------------------------------#include <Classes.hpp> #include <Controls.hpp> #include <Db.hpp> #include <DBGrids.hpp> #include <DBTables.hpp> #include <Grids.hpp> #include "UDMID3.h" //--------------------------------------------------------------------------class TfrmBD : public TForm { __published: // IDE-managed Components TDBGrid *DBGrid; TDataSource *DSTabla; TTable *Tabla; void __fastcall FormClose(TObject *Sender, TCloseAction &Action); private: /*Parmetros de la base sobre la que trabajaremos*/ TParametros *Params; public: __fastcall TfrmBD(TComponent* Owner); void RecibirParametros(TParametros *Parametros); }; //--------------------------------------------------------------------------extern PACKAGE TfrmBD *frmBD; //--------------------------------------------------------------------------#endif

D.3.1.2. UBD.cpp
//--------------------------------------------------------------------------#pragma hdrstop #include "UBD.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TfrmBD *frmBD; //--------------------------------------------------------------------------__fastcall TfrmBD::TfrmBD(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TfrmBD::FormClose(TObject *Sender, TCloseAction &Action) { Action = caFree; } //--------------------------------------------------------------------------void TfrmBD::RecibirParametros(TParametros *Parametros) { Params=Parametros; Tabla->DatabaseName=Params->NombreBD; Tabla->TableName=Params->TablaBD; Tabla->Active=true; }

Cdigo Fuente

Magdalena Servente

219

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

D.3.2. UCambioTabla
D.3.2.1. UCambioTabla.h
//--------------------------------------------------------------------------#ifndef UCambioTablaH #define UCambioTablaH //--------------------------------------------------------------------------#include <Buttons.hpp> #include <Classes.hpp> #include <Controls.hpp> #include <Db.hpp> #include <DBGrids.hpp> #include <DBTables.hpp> #include <Dialogs.hpp> #include <Grids.hpp> #include <StdCtrls.hpp> #include "UTipos.h" #include "UDMID3.h" #include "UInfoGral.h" //--------------------------------------------------------------------------class TfrmCambioTabla : public TForm { __published: // IDE-managed Components TDBGrid *DBGrid; TDataSource *DSTabla; TTable *Tabla; TEdit *txt_Tabla; TBitBtn *Btn_fod; TOpenDialog *fod_TablaBD; TLabel *lbl_TablaBD; TLabel *lbl_nbeColClasif; TComboBox *cbo_ColClasif; TBitBtn *btn_Aceptar; TBitBtn *btn_Cancelar; TBitBtn *btn_Aplicar; void __fastcall FormClose(TObject *Sender, TCloseAction &Action); void __fastcall Btn_fodClick(TObject *Sender); void __fastcall btn_CancelarClick(TObject *Sender); void __fastcall btn_AceptarClick(TObject *Sender); void __fastcall btn_AplicarClick(TObject *Sender); void __fastcall txt_TablaChange(TObject *Sender); void __fastcall cbo_ColClasifChange(TObject *Sender); private: /*Parmetros de la base sobre la que trabajaremos*/ TParametros *Params; void CargarCombo(); int ActualizarCambios(); /*Devuelve: 0: si los cambios fueron exitosos 1: si hubo problemas*/ public: __fastcall TfrmCambioTabla(TComponent* Owner); void RecibirParametros(TParametros *Parametros); }; //--------------------------------------------------------------------------extern PACKAGE TfrmCambioTabla *frmCambioTabla; //--------------------------------------------------------------------------#endif

D.3.2.2. UCambioTabla.cpp
//--------------------------------------------------------------------------#pragma hdrstop #include "UCambioTabla.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" 220 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

TfrmCambioTabla *frmCambioTabla; //--------------------------------------------------------------------------__fastcall TfrmCambioTabla::TfrmCambioTabla(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TfrmCambioTabla::FormClose(TObject *Sender, TCloseAction &Action) { Action = caFree; } //--------------------------------------------------------------------------void TfrmCambioTabla::RecibirParametros(TParametros *Parametros) { Params=Parametros; //Cargamos los datos relacionados con la Base de Datos fod_TablaBD->FileName=Params->TablaBD; txt_Tabla->Text=Params->TablaBD; Tabla->TableName=Params->TablaBD; Tabla->DatabaseName=Params->NombreBD; Tabla->Active=true; CargarCombo(); btn_Aplicar->Enabled=false; }

//--------------------------------------------------------------------------void __fastcall TfrmCambioTabla::Btn_fodClick(TObject *Sender) { bool res; int index; AnsiString TablaBD;

res=fod_TablaBD->Execute(); if (res) { TablaBD=fod_TablaBD->FileName; index=TablaBD.LastDelimiter("\\"); TablaBD=TablaBD.SubString(index+1,TablaBD.Length()-index); txt_Tabla->Text=TablaBD; Tabla->Active=false; Tabla->TableName=TablaBD; Tabla->Active=true; cbo_ColClasif->Clear(); CargarCombo(); } TablaBD.~AnsiString(); } //--------------------------------------------------------------------------void __fastcall TfrmCambioTabla::btn_CancelarClick(TObject *Sender) { Close(); } //--------------------------------------------------------------------------void __fastcall TfrmCambioTabla::btn_AceptarClick(TObject *Sender) { if (ActualizarCambios()==0) Close(); } //--------------------------------------------------------------------------void TfrmCambioTabla::CargarCombo() { TStringList *listaCpos = new TStringList(); int i; bool fin; Tabla->GetFieldNames(listaCpos); cbo_ColClasif->Items->AddStrings(listaCpos); i=0; while (i<=cbo_ColClasif->Items->Count) { if (AnsiCompareText(cbo_ColClasif->Items->Strings[i].Trim(),"NIVEL")==0) cbo_ColClasif->Items->Delete(i); else Cdigo Fuente Magdalena Servente 221

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

i++; } fin=false; i=0; while (i<=cbo_ColClasif->Items->Count && !fin) { if (AnsiCompareText(cbo_ColClasif->Items->Strings[i].Trim(),Params>ColClasificador.Trim())==0) { cbo_ColClasif->ItemIndex=i; fin=true; } i++; } delete(listaCpos); }

//--------------------------------------------------------------------------int TfrmCambioTabla::ActualizarCambios() /*Devuelve: 0: si los cambios fueron exitosos 1: si hubo problemas*/ { AnsiString TablaAnterior; AnsiString sqlstring; TQuery *QValoresClasif=new TQuery(frmCambioTabla); int res; try { res=0; if (Params->TablaBD!=txt_Tabla->Text) //actualizamos los datos de la tabla { Params->TablaBD=txt_Tabla->Text; TablaAnterior=DMID3->TTennis->TableName; DMID3->TTennis->Active=false; DMID3->TTennis->DatabaseName=Params->NombreBD; DMID3->TTennis->TableName=Params->TablaBD; DMID3->TTennis->Active=true; //Inicializamos los queries que harn sus consultas sobre la base //especificada DMID3->QGral->DatabaseName=Params->NombreBD; //Inicializamos el campo Nivel en la Tabla sqlstring="Update "; AppendStr(sqlstring, Params->TablaBD); AppendStr(sqlstring," SET Nivel = 0 "); DMID3->QGral->SQL->Clear(); DMID3->QGral->SQL->Add(sqlstring); DMID3->QGral->ExecSQL(); DMID3->QGral->SQL->Clear(); DMID3->TTennis->Close(); DMID3->TTennis->Open(); } if (Params->ColClasificador!=cbo_ColClasif->Text) //Cambiamos la columna del clasificador { if (cbo_ColClasif->Text.Trim()=="") { ShowMessage("El nombre de la Columna del Clasificador no puede quedar en blanco"); cbo_ColClasif->SetFocus(); res=1; } else { Params->ColClasificador=cbo_ColClasif->Text; //Actualizamos la lista de Clasificadores sqlstring="SELECT DISTINCT(" + Params->ColClasificador + ") as Clasif FROM " + Params->TablaBD; QValoresClasif->DatabaseName=Params->NombreBD; QValoresClasif->SQL->Clear(); QValoresClasif->SQL->Add(sqlstring); QValoresClasif->Open(); 222 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

QValoresClasif->Last(); QValoresClasif->First(); Params->LClasificadores->Clear(); while (!QValoresClasif->Eof) { Params->LClasificadores->Add(QValoresClasif>FieldByName("Clasif")->AsString); QValoresClasif->Next(); } res=0; } } frmInfoGral->RecibirParametros(Params->TablaBD,Params->ColClasificador, Params->iCriterio); } catch(...) { ShowMessage("Problemas con la Base de Datos, no podr cambiar de tabla"); //Restauramos los valores anteriores DMID3->TTennis->Active=false; DMID3->TTennis->DatabaseName=Params->NombreBD; Params->TablaBD=TablaAnterior; DMID3->TTennis->TableName=Params->TablaBD; DMID3->TTennis->Active=true; //Inicializamos los queries que harn sus consultas sobre la base //especificada DMID3->QGral->DatabaseName=Params->NombreBD; cbo_ColClasif->Clear(); CargarCombo(); res=1; } sqlstring.~AnsiString(); TablaAnterior.~AnsiString(); delete(QValoresClasif); return(res); } //--------------------------------------------------------------------------void __fastcall TfrmCambioTabla::btn_AplicarClick(TObject *Sender) { ActualizarCambios(); Params->GrabarParams(); btn_Aplicar->Enabled=false; }

void __fastcall TfrmCambioTabla::txt_TablaChange(TObject *Sender) { btn_Aplicar->Enabled=true; } //--------------------------------------------------------------------------void __fastcall TfrmCambioTabla::cbo_ColClasifChange(TObject *Sender) { btn_Aplicar->Enabled=true; } //---------------------------------------------------------------------------

D.3.3. frmOpcionesSist
D.3.3.1. frmOpcionesSist.h
//--------------------------------------------------------------------------#ifndef frmOpcionesSistH #define frmOpcionesSistH //--------------------------------------------------------------------------#include <Buttons.hpp> #include <Classes.hpp> Cdigo Fuente Magdalena Servente 223

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

#include <Controls.hpp> #include <ExtCtrls.hpp> #include <StdCtrls.hpp> #include "UPrincipal.h" #include "UTipos.h" //-------------------------------------------------------------------------class TfrmOpciones : public TForm { __published: // IDE-managed Components TRadioGroup *rgSistema; TRadioGroup *rgCriterio; TRadioGroup *rgPoda; TBitBtn *btn_Aplicar; TBitBtn *btn_Cancelar; TBitBtn *btn_Aceptar; void __fastcall FormClose(TObject *Sender, TCloseAction &Action); void __fastcall btn_CancelarClick(TObject *Sender); void __fastcall btn_AceptarClick(TObject *Sender); void __fastcall btn_AplicarClick(TObject *Sender); private: // User declarations TParametros *Params; public: // User declarations __fastcall TfrmOpciones(TComponent* Owner); void RecibirParametros(TParametros *Parametros); }; //--------------------------------------------------------------------------extern PACKAGE TfrmOpciones *frmOpciones; //--------------------------------------------------------------------------#endif

D.3.3.2. frmOpcionesSist.cpp
//--------------------------------------------------------------------------#pragma hdrstop #include "frmOpcionesSist.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TfrmOpciones *frmOpciones;

//--------------------------------------------------------------------------__fastcall TfrmOpciones::TfrmOpciones(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TfrmOpciones::FormClose(TObject *Sender, TCloseAction &Action) { Action = caFree; } //--------------------------------------------------------------------------void TfrmOpciones::RecibirParametros(TParametros *Parametros) { Params=Parametros; //Cargamos los datos del sistema rgSistema->ItemIndex=Params->iSistema; //Cargamos los datos del Criterio de Evaluacin rgCriterio->ItemIndex=Params->iCriterio; //Cargamos los datos de la poda rgPoda->ItemIndex=Params->iPoda; } void __fastcall TfrmOpciones::btn_CancelarClick(TObject *Sender) { 224 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Close(); } //--------------------------------------------------------------------------void __fastcall TfrmOpciones::btn_AceptarClick(TObject *Sender) { int cerrar; int rta; cerrar=0; Params->iSistema=rgSistema->ItemIndex; Params->iCriterio=rgCriterio->ItemIndex; Params->iPoda=rgPoda->ItemIndex; Params->iFormatoReglas=1; if (cerrar==0) Close(); } //--------------------------------------------------------------------------void __fastcall TfrmOpciones::btn_AplicarClick(TObject *Sender) { Params->iSistema=rgSistema->ItemIndex; Params->iCriterio=rgCriterio->ItemIndex; Params->iPoda=rgPoda->ItemIndex; Params->iFormatoReglas=1; Params->GrabarParams(); } //---------------------------------------------------------------------------

D.3.4. UElegirRendimiento
D.3.4.1. UElegirRendimiento.h
//--------------------------------------------------------------------------#ifndef UElegirRendimientoH #define UElegirRendimientoH //--------------------------------------------------------------------------#include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <ExtCtrls.hpp> #include <Buttons.hpp> #include <DBTables.hpp> #include <Dialogs.hpp> #include "UPrincipal.h" //--------------------------------------------------------------------------class TfrmElegirRendimiento : public TForm { __published: // IDE-managed Components TRadioGroup *rgCorrida; TGroupBox *gbSeleccionar; TLabel *lblTabla; TLabel *lblFecha; TComboBox *cbTabla; TComboBox *cbFecha; TBitBtn *btn_Cancelar; TBitBtn *btn_Aceptar; void __fastcall FormClose(TObject *Sender, TCloseAction &Action); void __fastcall btn_CancelarClick(TObject *Sender); void __fastcall rgCorridaClick(TObject *Sender); void __fastcall btn_AceptarClick(TObject *Sender); void __fastcall cbTablaChange(TObject *Sender); private: AnsiString Base; int Tipo; void CargarCboFechora(); public: int CodigoReglas; __fastcall TfrmElegirRendimiento(TComponent* Owner); Cdigo Fuente Magdalena Servente 225

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

void ActualizarDatos(int iTipo, AnsiString NombreBD); /* iTipo 0: ID3 1:C4.5*/ }; //--------------------------------------------------------------------------extern PACKAGE TfrmElegirRendimiento *frmElegirRendimiento; //--------------------------------------------------------------------------#endif

D.3.4.2. UElegirRendmiento.cpp
//--------------------------------------------------------------------------#pragma hdrstop #include "UElegirRendimiento.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TfrmElegirRendimiento *frmElegirRendimiento;

//--------------------------------------------------------------------------__fastcall TfrmElegirRendimiento::TfrmElegirRendimiento(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TfrmElegirRendimiento::FormClose(TObject *Sender, TCloseAction &Action) { Action = caFree; } //--------------------------------------------------------------------------void __fastcall TfrmElegirRendimiento::btn_CancelarClick(TObject *Sender) { FormPrincipal->EvalRendimiento=1; Close(); } //--------------------------------------------------------------------------void __fastcall TfrmElegirRendimiento::rgCorridaClick(TObject *Sender) { if (rgCorrida->ItemIndex==1) gbSeleccionar->Enabled=true; else gbSeleccionar->Enabled=false; } //---------------------------------------------------------------------------

void TfrmElegirRendimiento::ActualizarDatos(int iTipo, AnsiString NombreBD) { TQuery *QTabla=new TQuery(frmElegirRendimiento); AnsiString sqlstring; try { Base=NombreBD; Tipo=iTipo; QTabla->DatabaseName=NombreBD; sqlstring="SELECT distinct(Nombre_Tabla) FROM UpdatesHeader.db WHERE Metodo='"; if (iTipo==0) AppendStr(sqlstring,"ID3'"); else AppendStr(sqlstring,"C45'"); AppendStr(sqlstring,"ORDER BY Nombre_Tabla"); QTabla->SQL->Clear(); QTabla->SQL->Add(sqlstring); QTabla->Open(); QTabla->First(); while (!QTabla->Eof) { cbTabla->Items->Add(QTabla->FieldByName("Nombre_Tabla")->AsString); 226 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

QTabla->Next(); } cbTabla->ItemIndex=0; CargarCboFechora(); sqlstring.~AnsiString(); delete(QTabla); } catch(...) {ShowMessage("No se pudieron obtener los datos de la tabla de evaluacin"); sqlstring.~AnsiString(); delete(QTabla);} } //--------------------------------------------------------------------------void __fastcall TfrmElegirRendimiento::btn_AceptarClick(TObject *Sender) { TQuery *QTabla=new TQuery(frmElegirRendimiento); AnsiString sqlstring; try { QTabla->DatabaseName=Base; if (rgCorrida->ItemIndex==0) { /* sqlstring="SELECT Max(Codigo)as Codigo FROM UpdatesHeader.db WHERE Nombre_Tabla='" + cbTabla->Text +"' AND Metodo='"; */ sqlstring="SELECT Max(Codigo) as Codigo FROM UpdatesHeader.db WHERE Metodo='"; if (Tipo==0) AppendStr(sqlstring,"ID3'"); else AppendStr(sqlstring,"C45'"); } else { sqlstring="SELECT Codigo FROM UpdatesHeader.db WHERE Nombre_Tabla='" + cbTabla->Text +"' AND Metodo='"; if (Tipo==0) AppendStr(sqlstring,"ID3'"); else AppendStr(sqlstring,"C45'"); AppendStr(sqlstring,"AND Fecha='"); AppendStr(sqlstring,cbFecha->Text.SubString(0,8)); AppendStr(sqlstring,"' AND Hora='"); AppendStr(sqlstring,Trim(cbFecha->Text.SubString(9,cbFecha>Text.Length()-8))); AppendStr(sqlstring,"'"); } QTabla->SQL->Clear(); QTabla->SQL->Add(sqlstring); QTabla->Open(); CodigoReglas=QTabla->FieldByName("Codigo")->AsInteger; QTabla->First(); sqlstring.~AnsiString(); delete(QTabla); } catch(...) {ShowMessage("Problemas con la Base de Datos, no se pudo recuperar la tabla a procesar."); sqlstring.~AnsiString(); delete(QTabla);} } //--------------------------------------------------------------------------void __fastcall TfrmElegirRendimiento::cbTablaChange(TObject *Sender) { CargarCboFechora(); } void TfrmElegirRendimiento::CargarCboFechora() {TQuery *QTabla=new TQuery(frmElegirRendimiento); AnsiString sqlstring;

Cdigo Fuente

Magdalena Servente

227

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

if (cbTabla->Text!="") { try { QTabla->DatabaseName=Base; sqlstring="SELECT Fecha, Hora FROM UpdatesHeader.db WHERE Metodo='"; if (Tipo==0) AppendStr(sqlstring,"ID3'"); else AppendStr(sqlstring,"C45'"); AppendStr(sqlstring, " AND Nombre_Tabla='"); AppendStr(sqlstring,cbTabla->Text); AppendStr(sqlstring,"' ORDER BY Fecha DESC"); QTabla->SQL->Clear(); QTabla->SQL->Add(sqlstring); QTabla->Open(); QTabla->First(); cbFecha->Clear(); while (!QTabla->Eof) { sqlstring=QTabla->FieldByName("Fecha")->AsString + " " + QTabla>FieldByName("Hora")->AsString; cbFecha->Items->Add(sqlstring); QTabla->Next(); } cbFecha->ItemIndex=0; } catch(...) {ShowMessage("No se pudieron obtener los datos de la tabla de evaluacin");} } sqlstring.~AnsiString(); delete(QTabla); } //---------------------------------------------------------------------------

D.3.5. URendimiento
D.3.5.1. URendimiento.h
//--------------------------------------------------------------------------#ifndef URendimientoH #define URendimientoH #include <Classes.hpp> #include <Controls.hpp> #include <Grids.hpp> //--------------------------------------------------------------------------class TFrmRendimiento : public TForm { __published: // IDE-managed Components TStringGrid *GridResultados; void __fastcall FormClose(TObject *Sender, TCloseAction &Action); private: // User declarations public: // User declarations __fastcall TFrmRendimiento(TComponent* Owner); }; //--------------------------------------------------------------------------extern PACKAGE TFrmRendimiento *FrmRendimiento; //--------------------------------------------------------------------------#endif

D.3.5.2. URendmiento.cpp
//--------------------------------------------------------------------------#pragma hdrstop

228

Magdalena Servente

Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

#include "URendimiento.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TFrmRendimiento *FrmRendimiento; //--------------------------------------------------------------------------__fastcall TFrmRendimiento::TFrmRendimiento(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall TFrmRendimiento::FormClose(TObject *Sender, TCloseAction &Action) { Action = caFree; } //---------------------------------------------------------------------------

D.3.6. Uarbol
D.3.6.1. UArbol.h
//--------------------------------------------------------------------------#ifndef UArbolH #define UArbolH //--------------------------------------------------------------------------#include <Classes.hpp> #include <ComCtrls.hpp> #include <Controls.hpp> #include <Dialogs.hpp> #include "UPrincipal.h" #include "UTipos.h" //-------------------------------------------------------------------------class Tfrm_Arbol : public TForm { __published: // IDE-managed Components TTreeView *ArbolRes; TOpenDialog *fod_Archivo; void __fastcall FormClose(TObject *Sender, TCloseAction &Action); void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose); private: /*String que tendr los valores posibles para el clasificador*/ TStringList *LClasificadores; TVecValores VecValores; TVecValores VecDescriptores; void PrintSubtree(tree_ptr Tree, int nivel); int ObtenerNuevoValor(); /*numeracin de valores del VecValores para la impresin del rbol*/ public: __fastcall Tfrm_Arbol(TComponent* Owner); void PrintTree(tree_ptr Tree); void RecibirParametros(TStringList *LClasif,TVecValores VecVal, TVecValores VecDescrip); }; //--------------------------------------------------------------------------extern PACKAGE Tfrm_Arbol *frm_Arbol; //--------------------------------------------------------------------------#endif

D.3.6.2. UArbol.cpp
//--------------------------------------------------------------------------#pragma hdrstop Cdigo Fuente Magdalena Servente 229

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

#include "UArbol.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" Tfrm_Arbol *frm_Arbol; TTreeNode *pNivel[MAX_CANT_DESCRIPTORES]; //para la visualizacin

//--------------------------------------------------------------------------__fastcall Tfrm_Arbol::Tfrm_Arbol(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------void __fastcall Tfrm_Arbol::FormClose(TObject *Sender, TCloseAction &Action) {int i; for (i=0;i<MAX_NIVELES;i++) { VecValores[i].~AnsiString(); VecDescriptores[i].~AnsiString(); } delete(ArbolRes); delete(LClasificadores); Action = caFree; } //--------------------------------------------------------------------------void __fastcall Tfrm_Arbol::FormCloseQuery(TObject *Sender, bool &CanClose) { int rta; bool res; rta=MessageBox(NULL, "Desea guardar el rbol en un archivo?", MB_ICONQUESTION|MB_YESNOCANCEL|MB_DEFBUTTON1|MB_SYSTEMMODAL); if (rta==IDCANCEL) //el usuario no desea salir de la aplicacin CanClose=false; else if (rta==IDYES) { res=fod_Archivo->Execute(); if (res) ArbolRes->SaveToFile(fod_Archivo->FileName); } } //--------------------------------------------------------------------------int Tfrm_Arbol::ObtenerNuevoValor() /*numeracin de valores del VecValores para la impresin del rbol*/ { static int i=0; i++; return(i); } //--------------------------------------------------------------------------//-------------------- IMPRESIN DEL RBOL EN PANTALLA ---------------------//--------------------------------------------------------------------------/****************************************************************************** ******************************************************************************/ void Tfrm_Arbol::PrintTree(tree_ptr Tree) { int nivel; TTreeNode *pNivel[MAX_CANT_DESCRIPTORES]; //para la visualizacin nivel=0;//nivel de la raz pNivel[nivel]= new TTreeNode(ArbolRes->Items); PrintSubtree(Tree, nivel); // frm_Arbol->ArbolRes->Width=Width-60; ArbolRes->Left=Left+30; ArbolRes->Top=Top+50; frm_Arbol->ArbolRes->Height=Height-100; ArbolRes->FullExpand(); Magdalena Servente Cdigo Fuente "TDIDT",

//

230

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

ArbolRes->Visible=true; } void Tfrm_Arbol::PrintSubtree(tree_ptr Tree, int nivel) { int i; int val; AnsiString nodo; if (nivel!=0) { val=ObtenerNuevoValor(); nodo=VecDescriptores[val]; AppendStr(nodo, " = "); AppendStr(nodo, VecValores[val]); pNivel[nivel]=ArbolRes->Items->AddChild(pNivel[nivel-1],nodo); } if (Tree->flag_hoja!=3) //es hoja ArbolRes->Items->AddChild(pNivel[nivel], LClasificadores->Strings[Tree>flag_hoja]); else //no es hoja { i=0; nivel++; while ((Tree->pHijos[i]!=NULL)&&(i<MAX_HIJOS)) { PrintSubtree(Tree->pHijos[i],nivel); i++; } }//end else nodo.~AnsiString(); return; } //--------------------------------------------------------------------------//--------------------------------------------------------------------------//--------------------------------------------------------------------------//--------------------------------------------------------------------------void Tfrm_Arbol::RecibirParametros(TStringList *LClasif,TVecValores VecVal, TVecValores VecDescrip) { int i; LClasificadores=LClasif; for (i=0;i<MAX_NIVELES;i++) { VecValores[i]=VecVal[i]; VecDescriptores[i]=VecDescrip[i]; } }

D.4. MDULOS DE MINERA DE DATOS


D.4.1. UDMID3
D.4.1.1. UDMID3.h
//--------------------------------------------------------------------------#ifndef UDMID3H #define UDMID3H //--------------------------------------------------------------------------#include <Classes.hpp> #include <Db.hpp> #include <DBTables.hpp> #include <fstream.h> #include <math.hpp> #include <Dialogs.hpp> #include "UTipos.h" #include "URendimiento.h" Cdigo Fuente Magdalena Servente 231

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

//--------------------------------------------------------------------------class TDMID3 : public TDataModule { __published: // IDE-managed Components TTable *TTennis; TDataSource *DSTTennis; TQuery *QGral; TQuery *QUpdates; void __fastcall DMID3Destroy(TObject *Sender); private: TParametros *Params; short int EvaluarResultados(AnsiString NombreTabla); public: __fastcall TDMID3(TComponent* Owner); //---------------------------------------------------------------------------//--------------------DECLARACION DE FUNCIONES-------------------------------//---------------------------------------------------------------------------tree_ptr Principal ( short int MedidorGanancia); /*Mdulo principal*/ void RecibirParametros(TParametros *Parametros); short int EsUniforme(int nivelArbol); /*verifica si estamos en una hoja*/ int ObtenerCantDescr();/*Obtiene la cantidad de descriptores de la tabla*/ int BuscarPK(short int ValidDs[]); /*Busca claves promarias en la tabla*/ tree_ptr BuildTree(int nivel, short int *pD); /*Funcin que construye el rbol de decisin segn el ID3*/ int ObtenerNuevoNivel(); /*numeracin de niveles para el rbol*/ int ObtenerNuevoValor(); /*numeracin de subndices del VecValores para la impresin del rbol*/ int ArmarTabla(TTablaCorrel& Tabla, int Nivel, int desc,TStringList *valores); /*arma la tabla de correlacin para el nro de descriptor indicado en el nivel del rbol indicado Si la funcin devuelve un 0 significa que no hubo problemas Hubo problemas en todo otro caso*/ int Particionar(int desc, int nivel, tree_ptr pNode, TStringList *valores); /*realiza la particin del conjunto de datos Si la funcin devuelve un 0 significa que no hubo problemas Hubo problemas en todo otro caso*/ short int PruneTree(tree_ptr Tree); /*realiza el "pruning" del rbol obtenido Devuelve 0 si todos los valores son "Yes" 1 si todos los valores son "No" 2 si los valores son mixtos -1 si los valores son distintos*/ void ArmarReglas(tree_ptr Tree); /*Arma las reglas de decisin generadas a partir del rbol de decisin "Tree"*/ void ObtenerReglas(tree_ptr Tree, TVecInt VecReglas, int nroRegla, int codigo); short int ObtenerNroRegla();/*numeracin de las reglas de decisin*/ short int ObtenerSubReglas(); short int ObtenerNroUpdate(); void AplicarReglas(AnsiString Tabla, int codigoReglas);/*Aplica a Tabla las reglas obtenidas*/ short int EvaluarReglas(int codigoReglas);/*Evalua las reglas obtenidas sobre los datos especificados*/ //----FUNCIONES UTILIZADAS PARA EL CLCULO DE LA ENTROPA float InfoTermino(int cant, int total); /*informacin brindada por un trmino*/ float Ianterior(int cant_clasificadores, int cant_descriptores, TTablaCorrel tabla); /*Esta funcin devuelve la informacin de un conjunto antes de realizar la particin*/ float Iposterior(int cant_clasificadores, int cant_descriptores, TTablaCorrel tabla); /*Esta funcin devuelve la informacin de un conjunto despus de realizar la particin segn el atributo por el que se arm la tabla*/ float Gain(float Ianterior, float Iposterior); /*Ganancia debida a la particin del conjunto segn el atributo en cuestin*/ float SplitInfo(int cant_clasificadores, int cant_descriptores, TTablaCorrel tabla); /*Informacin debida a la particin realizada*/ float GainRatio(float Ganancia, float SplitInformation); 232 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

/*Proporcin de ganancia debida a la particin del conjunto segn el atributo en cuestin*/ float GananciaEntropia(int cant_clasificadores, int cant_descriptores, TTablaCorrel tabla); /*Utiliza todas las funciones anteriores para obtener el Gain Ratio de la tabla recibida como parmetro*/

tree_ptr InicializarTree(); /*inicializa el rbol, devolviendo un ptr a la raz */ void EliminarTree(tree_ptr Tree); /*elimina todos los elementos del rbol, liberando la memoria*/ void InformarValores(TVecValores VecVal); /*Recibe los valores del arbol generado*/ void InformarDescrip(TVecValores VecDesc); /*Recibe las descripciones del arbol generado*/ }; //--------------------------------------------------------------------------extern PACKAGE TDMID3 *DMID3; //--------------------------------------------------------------------------#endif

D.4.1.2. UDMID3.cpp
//--------------------------------------------------------------------------#pragma hdrstop #include "UDMID3.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TDMID3 *DMID3; tree_ptr pRoot;

//--------------------------------------------------------------------------__fastcall TDMID3::TDMID3(TComponent* Owner) : TDataModule(Owner) { } //--------------------------------------------------------------------------//==============================VARIABLES====================================== /*String que tendr los valores posibles para el clasificador*/

TVecValores VecValores; TVecValores VecDescriptores; fstream FReglas; //guarda las reglas generadas en formato de Insight 2+ fstream FVitacora; //guarda las tablas generadas en cada paso del ID3 int UsoGain; //vale 0 si uso gain, 1 si uso gain ratio //--------------------------------------------------------------------------//-----------------------IMPLEMENTACIN-------------------------------------//--------------------------------------------------------------------------/****************************************************************************** Funcin principal que comienza con el armado del rbol de decisin segn el algoritmo ID3 ******************************************************************************/ tree_ptr TDMID3::Principal ( short int MedidorGanancia) { int cant_descr; short int ValidDs[MAX_CANT_DESCRIPTORES]; short int *pValidDs = ValidDs; int i, error; char outFile[50]="Log\\ID3"; tree_ptr pRoot; UsoGain=MedidorGanancia;

Cdigo Fuente

Magdalena Servente

233

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

//Obtener cantidad de descriptores cant_descr=ObtenerCantDescr(); for (i=0;i<cant_descr; i++) ValidDs[i]=1; error=BuscarPK(ValidDs); if (error!=1) { DateSeparator='-'; TimeSeparator='_'; strcat(outFile, DateTimeToStr(Now()).c_str()); strcat(outFile, Params->TablaBD.c_str()); strcat(outFile, ".log"); FVitacora.open(outFile, ios::out); pRoot=BuildTree(ObtenerNuevoNivel(), pValidDs); FVitacora.close(); return(pRoot); } else { pRoot=NULL; return(pRoot); } }

void TDMID3::RecibirParametros(TParametros *Parametros) { int i; AnsiString sqlstring; Params=Parametros; TTennis->DatabaseName=Params->NombreBD; TTennis->TableName=Params->TablaBD; TTennis->Active=true;

//Inicializamos los queries que harn sus consultas sobre la base //especificada QGral->DatabaseName=Params->NombreBD; for (i=0; i<MAX_NIVELES;i++) { VecValores[i]=""; VecDescriptores[i]=""; } //Inicializamos el campo Nivel en la Tabla sqlstring="Update "; AppendStr(sqlstring, Params->TablaBD); AppendStr(sqlstring," SET Nivel = 0 "); QGral->SQL->Clear(); QGral->SQL->Add(sqlstring); QGral->ExecSQL(); QGral->SQL->Clear(); TTennis->Close(); TTennis->Open(); sqlstring.~AnsiString(); } /****************************************************************************** Verifica la uniformidad de un conjunto de filas, por uniformidad nos referimos al hecho que todos los valores del clasificador para dicho conjunto sean iguales Devuelve: 0 si todos los valores son "Yes" 1 si todos los valores son "No" 3 si los valores no son uniformes 4 si hubo un error ******************************************************************************/ short int TDMID3::EsUniforme(int nivelArbol) {//begin EsUniforme 234 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

short int aux; AnsiString sqlstring; try //intentamos abrir el QUniforme { sqlstring="Select Count(Distinct "; AppendStr(sqlstring, Params->ColClasificador); AppendStr(sqlstring,") AS diferentes FROM "); AppendStr(sqlstring,Params->TablaBD); AppendStr(sqlstring," WHERE Nivel= "); AppendStr(sqlstring,nivelArbol); QGral->SQL->Clear(); QGral->SQL->Add(sqlstring); sqlstring.~AnsiString(); QGral->Open(); aux=0; aux=(short int)QGral->FieldByName("diferentes")->AsInteger; if (aux!=1) //no son uniformes return(3); else { QGral->Close(); sqlstring="Select "; AppendStr(sqlstring, Params->ColClasificador); AppendStr(sqlstring," AS valor FROM "); AppendStr(sqlstring,Params->TablaBD); AppendStr(sqlstring," WHERE Nivel= "); AppendStr(sqlstring,nivelArbol); QGral->SQL->Clear(); QGral->SQL->Add(sqlstring); QGral->Open(); if (QGral->FieldByName("valor")->AsString == >LClasificadores->Strings[0]) aux=0; else aux=1; QGral->Close(); return(aux); } } catch(...) { sqlstring.~AnsiString(); ShowMessage("No se pudo abrir el Query"); return(4); } }//fin EsUniforme /****************************************************************************** Obtiene la cantidad de descriptores presentes en la tabla que ser la cantidad de atributos menos 2: el clasificador y el atributo nivel ******************************************************************************/ int TDMID3::ObtenerCantDescr() { int cant_descr; TTennis->Open(); cant_descr=TTennis->FieldCount; cant_descr-=2; return(cant_descr); } /****************************************************************************** /*Busca claves primarias en la tabla, para no trabajar sobre esos campos por no ofrecer ninguna ganancia de informacin Devuelve: 0 si no hubo problemas 1 si hubo algn error /******************************************************************************/ int TDMID3::BuscarPK(short int ValidDs[]) { AnsiString sqlstring; int i, cantCampos, cantReg;

Params-

cantCampos=TTennis->FieldCount; cantReg=TTennis->RecordCount;

Cdigo Fuente

Magdalena Servente

235

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

try { for (i=0; i<cantCampos-1; i++) { sqlstring="SELECT COUNT(DISTINCT "; AppendStr(sqlstring,TTennis->Fields->Fields[i]->FieldName); AppendStr(sqlstring," ) as Cant FROM "); AppendStr(sqlstring, Params->TablaBD); QGral->SQL->Clear(); QGral->SQL->Add(sqlstring); sqlstring.~AnsiString(); QGral->Open(); if (QGral->FieldByName("Cant")->AsInteger==cantReg) ValidDs[i]=0; //no es un desc vlido por ser PK QGral->Close(); } return(0); } catch(...) { sqlstring.~AnsiString(); ShowMessage("No se pudo abrir el Query"); return(1); } } //--------------------------------------------------------------------------/****************************************************************************** Funcin recursiva que arma el rbol de decisin segn el algoritmo ID3 ******************************************************************************/ tree_ptr TDMID3::BuildTree(int nivel, short int *pD) { float max_ganancia=-1000; short int desc_max_ganancia=-1; /*descriptor con la mayor ganancia*/ float ganancia; short int unif; tree_ptr pNewNode; short int i; int cant_clas, cant_valores_descr; int exito; TTablaCorrel Tabla; TStringList *valores = new TStringList(); TStringList *MaxValores = new TStringList(); cant_clas=Params->LClasificadores->Count; /* Inicializar Nodo*/ pNewNode=(DECISION_TREE)malloc(sizeof(struct tree_node)); if (pNewNode==0) { ShowMessage("No hay suficiente espacio en memoria para la operacin"); } else { for (i=0; i<MAX_HIJOS; i++) pNewNode->pHijos[i]=0; pNewNode->desc=-1; for (i=0; i<MAX_CANT_DESCRIPTORES; i++) pNewNode->D[i]=*(pD+i); FVitacora<<"******************************************************"; FVitacora<<endl; FVitacora<<"Nivel="; FVitacora<<nivel<<endl; /* EsUniforme?*/ unif=EsUniforme(nivel); if (unif!=4) /*no hubo un error*/ if (unif!=3) /*es hoja*/ { /* Si es hoja, tabularla*/ pNewNode->flag_hoja=unif; /*unif valdr 0 si todos los valores 236 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

son "Yes", y 1 si todos son "No"*/ delete valores; delete MaxValores; return pNewNode; } else /*no es hoja*/ { pNewNode->flag_hoja=3; /*Si no es hoja, calcular la entropa para cada descriptror vlido en el nivel que estamos analizando. Obtenemos el descriptor de mayor ganancia*/ for (i=0; i<MAX_CANT_DESCRIPTORES; i++) if (pNewNode->D[i]==1) /*es un descriptor vlido*/ { valores->Clear(); exito=ArmarTabla(Tabla,nivel,i, valores); if (exito==0) { cant_valores_descr=valores->Count; ganancia=GananciaEntropia(cant_clas, cant_valores_descr, Tabla); if (ganancia>max_ganancia) { max_ganancia=ganancia; desc_max_ganancia=i; MaxValores->Clear(); MaxValores->AddStrings(valores); } } } delete valores; /*Partir el conjunto segn el desciptor que ofrezca mayor entropa*/ if (desc_max_ganancia>=0) //es un descriptor vlido { pNewNode->desc=desc_max_ganancia; /*descriptor utilizado para realizar la particin*/ pNewNode->D[desc_max_ganancia]=0; FVitacora<<desc_max_ganancia; FVitacora<<" "; FVitacora<<max_ganancia<<endl; if (exito==0) exito=Particionar(desc_max_ganancia, pNewNode,MaxValores); delete MaxValores; return(pNewNode); } else /*se acabaron los descriptores, entonces habr errores en el resultado*/ { pNewNode->flag_hoja=2; delete valores; delete MaxValores; return pNewNode; } } // fin else no es hoja }//fin else } //--------------------------------------------------------------------------/****************************************************************************** Esta funcin proporciona un identificador nico para cada uno de los niveles del rbol ******************************************************************************/ int TDMID3::ObtenerNuevoNivel() /*numeracin de niveles para el rbol*/ { static int i=-1; i++; return(i); }

nivel,

//-----------------------------------------------------------------------------// CLCULO DE LA ENTROPA Cdigo Fuente Magdalena Servente 237

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

//-----------------------------------------------------------------------------/****************************************************************************** Esta funcin devuelve la informacin brindada por un trmino cant: cantidad de ocurrencias de ese elemento total: total de elementos en el conjunto InfoTermino=-(cant/total)log2(cant/total) ******************************************************************************/ float TDMID3::InfoTermino(int cant, int total) { float temp; float temp1; float temp2;

if ((cant!=0)&&(total!=0)) { temp1=float(cant)*0.1; temp2=float(total)*0.1; temp=temp1/temp2; if (temp==0) temp=0; else temp*=Log2(temp); temp=-temp; return(temp); } else return(0); } /****************************************************************************** Esta funcin devuelve la informacin de un conjunto antes de realizar la particin cant_clasificadores: cantidad de valores posibles para los clasificadores, es decir, la cantidad de filas de la tabla de correlacin cant_descriptores: cantidad de descriptores vlidos para el nivel del rbol que se est analizando, es decir, la cantidad de columnas de la tabla de correlacin Ianterior(T)=Sum(i=1, i<k)(-(cant/Total)log2(cant/total)) ******************************************************************************/ float TDMID3::Ianterior(int cant_clasificadores, int cant_descriptores, TTablaCorrel tabla) { float auxI=0; float temp1, temp2; int i;

for (i=0; i<cant_clasificadores; i++) { temp1=float(tabla[i][cant_descriptores]); temp2=float(tabla[cant_clasificadores][cant_descriptores]); if (temp2!=0) temp1=temp1/temp2; if (temp1!=0) auxI+=temp1*(Log2(temp1));//InfoTermino(tabla[i][cant_descriptores],tabla[cant_clasificadores][cant_d escriptores]); } return(auxI); } /****************************************************************************** Esta funcin devuelve la informacin de un conjunto despus de realizar la particin segn el atributo por el que se arm la tabla cant_clasificadores: cantidad de valores posibles para los clasificadores, es decir, la cantidad de filas de la tabla de correlacin cant_descriptores: cantidad de descriptores vlidos para el nivel del rbol que se est analizando, es decir, la cantidad de columnas de la tabla de correlacin Iposterior(T)=Sum(i=1, i<k)(-(cant/Total)log2(cant/total)) ******************************************************************************/

238

Magdalena Servente

Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

float TDMID3::Iposterior(int tabla) { float Iaux, Itemp; int i,j;

cant_clasificadores,

int

cant_descriptores,

TTablaCorrel

Iaux=0; for (i=0; i<cant_descriptores; i++) { Itemp=0; for (j=0; j<cant_clasificadores; j++) { Itemp+=InfoTermino(tabla[j][i], tabla[cant_clasificadores][i]); } if (tabla[cant_clasificadores][cant_descriptores]!=0) { Iaux+=(float(tabla[cant_clasificadores][i])/float(tabla[cant_clasificadores][cant_descri ptores]))*Itemp; } } return(Iaux); } /****************************************************************************** Ganancia debida a la particin del conjunto segn el atributo en cuestin Gain=Ianterior-Iposterior; ******************************************************************************/ float TDMID3::Gain(float Ianterior, float Iposterior) { return(Ianterior-Iposterior); } /****************************************************************************** Informacin debida a la particin realizada Sum(i=1, k)(|cant elementos segn la particin i||cant total de elementos|* *InfoTermino); ******************************************************************************/ float TDMID3::SplitInfo(int tabla) { float SIaux; int i; cant_clasificadores, int cant_descriptores, TTablaCorrel

SIaux=0; for (i=0; i<cant_descriptores; i++) { if (tabla[cant_clasificadores][cant_descriptores]!=0) { SIaux+=InfoTermino(tabla[cant_clasificadores][i],tabla[cant_clasificadores][cant_descrip tores])*(float(tabla[cant_clasificadores][i])/float(tabla[cant_clasificadores][cant_desc riptores])); } } return(SIaux); } /****************************************************************************** Proporcin de ganancia debida a la particin del conjunto segn el atributo en cuestin Gain=Gain/SplitInfo; ******************************************************************************/ float TDMID3::GainRatio(float Ganancia, float SplitInformation) { if (SplitInformation!=0) return(Ganancia/SplitInformation); else return(0); } /****************************************************************************** Utiliza todas las funciones anteriores para obtener el Gain Ratio de la tabla recibida como parmetro ******************************************************************************/ float TDMID3::GananciaEntropia(int cant_clasificadores, int cant_descriptores, TTablaCorrel tabla) Cdigo Fuente Magdalena Servente 239

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

{ float anterior, posterior, gano; float splitI, auxGE; anterior=Ianterior(cant_clasificadores, cant_descriptores, tabla); posterior=Iposterior(cant_clasificadores, cant_descriptores, tabla); gano=Gain(anterior, posterior); splitI=SplitInfo(cant_clasificadores, cant_descriptores, tabla); auxGE=GainRatio(gano,splitI); FVitacora<<"Gain="; FVitacora<<gano<<endl; FVitacora<<"Gain Ratio="; FVitacora<<auxGE<<endl; FVitacora<<"--------------------------------------"; FVitacora<<endl; if (UsoGain==0) return(gano); else return(auxGE); } //--------------------------------------------------------------------------/****************************************************************************** Arma la tabla de correlacin Nivel: es el nivel del rbol que se est analizando desc: es el descriptor segn el que se quiere armar la tabla Si la funcin devuelve un 0 significa que no hubo problemas Hubo problemas en todo otro caso ******************************************************************************/ int TDMID3::ArmarTabla(TTablaCorrel& Tabla, int Nivel, int desc, TStringList *valores) { int c, d, maxd; int cant_clas; int CantTotal; AnsiString sqlstring1(""); AnsiString sqlstring2(""); TStringList *lista = new TStringList(); valores->Clear(); cant_clas=Params->LClasificadores->Count; /*Obtenemos el nombre del atributo "desc" de la tabla*/ TTennis->GetFieldNames(lista); //====================================================================== //=================== MANEJO DEL QUERY PARA ============================ //===OBTENER TODOS LOS VALORES POSIBLES DE UN ATRIBUTO ================= //====================================================================== try //Intentamos abrir el Query { /*Obtenemos todos los valores posibles para el atributo descriptor*/ sqlstring1="SELECT DISTINCT("; AppendStr(sqlstring1,lista->Strings[desc]); AppendStr(sqlstring1,") as descriptor FROM "); AppendStr(sqlstring1, Params->TablaBD); AppendStr(sqlstring1," WHERE Nivel="); AppendStr(sqlstring1,IntToStr(Nivel)); QGral->SQL->Clear(); QGral->SQL->Add(sqlstring1); QGral->Open(); QGral->First(); sqlstring1.~AnsiString(); FVitacora<<"Descriptor="; FVitacora<<lista->Strings[desc].c_str()<<endl; d=0; while (!(QGral->Eof)) /*Obtenemos todos los valores posbiles para el descriptor en la lista valores*/ { valores->Add(QGral->FieldByName("Descriptor")->AsString); d++; QGral->Next(); }//fin del while 240 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

maxd=d-1; QGral->Close(); } catch(...) //De la apertura del Query { ShowMessage("No se pudo abrir el Query para obtener todos los valores de un descriptor"); delete lista; sqlstring1.~AnsiString(); sqlstring2.~AnsiString(); return(1); } //====================================================================== //=================== MANEJO DEL QUERY ============================= //===========CARGAMOS LOS VALORES INDIVIDUALES DE Tabla[c][d]=========== //==========================(NO LOS TOTALES)============================ //====================================================================== try //Intentamos abrir el QGral { d=0; while (d<=maxd) { FVitacora<<" "; FVitacora<<valores->Strings[d].c_str(); d++; } c=0; while (c<cant_clas) { d=0; FVitacora<<endl; FVitacora<<Trim(Params->LClasificadores->Strings[c]).c_str(); FVitacora<<" "; while (d<=maxd) { sqlstring2="SELECT (COUNT(*)) as Cant FROM "; AppendStr(sqlstring2, Params->TablaBD); AppendStr(sqlstring2," WHERE Nivel="); AppendStr(sqlstring2,IntToStr(Nivel)); AppendStr(sqlstring2," AND "); AppendStr(sqlstring2,lista->Strings[desc]); AppendStr(sqlstring2," = '"); AppendStr(sqlstring2,valores->Strings[d]); AppendStr(sqlstring2,"' AND "); AppendStr(sqlstring2, Params->ColClasificador); AppendStr(sqlstring2, " = '"); AppendStr(sqlstring2,Trim(Params->LClasificadores->Strings[c])); // AppendStr(sqlstring2,"Yes"); AppendStr(sqlstring2,"'"); QGral->SQL->Clear(); QGral->SQL->Add(sqlstring2); QGral->Open(); sqlstring2.~AnsiString(); Tabla[c][d]=QGral->FieldByName("Cant")->AsInteger; FVitacora<<Tabla[c][d]; FVitacora<<" QGral->Close(); d++; }//fin while (d<=maxd) c++; }//fin while (c<=cant_clas)

";

} catch(...) { ShowMessage("No se pudo abrir el Query para obtener la cantidad de registros con un valor determinado de descriptor"); delete lista; sqlstring2.~AnsiString(); return(1); }//fin del catch

Cdigo Fuente

Magdalena Servente

241

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

/*Obtenemos los totales de la tabla de correlacin*/ /* TOTALES POR FILA */ for (c=0; c<cant_clas; c++) { Tabla[c][maxd+1]=0; for (d=0; d<=maxd; d++) Tabla[c][maxd+1]+=Tabla[c][d]; } /* TOTALES POR COLUMNA Y CANTIDAD TOTAL*/ CantTotal=0; FVitacora<<endl; for (d=0; d<=maxd; d++) { Tabla[cant_clas][d]=0; FVitacora<<" "; for (c=0; c<cant_clas; c++) Tabla[cant_clas][d]+=Tabla[c][d]; CantTotal+=Tabla[cant_clas][d]; FVitacora<<Tabla[cant_clas][d]; FVitacora<<" "; } Tabla[cant_clas][maxd+1]=CantTotal; FVitacora<<Tabla[cant_clas][maxd+1]; FVitacora<<endl; delete lista; return(0); } //--------------------------------------------------------------------------/****************************************************************************** Particiona el conjunto de datos segn el descriptor indicado, en tantos conjuntos como valores pueda tomar el descriptor. desc: es el nro de descriptor con el que trabajamos pNode: es el nodo del rbol desde el cual se est haciendo la particin valores: es la lista de valores posibles que puede tomar el descriptor ******************************************************************************/ int TDMID3::Particionar(int desc, int nivel, tree_ptr pNode, TStringList *valores) { AnsiString sqlstring; AnsiString particion; TStringList *lista = new TStringList(); int i, maxValores; int nuevoNivel; short int *pDesc=pNode->D; /*Obtenemos el nombre del atributo "desc" de la tabla*/ TTennis->GetFieldNames(lista); maxValores=valores->Count; try { for (i=0; i<maxValores; i++) { sqlstring="Update "; AppendStr(sqlstring, Params->TablaBD); AppendStr(sqlstring," SET Nivel = "); nuevoNivel=ObtenerNuevoNivel(); AppendStr(sqlstring, IntToStr(nuevoNivel)); AppendStr(sqlstring," WHERE Nivel="); AppendStr(sqlstring,IntToStr(nivel)); AppendStr(sqlstring, " AND "); AppendStr(sqlstring, lista->Strings[desc]); AppendStr(sqlstring, "= '"); AppendStr(sqlstring, valores->Strings[i]); AppendStr(sqlstring, "'"); QGral->SQL->Clear(); QGral->SQL->Add(sqlstring); QGral->ExecSQL(); QGral->SQL->Clear(); particion=lista->Strings[desc]; //nombre del descriptor VecDescriptores[nuevoNivel]=lista->Strings[desc]; AppendStr(particion, " = "); AppendStr(particion, valores->Strings[i]); //valor del descriptor 242 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

VecValores[nuevoNivel]=valores->Strings[i]; TTennis->Close(); TTennis->Open(); pNode->pHijos[i]=BuildTree(nuevoNivel, pDesc); } sqlstring.~AnsiString(); particion.~AnsiString(); delete lista; return(0); } catch(...) { ShowMessage("No se pudo realizar la actualizacin"); sqlstring.~AnsiString(); particion.~AnsiString(); delete lista; return(1); } } //--------------------------------------------------------------------------/****************************************************************************** /*realiza el "pruning" del rbol obtenido Devuelve 0 si todos los valores son "Yes" 1 si todos los valores son "No" 2 si los valores son mixtos -1 si los valores son distintos ******************************************************************************/ short int TDMID3::PruneTree(tree_ptr Tree) { int i; short int hijo; short int iguales; /* 0 si todos los valores son "Yes" 1 si todos los valores son "No" 2 si todos los valores son mixtos -1 si no son iguales*/

if (Tree->flag_hoja!=3) //es hoja return(Tree->flag_hoja); else { i=0; iguales=3; while ((Tree->pHijos[i]!=NULL)&&(i<MAX_HIJOS)&&(iguales!=-1)) { hijo=PruneTree(Tree->pHijos[i]); if (iguales==3) iguales=hijo; else { if (iguales!=hijo) iguales=-1; } i++; } if (iguales!=-1) //se puede "podar" la rama { Tree->flag_hoja=iguales; i=0; while ((Tree->pHijos[i]!=NULL)&&(i<MAX_HIJOS)) { EliminarTree(Tree->pHijos[i]); i++; } } return(iguales); }//end else }//end PruneTree //--------------------------------------------------------------------------/****************************************************************************** **Arma las reglas de decisin generadas a partir del rbol de decisin "Tree"*** ******************************************************************************/ void TDMID3::ArmarReglas(tree_ptr Tree) { TVecInt VecReglas; Cdigo Fuente Magdalena Servente 243

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

char outFile[50]="Reglas\\"; int nroRegla; int i; nroRegla=0; char* tabla=""; char* delimitador="."; AnsiString sqlstring; int cod; //Iniciliazamos el vector de reglas for (i=0; i<MAX_NIVELES; i++) {VecReglas[i]=-1;} /*Creamos el archivo de texto donde quedarn las reglas de decisin con la extensin especificada por el usuario, ".prl" por default.*/

//Abrimos la tabla de Updates QUpdates->DatabaseName=Params->NombreBD; sqlstring="SELECT * FROM UpdatesHeader.db"; QUpdates->SQL->Clear(); QUpdates->SQL->Add(sqlstring); QUpdates->Open(); QUpdates->Last(); cod=QUpdates->RecordCount; cod++; QUpdates->SQL->Clear(); //Insertamos el Header de las Consultas DateSeparator='/'; TimeSeparator=':'; sqlstring="INSERT INTO UpdatesHeader.db (CODIGO, HORA) VALUES ("; AppendStr(sqlstring,cod); AppendStr(sqlstring,", '"); AppendStr(sqlstring, Params->TablaBD); AppendStr(sqlstring,"', 'ID3', '"); AppendStr(sqlstring, Date()); AppendStr(sqlstring,"', '"); AppendStr(sqlstring, Time()); AppendStr(sqlstring,"')"); QUpdates->SQL->Add(sqlstring); QUpdates->ExecSQL(); QUpdates->SQL->Clear(); //Concatenamos fecha y hora en los archivos DateSeparator='-'; TimeSeparator='_'; strcat(outFile, DateTimeToStr(Now()).c_str());

NOMBRE_TABLA, METODO, FECHA,

//Eliminamos la extensin de la tabla de la base de datos tabla=strtok(Params->TablaBD.c_str(),delimitador); strcat(outFile, tabla); //Les agregamos la extensin strcat(outFile, Params->ExtensionFileReglas.c_str()); FReglas.open(outFile, ios::out); //Obtenemos las reglas ObtenerReglas(Tree, VecReglas, nroRegla,cod); //Cerramos el archivo FReglas.close(); sqlstring.~AnsiString(); } void TDMID3::ObtenerReglas(tree_ptr Tree, TVecInt VecReglas, int nroRegla, int codigo) { char header[15]="Regla "; char then[]=" ENTONCES "; char si[]=" SI "; char is[]=" = "; char es[]=" = "; char and[]=" Y "; AnsiString sqlstring; AnsiString sqlstring2; AnsiString tabla; int i,j; 244 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

TRule rule=""; if (nroRegla!=0) { /*Agregamos el el vector de reglas el subindice del par "descriptor - valor" utilizado para armar a regla, es decir, utilizado para recorrer la rama del arbol */ j=0; while (VecReglas[j]!=-1) {j++;} VecReglas[j]=ObtenerSubReglas(); } if (Tree->flag_hoja!=3) //es hoja { //Agregamos el nro de regla "RULE N" FReglas << endl; FReglas << endl; FReglas << header; FReglas << ObtenerNroRegla() << endl; //Armamos la regla FReglas << si; //descriptor j=0; strcat(rule, VecDescriptores[VecReglas[j]].c_str()); sqlstring=VecDescriptores[VecReglas[j]]; AppendStr(sqlstring,"="); strcat(rule, es); //valor strcat(rule, VecValores[VecReglas[j]].c_str()); AppendStr(sqlstring,"'"); AppendStr(sqlstring,VecValores[VecReglas[j]]); AppendStr(sqlstring,"'"); FReglas << rule << endl; j++; while (VecReglas[j]!=-1) { strcpy(rule, and); AppendStr(sqlstring," and "); //descriptor strcat(rule, VecDescriptores[VecReglas[j]].c_str()); strcat(rule, es); AppendStr(sqlstring,VecDescriptores[VecReglas[j]]); AppendStr(sqlstring," = "); //valor strcat(rule, VecValores[VecReglas[j]].c_str()); AppendStr(sqlstring,"'"); AppendStr(sqlstring,VecValores[VecReglas[j]]); AppendStr(sqlstring,"'"); j++; FReglas << rule << endl; } //Agregamos la conclusion de la regla strcpy(header, then); strcat(header,Params->ColClasificador.c_str()); strcat(header, is); strcat(header, Params->LClasificadores->Strings[Tree>flag_hoja].c_str()); FReglas << header << endl; sqlstring.Insert("' WHERE ",0); sqlstring.Insert(Trim(Params->LClasificadores->Strings[Tree>flag_hoja]).c_str(),0); sqlstring.Insert(" = '",0); sqlstring.Insert(Params->ColClasificador,0); tabla=AnsiString(Params->TablaBD.c_str()); sqlstring.Insert(" SET ",0); sqlstring2="INSERT INTO Updates.db (CODIGO, NRO_REGLA, MODIFICACION) VALUES ("; AppendStr(sqlstring2,codigo); AppendStr(sqlstring2,", "); AppendStr(sqlstring2, ObtenerNroUpdate()); AppendStr(sqlstring2, ", "); AppendStr(sqlstring2,char(34)); //agregamos las comillas AppendStr(sqlstring2,sqlstring); AppendStr(sqlstring2,char(34)); AppendStr(sqlstring2,")"); Cdigo Fuente Magdalena Servente 245

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

QUpdates->SQL->Clear(); QUpdates->SQL->Add(sqlstring2); QUpdates->ExecSQL();

} else //no es hoja { i=0; nroRegla++; while ((Tree->pHijos[i]!=NULL)&&(i<MAX_HIJOS)) { ObtenerReglas(Tree->pHijos[i], VecReglas, nroRegla,codigo); /*Eliminamos el valor de la ultima rama recorrida porque estamos cambiando de rama*/ j=0; while (VecReglas[j]!=-1) {j++;} VecReglas[j-1]=-1; i++; } }//end else tabla.~AnsiString(); sqlstring.~AnsiString(); sqlstring2.~AnsiString(); return; } /****************************************************************************** **Numeracin nica para las reglas de decisin generadas********************** ******************************************************************************/ short int TDMID3::ObtenerNroRegla() { static short int nroRegla=-1; nroRegla++; return(nroRegla); } short int TDMID3::ObtenerSubReglas() { static short int subRegla=0; subRegla++; return(subRegla); } short int TDMID3::ObtenerNroUpdate() { static short int nroRegla=-1; nroRegla++; return(nroRegla); }

//--------------------------------------------------------------------------/****************************************************************************** **Inicializa el rbol, creando un ptr a la raz del mismo********************** ******************************************************************************/ tree_ptr TDMID3::InicializarTree() { tree_ptr pNewNode; pNewNode=(DECISION_TREE)malloc(sizeof(struct tree_node)); if (pNewNode==0) { ShowMessage("No hay suficiente espacio en memoria para la operacin"); return(NULL); } else { pNewNode->pHijos[0]=0; return(pNewNode); } }

/****************************************************************************** 246 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

**Elimina todos los elementos del rbol, liberando la memoria****************** ******************************************************************************/ void TDMID3::EliminarTree(tree_ptr Tree) { int i; i=0; while ((Tree->pHijos[i]!=NULL)&&(i<5)) { EliminarTree(Tree->pHijos[i]); free(Tree->pHijos[i]); i++; } return; } void TDMID3::InformarValores(TVecValores VecVal) /*Recibe los valores del arbol generado*/ {int i; for (i=0;i<MAX_NIVELES;i++) {VecVal[i]=VecValores[i];} }; void TDMID3::InformarDescrip(TVecValores VecDesc) /*Recibe las descripciones del arbol generado*/ {int i; for (i=0;i<MAX_NIVELES;i++) {VecDesc[i]=VecDescriptores[i];} }; /****************************************************************************** ****************Evaluamos los resultados obtenidos***************************** *******************************************************************************/ void TDMID3::AplicarReglas(AnsiString Tabla, int codigoReglas) {AnsiString sqlstring; TQuery *QReglas=new TQuery(DMID3); TQuery *QAplicar=new TQuery(DMID3); QReglas->DatabaseName=Params->NombreBD; QAplicar->DatabaseName=Params->NombreBD; sqlstring="SELECT * FROM Updates.db where codigo="; AppendStr(sqlstring, codigoReglas); QReglas->SQL->Clear(); QReglas->SQL->Add(sqlstring); QReglas->Open(); QReglas->Last(); QReglas->First(); while (!QReglas->Eof) { sqlstring=QReglas->FieldByName("Modificacion")->AsString; sqlstring.Insert(Tabla,0); sqlstring.Insert("UPDATE ",0); QAplicar->SQL->Clear(); QAplicar->SQL->Add(sqlstring); QAplicar->ExecSQL(); QReglas->Next(); } delete(QReglas); delete(QAplicar); sqlstring.~AnsiString(); } //Evalua los resultados de las reglas aplicadas sobre la tabla de NombreTabla short int TDMID3::EvaluarResultados(AnsiString NombreTabla) /*Arma una tabla de resultados de la forma: Correcto Errores Probabilidad de acierto Clase1 x y t Clase2 m n l .... ... ... ... ClaseN z w v Totales totC totE totProb */ { TTablaCorrel TablaRes; int i, correctos,erroneos; Cdigo Fuente Magdalena Servente 247

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

TQuery *QClases=new TQuery(DMID3); TQuery *QRes=new TQuery(DMID3); AnsiString sqlstring; TFrmRendimiento *pForm; try { pForm=FrmRendimiento; //Inicializamos los nombres de las columnas pForm->GridResultados->Cells[0][0]="Clases"; pForm->GridResultados->Cells[1][0]="Correctos"; pForm->GridResultados->Cells[2][0]="Errores"; pForm->GridResultados->Cells[3][0]="Probabilidad de Aciertos"; QClases->DatabaseName=Params->NombreBD; QRes->DatabaseName=Params->NombreBD; //Obtenemos los nombres de todas las clases sqlstring="SELECT DISTINCT(ClaseReal) as Clase FROM "; AppendStr(sqlstring,NombreTabla); QClases->SQL->Clear(); QClases->SQL->Add(sqlstring); QClases->Open(); QClases->First(); i=0; while(!QClases->Eof) { pForm->GridResultados->Cells[0][i+1]=QClases->FieldByName("Clase")>AsString; //Correctos sqlstring=QClases->FieldByName("Clase")->AsString; sqlstring.Insert(" WHERE ClaseReal='",0); sqlstring.Insert(NombreTabla,0); sqlstring.Insert("SELECT Count(*) as Correctos FROM ",0); AppendStr(sqlstring,"' AND ClaseReal="); AppendStr(sqlstring,Params->ColClasificador); QRes->SQL->Clear(); QRes->SQL->Add(sqlstring); QRes->Open(); QRes->First(); TablaRes[i][0]=(double)QRes->FieldByName("Correctos")->AsInteger; pForm->GridResultados->Cells[1][i+1]=TablaRes[i][0]; //Errores sqlstring=QClases->FieldByName("Clase")->AsString; sqlstring.Insert(" WHERE ClaseReal='",0); sqlstring.Insert(NombreTabla,0); sqlstring.Insert("SELECT Count(*) as Erroneos FROM ",0); AppendStr(sqlstring,"' AND ClaseReal<>"); AppendStr(sqlstring,Params->ColClasificador); QRes->SQL->Clear(); QRes->SQL->Add(sqlstring); QRes->Open(); QRes->First(); TablaRes[i][1]=QRes->FieldByName("Erroneos")->AsInteger; pForm->GridResultados->Cells[2][i+1]=TablaRes[i][1]; QClases->Next(); pForm->GridResultados->RowCount++; i++; } QClases->First(); i=0; correctos=0; erroneos=0; while(!QClases->Eof) { /*Calculamos la probabilidad con que un ejemplo clasificado como de clase i pertenece a dicha clase*/ TablaRes[i][2]=TablaRes[i][0]/(TablaRes[i][0]+TablaRes[i][1]); pForm->GridResultados->Cells[3][i+1]=TablaRes[i][2]; correctos+=TablaRes[i][0]; erroneos+=TablaRes[i][1]; QClases->Next(); 248 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

i++; } //Resultados generales TablaRes[i][0]=correctos; TablaRes[i][1]=erroneos; TablaRes[i][2]=TablaRes[i][0]/(TablaRes[i][0]+TablaRes[i][1]); pForm->GridResultados->Cells[0][i+1]="Totales"; pForm->GridResultados->Cells[1][i+1]=TablaRes[i][0]; pForm->GridResultados->Cells[2][i+1]=TablaRes[i][1]; pForm->GridResultados->Cells[3][i+1]=TablaRes[i][2];

QClases->Close(); QRes->Close(); delete(QClases); delete(QRes); sqlstring.~AnsiString(); return(0); } catch(...) { delete(QClases); delete(QRes); sqlstring.~AnsiString(); return(-1); } }

short int TDMID3::EvaluarReglas(int codigoReglas) /*Devuelve: 0: no hubo problemas -1: problema general -2: problema en la creacin de la tabla de evaluacin -3: problema en la inicializacin de la tabla de evaluacin */

{boolean CrearTabla; AnsiString consulta; TStringList *listaCampos = new TStringList(); TQuery *QIni=new TQuery(DMID3); TTable *TEval=new TTable(DMID3); int i; short int errorNo; try { TEval->Active=false; TEval->DatabaseName=Params->NombreBD; TEval->TableName="Eval.db"; TEval->TableType=ttDefault; TEval->FieldDefs->Clear(); TFieldDef *NewField=TEval->FieldDefs->AddFieldDef(); NewField->DataType=ftString; NewField->Name="ClaseReal"; i=0; while ((TTennis->FieldDefs->Items[i]->Name!=Params->ColClasificador) (i<TTennis->FieldDefs->Count-1)) i++; if (i<TTennis->FieldDefs->Count-1) NewField->Size=TTennis->FieldDefs->Items[i]->Size; else NewField->Size=255; for (i=0; i<TTennis->FieldDefs->Count; i++) { NewField=TEval->FieldDefs->AddFieldDef(); NewField->DataType=TTennis->FieldDefs->Items[i]->DataType; NewField->Size=TTennis->FieldDefs->Items[i]->Size; NewField->Name=TTennis->FieldDefs->Items[i]->Name; } CrearTabla=false; if(TEval->Exists) {if (Application->MessageBox((AnsiString("Sobreescribimos la tabla") + TEval->TableName + AnsiString("?")).c_str(), "Tabla Existente", MB_YESNO) == IDYES) Cdigo Fuente Magdalena Servente 249

&&

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

CrearTabla=true;} else CrearTabla=true; if (CrearTabla) TEval->CreateTable(); TEval->Active=true; errorNo=0; } catch(...) {errorNo=-2;} if (errorNo==0) //no hubo problemas { //Inicializamos la tabla de evaluacin try { QIni->DatabaseName=Params->NombreBD; //Obtenemos los nombres de las columnas TEval->GetFieldNames(listaCampos); //Copiamos los datos de la tabla original consulta="INSERT INTO Eval.db ("; AppendStr(consulta,listaCampos->Strings[0]); for (i=1;i<listaCampos->Count;i++) { AppendStr(consulta,", "); AppendStr(consulta,listaCampos->Strings[i]); } AppendStr(consulta,") select trim("); AppendStr(consulta,Params->ColClasificador); AppendStr(consulta,") "); for (i=1;i<listaCampos->Count;i++) { AppendStr(consulta,", "); AppendStr(consulta,listaCampos->Strings[i]); } AppendStr(consulta," from "); AppendStr(consulta,Params->TablaBD); QIni->SQL->Clear(); QIni->SQL->Add(consulta); QIni->ExecSQL(); errorNo=0; } catch(...) {errorNo=-3;} } if (errorNo==0) //no hubo problemas { AplicarReglas(TEval->TableName ,codigoReglas); errorNo=EvaluarResultados(TEval->TableName); } TEval->Close(); TEval->DeleteTable(); delete(listaCampos); delete(TEval); delete(QIni); consulta.~AnsiString(); return(errorNo); } void __fastcall TDMID3::DMID3Destroy(TObject *Sender) {int i; for (i=0;i<MAX_NIVELES;i++) { VecValores[i].~AnsiString(); VecDescriptores[i].~AnsiString(); } } //---------------------------------------------------------------------------

250

Magdalena Servente

Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

D.4.2. UDMC45
D.4.2.1. UDMC45.h
//--------------------------------------------------------------------------#ifndef UDMC45H #define UDMC45H //--------------------------------------------------------------------------#include <Classes.hpp> #include <Db.hpp> #include <DBTables.hpp> #include <fstream.h> #include <stdio.h> #include <string.h> #include #include #include #include "UTipos.h" "defns.h" "types.h" "Rulex.h"

#define Inc 2048 #define LocalVerbosity(x) #define Intab(x) #define Tab "| #define TabSize 4 #define Width 80

if (Sh >= 0 && VERBOSITY >= x) Indent(x, "| ") " /* ancho mx aproximado de un rbol en pantalla */

//--------------------------------------------------------------------------class TDMC45 : public TDataModule { __published: // IDE-managed Components TDataSource *DSTTennis; TTable *TTennis; void __fastcall DMC45Destroy(TObject *Sender); private: TParametros *Params; /* Datos externos descriptos en extern.i */ short MaxAtt, MaxClass, MaxDiscrVal; DiscrValue MaxAttVal[MAX_CANT_DESCRIPTORES]; TStringList *ClassName, *AttName; TTablaValores AttValName; TVecValores SpecialStatus; String FileName; ItemNo MaxItem; Description *Item; short VERBOSITY, TRIALS; Boolean GAINRATIO, SUBSET, UNSEENS; ItemNo MINOBJS; float CF; Tree *Pruned; Boolean AllKnown; ItemCount *Weight, /* Weight[i] = fraccin actual del item i */ **Freq, /* Freq[x][c] = nro de items de clase c con resultado x */ *ValFreq, /* ValFreq[x] = nro.de items con resultado x */ *ClassFreq; /* ClassFreq[c] = nro.de items de clase c */ float *Gain, /* Gain[a] = info gain al dividir segn el atrib a */ *Info, /* Info[a] = info potencial de div sobre el atrib a */ *Bar, /* Bar[a] = mejor valor lmite para el atrib a */ *UnknownRate; /* UnknownRate[a] = proporcin desconocida actual para el atrib a */

char bool float

*Tested; MultiVal;

/* Tested[a] seteado si el atrib a ya ha sido testeado */ /* true cuando todos los atribs tienen muchos valores */

*SplitGain,

/* SplitGain[i] = gain con el valor del atrib del item i como lmite */ Magdalena Servente 251

Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

*SplitInfo; ItemCount *Slice1, *Slice2; Conjunto **Subset; short short Tree FILE char *Subsets; Subtree; Subdef[100]; *TRf; Fn[500];

/* SplitInfo[i] = split info potencial */

/* Slice1[c] /* Slice2[c]

= valores de Freq[x][c] en subconj.c */ = valores de Freq[y][c] */

/* Subset[a][s] = subconj s para atrib a */ /* Subsets[a] = nro. subconj para atrib a */ /* tamao mx de subrbol impreso */ /* punteros a los subrboles */ /* archivo para i/o del rbol */ /* nombre del archivo */

//---------------------------------------------------------------------void GetNames(); /* Lee los nombres de las clases, atributos y valores legales de */ /* atributos. */ void GetData(); //Lee los datos de la tabla Description GetDescription(); int VerificarPK(AnsiString Atrib); /* Verifica si el atributo Atrib es clave primaria de la tabla Devuelve: 0 si es PK 1 en caso contrario -1 si hubo error*/ int PosicionValor(AnsiString Valor,int nro_atrib, int pri, int ult); /* Busca la posicin del Valor para el atributo especificado por el nro_atrib en el Tabla de Valores de atributos y la devuelve */ int PosicionClase(AnsiString Valor); /* Busca la posicin del Valor en el vector de la clase */ void OneTree(); /* Construye y poda un rbol a partir de todos los datos */ void Evaluate(bool CMInfo,short Saved); /* Imprime los errores para cada una de las pruebas */ void InitialiseTreeData(); /* Reserva espacio para las tablas de construccin */ void InitialiseWeights(); /* Inicializa el peso de cada item */ Tree FormTree(ItemNo Fp, ItemNo Lp); /* Construye un rbol de decisin para los casos Fp hasta Lp */ ItemNo Group(DiscrValue V, ItemNo Fp, ItemNo Lp,Tree TestNode); /* Agrupa los tems correspondiente a la rama V de una prueba y y devuelve el ndice del ltimo tem */ void Intercambio(ItemNo a, ItemNo b); /* Intercambia los items en a y b */ ItemCount CountItems(ItemNo Fp, ItemNo Lp); /* Devuelve el peso total de los items desde Fp hasta Lp */

/*************************************************************************/ /* */ /* Calculo de la informacin, ganancia de informacin e */ /* impresin de distribuciones */ /* */ /*************************************************************************/ float Worth(float ThisInfo, float ThisGain, float MinGain); /* Determina el valor de una divisin particular segn el criterio elegido */ void ResetFreq(DiscrValue MaxVal); /* Resetea las tablas de frecuencia Freq[][] y ValFreq[] */ float ComputeGain(float BaseInfo,float UnknFrac, DiscrValue MaxVal,ItemCount TotalItems); /* Dadas las tablas Freq[][] y ValFreq[], computa la ganancia de informacin */ float TotalInfo(ItemCount V[], DiscrValue MinVal, DiscrValue MaxVal); /* Computa la informacin total en V[ MinVal..MaxVal ] */ void PrintDistribution(Attribute Att,DiscrValue MaxVal,bool ShowNames); /* Imprime la tabla de distribucin para un atributo determinado */ /*************************************************************************/ /* */ /* Rutinas de manejo de los rboles de decisin */ /* */ /*************************************************************************/

252

Magdalena Servente

Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Tree Leaf(ItemCount *ClassFreq, ClassNo NodeClass,ItemCount Cases,ItemCount Errors); /* Construye una hoja en un determinado nodo */ void Sprout(Tree Node, DiscrValue Branches); /* Inserta ramas en un nodo */ Tree PrintTree(Tree T); /*Imprime el rbol de decisin T*/ void Show(Tree T,short Sh); /* Muestra el rbol T con offset Sh*/ void ShowBranch(short Sh,Tree T,DiscrValue v); /* Imprime un nodo T con offset Sh, valor de rama v */ short MaxLine(Tree St); /* Encuentra el tamao mx de una lnea nodo para el subrbol St */ void Indent(short Sh,char *Mark); /* Indenta Sh columnas */ void SaveTree(Tree T,AnsiString Extension); /*Guarda el rbol T en el archivo con la extension especificada */ void OutTree(Tree T); /*Guarda el rbol T como caracteres */ Tree GetTree(AnsiString Extension); /*Obtiene el rbol T del archivo de la extensin especificada */ Tree InTree(); /*Recupera el rbol a partir de los caracteres guardados */ void StreamOut(AnsiString s,int n); void StreamIn(AnsiString s,int n); /* Stream caracteres de/hacia el archivo TRf desde/hacia una dir */ void ReleaseTree(Tree Node); /* Libera el espacio ocupado por Node */ int TreeSize(Tree Node); /*Cuenta los nodos de un rbol */ Tree CopyTree(Tree T); /* Devuelve una copia de tree T */ void SaveDiscreteNames(); /* Guarda los valores de los atributos ledos con "discrete N" */ void RecoverDiscreteNames(); /* Recupera los valores de los atributos ledos con "discrete N" */

/*************************************************************************/ /* */ /* Evaluacin del armado de subconjuntos sobre los atrib discretos */ /* */ /*************************************************************************/ void EvalSubset(Attribute Att, ItemNo Fp, ItemNo Lp,ItemCount Items); /* Evaluacin del armado de subconjuntos sobre un atrib discreto. */ void Combine(DiscrValue x,DiscrValue y,DiscrValue Last); /* Combina los valores de la distribucin de los atributos discretos x e y */ void Uncombine(DiscrValue x,DiscrValue y); /* Devuelve a x e y sus valores originales */ void PrintSubset(Attribute Att,Conjunto Ss); /* Imprime los valores del atributo Att que estan en el subconjunto Ss */ void SubsetTest(Tree Node,Attribute Att); /* Construye una prueba de nodo sobre un subconjunto de valores */ void EvalDiscreteAtt(Attribute Att,ItemNo Fp,ItemNo Lp,ItemCount Items); /* Setea Info[] and Gain[] para la particin discreta de items Fp hasta Lp */ void ComputeFrequencies(Attribute Att,ItemNo Fp,ItemNo Lp); /* Computa las tablas de frecuencia Freq[][] y ValFreq[] para Att */ float DiscrKnownBaseInfo(DiscrValue KnownItems,ItemCount MaxVal); /* Devuelve la informacin base de los items con valores conocidos de un atributo discreto, utilizando la tabla de frecuencias Freq[][] */ void DiscreteTest(Tree Node,Attribute Att); /* Construye y devuelve un nodo para una prueba sobre un atributo discreto */ /*************************************************************************/ /* */ /* Evaluacin de una prueba sobre un atributo continuo */ /* */ /*************************************************************************/ void EvalContinuousAtt(Attribute Att,ItemNo Fp,ItemNo Lp); void ContinTest(Tree Node,Attribute Att); /* Transforma una hoja en una prueba sobre un atributo continuo */ float GreatestValueBelow(Attribute Att,float t); /* Devuelve el mayor valor del atributo Att por debajo del lmite t */ void Quicksort(ItemNo Fp,ItemNo Lp,Attribute Att);//, void (*Exchange)()); /* Ordenamiento */

Cdigo Fuente

Magdalena Servente

253

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

/*************************************************************************/ /* */ /* Poda un rbol de decisin y predice su proporcin de error */ /* */ /*************************************************************************/ Conjunto *PossibleValues;//=Nil; bool Changed; bool Prune(Tree T); /*Poda el rbol T y devuelve true si el rbol fue modificado */ float EstimateErrors(Tree T, ItemNo Fp,ItemNo Lp,short Sh,bool UpdateTree); /*Estima los errores en un determinado subrbol */ void CheckPossibleValues(Tree T); /* Elimina pruebas de subconjuntos innecesarias sobre valores faltantes */

/* Computa los errores adicionales */ float Val[], Dev[]; float AddErrs(ItemCount N,ItemCount e); /*************************************************************************/ /* */ /* Determina la clase de un caso a partir del rbol de decisin */ /* */ /*************************************************************************/ float *ClassSum; /* ClassSum[c]= peso total de la clase c */ ClassNo Category(Description CaseDesc,Tree DecisionTree); /* Categoriza la descripcin de un caso utilizando el rbol de decisin */ void Classify(Description CaseDesc,Tree T,float Weight); /* Clasifica un caso utilizando el subrbol dado, ajustando el valor de ClassSum para cada clase */ Tree *Raw; void PrintConfusionMatrix(ItemNo *ConfusionMat); /*Imprime matrices de confusin */ /*************************************************************************/ /* */ /* REGLAS DE DECISIN */ /* */ /*************************************************************************/ /* Variables usadas en la generacin de reglas */ bool SIGTEST, /* uso de la prueba de significado en la poda de reglas */ SIMANNEAL; /* uso de simulated annealing */ float SIGTHRESH, REDUNDANCY; /* factor que estima la cantidad de de redundancia e irrelevancia en los atributos */ PR *Rule; /* reglas actuales */ RuleNo NRules, /* nro de reglas actuales */ *RuleIndex; /* ndice de reglas */ short RuleSpace; /* espacio reservado para las reglas */ ClassNo DefaultClass; /* clase por defecto */ RuleSet *PRSet; /* conjuntos de reglas */ float AttTestBits, /* bits para codificar el atrib testeado */ *BranchBits; /* idem para el valor del atrib */ fstream FReglas; //guarda los datos generados durante la generacin de las reglas con el C4.5 float *LogItemNo; double *LogFact; ItemNo *TargetClassFreq, /* [Boolean] */ *Errors, /* [Condicin] */ *Total; /* [Condicin] */ float *Pessimistic, /* [Condicin] */ *Actual, /* [Condicin] */ *CondSigLevel; /* [Condicin] */ bool **CondSatisfiedBy, /* [Condicin][NroItem] */ *Deleted; /* [Condicin] */ DiscrValue *SingleValue; /* [Atributo] */ Condition *Stack; short MaxDisjuncts, MaxDepth; ItemNo *Covered, /* Covered[i] = nro.de reglas que cubren el item i */ *FalsePos, /* FalsePos[c] = nro.de falsos positivos de las reglas seleccionadas para la calse c */ 254 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

float

bool

/* NoRule[c] = nro.de items cubiertos por ninguna de las reglas selecciondas */ *Right, /* Right[r] = nro. de aciertos */ *Wrong; /* Wrong[r] = nro. de fallas */ *Value, /* Value[r] = ventaja atribuble a la regla r o realizable si la regla r es includa */ SubsetValue, /* valor de la mejor clase del subconjunto */ CodeWeight; /* factor de multiplicacin para la codificacin de las reglas */ *RuleIn, /* RuleIn[r] = true si la regla r est includa */ **Match; /* Match[r][i] = true si el item i cumple las cond de la regla r */ /* lista de todas las reglas para la clase actual */

*NoRule,

RuleNo *ClassRules; ClassNo Test short float

FocusClass;

*TestVec; NTests; Confidence;

/* factor de certeza de la regla aplicada (determinado por BestRuleIndex) */

void GenerateLogs();// Creacin del vector LogItemNo void GenerateRules();/* Generacin de todos los conjuntos de reglas a partir de los rboles de decisin */ void FindTestCodes(); /*Determina las longitudes de los codigos para los atributos y las ramas */ void SwapUnweighted(ItemNo a,ItemNo b);/*Intercambio de los items en a y b. */ void CompositeRuleset();/*Creacin de un conjunto compuesto de reglas de todas las pruebas */ void FormRules(Tree t);/*Creacin de un conjunto de reglas del rbol de decisin t */ void TreeParameters(Tree t,short d);/* Calcula la profundidad mx y el nro de hojas en el arbol t con profundidad inicial d*/ void Scan(Tree t,short d);/* Extrae los disjuntos del arbol t en la profundidad d y los procesa */ void ConstructRuleset();/* Construccin de un subconjunto ordenado (indexado por el RuleIndex)a partir del actual conjunto de reglas*/ void InitialiseTables();/*Inicializacin de tablas*/ void CoverClass();/*Seleccionamos un subconjunto de las reglas para la FocusClass */ void AllCombinations(RuleNo NR); /* Probamos todas las combinaciones de reglas para encontrar la mejor */ void SimAnneal(RuleNo RuleCount);/*Bsqueda de un buen subconjunto mediante simulated annealing */ void SpotSearch(RuleNo RuleCount);/* Busca un buen subconjunto mediante una bsqueda golosa reiterativa*/ void HillClimb(RuleNo RuleCount);/* Mejora un subconjunto de reglas agregando o eliminando reglas */ void CalculateValue();/* Calculamos los aciertos y errores para las reglas de la FocusClass y determinamos el valor de dichas reglas. Si es el mejor hasta ahora, lo guardamos.*/ void AddRule(RuleNo r);/* Agregamos la regla r al conj de relgas incluidas e incrementamos la cantidad de reglas que cubren los items que disparan la regla*/ void DeleteRule(RuleNo r);/* Eliminamos la regla r del conj de reglas includas y decrementamos la cant de reglas que cubren cada uno de los items cubiertos por la regla*/ void MakeIndex();/* Crea un ndice de reglas includas en RuleIndex. Selecciona primero aquellas clases cuyas reglas tienen el menor nro de falsos positivos dentro de cada clase, pone las reglas con ms aciertos primero */ void FindDefault();/* Determina la clase por defecto. Los empates se resuelven a favor de la clase ms frecuente*/ float Fuerza(PR ThisRule,Description Case);/* Dados una regla y un caso, determina la fuerza con la que podemos determinar que el caso pertenece a la clase especificada en la regla */ float Biased(int N, int E, float ExpE);/* Determina el nro de bits necesarios para codificar las excepciones*/ float ExceptionBits(int Fires, int FP, int FN); void FindRuleCodes();/* Determina la longitud de codificacin para todas las reglas*/ float CondBits(Condition C);/* Determina el nro de bits requerido para Cdigo Fuente Magdalena Servente 255

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

codificar una condicin void SaveRules();/* void Test bool void bool

*/

bool void void void produccin*/

Guarda el conjunto de reglas en el archivo de reglas segn el orden del ndice*/ GetRules();/* Obtiene un nuevo conj de reglas del archivo de reglas*/ FindTest(Test Newtest);/* Busca una prueba en el vector de pruebas, si no est all, la agrega */ SameTest(Test t1,Test t2);/*Verifica si la prueba t1 es igual a la prueba t2*/ InitialiseRules();/*Limpia las variables para un nuevo conj de reglas */ NewRule(Condition Cond[],short NConds,ClassNo TargetClass,float Err); /* Agrega una nueva regla, al conjunto de reglas actual. Actualiza Rule[],NRules y,en caso de ser necesario,RuleSpace*/ SameRule(RuleNo r,Condition Cond[],short NConds,ClassNo TargetClass); /* Decide si la regla actual duplica la regla r */ PrintIndexedRules();/*Imprime el conjunto indexado de reglas*/ PrintRule(RuleNo r);/*Imprime la regla r */ PrintCondition(Condition c);/*Imprime la condicin c de una regla de

void PruneRule(Condition Cond[],short NCond,ClassNo TargetClass); /* Poda la regla dadas las condiciones Cond, y el nro de condiciones NCond, y agrega la regla resultante al actual conjunto de reglas si es lo suficientemente precisa*/ bool Redundant(short R,Condition Cond[],short NCond);/* Verifica si la condicin R es redundante*/ bool IsSubset(Conjunto S1,Conjunto S2,Attribute Att); /* Decide si el subconj de valores S1 est contenido en S2 */ void FindTables(short NCond,ClassNo TargetClass);/* Busca las tablas de distribucin de frecuencias para la condiciones actuales*/ void UpdateCount(ItemNo T[],ItemNo E[],short d,bool OK); /* Incrementa los valores de Total[d] y Errors[d]*/ bool Satisfies(Description CaseDesc,Condition OneCond); /*Determina si la descripcin de un caso satisface la cond dada*/ double Hypergeom(int a,int r,int A,int B);/* Distribucin hipergeometrica (usa los log de los factoriales tabulados)*/ float TableProb(int t11,int t12,int t21,int t22);/* TableProb examina la tabla t de contingencias de 2x2 y calcula la probabilidad de que una divisin al azar pueda producir una divisin al menos tan extrema como esta. */ void EvaluateRulesets(bool DeleteRules);/*Evala todos los conj de reglas*/ ItemNo Interpret(ItemNo Fp,ItemNo Lp,bool DeleteRules, bool CMInfo, bool Arrow); /*Evala el conjunto de reglas actual*/ RuleNo BestRuleIndex(Description CaseDesc,RuleNo Start);/*Busca la mejor regla para el caso dado, dejando la probabilidad en Confidence*/ public: __fastcall TDMC45(TComponent* Owner); void RecibirParametros(TParametros *Parametros); void C45(); //dispara el proceso del C4.5 con los parmetros recibidos void GenerarReglasC45(); //dispara el proceso de generacin de las reglas de decisin }; //--------------------------------------------------------------------------extern PACKAGE TDMC45 *DMC45; //--------------------------------------------------------------------------#endif

D.4.2.2. UDMC45.cpp
//--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop #include "UDMC45.h" //--------------------------------------------------------------------------#pragma package(smart_init) #pragma resource "*.dfm" TDMC45 *DMC45; fstream FVitacora; //guarda los datos generados durante la ejecucin del C4.5 256 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

//--------------------------------------------------------------------------__fastcall TDMC45::TDMC45(TComponent* Owner) : TDataModule(Owner) { MaxDiscrVal = 2; FileName = "DF"; VERBOSITY = 0; TRIALS = 10; GAINRATIO = true; SUBSET = false; UNSEENS = false; MINOBJS = 2; AllKnown = true; Val[0]=0; Val[1]=0.001; Val[2]=0.005; Val[3]=0.01; Val[4]=0.05; Val[5]=0.10; Val[6]=0.20; Val[7]=0.40; Val[8]=1.00; //Val[] = { 0, Dev[0]=4.0; Dev[1]=3.09; Dev[2]=2.58; Dev[3]=2.33; Dev[4]=1.65; Dev[5]=1.28; Dev[6]=0.84; Dev[7]=0.25; Dev[8]=0.00; //Dev[] = {4.0, //*ClassSum=0; } //-----------------------------------------------------------------------------void TDMC45::RecibirParametros(TParametros *Parametros) { AnsiString sqlstring; TQuery *QGral=new TQuery(DMC45);

0.001, 0.005, 0.01, 0.05, 0.10, 0.20, 0.40, 1.00};

3.09,

2.58,

2.33, 1.65, 1.28, 0.84, 0.25, 0.00};

Params=Parametros; TTennis->DatabaseName=Params->NombreBD; TTennis->TableName=Params->TablaBD; TTennis->Active=true;

//Inicializamos los queries que harn sus consultas sobre la base //especificada QGral->DatabaseName=Params->NombreBD; //Inicializamos el campo Nivel en la Tabla sqlstring="Update "; AppendStr(sqlstring, Params->TablaBD); AppendStr(sqlstring," SET Nivel = 0 "); QGral->SQL->Clear(); QGral->SQL->Add(sqlstring); QGral->ExecSQL(); QGral->SQL->Clear(); TTennis->Close(); TTennis->Open(); sqlstring.~AnsiString(); delete(QGral); }

//--------------------------------------------------------------------------void __fastcall TDMC45::DMC45Destroy(TObject *Sender) {int i,j; delete ClassName; delete AttName; Cdigo Fuente Magdalena Servente 257

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

for (i=0;i<MAX_NIVELES;i++) { for (j=0;j<MAX_NIVELES;j++) {AttValName[i][j].~AnsiString();} SpecialStatus[i].~AnsiString(); } } /*************************************************************************/ /* */ /* Principal c4.5 */ /* -----------------*/ /* */ /* Basado en el cdigo propuesto por Quinlan en: */ /* Quinlan, "C4.5: Programs for Machine Learning" (1993) */ /* Morgan Kaufman Publishers, San Mateo, California */ /*************************************************************************/ void TDMC45::C45() { extern int optind; short Best; char outFile[50]="Log\\C45"; DateSeparator='-'; TimeSeparator='_'; strcat(outFile, DateTimeToStr(Now()).c_str()); strcat(outFile, Params->TablaBD.c_str()); strcat(outFile, ".log"); FVitacora.open(outFile, ios::out); FileName = Params->TablaBD; VERBOSITY = 5; //grado de explicacin en el Log if (Params->iCriterio==0) GAINRATIO = false; if (Params->iConjuntos==0) SUBSET = true; MINOBJS = Params->iMinObjs; CF =Params->iCF; Check(CF, Epsilon, 100); CF /= 100; /* Inicializacin */

GetNames(); GetData(); FVitacora<<(MaxItem+1); FVitacora<<" casos ("; FVitacora<<MaxAtt; FVitacora<<" atributos) ledos de "; FVitacora<<Params->TablaBD.c_str(); /* Construccin de los rboles de decisin */

TRIALS = 1; OneTree(); Best = 0; if ( TRIALS == 1 ) { FVitacora<<endl; FVitacora<<"El rbol ha sido guardado con xito."; FVitacora<<endl; } SaveTree(Pruned[Best], ".tree"); /* Evaluamos los resultados */ FVitacora<<endl; FVitacora<<endl; FVitacora<<"Evaluacin sobre los datos de prueba ("; FVitacora<<(MaxItem+1); FVitacora<<" tems):"; FVitacora<<endl; Evaluate(false, Best);

258

Magdalena Servente

Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

if ( UNSEENS ) { GetData(); FVitacora<<endl; FVitacora<<"Evaluacin sobre los datos de prueba ("; FVitacora<<(MaxItem+1); FVitacora<<" tems):"; FVitacora<<endl; Evaluate(true, Best); } exit(0); FVitacora.close(); } /*************************************************************************/ /* */ /* Lee los nombres de las clases, atributos y valores legales de */ /* atributos. */ /* Cuando termina, los nombres se almacenan en: */ /* ClassName - nombres de las clases */ /* AttName - nombres de los atributos */ /* AttValName - nombres de los valores de los atributos */ /* con: */ /* MaxAttVal - cantidad de valores para cada atributo */ /* */ /* Las otras variables globales que se setean son: */ /* MaxAtt - nmero mximo de atributos */ /* MaxClass - nmero mximo de clases */ /* MaxDiscrVal - nmero mximo de valores discretos para */ /* cualquier atributo */ /* */ /*************************************************************************/ void TDMC45::GetNames() {int i,j; TQuery *QGral=new TQuery(DMC45); AnsiString sqlstring; try { /* Obtenemos los nombres de las clases */ ClassName = new TStringList(); ClassName->AddStrings(Params->LClasificadores); MaxClass = ClassName->Count; /* Obtenemos los atributos y los nombres de sus valores */ MaxAtt=TTennis->FieldCount-2; //le restamos la clase y la columna Nivel del ID3 AttName=new TStringList(); QGral->DatabaseName=Params->NombreBD; sqlstring=") as Campo from "; AppendStr(sqlstring, Params->TablaBD); MaxDiscrVal=-1; for (i=0;i<MaxAtt;i++) { if (TTennis->Fields->Fields[i]->FieldName!=Params->ColClasificador) { if (VerificarPK(TTennis->Fields->Fields[i]->FieldName)==0 TTennis->Fields->Fields[i]->FieldName=="Nivel" ) {SpecialStatus[i]="IGNORAR";} else { AttName->Add(TTennis->Fields->Fields[i]->FieldName); /* if //es contnuo {SpecialStatus[i] = "CONTINUOUS";} else //es discreto { SpecialStatus[i] = "DISCRETE"; //Cargamos los valores del atributo QGral->SQL->Clear(); Cdigo Fuente Magdalena Servente 259

||

Verificamos los tipos de datos */ ( TTennis->Fields->Fields[i]->DataType!=ftString)

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

QGral->SQL->Add("SELECT DISTINCT("+ >Fields->Fields[i]->FieldName + sqlstring); QGral->Open(); QGral->First(); j=0; while (!QGral->Eof) { AttValName[i][j]=QGral>FieldByName("Campo")->AsString; QGral->Next(); j++; } MaxAttVal[i] = (DiscrValue) j; /* Leemos la mxima cantidad de valores, y chequeamos MaxDiscrVal */ if (j>MaxDiscrVal) MaxDiscrVal=j; } } } } } catch(...) { Application->MessageBox("Error archivo","Error",MB_OK|MB_ICONWARNING); } delete(QGral); sqlstring.~AnsiString(); } //--------------------------------------------------------------------------/*************************************************************************/ /* */ /* Lee los casos de la tabla. */ /* */ /* Al terminar,los casos se almacenan en el vector Item con la forma */ /* de Descriptions (i.e. vectores de valores de atributos), */ /* y se le asigna a MaxItem el nmero de items de datos. */ /* */ /*************************************************************************/ void TDMC45::GetData() { ItemNo i=-1, ItemSpace; Description GetDescription(); TQuery *QData=new TQuery(DMC45); int Dv; float Cv; Variant Atributo; Description Dvec; Attribute Att; AnsiString AtDiscreto; try{ ItemSpace=0; QData->DatabaseName=Params->NombreBD; QData->SQL->Clear(); QData->SQL->Add("SELECT * FROM " + Params->TablaBD); QData->Open(); QData->First(); do { ++i; MaxItem = i; /* Verificamos si hay lugar para otro tem */

TTennis-

en

la

carga

de

los

datos

del

if ( i >= ItemSpace ) { if ( ItemSpace ) { ItemSpace += Inc; Item = (Description *) 260 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

realloc(Item, ItemSpace*sizeof(Description)); } else { Item = (Description *) malloc((ItemSpace=Inc)*sizeof(Description)); } } Dvec = (Description) calloc(MaxAtt+2, sizeof(AttValue)); for(Att=0;Att<MaxAtt;Att++) { Atributo=QData->FieldValues[TTennis->Fields->Fields[Att]->FieldName]; if ( SpecialStatus[Att] == "IGNORAR" ) { /* Salteamos este valor */ DVal(Dvec, Att) = 0; } else if ( MaxAttVal[Att] || SpecialStatus[Att] == "DISCRETE" ) { /* Valor discreto */ AtDiscreto=AnsiString(Atributo); if ( AtDiscreto.AnsiCompareIC("?")==0) { Dv = 0; } else { Dv = PosicionValor(AtDiscreto,Att, 0, MaxAttVal[Att]); } DVal(Dvec, Att) = Dv; } else { /* Valor Continuo */ if ( Atributo.VType==varEmpty || Atributo.VType==varNull) { Cv = Unknown; } else { Cv = double(Atributo); } CVal(Dvec, Att) = Cv; } } Class(Dvec) >AsString); Item[i] = Dvec; QData->Next(); } while ( Item[i] != NULL && !(QData->Eof) ); QData->Close();

PosicionClase(QData->FieldByName(Params->ColClasificador)-

} catch(...) { Application->MessageBox("Error archivo","Error",MB_OK|MB_ICONWARNING); } delete (QData); AtDiscreto.~AnsiString(); }

en

la

carga

de

los

datos

del

//----------------------------------------------------------------------------int TDMC45::PosicionValor(AnsiString Valor,int nro_atrib, int pri, int ult) /* Busca la posicin del Valor para el atributo especificado por el nro_atrib en el Tabla de Valores de atributos y la devuelve */ {int i;

Cdigo Fuente

Magdalena Servente

261

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

i=pri; while (AttValName[nro_atrib][i].AnsiCompareIC(Valor)!=0 && i<=ult) i++; return(i<=ult ? i : pri-1); } int TDMC45::PosicionClase(AnsiString Valor) /* Busca la posicin del Valor en el vector de la clase */ {int i; i=0; while (ClassName->Strings[i].Trim()!=Valor.Trim() && i<=MaxClass) i++; return(i<=MaxClass ? i : -1); } //----------------------------------------------------------------------------int TDMC45::VerificarPK(AnsiString Atrib) /* Verifica si el atributo Atrib es clave primaria de la tabla Devuelve: o si es PK 1 en caso contrario -1 si hubo error */ { AnsiString sqlstring; int cantReg,res; TQuery *QGral=new TQuery(DMC45); cantReg=TTennis->RecordCount; try { sqlstring="SELECT COUNT(DISTINCT "; AppendStr(sqlstring,Atrib); AppendStr(sqlstring," ) as Cant FROM "); AppendStr(sqlstring, Params->TablaBD); QGral->DatabaseName=Params->NombreBD; QGral->SQL->Clear(); QGral->SQL->Add(sqlstring); QGral->Open(); QGral->First(); if (QGral->FieldByName("Cant")->AsInteger==cantReg) {res=0;} //es PK else {res=1;} } catch(...) { res=-1; } delete (QGral); sqlstring.~AnsiString(); return(res); }

/*************************************************************************/ /* Construye y poda un rbol a partir de todos los datos */ /* */ /*************************************************************************/ void TDMC45::OneTree() { ItemNo *TargetClassFreq; Tree *Raw; Tree *Pruned; InitialiseTreeData(); InitialiseWeights(); Raw = (Tree *) calloc(1, sizeof(Tree)); Pruned = (Tree *) calloc(1, sizeof(Tree)); AllKnown = true; Raw[0] = FormTree(0, MaxItem); FVitacora<<endl; PrintTree(Raw[0]); SaveTree(Raw[0], ".unpruned"); 262 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Pruned[0] = CopyTree(Raw[0]); if ( Prune(Pruned[0]) ) { FVitacora<<endl; FVitacora<<"Simplificamos el "; PrintTree(Pruned[0]); } } /*************************************************************************/ /* */ /* Imprime los errores para cada una de las pruebas */ /* */ /*************************************************************************/ void TDMC45::Evaluate(bool CMInfo,short Saved) { char outFile[50]="Eval"; ClassNo RealClass, PrunedClass; short t; ItemNo *ConfusionMat, i, RawErrors, PrunedErrors; fstream FEvalRendimiento; //guarda los datos de la evaluacin de rendimiento //para el C4.5 if ( CMInfo ) { ConfusionMat = (ItemNo *) calloc((MaxClass+1)*(MaxClass+1), sizeof(ItemNo)); }

DateSeparator='-'; TimeSeparator='_'; strcat(outFile, DateTimeToStr(Now()).c_str()); strcat(outFile, Params->TablaBD.c_str()); strcat(outFile, ".log"); FEvalRendimiento.open(outFile, ios::out); FVitacora<<endl; if ( TRIALS > 1 ) { FVitacora<<"Prueba Antes de Podar Despus de Podar"; FVitacora<<endl; FVitacora<<"-------------------------------------"; FVitacora<<endl; } else { FVitacora<<" Antes de Podar Despus de Podar"; FVitacora<<endl; FVitacora<<" --------------------------------"; FVitacora<<endl; } FVitacora<<" Tamao Errores Tamao Errores Estimacin"; FVitacora<<endl; FVitacora<<endl; ForEach(t, 0, TRIALS-1) { RawErrors = PrunedErrors = 0; ForEach(i, 0, MaxItem) { RealClass = Class(Item[i]); if ( Category(Item[i], Raw[t]) != RealClass ) RawErrors++; PrunedClass = Category(Item[i], Pruned[t]); if ( PrunedClass != RealClass ) PrunedErrors++; if ( CMInfo && t == Saved ) { ConfusionMat[RealClass*(MaxClass+1)+PrunedClass]++; } } Cdigo Fuente Magdalena Servente 263

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

if ( TRIALS > 1 ) { FVitacora<<t; } FVitacora<<" "; FVitacora<<TreeSize(Raw[t]); FVitacora<<" "; FVitacora<<RawErrors; FVitacora<<"("; FVitacora<<(100.0*RawErrors / (MaxItem+1.0)); FVitacora<<") "; FVitacora<<TreeSize(Pruned[t]); FVitacora<<" "; FVitacora<<PrunedErrors; FVitacora<<"("; FVitacora<<(100.0*PrunedErrors / (MaxItem+1.0)); FVitacora<<") ("; FVitacora<<(100 * Pruned[t]->Errors / Pruned[t]->Items); FVitacora<<")"; if (t==Saved) {FVitacora<<" <<";} FVitacora<<endl; } if ( CMInfo ) { PrintConfusionMatrix(ConfusionMat); free(ConfusionMat); } FEvalRendimiento.close(); } /*************************************************************************/ /* */ /* Reserva espacio para las tablas de construccin */ /* */ /*************************************************************************/ void TDMC45::InitialiseTreeData() { DiscrValue v; Attribute a; Tested Gain Info Bar = (char *) calloc(MaxAtt+1, sizeof(char)); = (float *) calloc(MaxAtt+1, sizeof(float)); = (float *) calloc(MaxAtt+1, sizeof(float)); = (float *) calloc(MaxAtt+1, sizeof(float));

Subset = (Conjunto **) calloc(MaxAtt+1, sizeof(Conjunto *)); ForEach(a, 0, MaxAtt) { if ( MaxAttVal[a] ) { Subset[a] = (Conjunto *) calloc(MaxDiscrVal+1, sizeof(Conjunto)); ForEach(v, 0, MaxAttVal[a]) { Subset[a][v] = (Conjunto) malloc((MaxAttVal[a]>>3) + 1); } } } Subsets = (short *) calloc(MaxAtt+1, sizeof(short)); SplitGain = (float *) calloc(MaxItem+1, sizeof(float)); SplitInfo = (float *) calloc(MaxItem+1, sizeof(float)); Weight = (ItemCount *) calloc(MaxItem+1, sizeof(ItemCount)); Freq = (ItemCount **) calloc(MaxDiscrVal+1, sizeof(ItemCount *)); ForEach(v, 0, MaxDiscrVal) { Freq[v] = (ItemCount *) calloc(MaxClass+1, sizeof(ItemCount)); } ValFreq = (ItemCount *) calloc(MaxDiscrVal+1, sizeof(ItemCount)); ClassFreq = (ItemCount *) calloc(MaxClass+1, sizeof(ItemCount));

264

Magdalena Servente

Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Slice1 = (ItemCount *) calloc(MaxClass+2, sizeof(ItemCount)); Slice2 = (ItemCount *) calloc(MaxClass+2, sizeof(ItemCount)); UnknownRate = (float *) calloc(MaxAtt+1, sizeof(float)); /* Verificamos si todos los atributos tienen muchos valores discretos */

MultiVal = true; if ( ! SUBSET ) { for ( a = 0 ; MultiVal && a <= MaxAtt ; a++ ) { if ( SpecialStatus[a] != "IGNORAR" ) { MultiVal = MaxAttVal[a] >= 0.3 * (MaxItem + 1); } } } } /*************************************************************************/ /* */ /* Inicializa el peso de cada item */ /* */ /*************************************************************************/ void TDMC45::InitialiseWeights() { ItemNo i; ForEach(i, 0, MaxItem) { Weight[i] = 1.0; } } /*************************************************************************/ /* */ /* Construye un rbol de decisin para los casos Fp hasta Lp: */ /* */ /* - si todos los casos son de la misma clase, el rbol es una hoja, */ /* y devuelve una hoja con dicha clase */ /* */ /* - para cada atributo, calcular la informacin potencial provista */ /* por una prueba sobre el atributo (basada en las probabilidades */ /* de que cada caso tenga un valor particular para el atributo), */ /* y la ganancia en informacin que resultara de una prueba */ /* sobre el atributo (basada en las probabilidades de cada caso */ /* con un valor particular para el atributo pertenezca a una */ /* determinada clase). */ /* */ /* - sobre esta base, y dependiendo del criterio de seleccin actual, */ /* encontrar el mejor atributo para crear una rama. */ /* Nota: no se permitirn divisiones sobre un atributo a menos */ /* que dos o ms subconjuntos tengan al menos MINOBJS items. */ /* */ /* - intentar crear una rama y analizar si es mejor que crear una hoja */ /* */ /*************************************************************************/ Tree TDMC45::FormTree(ItemNo Fp, ItemNo Lp) { ItemNo i, Kp, Ep; ItemCount Cases, NoBestClass, KnownCases; float Factor, BestVal, Val, AvGain=0; Attribute Att, BestAtt, Possible=0; ClassNo c, BestClass; Tree Node; DiscrValue v; bool PrevAllKnown; Cases = CountItems(Fp, Lp); /* Generamos la distribucin en frecuencias de la clase */

ForEach(c, 0, MaxClass) { ClassFreq[c] = 0; } Cdigo Fuente Magdalena Servente 265

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

ForEach(i, Fp, Lp) { ClassFreq[ Class(Item[i]) ] += Weight[i]; } /* Buscamos la clase ms frecuente */

BestClass = 0; ForEach(c, 0, MaxClass) { if ( ClassFreq[c] > ClassFreq[BestClass] ) { BestClass = c; } } NoBestClass = ClassFreq[BestClass]; Node = Leaf(ClassFreq, BestClass, Cases, Cases - NoBestClass); /* Si todos los casos son de la misma clase o no hay suficientes casos para dividir, el rbol es una hoja */ || Cases < 2 * MINOBJS )

if ( NoBestClass == Cases { return Node; }

Verbosity(1) { FVitacora<<(Lp-Fp+1); FVitacora<<" tems, peso total "; FVitacora<<Cases; FVitacora<<endl; } /* Para cada atributo disponible, calculamos la informacin y la ganancia */

ForEach(Att, 0, MaxAtt-1) { Gain[Att] = -Epsilon; if ( SpecialStatus[Att] == "IGNORAR" ) continue; if ( MaxAttVal[Att] ) { /* atributo discreto

*/

if ( SUBSET && MaxAttVal[Att] > 2 ) { EvalSubset(Att, Fp, Lp, Cases); } else if ( ! Tested[Att] ) { EvalDiscreteAtt(Att, Fp, Lp, Cases); } } else { /*

atributo continuo

*/

EvalContinuousAtt(Att, Fp, Lp); } /* Actualizamos la ganancia promedio, excluyendo los atributos con muchos valores */

if ( Gain[Att] > -Epsilon && ( MultiVal || MaxAttVal[Att] < 0.3 * (MaxItem + 1) ) ) { Possible++; AvGain += Gain[Att]; } } /* Buscamos el mejor atributo de acuerdo al criterio determinado */

266

Magdalena Servente

Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

BestVal = -Epsilon; BestAtt = None; AvGain = ( Possible ? AvGain / Possible : 1E6 ); Verbosity(2) { if ( AvGain < 1E6 ) { FVitacora<<" ganancia promedio "; FVitacora<<AvGain; FVitacora<<endl; } } ForEach(Att, 0, MaxAtt-1) { if ( Gain[Att] > -Epsilon ) { Val = Worth(Info[Att], Gain[Att], AvGain); if ( Val > BestVal ) { BestAtt = Att; BestVal = Val; } } } /* Decidimos crear una rama o no */

if ( BestAtt != None ) { Verbosity(1) { FVitacora<<" mejor atributo "; FVitacora<<AttName->Strings[BestAtt].c_str(); if ( ! MaxAttVal[BestAtt] ) { FVitacora<<" corte "; FVitacora<<Bar[BestAtt]; } FVitacora<<" inf "; FVitacora<<Info[BestAtt]; FVitacora<<" ganancia "; FVitacora<<Gain[BestAtt]; FVitacora<<" val "; FVitacora<<BestVal; FVitacora<<endl; } /* Construir un nodo con la prueba seleccionada */

if ( MaxAttVal[BestAtt] ) { /* Atributo discreto */ if ( SUBSET && MaxAttVal[BestAtt] > 2 ) { SubsetTest(Node, BestAtt); } else { DiscreteTest(Node, BestAtt); } } else { /*

Atributo continuo

*/

ContinTest(Node, BestAtt); } /* Eliminamos los valores de atributo desconocidos */

PrevAllKnown = AllKnown; Kp = Group(0, Fp, Lp, Node) + 1; if ( Kp != Fp ) AllKnown = false; Cdigo Fuente Magdalena Servente 267

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

KnownCases = Cases - CountItems(Fp, Kp-1); UnknownRate[BestAtt] = (Cases - KnownCases) / (Cases + 0.001); Verbosity(1) { if ( UnknownRate[BestAtt] > 0 ) { FVitacora<<" proporciones desconocidas para "; FVitacora<<AttName->Strings[BestAtt].c_str(); FVitacora<<" = "; FVitacora<<UnknownRate[BestAtt]; FVitacora<<endl; } } /* Divide y reinars recursivo */

++Tested[BestAtt]; Ep = Kp - 1; Node->Errors = 0; ForEach(v, 1, Node->Forks) { Ep = Group(v, Kp, Lp, Node); if ( Kp <= Ep ) { Factor = CountItems(Kp, Ep) / KnownCases; ForEach(i, Fp, Kp-1) { Weight[i] *= Factor; } Node->Branch[v] = FormTree(Fp, Ep); Node->Errors += Node->Branch[v]->Errors; Group(0, Fp, Ep, Node); ForEach(i, Fp, Kp-1) { Weight[i] /= Factor; } } else { Node->Branch[v] = Leaf(Node->ClassDist, BestClass, 0.0, 0.0); } } --Tested[BestAtt]; AllKnown = PrevAllKnown; /* Analizamos si con una hoja obtenemos resultados similares */

if ( Node->Errors >= Cases - NoBestClass - Epsilon ) { Verbosity(1) { FVitacora<<"Colapsamos el rbol para "; FVitacora<<(Lp-Fp+1); FVitacora<<" tems a la hoja "; FVitacora<<ClassName->Strings[BestClass].c_str(); FVitacora<<endl; } Node->NodeType = 0; } } else { Verbosity(1) { FVitacora<<" no hay divisiones razonables "; FVitacora<<Cases; FVitacora<<" "; FVitacora<<(Cases - NoBestClass); FVitacora<<endl; 268 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

} } return Node; }

/*************************************************************************/ /* */ /* Agrupa los tems correspondiente a la rama V de una prueba y */ /* y devuelve el ndice del ltimo tem */ /* */ /* Nota: si V est vaca, agrupa valores desconocidos */ /* */ /*************************************************************************/ ItemNo TDMC45::Group(DiscrValue V, ItemNo Fp, ItemNo Lp,Tree TestNode) { ItemNo i; Attribute Att; float Thresh; Conjunto SS; Att = TestNode->Tested; if ( V ) { /* Agrupar items segn el valor del atributo Att, segn el tipo de rama */ switch ( TestNode->NodeType ) { case BrDiscr: for(i=Fp;i<Lp;i++) { if ( DVal(Item[i], Att) == V ) Intercambio(Fp++, i); } break; case ThreshContin: Thresh = TestNode->Cut; for(i=Fp;i<Lp;i++) { if ( (CVal(Item[i], Att) <= Thresh) == (V == 1) ) Intercambio(Fp++, i); } break; case BrSubset: SS = TestNode->Subset[V]; for(i=Fp;i<Lp;i++) { if ( In(DVal(Item[i], Att), SS) ) Intercambio(Fp++, i); } break; } } else { /* Agrupar valores desconocidos switch ( TestNode->NodeType ) { case BrDiscr: case BrSubset: for(i=Fp;i<Lp;i++) { if ( ! DVal(Item[i], Att) ) Intercambio(Fp++, i); } break; case ThreshContin: for(i=Fp;i<Lp;i++) { Cdigo Fuente Magdalena Servente 269

*/

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

if ( CVal(Item[i], Att) == Unknown ) Intercambio(Fp++, i); } break; } } return Fp - 1; } /*************************************************************************/ /* */ /* Intercambia los items en a y b */ /* */ /*************************************************************************/ void TDMC45::Intercambio(ItemNo a, ItemNo b) { register Description Hold; register ItemCount HoldW; Hold = Item[a]; Item[a] = Item[b]; Item[b] = Hold; HoldW = Weight[a]; Weight[a] = Weight[b]; Weight[b] = HoldW; }

/*************************************************************************/ /* */ /* Devuelve el peso total de los items desde Fp hasta Lp */ /* */ /*************************************************************************/ ItemCount TDMC45::CountItems(ItemNo Fp, ItemNo Lp) { register ItemCount Sum=0.0, *Wt, *LWt; if ( AllKnown ) return Lp - Fp + 1; for ( Wt = Weight + Fp, LWt = Weight + Lp ; Wt <= LWt ; ) { Sum += *Wt++; } return Sum; } //-----------------------------------------------------------------------------/*************************************************************************/ /* */ /* Determina el valor de una divisin particular segn el criterio */ /* elegido */ /* */ /* Parmetros: */ /* SplitInfo: informacin potencial de la divisin */ /* SplitGain: ganancia en informacin de la divisin */ /* MinGain: ganancia a partir de la cual el */ /* Gain Ratio puede usarse */ /* */ /* Si se est utilizando el criterio de Gain,se devuelve la ganancia de */ /* informacin de la divisin, pero si se est utilizando el criterio */ /* de GainRatio, se devuelve la proporcin de la ganancia de */ /* informacin con respecto a su informacin potencial. */ /* */ /*************************************************************************/ float TDMC45::Worth(float ThisInfo, float ThisGain, float MinGain) { if ( GAINRATIO ) { if ( ThisGain >= MinGain - Epsilon && ThisInfo > Epsilon ) { return ThisGain / ThisInfo; } else { 270 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

return -Epsilon; } } else { return ( ThisInfo > 0 && ThisGain > -Epsilon ? ThisGain : -Epsilon ); } } /*************************************************************************/ /* */ /* Resetea las tablas de frecuencia Freq[][] y ValFreq[] */ /* */ /*************************************************************************/ void TDMC45::ResetFreq(DiscrValue MaxVal) { DiscrValue v; ClassNo c; for (v=0;v<MaxVal;v++) { for (c=0;c<MaxClass;c++) { Freq[v][c] = 0; } ValFreq[v] = 0; } } /*************************************************************************/ /* */ /* Dadas las tablas Freq[][] y ValFreq[], computa la ganancia */ /* de informacin. */ /* */ /* Parmetros: */ /* BaseInfo: informacin promedio para todos los */ /* items con valores conocidos del */ /* atributo que se est testeando */ /* UnknownRate: fraccin de los items con valor del */ /* atributo desconocido */ /* MaxVal: cantidad de divisiones */ /* TotalItems: nro de items con valores conocidos para */ /* el atributo que se est testeando */ /* */ /* donde Freq[x][y] contiene el nro de casos con valor x para un */ /* atributo particular que pertenecen a la clase y, */ /* y ValFreq[x] contiene el nro de casos con valor x para un */ /* atributo particular */ /* */ /*************************************************************************/ float TDMC45::ComputeGain(float BaseInfo,float UnknFrac, DiscrValue MaxVal,ItemCount TotalItems) { DiscrValue v; float ThisInfo=0.0, ThisGain; short ReasonableSubsets=0; /* Verificamos si se conocen todos los valores o si son todos iguales */

if ( ! TotalItems ) return -Epsilon; /* Deben existir al menos dos subconjuntos con MINOBJS items for (v=1;v<MaxVal;v++) { if ( ValFreq[v] >= MINOBJS ) ReasonableSubsets++; } if ( ReasonableSubsets < 2 ) return -Epsilon; /* */

Calculamos la info total despus de la divisin, sumando la info de cada uno de los subconjuntos resultantes de la divisin */ for(v=1;v<MaxVal;v++) { ThisInfo += TotalInfo(Freq[v], 0, MaxClass); } /* Seteamos la ganancia de informacin para todos los items, ajustada para los desconocidos */ Magdalena Servente 271

Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

ThisGain = (1 - UnknFrac) * (BaseInfo - ThisInfo / TotalItems); Verbosity(5) { FVitacora<<"CalculoEstaGanancia: items "; FVitacora<<(TotalItems + ValFreq[0]); FVitacora<<" info "; FVitacora<<ThisInfo; FVitacora<<" desc "; FVitacora<<UnknFrac; FVitacora<<" resultado "; FVitacora<<ThisGain<<endl; } return ThisGain; } /*************************************************************************/ /* */ /* Computa la informacin total en V[ MinVal..MaxVal ] */ /* */ /*************************************************************************/ float TDMC45::TotalInfo(ItemCount V[], DiscrValue MinVal, DiscrValue MaxVal) { DiscrValue v; float Sum=0.0; ItemCount N, TotalItems=0; for(v=MinVal;v<MaxVal;v++) { N = V[v]; Sum += N * Log(N); TotalItems += N; } return TotalItems * Log(TotalItems) - Sum; }

/*************************************************************************/ /* */ /* Imprime la tabla de distribucin para un atributo determinado */ /* */ /*************************************************************************/ void TDMC45::PrintDistribution(Attribute Att,DiscrValue MaxVal,bool ShowNames) { DiscrValue v; ClassNo c; String Val; FVitacora<<endl; FVitacora<<" "; for(c=0;c<MaxClass;c++) { FVitacora<<ClassName->Strings[c].c_str(); } FVitacora<<endl; for(v=0;v<MaxVal;v++) { if ( ShowNames ) { if ( !v) { Val="desconocidos"; } else { if (MaxAttVal[Att]) { Val=AttValName[Att][v]; } else { if(v == 1) 272 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

{ Val="menores"; } else { Val="mayores"; } } } FVitacora<<Val.c_str(); } else { FVitacora<<v; } for(c=0;c<MaxClass;c++) { FVitacora<<Freq[v][c]; } FVitacora<<endl; } } /*************************************************************************/ /* */ /* Construye una hoja en un determinado nodo */ /* */ /*************************************************************************/ Tree TDMC45::Leaf(ItemCount *ClassFreq, ClassNo NodeClass,ItemCount Cases,ItemCount Errors) { Tree Node; Node = (Tree) calloc(1, sizeof(tree_record)); Node->ClassDist = (ItemCount *) calloc(MaxClass+1, sizeof(ItemCount)); memcpy(Node->ClassDist, ClassFreq, (MaxClass+1) * sizeof(ItemCount)); Node->NodeType Node->Leaf Node->Items Node->Errors return Node; } /*************************************************************************/ /* */ /* Inserta ramas en un nodo */ /* */ /*************************************************************************/ void TDMC45::Sprout(Tree Node, DiscrValue Branches) { Node->Forks = Branches; Node->Branch = (Tree *) calloc(Branches+1, sizeof(Tree)); } = 0; = NodeClass; = Cases; = Errors;

/*************************************************************************/ /* */ /* Muestra todo el rbol de decisin T */ /* */ /*************************************************************************/ Tree TDMC45::PrintTree(Tree T) { short s; Subtree=0; FVitacora<<"rbol de decisin"; FVitacora<<endl; Show(T, 0); FVitacora<<endl; ForEach(s, 1, Subtree) { Cdigo Fuente Magdalena Servente 273

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

FVitacora<<endl; FVitacora<<endl; FVitacora<<"Subrbol "; FVitacora<<s; Show(Subdef[s], 0); FVitacora<<endl; } FVitacora<<endl; } /*************************************************************************/ /* */ /* Muestra el rbol T con offset Sh */ /* */ /*************************************************************************/ void TDMC45::Show(Tree T,short Sh) { DiscrValue v, MaxV; if ( T->NodeType ) { /* Verificamos si se necesita un nuevo subrbol */ if ( (T->Items!=0) && (Sh) && (Sh * TabSize + MaxLine(T) > Width) ) { if ( Subtree < 99 ) { Subdef[++Subtree] = T; FVitacora<<Subtree; } else { FVitacora<<"[S??]"; } } else { MaxV = T->Forks; /* Imprimimos los casos simples primero */ ForEach(v, 1, MaxV) { if ( ! T->Branch[v]->NodeType ) { ShowBranch(Sh, T, v); } } /* Imprimimos los subrboles */

ForEach(v, 1, MaxV) { if ( T->Branch[v]->NodeType ) { ShowBranch(Sh, T, v); } } } } else { FVitacora<<ClassName->Strings[T->Leaf].c_str(); FVitacora<<"("; FVitacora<<T->Items; if ( T->Errors > 0 ) FVitacora<<T->Errors; FVitacora>>")"; } } /*************************************************************************/ /* */ /* Imprime un nodo T con offset Sh, valor de rama v */ /* */ /*************************************************************************/ void TDMC45::ShowBranch(short Sh,Tree T,DiscrValue v) { DiscrValue Pv, Last; Attribute Att; 274 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

bool FirstValue; short TextWidth, Skip, Values=0, i; Att = T->Tested; switch ( T->NodeType ) { case BrDiscr: Indent(Sh, Tab); FVitacora<<AttName->Strings[Att].c_str(); FVitacora<<" = "; FVitacora<<AttValName[Att][v].c_str(); break; case ThreshContin: Indent(Sh, Tab); { FVitacora<<AttName->Strings[Att].c_str(); FVitacora<<" "; if (v==1) {FVitacora<<"<=";} else {FVitacora<<">";} FVitacora<<" "; FVitacora<<T->Cut; } if ( T->Lower != T->Upper ) { FVitacora<<"["; FVitacora<<T->Lower; FVitacora<<","; FVitacora<<T->Upper; } FVitacora<<":"; break; case BrSubset: /* Contar los valores de la rama ForEach(Pv, 1, MaxAttVal[Att]) { if ( In(Pv, T->Subset[v]) ) { Last = Pv; Values++; } } if ( ! Values ) return; Indent(Sh, Tab); if ( Values == 1 ) { FVitacora<<AttName->Strings[Att].c_str(); FVitacora<<" = "; FVitacora<<AttValName[Att][Last].c_str(); FVitacora<<":"; break; } FVitacora<<AttName->Strings[Att].c_str(); FVitacora<<" en {"; FirstValue = true; Skip = TextWidth = AttName->Strings[Att].Length() + 5; ForEach(Pv, 1, MaxAttVal[Att]) { if ( In(Pv, T->Subset[v]) ) { if ( ! FirstValue && TextWidth + AttValName[Att][Pv].Length() + 11 > Width ) { Indent(Sh, Tab); ForEach(i, 1, Skip) putchar(' '); TextWidth = Skip; FirstValue = true; } Cdigo Fuente Magdalena Servente 275

*/

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

FVitacora<<AttValName[Att][Pv].c_str(); if (Pv==Last) {FVitacora<<"}";} else {FVitacora<<",";} TextWidth += AttValName[Att][Pv].Length() + 1; FirstValue = false; } } putchar(':'); } Show(T->Branch[v], Sh+1); } /*************************************************************************/ /* */ /* Encuentra el tamao mx de una lnea nodo para el subrbol St. */ /* El formato de la lnea es */ /* <atributo> <> X.xx:[ <clase (<Items>)], o */ /* <atributo> = <DVal>:[ <clase> (<Items>)] */ /* */ /*************************************************************************/ short TDMC45::MaxLine(Tree St) { Attribute a; DiscrValue v, MaxV, Next; short Ll, MaxLl=0; a = St->Tested; MaxV = St->Forks; ForEach(v, 1, MaxV) { Ll = ( St->NodeType == 2 ? 4 : AttValName[a][v].Length() ) + 1; /* Buscamos la rama apropiada */

Next = v; if ( ! St->Branch[Next]->NodeType ) { Ll += ClassName->Strings[St->Branch[Next]->Leaf].Length() + 6; } MaxLl = Max(MaxLl, Ll); } return AttName->Strings[a].Length() + 4 + MaxLl; } /*************************************************************************/ /* */ /* Indenta Sh columnas */ /* */ /*************************************************************************/ void TDMC45::Indent(short Sh,char *Mark) { FVitacora<<endl; while ( Sh-- ) FVitacora<<Mark; } /*************************************************************************/ /* */ /* Guardamos el rbol T completo en el archivo */ /* de extensin Extension */ /* */ /*************************************************************************/ void TDMC45::SaveTree(Tree T,AnsiString Extension) { static char *LastExt=""; if ( strcmp(LastExt, Extension.c_str()) ) { LastExt = Extension.c_str(); if ( TRf ) fclose(TRf); 276 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

strcpy(Fn, FileName.c_str()); strcat(Fn, Extension.c_str()); if ( ! ( TRf = fopen(Fn, "w") ) ) { FVitacora<<"Error al abrir el archivo de salida del rbol"; FVitacora<<endl; } } putc('\n', TRf); OutTree(T); SaveDiscreteNames(); } /*************************************************************************/ /* */ /* Guardamos el rbol T como caracteres */ /* */ /*************************************************************************/ void TDMC45::OutTree(Tree T) { DiscrValue v; int Bytes; StreamOut((char StreamOut((char StreamOut((char StreamOut((char StreamOut((char *) *) *) *) *) &T->NodeType, sizeof(short)); &T->Leaf, sizeof(ClassNo)); &T->Items, sizeof(ItemCount)); &T->Errors, sizeof(ItemCount)); T->ClassDist, (MaxClass + 1) * sizeof(ItemCount));

if ( T->NodeType ) { StreamOut((char *) &T->Tested, sizeof(Attribute)); StreamOut((char *) &T->Forks, sizeof(short)); switch ( T->NodeType ) { case BrDiscr: break; case ThreshContin: StreamOut((char *) &T->Cut, sizeof(float)); StreamOut((char *) &T->Lower, sizeof(float)); StreamOut((char *) &T->Upper, sizeof(float)); break; case BrSubset: Bytes = (MaxAttVal[T->Tested]>>3) + 1; ForEach(v, 1, T->Forks) { StreamOut((char *) T->Subset[v], Bytes); } break; } ForEach(v, 1, T->Forks) { OutTree(T->Branch[v]); } } } /*************************************************************************/ /* */ /* Obtiene el rbol de decisin con extensin Extension */ /* */ /*************************************************************************/ Tree TDMC45::GetTree(AnsiString Extension) { Tree Hold; static char *LastExt=""; if ( strcmp(LastExt, Extension.c_str()) ) { LastExt = Extension.c_str(); Cdigo Fuente Magdalena Servente 277

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

if ( TRf ) fclose(TRf); strcpy(Fn, FileName.c_str()); strcat(Fn, Extension.c_str()); if ( ! ( TRf = fopen(Fn, "r") ) ) { FVitacora<<"Error al leer del archivo del rbol"; FVitacora<<endl; } } if ( ! TRf || getc(TRf) == EOF ) { Hold->Items=0; return Hold; } Hold = InTree(); RecoverDiscreteNames(); return Hold; } /*************************************************************************/ /* */ /* Recuperar el rbol a partir de los caracteres guardados */ /* */ /*************************************************************************/ Tree TDMC45::InTree() { Tree T; DiscrValue v; int Bytes; T = (Tree) malloc(sizeof(tree_record)); StreamIn((char StreamIn((char StreamIn((char StreamIn((char *) *) *) *) &T->NodeType, sizeof(short)); &T->Leaf, sizeof(ClassNo)); &T->Items, sizeof(ItemCount)); &T->Errors, sizeof(ItemCount));

T->ClassDist = (ItemCount *) calloc(MaxClass+1, sizeof(ItemCount)); StreamIn((char *) T->ClassDist, (MaxClass + 1) * sizeof(ItemCount)); if ( T->NodeType ) { StreamIn((char *) &T->Tested, sizeof(Attribute)); StreamIn((char *) &T->Forks, sizeof(short)); switch ( T->NodeType ) { case BrDiscr: break; case ThreshContin: StreamIn((char *) &T->Cut, sizeof(float)); StreamIn((char *) &T->Lower, sizeof(float)); StreamIn((char *) &T->Upper, sizeof(float)); break; case BrSubset: T->Subset = (Conjunto *) calloc(T->Forks + 1, sizeof(Conjunto)); Bytes = (MaxAttVal[T->Tested]>>3) + 1; ForEach(v, 1, T->Forks) { T->Subset[v] = (Conjunto) malloc(Bytes); StreamIn((char *) T->Subset[v], Bytes); } } T->Branch = (Tree *) calloc(T->Forks + 1, sizeof(Tree)); ForEach(v, 1, T->Forks) { T->Branch[v] = InTree(); 278 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

} } return T; } /*************************************************************************/ /* */ /* Stream caracteres de/hacia el archivo TRf desde/hacia una dir */ /* */ /*************************************************************************/ void TDMC45::StreamOut(AnsiString s,int n) {char *ss; ss=s.c_str(); while ( n-- ) putc(*ss++, TRf); } void TDMC45::StreamIn(AnsiString s,int n) {char *ss; while ( n-- ) *ss++ = getc(TRf); s=AnsiString(ss); }

/*************************************************************************/ /* */ /* Libera el espacio ocupado por Node */ /* */ /*************************************************************************/ void TDMC45::ReleaseTree(Tree Node) { DiscrValue v; if ( Node->NodeType ) { ForEach(v, 1, Node->Forks) { ReleaseTree(Node->Branch[v]); } free(Node->Branch); if ( Node->NodeType == BrSubset ) { free(Node->Subset); } } free(Node->ClassDist); free(Node); } /*************************************************************************/ /* */ /* Cuenta los nodos de un rbol */ /* */ /*************************************************************************/ int TDMC45::TreeSize(Tree Node) { int Sum=0; DiscrValue v; if ( Node->NodeType ) { ForEach(v, 1, Node->Forks) { Sum += TreeSize(Node->Branch[v]); } } return Sum + 1; } /*************************************************************************/ /* */ /* Devuelve una copia de tree T */ Cdigo Fuente Magdalena Servente 279

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

/* */ /*************************************************************************/ Tree TDMC45::CopyTree(Tree T) { DiscrValue v; Tree New; New = (Tree) malloc(sizeof(tree_record)); memcpy(New, T, sizeof(tree_record)); New->ClassDist = (ItemCount *) calloc(MaxClass+1, sizeof(ItemCount)); memcpy(New->ClassDist, T->ClassDist, (MaxClass + 1) * sizeof(ItemCount)); if ( T->NodeType ) { New->Branch = (Tree *) calloc(T->Forks + 1, sizeof(Tree)); ForEach(v, 1, T->Forks) { New->Branch[v] = CopyTree(T->Branch[v]); } } return New; } /*************************************************************************/ /* */ /* Guarda los valores de los atributos ledos con "discrete N" */ /* */ /*************************************************************************/ void TDMC45::SaveDiscreteNames() { Attribute Att; DiscrValue v; int Length; ForEach(Att, 0, MaxAtt) { if ( SpecialStatus[Att] != "DISCRETE" ) continue; StreamOut((char *) &MaxAttVal[Att], sizeof(int)); ForEach(v, 1, MaxAttVal[Att]) { Length = AttValName[Att][v].Length() + 1; StreamOut((char *) &Length, sizeof(int)); StreamOut((char *) AttValName[Att][v].c_str(), Length); } } } /*************************************************************************/ /* */ /* Recupera los valores de los atributos ledos con "discrete N" */ /* */ /*************************************************************************/ void TDMC45::RecoverDiscreteNames() { Attribute Att; DiscrValue v; int Length; ForEach(Att, 0, MaxAtt) { if ( SpecialStatus[Att] != "DISCRETE" ) continue; StreamIn(AnsiString(MaxAttVal[Att]), sizeof(int)); ForEach(v, 1, MaxAttVal[Att]) { StreamIn(AnsiString(Length), sizeof(int)); AttValName[Att][v] = (char *) malloc(Length); StreamIn(AttValName[Att][v], Length); } } 280 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

} /*************************************************************************/ /* */ /* Evaluacin del armado de subconjuntos sobre un atrib discreto. A */ /* partir de los subconjuntos elegidos Subset[Att][], se asigna a */ /* Subsets[Att] el nro de subconjuntos, y se calculan Info[] y Gain[] */ /* de una prueba sobre el atributo of a test on the attribute. */ /* */ /*************************************************************************/ void TDMC45::EvalSubset(Attribute Att, ItemNo Fp, ItemNo Lp,ItemCount Items) { DiscrValue V1, V2, BestV1, BestV2, Barred; ItemCount KnownItems; ClassNo c; float BaseInfo, MinGain, ThisGain, ThisInfo, Val, BestVal, BestGain, BestInfo, PrevVal, PrevGain, PrevInfo; short Blocks=0, MissingValues=0, ReasonableSubsets, Bytes, b; bool MergedSubsets = false; int SaveMINOBJS; SaveMINOBJS = MINOBJS; MINOBJS = 1; /* Primero calculamos Freq[][], ValFreq[], info de base, y la ganancia y la info total de una particin sobre el atrib discreto Att */

ComputeFrequencies(Att, Fp, Lp); KnownItems = Items - ValFreq[0]; if ( KnownItems < Epsilon ) { Verbosity(2) { FVitacora<<AttName->Strings[Att].c_str(); FVitacora<<" no tiene valores conocidos "; FVitacora<<endl; } Gain[Att] = -Epsilon; Info[Att] = 0; return; } BaseInfo = DiscrKnownBaseInfo(KnownItems, MaxAttVal[Att]); PrevGain = ComputeGain(BaseInfo, UnknownRate[Att], MaxAttVal[Att],KnownItems); PrevInfo = TotalInfo(ValFreq, 0, MaxAttVal[Att]) / Items; PrevVal = Worth(PrevInfo, PrevGain, Epsilon); Verbosity(2) { FVitacora<<AttName->Strings[Att].c_str(); Verbosity(3) PrintDistribution(Att, MaxAttVal[Att], true); FVitacora<<"inf "; FVitacora<<PrevInfo; FVitacora<<" ganancia "; FVitacora<<PrevGain; FVitacora<<" val="; FVitacora<<PrevVal; FVitacora<<endl; } /* Eliminamos de Freq[] and ValFreq[] aquellos valores del atributo que no estn representados, y creamos un subconjunto nuevo para cada uno de los valores representados del atributo */

Bytes = (MaxAttVal[Att]>>3) + 1; ClearBits(Bytes, Subset[Att][0]); ForEach(V1, 1, MaxAttVal[Att]) { if ( ValFreq[V1] > 0.5 ) { Cdigo Fuente Magdalena Servente 281

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

if ( ++Blocks < V1 ) { ValFreq[Blocks] = ValFreq[V1]; ForEach(c, 0, MaxClass) { Freq[Blocks][c] = Freq[V1][c]; } } ClearBits(Bytes, Subset[Att][Blocks]); SetBit(V1, Subset[Att][Blocks]); } else { SetBit(V1, Subset[Att][0]); MissingValues++; } } /* /* Unimos los subconjuntos de una nica clase con otrs de la misma clase */ Nota: ValFreq[V] > 0 para todo V */

ForEach(V1, 1, Blocks-1) { for ( c = 0 ; Freq[V1][c] < 0.1 ; c++ ) ; if ( Freq[V1][c] < ValFreq[V1] - 0.1 ) continue; /* Tenemos una nica clase -- buscamos otras */

for ( V2 = V1+1 ; V2 <= Blocks ; ) { if ( Freq[V2][c] < ValFreq[V2] - 0.1 ) { V2++; } else { /* Unimos estos subconjuntos */ Combine(V1, V2, Blocks); ForEach(b, 0, Bytes-1) { Subset[Att][V1][b] |= Subset[Att][V2][b]; Subset[Att][V2][b] = Subset[Att][Blocks][b]; } Blocks--; MergedSubsets = true; } } } if ( MergedSubsets ) { PrevGain = ComputeGain(BaseInfo, UnknownRate[Att], Blocks, KnownItems); PrevInfo = TotalInfo(ValFreq, 0, Blocks) / Items; PrevVal = Worth(PrevInfo, PrevGain, Epsilon); Verbosity(2) { FVitacora<<"Luego de unir subconjuntos de una nica clase:"; Verbosity(3) PrintDistribution(Att, Blocks, false); FVitacora<<"inf "; FVitacora<<PrevInfo; FVitacora<<" ganancia "; FVitacora<<PrevGain; FVitacora<<" val="; FVitacora<<PrevVal; FVitacora<<endl; } } /* 282 Examinamos los pares posibles de uniones y aplicamos "hill-climbing" Magdalena Servente */ Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

MinGain = PrevGain / 2; while ( Blocks > 2 ) { BestVal = BestV1 = 0; BestGain = -Epsilon; /* Verificamos si existen subconjuntos razonables; si <3, unimos con el bloque ms grande */

ReasonableSubsets = 0; Barred = 1; ForEach(V1, 1, Blocks) { if ( ValFreq[V1] >= SaveMINOBJS ) ReasonableSubsets++; if ( ValFreq[V1] > ValFreq[Barred] ) Barred = V1; } if ( ReasonableSubsets >= 3 ) Barred = 0; /* Para cada par de valores posibles, calculamos la ganancia y la info total de una divisin en la cual se tratan como una unidad. Almacenamos el par con mejor ganancia. */

ForEach(V1, 1, Blocks-1) { ForEach(V2, V1+1, Blocks) { if ( V1 == Barred || V2 == Barred ) continue; Combine(V1, V2, Blocks); ThisGain = ComputeGain(BaseInfo, UnknownRate[Att], Blocks-1, KnownItems); ThisInfo = TotalInfo(ValFreq, 0, Blocks-1) / Items; Val = Worth(ThisInfo, ThisGain, Epsilon); Verbosity(4) { FVitacora<<"combinacin "; FVitacora<<V1; FVitacora<<" "; FVitacora<<V2; FVitacora<<" info "; FVitacora<<ThisInfo; FVitacora<<" ganancia "; FVitacora<<ThisGain; FVitacora<<" val "; FVitacora<<Val; PrintDistribution(Att, Blocks-1, false); } /* Forzamos una divisin si hay menos de dos subconj razonables o utilizamos la ganancia Elegimos esta divisin sobre la anterior si gain >= MinGain (y la anterior < MinGain), o val >= mejor valor anterior */

if ( ThisGain >= MinGain && BestGain < MinGain || Val >= BestVal || ! BestV1 && ( ! GAINRATIO || ReasonableSubsets < 2 ) ) { BestVal = Val; BestGain = ThisGain; BestInfo = ThisInfo; BestV1 = V1; BestV2 = V2; } Uncombine(V1, V2); } } if ( GAINRATIO && Cdigo Fuente Magdalena Servente 283

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

ReasonableSubsets >= 2 && ( ! BestV1 || BestVal < PrevVal + 1E-5 || BestVal == PrevVal && BestGain < PrevGain ) ) break; PrevGain = BestGain; PrevInfo = BestInfo; PrevVal = BestVal; Combine(BestV1, BestV2, Blocks); ForEach(b, 0, Bytes-1) { Subset[Att][BestV1][b] |= Subset[Att][BestV2][b]; Subset[Att][BestV2][b] = Subset[Att][Blocks][b]; } Blocks--; Verbosity(2) { FVitacora<<" formamos el subconjunto "; PrintSubset(Att, Subset[Att][BestV1]); FVitacora<<": "; FVitacora<<Blocks; FVitacora<<" subconjuntos, inf "; FVitacora<<BestInfo; FVitacora<<" ganancia "; FVitacora<<BestGain; FVitacora<<" val "; FVitacora<<BestVal; Verbosity(3) { FVitacora<<" combinacin "; FVitacora<<BestV1; FVitacora<<" "; FVitacora<<BestV2; PrintDistribution(Att, Blocks, false); } } } MINOBJS = SaveMINOBJS; if ( PrevVal { Gain[Att] Info[Att] } else { Gain[Att] Info[Att] <= 0 ) = -Epsilon; = 0;

= ComputeGain(BaseInfo, UnknownRate[Att], Blocks, KnownItems); = PrevInfo;

if ( MissingValues ) { Blocks++; CopyBits(Bytes, Subset[Att][0], Subset[Att][Blocks]); } Subsets[Att] = Blocks; Verbosity(2) FVitacora<<" Subconjuntos finales: "; Verbosity(3) PrintDistribution(Att, Blocks, false); Verbosity(2) { FVitacora<<" inf "; FVitacora<< Info[Att]; FVitacora<<" ganancia "; FVitacora<<Gain[Att]; FVitacora<<" val "; FVitacora<< Worth(Info[Att], Gain[Att], Epsilon); } } }

284

Magdalena Servente

Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

/*************************************************************************/ /* */ /* Combina los valores de la distribucin de los atributos discretos */ /* x e y, guardando los nuevos valores en Freq[x][] y ValFreq[x][]. */ /* Los valores anteriores se guardan en Slice1 y Slice2 */ /* */ /*************************************************************************/ void TDMC45::Combine(DiscrValue x,DiscrValue y,DiscrValue Last) { ClassNo c; ForEach(c, 0, MaxClass) { Slice1[c] = Freq[x][c]; Slice2[c] = Freq[y][c]; Freq[x][c] += Freq[y][c]; Freq[y][c] = Freq[Last][c]; } Slice1[MaxClass+1] = ValFreq[x]; Slice2[MaxClass+1] = ValFreq[y]; ValFreq[x] += ValFreq[y]; ValFreq[y] = ValFreq[Last]; }

/*************************************************************************/ /* */ /* Devuelve a x e y los valores de distribucin originales a partir */ /* de Slice1 y Slice2 */ /* */ /*************************************************************************/ void TDMC45::Uncombine(DiscrValue x,DiscrValue y) { ClassNo c; ForEach(c, 0, MaxClass) { Freq[x][c] = Slice1[c]; Freq[y][c] = Slice2[c]; } ValFreq[x] = Slice1[MaxClass+1]; ValFreq[y] = Slice2[MaxClass+1]; }

/*************************************************************************/ /* */ /* Imprime los valores del atributo Att que estan en el subconjunto Ss */ /* */ /*************************************************************************/ void TDMC45::PrintSubset(Attribute Att,Conjunto Ss) { DiscrValue V1; bool First=true; ForEach(V1, 1, MaxAttVal[Att]) { if ( In(V1, Ss) ) { if ( First ) { First = false; } else { FVitacora<<", "; } FVitacora<<AttValName[Att][V1].c_str(); } } }

Cdigo Fuente

Magdalena Servente

285

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

/*************************************************************************/ /* */ /* Construye una prueba de nodo sobre un subconjunto de valores */ /* */ /*************************************************************************/ void TDMC45::SubsetTest(Tree Node,Attribute Att) { short S, Bytes; Sprout(Node, Subsets[Att]); Node->NodeType Node->Tested Node->Errors = BrSubset; = Att; = 0;

Bytes = (MaxAttVal[Att]>>3) + 1; Node->Subset = (Conjunto *) calloc(Subsets[Att] + 1, sizeof(Conjunto)); ForEach(S, 1, Node->Forks) { Node->Subset[S] = (Conjunto) malloc(Bytes); CopyBits(Bytes, Subset[Att][S], Node->Subset[S]); } }

/*************************************************************************/ /* */ /* Setea Info[] and Gain[] para la particin discreta de items */ /* Fp hasta Lp */ /* */ /*************************************************************************/ void TDMC45::EvalDiscreteAtt(Attribute Att,ItemNo Fp,ItemNo Lp,ItemCount Items) { ItemCount KnownItems; ComputeFrequencies(Att, Fp, Lp); KnownItems = Items - ValFreq[0]; /* Caso especial cuando no existen valores conocidos del atributo */

if ( Items <= ValFreq[0] ) { Verbosity(2) { FVitacora<<AttName->Strings[Att].c_str();//AttName[Att]; FVitacora<<" no existen valores conocidos"; FVitacora<<endl; }

Gain[Att] = -Epsilon; Info[Att] = 0.0; return; } Gain[Att] = ComputeGain(DiscrKnownBaseInfo(KnownItems, MaxAttVal[Att]), UnknownRate[Att], MaxAttVal[Att], KnownItems); Info[Att] = TotalInfo(ValFreq, 0, MaxAttVal[Att]) / Items; Verbosity(2) { FVitacora<<AttName->Strings[Att].c_str(); Verbosity(3) PrintDistribution(Att, MaxAttVal[Att], true); FVitacora<<Info[Att]; FVitacora<<" ganancia "; FVitacora<<Gain[Att]; FVitacora<<endl; } }

/*************************************************************************/ /* */ 286 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

/* Computa las tablas de frecuencia Freq[][] y ValFreq[] para el */ /* atrib Att para los items desde Fp hasta Lp, y determina la */ /* proporcin de desconocidos (UnknownRate) para Att */ /* */ /*************************************************************************/ void TDMC45::ComputeFrequencies(Attribute Att,ItemNo Fp,ItemNo Lp) { Description Case; ClassNo c; DiscrValue v; ItemNo p; ResetFreq(MaxAttVal[Att]); /* Determinamos la frecuencia de cada clase segn los casos de cada valor posible para el atributo dado */

ForEach(p, Fp, Lp) { Case = Item[p]; Freq[ DVal(Case,Att) ][ Class(Case) ] += Weight[p]; } /* Determinamos la frecuencia de cada valor posible para el atributo dado */

ForEach(v, 0, MaxAttVal[Att]) { ForEach(c, 0, MaxClass) { ValFreq[v] += Freq[v][c]; } } /* Determinamos la proporcin de valores desconocidos para cada atributo */

UnknownRate[Att] = ValFreq[0] / CountItems(Fp, Lp); }

/*************************************************************************/ /* */ /* Devuelve la informacin base de los itemscon valores conocidos */ /* de un atributo discreto, utilizando la tabla de frecuencias Freq[][] */ /* */ /*************************************************************************/ float TDMC45::DiscrKnownBaseInfo(DiscrValue KnownItems,ItemCount MaxVal) { ClassNo c; ItemCount ClassCount; double Sum=0; DiscrValue v; ForEach(c, 0, MaxClass) { ClassCount = 0; ForEach(v, 1, MaxVal) { ClassCount += Freq[v][c]; } Sum += ClassCount * Log(ClassCount); } return (KnownItems * Log(KnownItems) - Sum) / KnownItems; }

/*************************************************************************/ /* */ /* Construye y devuelve un nodo para una prueba sobre un */ /* atributo discreto */ /* */ /*************************************************************************/ void TDMC45::DiscreteTest(Tree Node,Attribute Att) { ItemCount CountItems(); Cdigo Fuente Magdalena Servente 287

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Sprout(Node, MaxAttVal[Att]); Node->NodeType Node->Tested Node->Errors } = BrDiscr; = Att; = 0;

/*************************************************************************/ /* */ /* Evaluacin de una prueba sobre un atributo continuo */ /* --------------------------------------------------*/ /* */ /*************************************************************************/ /*************************************************************************/ /* */ /* Trabajamos ocmo si los atributos continuos tuviesen los siguientes */ /* valores posibles: */ /* 0 (desconocido), 1 (menor que el corte), 2(mayor que el corte) */ /* Esta rutina busca el mejor corte para los items desde Fp hasta Lp */ /* y setea Info[], Gain[] and Bar[] */ /* */ /*************************************************************************/ void TDMC45::EvalContinuousAtt(Attribute Att,ItemNo Fp,ItemNo Lp) { ItemNo i, BestI, Xp, Tries=0; ItemCount Items, KnownItems, LowItems, MinSplit; ClassNo c; float AvGain=0, Val, BestVal, BaseInfo, ThreshCost; Verbosity(2) { FVitacora<<"Atrib "; FVitacora<<AttName->Strings[Att].c_str(); } Verbosity(3) FVitacora<<endl; ResetFreq(2); /* Omitimos y contamos los valores desconocidos */

Items = CountItems(Fp, Lp); Xp = Fp; ForEach(i, Fp, Lp) { if ( CVal(Item[i],Att) == Unknown ) { Freq[ 0 ][ Class(Item[i]) ] += Weight[i]; Intercambio(Xp, i); Xp++; } } ValFreq[0] = 0; ForEach(c, 0, MaxClass) { ValFreq[0] += Freq[0][c]; } KnownItems = Items - ValFreq[0]; UnknownRate[Att] = 1.0 - KnownItems / Items; /* Caso especial cuando hay pocos valores conocidos */

if ( KnownItems < 2 * MINOBJS ) { Verbosity(2) { FVitacora<<"casos insuficientes con valores conocidos "; FVitacora<<endl; } Gain[Att] = -Epsilon; Info[Att] = 0.0; return; } 288 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Quicksort(Xp, Lp, Att); /* Contamos los valores base y determimos la informacin base */

ForEach(i, Xp, Lp) { Freq[ 2 ][ Class(Item[i]) ] += Weight[i]; SplitGain[i] = -Epsilon; SplitInfo[i] = 0; } BaseInfo = TotalInfo(Freq[2], 0, MaxClass) / KnownItems; /* Probamos cortes posibles entre los items i e i+1, y determinamos la informacin y ganancia de cada corte.*/

MinSplit = 0.10 * KnownItems / (MaxClass + 1); if ( MinSplit <= MINOBJS ) MinSplit = MINOBJS; else if ( MinSplit > 25 ) MinSplit = 25; LowItems = 0; ForEach(i, Xp, Lp - 1) { c = Class(Item[i]); LowItems += Weight[i]; Freq[1][c] += Weight[i]; Freq[2][c] -= Weight[i]; if ( LowItems < MinSplit ) continue; else if ( LowItems > KnownItems - MinSplit ) break; if ( CVal(Item[i],Att) < CVal(Item[i+1],Att) - 1E-5 ) { ValFreq[1] = LowItems; ValFreq[2] = KnownItems - LowItems; SplitGain[i] = ComputeGain(BaseInfo, UnknownRate[Att], 2, KnownItems); SplitInfo[i] = TotalInfo(ValFreq, 0, 2) / Items; AvGain += SplitGain[i]; Tries++; Verbosity(3) { FVitacora<<" Corte en "; FVitacora<<(( CVal(Item[i],Att) + CVal(Item[i+1],Att) ) / 2); FVitacora<<" (ganancia "; FVitacora<<SplitGain[i]; FVitacora<<" val "; FVitacora<<Worth(SplitInfo[i], SplitGain[i], Epsilon); FVitacora<<"):"; PrintDistribution(Att, 2, true); } } } /* Encontramos el mejor atributo segn el criterio dado */

ThreshCost = Log(Tries) / Items; BestVal = 0; BestI = None; ForEach(i, Xp, Lp - 1) { if ( (Val = SplitGain[i] - ThreshCost) > BestVal ) { BestI = i; BestVal = Val; } } /* Si una prueba sobre el atributo es capaz de lograr una ganancia, setear el mejor break point, ganancia e informacin */

if ( BestI == None ) { Gain[Att] = -Epsilon; Cdigo Fuente Magdalena Servente 289

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Info[Att] = 0.0; Verbosity(2) {

FVitacora<<" no hay ganancia "; FVitacora<<endl;

} } else { Bar[Att] = (CVal(Item[BestI],Att) + CVal(Item[BestI+1],Att)) / 2; Gain[Att] = BestVal; Info[Att] = SplitInfo[BestI]; Verbosity(2) { FVitacora<<" corte="; FVitacora<<Bar[Att]; FVitacora<<" inf "; FVitacora<<Info[Att]; FVitacora<<" ganancia "; FVitacora<<Gain[Att]; FVitacora<<endl; } } }

/*************************************************************************/ /* */ /* Transforma una hoja en una prueba sobre un atributo continuo */ /* */ /*************************************************************************/ void TDMC45::ContinTest(Tree Node,Attribute Att) { float Thresh; Sprout(Node, 2); Thresh = GreatestValueBelow(Att, Bar[Att]); Node->NodeType Node->Tested Node->Cut Node->Lower Node->Upper Node->Errors } /*************************************************************************/ /* */ /* Devuelve el mayor valor del atributo Att por debajo del lmite t */ /* */ /*************************************************************************/ float TDMC45::GreatestValueBelow(Attribute Att,float t) { ItemNo i; float v, Best; bool NotYet=true; ForEach(i, 0, MaxItem) { v = CVal(Item[i], Att); if ( v != Unknown && v <= t && ( NotYet || v > Best ) ) { Best = v; NotYet = false; } } return Best; } = ThreshContin; = Att; = = = Thresh; = 0;

/*************************************************************************/ /* */ 290 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

/* Ordena los items desde Fp hasta Lp segn el atributo a */ /* */ /*************************************************************************/ //void TDMC45::Quicksort(ItemNo Fp,ItemNo Lp,Attribute Att, void (*Exchange)()) void TDMC45::Quicksort(ItemNo Fp,ItemNo Lp,Attribute Att) { register ItemNo Lower, Middle; register float Thresh; register ItemNo i; if ( Fp < Lp ) { Thresh = CVal(Item[Lp], Att); /* Separamos todos los items con valores <= lmite */

Middle = Fp; for ( i = Fp ; i < Lp ; i++ ) { if ( CVal(Item[i], Att) <= Thresh ) { if ( i != Middle ) Intercambio(Middle,i);//(*Exchange)(Middle, i); Middle++; } } /* Extraemos todos los valores iguales al lmite */

Lower = Middle - 1; for ( i = Lower ; i >= Fp ; i-- ) { if ( CVal(Item[i], Att) == Thresh ) { if ( i != Lower ) Intercambio(Lower,i);//(*Exchange)(Lower, i); Lower--; } } /* // Ordenamos los valores menores */

Quicksort(Fp, Lower, Att, Exchange); Quicksort(Fp, Lower, Att); /* Posicionamos el elemento del medio */

//

(*Exchange)(Middle, Lp); Intercambio(Middle,Lp); /* Ordenamos los valores mayores */

// } }

Quicksort(Middle+1, Lp, Att, Exchange); Quicksort(Middle+1, Lp, Att);

/*************************************************************************/ /* */ /* Poda el rbol T y devuelve true si el rbol fue modificado */ /* */ /*************************************************************************/ bool TDMC45::Prune(Tree T) { ItemNo i; Attribute a; InitialiseWeights(); AllKnown = true; Verbosity(1) FVitacora<<endl; Changed = false; Cdigo Fuente Magdalena Servente 291

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

EstimateErrors(T, 0, MaxItem, 0, true); if ( SUBSET ) { if ( ! PossibleValues ) { PossibleValues = (Conjunto *) calloc(MaxAtt+1, sizeof(Conjunto)); } ForEach(a, 0, MaxAtt) { if ( MaxAttVal[a] ) { PossibleValues[a] = (Conjunto) malloc((MaxAttVal[a]>>3) + 1); ClearBits((MaxAttVal[a]>>3) + 1, PossibleValues[a]); ForEach(i, 1, MaxAttVal[a]) { SetBit(i, PossibleValues[a]); } } } CheckPossibleValues(T); } return Changed; } /*************************************************************************/ /* */ /* Estima los errores en un determinado subrbol */ /* */ /*************************************************************************/ float TDMC45::EstimateErrors(Tree T, ItemNo Fp,ItemNo Lp,short Sh,bool UpdateTree) { ItemNo i, Kp, Ep; ItemCount Cases, KnownCases, *LocalClassDist, TreeErrors, LeafErrors, ExtraLeafErrors, BranchErrors,Factor, MaxFactor; DiscrValue v, MaxBr; ClassNo c, BestClass; bool PrevAllKnown; /* Generamos la distribucin de clases */

Cases = CountItems(Fp, Lp); LocalClassDist = (ItemCount *) calloc(MaxClass+1, sizeof(ItemCount)); ForEach(i, Fp, Lp) { LocalClassDist[ Class(Item[i]) ] += Weight[i]; } /* Buscamos la clase ms frecuente y actualizamos el rbol */

BestClass = T->Leaf; ForEach(c, 0, MaxClass) { if ( LocalClassDist[c] > LocalClassDist[BestClass] ) { BestClass = c; } } LeafErrors = Cases - LocalClassDist[BestClass]; ExtraLeafErrors = AddErrs(Cases, LeafErrors); if ( UpdateTree ) { T->Items = Cases; T->Leaf = BestClass; memcpy(T->ClassDist, LocalClassDist, (MaxClass + 1) * sizeof(ItemCount)); } if ( ! T->NodeType ) /* hoja */ { TreeErrors = LeafErrors + ExtraLeafErrors;

292

Magdalena Servente

Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

if ( UpdateTree ) { T->Errors = TreeErrors; LocalVerbosity(1) { Intab(Sh); FVitacora<<ClassName->Strings[T->Leaf].c_str(); FVitacora<<" ( "; FVitacora<<T->Items; FVitacora<<":"; FVitacora<<LeafErrors; FVitacora<<"/"; FVitacora<<T->Errors; FVitacora<<endl; } } free(LocalClassDist); return TreeErrors; } /* Estimamos los errores para cada rama */

Kp = Group(0, Fp, Lp, T) + 1; KnownCases = CountItems(Kp, Lp); PrevAllKnown = AllKnown; if ( Kp != Fp ) AllKnown = false; TreeErrors = MaxFactor = 0; ForEach(v, 1, T->Forks) { Ep = Group(v, Kp, Lp, T); if ( Kp <= Ep ) { Factor = CountItems(Kp, Ep) / KnownCases; if ( Factor >= MaxFactor ) { MaxBr = v; MaxFactor = Factor; } ForEach(i, Fp, Kp-1) { Weight[i] *= Factor; } TreeErrors += EstimateErrors(T->Branch[v], Fp, Ep, Sh+1, UpdateTree); Group(0, Fp, Ep, T); ForEach(i, Fp, Kp-1) { Weight[i] /= Factor; } } } AllKnown = PrevAllKnown; if ( ! UpdateTree ) { free(LocalClassDist); return TreeErrors; } /* Analizamos la performance de la rama ms grande */

BranchErrors = EstimateErrors(T->Branch[MaxBr], Fp, Lp, -1000, false); LocalVerbosity(1) { Cdigo Fuente Magdalena Servente 293

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Intab(Sh); FVitacora<<AttName->Strings[T->Tested].c_str(); FVitacora<<": ["; FVitacora<<((int) ((TreeErrors * 100) / (T->Items + 0.001))); FVitacora<<"N="; FVitacora<<T->Items; FVitacora<<" rbol="; FVitacora<<TreeErrors; FVitacora<<" hoja="; FVitacora<<LeafErrors; FVitacora<<"+"; FVitacora<<ExtraLeafErrors; FVitacora<<" br["; FVitacora<<MaxBr; FVitacora<<"]="; FVitacora<<BranchErrors; FVitacora<<endl; } /* Analizamos si el rbol debera ser reemplazado por la hoja o por la rama ms grande */

if ( LeafErrors + ExtraLeafErrors <= BranchErrors + 0.1 && LeafErrors + ExtraLeafErrors <= TreeErrors + 0.1 ) { LocalVerbosity(1) { Intab(Sh); FVitacora<<"Reemplazado por la hoja "; FVitacora<<ClassName->Strings[T->Leaf].c_str(); FVitacora<<endl; } T->NodeType = 0; T->Errors = LeafErrors + ExtraLeafErrors; Changed = true; } else if ( BranchErrors <= TreeErrors + 0.1 ) { LocalVerbosity(1) { Intab(Sh); FVitacora<<"Reemplazado por la rama "; FVitacora<<MaxBr; FVitacora<<endl; } AllKnown = PrevAllKnown; EstimateErrors(T->Branch[MaxBr], Fp, Lp, Sh, true); memcpy((char *) T, (char *) T->Branch[MaxBr], sizeof(tree_record)); Changed = true; } else { T->Errors = TreeErrors; } AllKnown = PrevAllKnown; free(LocalClassDist); return T->Errors; }

/*************************************************************************/ /* */ /* Elimina pruebas de subconjuntos innecesarias sobre */ /* valores faltantes */ /* */ /*************************************************************************/ void TDMC45::CheckPossibleValues(Tree T) { Conjunto HoldValues; int v, Bytes, b; Attribute A; 294 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

char Any=0; if ( T->NodeType == BrSubset ) { A = T->Tested; Bytes = (MaxAttVal[A]>>3) + 1; HoldValues = (Conjunto) malloc(Bytes); /* Analizamos si la ltima (default) rama puede simplificarse u omitirse */

ForEach(b, 0, Bytes-1) { T->Subset[T->Forks][b] &= PossibleValues[A][b]; Any |= T->Subset[T->Forks][b]; } if ( ! Any ) { T->Forks--; } /* Procesamos cada subrbol, dejando nicamente valores en los subconjuntos de las ramas */

CopyBits(Bytes, PossibleValues[A], HoldValues); ForEach(v, 1, T->Forks) { CopyBits(Bytes, T->Subset[v], PossibleValues[A]); CheckPossibleValues(T->Branch[v]); } CopyBits(Bytes, HoldValues, PossibleValues[A]); free(HoldValues); } else if ( T->NodeType ) { ForEach(v, 1, T->Forks) { CheckPossibleValues(T->Branch[v]); } } }

/*************************************************************************/ /* */ /* Computa los errores adicionales si la proporcin de error llega al */ /* lmite superior del nivel de confianza. El coeficiente es el */ /* cuadrado del nro de desviaciones estndar correspondientes al */ /* nivel de confianza seleccionado. */ /* (Basado en el Documenta Geigy Scientific Tables (Sixth Edition), */ /* p185 (with modifications).) */ /* */ /*************************************************************************/ float TDMC45::AddErrs(ItemCount N, ItemCount e) { static float Coeff=0; float Val0, Pr; if ( ! Coeff ) { /* Computa y retiene el valor del coeficiente, interpolando los valores de Val y Dev */ int i; i = 0; while ( CF > Val[i] ) i++; Coeff = Dev[i-1] + Cdigo Fuente Magdalena Servente 295

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

(Dev[i] - Dev[i-1]) * (CF - Val[i-1]) /(Val[i] - Val[i-1]); Coeff = Coeff * Coeff; } if ( e < 1E-6 ) { return N * (1 - exp(log(CF) / N)); } else if ( e < 0.9999 ) { Val0 = N * (1 - exp(log(CF) / N)); return Val0 + e * (AddErrs(N, 1.0) - Val0); } else if ( e + 0.5 >= N ) { return 0.67 * (N - e); } else { Pr = (e + 0.5 + Coeff/2 + sqrt(Coeff * ((e + 0.5) * (1 - (e + 0.5)/N) + Coeff/4)) ) / (N + Coeff); return (N * Pr - e); } }

/*************************************************************************/ /* */ /* Categoriza la descripcin de un caso utilizando el rbol de decisin */ /* */ /*************************************************************************/ ClassNo TDMC45::Category(Description CaseDesc,Tree DecisionTree) { ClassNo c, BestClass; if ( ! ClassSum ) { ClassSum = (float *) malloc((MaxClass+1) * sizeof(float)); } ForEach(c, 0, MaxClass) { ClassSum[c] = 0; } Classify(CaseDesc, DecisionTree, 1.0); BestClass = 0; ForEach(c, 0, MaxClass) { Verbosity(5) printf("clase %s peso %.2f\n", ClassName[c], ClassSum[c]); if ( ClassSum[c] > ClassSum[BestClass] ) BestClass = c; } return BestClass; } /*************************************************************************/ /* */ /* Clasifica un caso utilizando el subrbol dado, ajustando el valor */ /* de ClassSum para cada clase */ /* */ /*************************************************************************/ void TDMC45::Classify(Description CaseDesc,Tree T,float Weight) { DiscrValue v, dv; float Cv; Attribute a; ClassNo c;

296

Magdalena Servente

Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

switch ( T->NodeType ) { case 0: /* hoja */ if ( T->Items > 0 ) { /* Actualizamos a partir de TODAS las clases */ ForEach(c, 0, MaxClass) { if ( T->ClassDist[c] ) { ClassSum[c] += Weight * T->ClassDist[c] / T->Items; } } } else { ClassSum[T->Leaf] += Weight; } return; case BrDiscr: /* prueba sobre un atrib discreto */

a = T->Tested; v = DVal(CaseDesc, a); if ( v && v <= T->Forks ) /* { Classify(CaseDesc, T->Branch[v], Weight); } else { ForEach(v, 1, T->Forks) { Classify(CaseDesc, T->Branch[v], (Weight * T->Branch[v]->Items) / T->Items); } } return; case ThreshContin: /* prueba sobre un atributo contnuo */ Nos aseguramos que no sea un nuevo valor discreto */

a = T->Tested; Cv = CVal(CaseDesc, a); if ( Cv == Unknown ) { ForEach(v, 1, 2) { Classify(CaseDesc, T->Branch[v], (Weight * T->Branch[v]->Items) / T->Items); } } else { v = ( Cv <= T->Cut ? 1 : 2 ); Classify(CaseDesc, T->Branch[v], Weight); } return; case BrSubset: /* prueba sobre un subconj de valores discretos */

a = T->Tested; dv = DVal(CaseDesc, a); if ( dv ) { ForEach(v, 1, T->Forks) { if ( In(dv, T->Subset[v]) ) { Classify(CaseDesc, T->Branch[v], Weight); Cdigo Fuente Magdalena Servente 297

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

return; } } } /* Valor desconocido o no encontrado en ningn subconjunto */

ForEach(v, 1, T->Forks) { Classify(CaseDesc, T->Branch[v], (Weight * T->Branch[v]->Items) / T->Items); } return; } }

/*************************************************************************/ /* */ /* Imprime matrices de confusin */ /* */ /*************************************************************************/ void TDMC45::PrintConfusionMatrix(ItemNo *ConfusionMat) { short Row, Col; if ( MaxClass > 20 ) return; /* /* No imprimir matrices sin sentido */

Imprimimos el encabezado primero, y luego cada una de las filas */

FVitacora<<endl; FVitacora<<endl; FVitacora<<" "; ForEach(Col, 0, MaxClass) { FVitacora<<" ("; FVitacora<<('a' + Col); FVitacora<<")"; } FVitacora<<" <-clasificado como "; FVitacora<<endl; FVitacora<<" "; ForEach(Col, 0, MaxClass) { FVitacora<<" ------"; } FVitacora<<endl; ForEach(Row, 0, MaxClass) { FVitacora<<" "; ForEach(Col, 0, MaxClass) { if ( ConfusionMat[Row*(MaxClass+1) + Col] ) { FVitacora<<ConfusionMat[Row*(MaxClass+1) + Col]; } else { FVitacora<<" "; } } FVitacora<<" ("; FVitacora<<('a'+Row); FVitacora<<"): clase"; FVitacora<<ClassName->Strings[Row].c_str(); FVitacora<<endl; } FVitacora<<endl; }

/**************************************************************************************/ 298 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

/*** REGLAS DE DECISIN *******/ /**************************************************************************************/ void TDMC45::GenerarReglasC45() { int o; extern char *optarg; extern int optind; bool FirstTime=true; char outFile[50]="Log\\C45Reglas"; //Inicializamos las variables FileName = "DF"; VERBOSITY = 5; UNSEENS = true; SIGTEST = false; SIMANNEAL = false; SIGTHRESH = 0.05; CF= 0.25; REDUNDANCY = 1.0; NRules = 0; RuleSpace = 0; NTests = 0; //Inicializamos el archivo strcat(outFile, DateTimeToStr(Now()).c_str()); strcat(outFile, Params->TablaBD.c_str()); strcat(outFile, ".log"); FReglas.open(outFile, ios::out); FReglas<<"C4.5 Generador de reglas FReglas<<DateTimeToStr(Now()).c_str(); FReglas<<endl; FReglas<<"---------------------------"; FReglas<<endl; FReglas<<endl; /* Inicializacin */

";

GetNames(); GetData(); FReglas<<(MaxItem+1); FReglas<<" casos ("; FReglas<<MaxAtt; FReglas<<" atributos) ledos de "; FReglas<<Params->TablaBD.c_str(); GenerateLogs(); /* Construccin de reglas GenerateRules(); /* Evaluaciones */ */

FReglas<<endl; FReglas<<endl; FReglas<<"Evaluacin sobre los datos de entrenamiento ("; FReglas<<MaxItem+1; FReglas<<" tems):"; FReglas<<endl; EvaluateRulesets(true); /* Guardamos el conjunto de reglas actual */

SaveRules(); if ( UNSEENS ) { GetData(); FReglas<<endl; FReglas<<endl; FReglas<<"Evaluacin sobre los datos de prueba ("; FReglas<<MaxItem+1; FReglas<<" tems):"; FReglas<<endl; EvaluateRulesets(false); } exit(0); } Cdigo Fuente Magdalena Servente 299

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

/*************************************************************************/ /* */ /* Creacin del vector LogItemNo para contener los logaritmos de */ /* enteros, y el vector LogFact para contener los logaritmos de los */ /* factoriales (todos en base 2) */ /* */ /*************************************************************************/ void TDMC45::GenerateLogs() { ItemNo i; LogItemNo = (float *) malloc((MaxItem+100) * sizeof(float)); LogFact = (double *) malloc((MaxItem+100) * sizeof(double)); LogItemNo[0] = -1E38; LogItemNo[1] = 0; LogFact[0] = LogFact[1] = 0; ForEach(i, 2, MaxItem+99) { LogItemNo[i] = log((float) i) / Log2; LogFact[i] = LogFact[i-1] + LogItemNo[i]; } } /*************************************************************************/ /* */ /* Para cada rbol, creamos un conj de reglas y lo procesamos. Luego */ /* componemos un conjunto de reglas a partir de estos conjuntos. */ /* Si hay un slo rbol, entoncesno se compone un nuevo conjunto. */ /* */ /* Los conj de reglas se almacenan desde PRSet[0] hasta PRSet[TRIALS], */ /* donde PRSet[TRIALS] contiene el conjunto compuesto. */ /* */ /* Al terminar, el conjunto actual es el compuesto (si es que uno se */ /* cre), sino es el conjunto de un rbol. */ /* */ /*************************************************************************/ void TDMC45::GenerateRules() { Tree DecisionTree, GetTree(); short t=0, RuleSetSpace=0, r; /* Buscamos los bits para codificar los atributos y las ramas */

FindTestCodes(); /* Procesamos cada rbol de decisin */

while ( DecisionTree = GetTree() ) { FReglas<<endl; FReglas<<"------------------"; FReglas<<endl; FReglas<<"Procesando el rbol "; FReglas<<t; /* Creamos un conjunto de reglas del prximo rbol */

FormRules(DecisionTree); /* Procesamos el conjunto de reglas */

ConstructRuleset(); FReglas<<endl; FReglas<<"Reglas finales del rbol: "; FReglas<<t; FReglas<<endl; PrintIndexedRules(); /* Nos aseguramos de que hay suficiente lugar para el nuevo conj de reglas */

if ( t + 1 >= RuleSetSpace ) 300 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

{ RuleSetSpace += 10; if ( RuleSetSpace > 10 ) { PRSet = (RuleSet *) realloc(PRSet, RuleSetSpace * sizeof(RuleSet)); } else { PRSet = (RuleSet *) malloc(RuleSetSpace * sizeof(RuleSet)); } } PRSet[t].SNRules = NRules; PRSet[t].SRule = Rule; PRSet[t].SRuleIndex = RuleIndex; PRSet[t].SDefaultClass = DefaultClass; ++t; } if ( ! t ) { FReglas<<endl; FReglas<<"ERROR: FReglas<<endl; exit(1); } TRIALS = t; /* Si hay ms de un rbol, creamos un conjunto compuesto de reglas a partir de las reglas de cada uno de los rboles */

no se encuentra ningun rbol de decisin";

if ( TRIALS > 1 ) { CompositeRuleset(); } } /*************************************************************************/ /* */ /* Determina las longitudes de los codigos para los atributos */ /* y las ramas */ /* */ /*************************************************************************/ void TDMC45::FindTestCodes() { Attribute Att; DiscrValue v, V; ItemNo i, *ValFreq; int PossibleCuts; float Sum, SumBranches=0, p; void SwapUnweighted(); BranchBits = (float *) malloc((MaxAtt+1) * sizeof(float));

ForEach(Att, 0, MaxAtt) { if ( (V = MaxAttVal[Att]) ) { ValFreq = (ItemNo *) calloc(V+1, sizeof(ItemNo)); ForEach(i, 0, MaxItem) { ValFreq[DVal(Item[i],Att)]++; } Sum = 0; ForEach(v, 1, V) { if ( ValFreq[v] ) { Sum += (ValFreq[v] / (MaxItem+1.0)) * (LogItemNo[MaxItem+1] - LogItemNo[ValFreq[v]]); } Cdigo Fuente Magdalena Servente 301

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

} free(ValFreq); BranchBits[Att] = Sum; } else { Quicksort(0, MaxItem, Att); PossibleCuts = 1; ForEach(i, 1, MaxItem) { if ( CVal(Item[i],Att) > CVal(Item[i-1],Att) ) { PossibleCuts++; } } BranchBits[Att] = PossibleCuts > 1 ? 1 + LogItemNo[PossibleCuts] / 2 : 0 ; } SumBranches += BranchBits[Att]; } AttTestBits = 0; ForEach(Att, 0, MaxAtt) { if ( (p = BranchBits[Att] / SumBranches) > 0 ) { AttTestBits -= p * log(p) / log(2.0); } } } /*************************************************************************/ /* */ /* Intercambio de los items en a y b. */ /* */ /*************************************************************************/ void TDMC45::SwapUnweighted(ItemNo a,ItemNo b) { Description Hold; Hold = Item[a]; Item[a] = Item[b]; Item[b] = Hold; } /*************************************************************************/ /* */ /* Creacin de un conjunto compuesto de reglas de todas las pruebas */ /* */ /*************************************************************************/ void TDMC45::CompositeRuleset() { RuleNo r; short t, ri; InitialiseRules(); /* Procesamos juntas todas las reglas de cada subconjunto */

ForEach(t, 0, TRIALS-1) { ForEach(ri, 1, PRSet[t].SNRules) { r = PRSet[t].SRuleIndex[ri]; NewRule(PRSet[t].SRule[r].Lhs, PRSet[t].SRule[r].Size, PRSet[t].SRule[r].Rhs, PRSet[t].SRule[r].Error); } } /* Seleccionamos un subconjunto */

ConstructRuleset(); FReglas<<endl; 302 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

FReglas<<"Conjunto compuesto de reglas:"; FReglas<<endl; PrintIndexedRules(); PRSet[TRIALS].SNRules = NRules; PRSet[TRIALS].SRule = Rule; PRSet[TRIALS].SRuleIndex = RuleIndex; PRSet[TRIALS].SDefaultClass = DefaultClass; } /*************************************************************************/ /* */ /* Creacin de un conjunto de reglas del rbol de decisin t */ /* */ /*************************************************************************/ void TDMC45::FormRules(Tree t) { short i; /* Buscamos los parmetros esenciales y reservamos lugar */

MaxDepth = 0; MaxDisjuncts = 0; TreeParameters(t, 0); Actual = (float *) calloc(MaxDepth+2, sizeof(float)); Total = (ItemNo *) calloc(MaxDepth+2, sizeof(ItemNo)); Errors = (ItemNo *) calloc(MaxDepth+2, sizeof(ItemNo)); Pessimistic = (float *) calloc(MaxDepth+2, sizeof(float)); CondSigLevel = (float *) calloc(MaxDepth+2, sizeof(float)); TargetClassFreq = (ItemNo *) calloc(2, sizeof(ItemNo)); Deleted = (Boolean *) calloc(MaxDepth+2, sizeof(Boolean)); CondSatisfiedBy = (bool **) calloc(MaxDepth+2, sizeof(char *)); Stack = (Condition *) calloc(MaxDepth+2, sizeof(Condition)); ForEach(i, 0, MaxDepth+1) { CondSatisfiedBy[i] = (bool *) calloc(MaxItem+1, sizeof(char)); Stack[i] = (Condition) malloc(sizeof(struct CondRec)); } SingleValue = (DiscrValue *) calloc(MaxAtt+1, sizeof(DiscrValue)); InitialiseRules(); /* Extraemos y podamos las reglas disjuntas */

Scan(t, 0); /* Liberamos almacenamiento */

ForEach(i, 0, MaxDepth+1) { free(CondSatisfiedBy[i]); free(Stack[i]); } free(Deleted); free(CondSatisfiedBy); free(Stack); free(Actual); free(Total); free(Errors); free(Pessimistic); free(CondSigLevel); free(TargetClassFreq); } /*************************************************************************/ /* */ /* Calcula la profundidad mx y el nro de hojas en el arbol t con */ Cdigo Fuente Magdalena Servente 303

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

/* profundidad inicial d */ /* */ /*************************************************************************/ void TDMC45::TreeParameters(Tree t,short d) { DiscrValue v; if ( t->NodeType ) { ForEach(v, 1, t->Forks) { TreeParameters(t->Branch[v], d+1); } } else { /* Es una hoja */ if ( d > MaxDepth ) MaxDepth = d; MaxDisjuncts++; } } /*************************************************************************/ /* */ /* Extrae los disjuntos del arbol t en la profundidad d y los procesa */ /* */ /*************************************************************************/ void TDMC45::Scan(Tree t,short d) { DiscrValue v; short i; Condition *Term; Test x, FindTest(); if ( t->NodeType ) { d++; x = (Test) malloc(sizeof(struct TestRec)); x->NodeType = t->NodeType; x->Tested = t->Tested; x->Forks = t->Forks; x->Cut = ( t->NodeType == ThreshContin ? t->Cut : 0 ); if ( t->NodeType == BrSubset ) { x->Subset = (Conjunto *) calloc(t->Forks + 1, sizeof(Conjunto)); ForEach(v, 1, t->Forks) { x->Subset[v] = t->Subset[v]; } } Stack[d]->CondTest = FindTest(); ForEach(v, 1, t->Forks) { Stack[d]->TestValue = v; Scan(t->Branch[v], d); } } else if ( t->Items >= 1 ) { /* Hoja del rbol de decisin - construimos el conjunto de condiciones asociadas con esta hoja y las podamos */ Term = (Condition *) calloc(d+1, sizeof(Condition)); ForEach(i, 1, d) { Term[i] = (Condition) malloc(sizeof(struct CondRec)); Term[i]->CondTest = Stack[i]->CondTest; Term[i]->TestValue = Stack[i]->TestValue; } PruneRule(Term, d, t->Leaf); free(Term); 304 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

} } /*************************************************************************/ /* */ /* Construccin de un subconjunto ordenado (indexado por el RuleIndex) */ /* a partir del actual conjunto de reglas */ /* */ /*************************************************************************/ void TDMC45::ConstructRuleset() { RuleNo r, OldNRules = NRules; /* Reservamos lugar para las tablas */

Right = (ItemNo *) calloc(NRules+1, sizeof(ItemNo)); Wrong = (ItemNo *) calloc(NRules+1, sizeof(ItemNo)); Value = (float *) calloc(NRules+1, sizeof(float)); RuleIn = (bool *) calloc(NRules+1, sizeof(Boolean)); Subset = (char ***) malloc((NRules+1) * sizeof(Boolean)); ClassRules = (RuleNo *) malloc((NRules+1) * sizeof(RuleNo)); ClassFreq = (float *) calloc(MaxClass+1, sizeof(ItemNo)); Covered = (ItemNo *) calloc(MaxItem+1, sizeof(ItemNo)); Match = (bool **) calloc(NRules+1, sizeof(Boolean *)); FalsePos = (ItemNo *) calloc(MaxClass+1, sizeof(ItemNo)); NoRule = (ItemNo *) calloc(MaxClass+1, sizeof(ItemNo)); ForEach(r, 1, NRules) { Match[r] = (Boolean *) calloc(MaxItem+1, sizeof(Boolean)); } /* Cubrimos cada una de las clases, y luego las ordenamos en un ndice de reglas */

InitialiseTables(); FindRuleCodes(); CodeWeight = 0.5; ForEach(FocusClass, 0, MaxClass) { CoverClass(); } MakeIndex(); FindDefault(); /* Liberamos espacio en memoria */

free(Value); free(RuleIn); free(ClassRules); free(Subset); free(Covered); free(FalsePos); free(NoRule); ForEach(r, 1, OldNRules) { free(Match[r]); } free(Match); } /*************************************************************************/ /* */ /* Inicializacin de tablas */ /* */ /*************************************************************************/ Cdigo Fuente Magdalena Servente 305

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

void TDMC45::InitialiseTables() { ItemNo i; RuleNo r; ClassNo c; float Strength(); ForEach(r, 1, NRules) { RuleIn[r] = false; Rule[r].Used = Rule[r].Incorrect = 0; } ForEach(c, 0, MaxClass) { ClassFreq[c] = 0; } ForEach(i, 0, MaxItem) { ClassFreq[Class(Item[i])]++; ForEach(r, 1, NRules) { Match[r][i] = Fuerza(Rule[r], Item[i]) > 0.1; if ( Match[r][i] ) { Rule[r].Used++; if ( Class(Item[i]) != Rule[r].Rhs ) Rule[r].Incorrect++; } } } } /*************************************************************************/ /* */ /* Seleccionamos un subconjunto de las reglas para la FocusClass */ /* */ /*************************************************************************/ void TDMC45::CoverClass() { RuleNo r, RuleCount=0; ItemNo i; Verbosity(1) { FReglas<<endl; FReglas<<"Clase "; FReglas<<ClassName->Strings[FocusClass].c_str(); FReglas<<endl; FReglas<<"-----"; FReglas<<"Accin Cambio Valor"; } ForEach(i, 0, MaxItem) { Covered[i] = 0; } ForEach(r, 1, NRules) { if ( Rule[r].Rhs == FocusClass ) { RuleCount++; ClassRules[RuleCount] = r; } } if ( ! RuleCount ) { return; } SubsetValue = 1E10; if ( RuleCount <= 10 ) 306 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

{ AllCombinations(RuleCount); } else if ( SIMANNEAL ) { SimAnneal(RuleCount); } else { SpotSearch(RuleCount); } memcpy(RuleIn, Subset, NRules+1); Verbosity(1) { FReglas<<endl; FReglas<<" Mejor valor "; FReglas<<SubsetValue; FReglas<<endl; } } /*************************************************************************/ /* */ /* Probamos todas las combinaciones de reglas para encontrar la mejor */ /* */ /*************************************************************************/ void TDMC45::AllCombinations(RuleNo NR) { RuleNo r; if ( ! NR ) { CalculateValue(); } else { r = ClassRules[NR]; AllCombinations(NR-1); AddRule(r); AllCombinations(NR-1); DeleteRule(r); Verbosity(1) FReglas<<endl; } } /*************************************************************************/ /* */ /* Bsqueda de un buen subconjunto mediante simulated annealing */ /* */ /*************************************************************************/ void TDMC45::SimAnneal(RuleNo RuleCount) { RuleNo r, OutCount; short ri, Tries; float Temp, Delta; Boolean Changed; /* Eliminamos y agregamos reglas hasta q no se pueda mejorar ms */

for ( Temp = 1000 ; Temp > 0.001 ; Temp *= 0.95 ) { CalculateValue(); Verbosity(2) { OutCount = 0; ForEach(ri, 1, RuleCount) { r = ClassRules[ri]; if ( ! RuleIn[r] ) Cdigo Fuente Magdalena Servente 307

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

{ if ( ! (OutCount++ % 3) ) printf("\n\t\t"); FReglas<< r; FReglas<<" "; FReglas<<Right[r]; FReglas<<" "; FReglas<<Wrong[r]; FReglas<<" "; FReglas<<Value[r]; } } FReglas<<endl; FReglas<<endl; } Changed = false; for ( Tries = 100 ; ! Changed && Tries > 0 ; Tries-- ) { /* Elegimos una relga para agregar o eliminar */ ri = RuleCount * Random + 1; r = ClassRules[ri]; Delta = ( RuleIn[r] ? -Value[r] : Value[r] ); if ( Delta > 0 || Random < exp(Delta / Temp) ) { if ( RuleIn[r] ) { DeleteRule(r); } else { AddRule(r); } Changed = true; } } if ( ! Changed ) break; } /* Tratamos de mejorar el mejor subconjunto mediante hill-climbing */

Verbosity(1) FReglas<<"Pulimos: "; memcpy(RuleIn, Subset, NRules+1); HillClimb(RuleCount); }

/*************************************************************************/ /* */ /* Busca un buen subconjunto mediante una bsqueda golosa reiterativa */ /* */ /*************************************************************************/ void TDMC45::SpotSearch(RuleNo RuleCount) { RuleNo r; short ri, Trial; float ProbIn; ForEach(Trial, 0, 10) { Verbosity(1) { FReglas<<endl; FReglas<<" Prueba "; FReglas<<Trial; } /* Agregamos reglas al azar al subconj inicial */ ProbIn = Trial / 10.0; ForEach(ri, 1, RuleCount) 308 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

{ r = ClassRules[ri]; RuleIn[r] = Random < ProbIn; } HillClimb(RuleCount); } } /*************************************************************************/ /* */ /* Mejora un subconjunto de reglas agregando o eliminando reglas */ /* */ /*************************************************************************/ void TDMC45::HillClimb(RuleNo RuleCount) { RuleNo r, Bestr; short ri, OutCount; ItemNo i; float Delta, BestDelta; ItemNo aux; ForEach(i, 0, MaxItem) { Covered[i] = 0; } ForEach(ri, 1, RuleCount) { r = ClassRules[ri]; if ( RuleIn[r] ) { ForEach(i, 0, MaxItem) { if ( Match[r][i] ) { Covered[i]++; } } } } /* Agregamos o eliminamos la regla con la mayor reduccin en el costo de codificacin */

while ( true ) { CalculateValue(); Verbosity(2) { OutCount = 0; ForEach(ri, 1, RuleCount) { r = ClassRules[ri]; if ( ! RuleIn[r] ) { if ( ! (OutCount++ % 3) ) printf("\n\t\t"); FReglas<<r; FReglas<<"<"; aux=Right[r]|Wrong[r]; FReglas<<aux; FReglas<<"="; FReglas<<Value[r]; } } FReglas<<endl; FReglas<<endl; } Bestr = BestDelta = 0; ForEach(ri, 1, RuleCount) { r = ClassRules[ri]; Delta = ( RuleIn[r] ? -Value[r] : Value[r] ); Cdigo Fuente Magdalena Servente 309

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

if ( Delta > BestDelta ) { Bestr = r; BestDelta = Delta; } } if ( ! Bestr ) break; if ( RuleIn[Bestr] ) { DeleteRule(Bestr); } else { AddRule(Bestr); } } }

/*************************************************************************/ /* */ /* Calculamos los aciertos y errores para las reglas de la FocusClass */ /* y determinamos el valor de dichas reglas. Si es el mejor hasta */ /* ahora, lo guardamos. */ /* */ /*************************************************************************/ void TDMC45::CalculateValue() /* -------------- */ { RuleNo r, Selected=0, InCount; ItemNo i, Times, FPos=0, FNeg=0, SumCover=0,aux; float BaseBits, RuleBits=0, NewBits; ClassNo ThisClass; Boolean *RuleMatch; ForEach(i, 0, MaxItem) { ThisClass = Class(Item[i]); if ( Covered[i] ) { SumCover++; if( ThisClass != FocusClass ) FPos++; } else if ( ThisClass == FocusClass ) { FNeg++; } } ForEach(r, 1, NRules) { if ( Rule[r].Rhs == FocusClass ) { Right[r] = Wrong[r] = 0; if ( RuleIn[r] ) { RuleBits += Rule[r].Bits; Selected++; } RuleMatch = Match[r]; ForEach(i, 0, MaxItem) { if ( RuleMatch[i] && ( ! (Times = Covered[i]) || Times == 1 && RuleIn[r] ) ) { if ( Class(Item[i]) == FocusClass ) { Right[r]++; } else 310 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

{ Wrong[r]++; } } } } } RuleBits -= LogFact[Selected]; BaseBits = CodeWeight * RuleBits + ExceptionBits(SumCover, FPos, FNeg); /* A partir de los aciertos y errores de cada regla, calculamos su valor */

Verbosity(1) { FReglas<<" InCount = -1; }

";

ForEach(r, 1, NRules) { if ( Rule[r].Rhs == FocusClass ) { if ( RuleIn[r] ) { NewBits = ExceptionBits(SumCover-Right[r]-Wrong[r], FPos-Wrong[r], FNeg+Right[r]) + CodeWeight * (RuleBits - Rule[r].Bits + LogItemNo[Selected]); Value[r] = NewBits - BaseBits; } else { NewBits = ExceptionBits(SumCover+Right[r]+Wrong[r], FPos+Wrong[r], FNeg-Right[r]) + CodeWeight * (RuleBits + Rule[r].Bits - LogItemNo[Selected+1]); Value[r] = BaseBits - NewBits; } Verbosity(1) { if ( RuleIn[r] ) { if ( ++InCount && ! (InCount % 3) ) printf("\n\t\t"); FReglas<<r; FReglas<<"["; aux=Right[r]|Wrong[r]; FReglas<<aux; FReglas<<"="; FReglas<<Value[r]; } } } } Verbosity(1) { FReglas<<endl; FReglas<<" "; FReglas<<Selected; FReglas<<" reglas, "; FReglas<<SumCover; FReglas<<" cant de veces en que la regla se us: "; FReglas<<"F+="; FReglas<<FPos; FReglas<<" F-="; FReglas<<FNeg; FReglas<<", "; FReglas<<BaseBits; FReglas<<"bits (reglas="; FReglas<<RuleBits; FReglas<<endl; } if ( BaseBits < SubsetValue ) Cdigo Fuente Magdalena Servente 311

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

{ SubsetValue = BaseBits; memcpy(Subset, RuleIn, NRules+1); } } /*************************************************************************/ /* */ /* Agregamos la regla r al conj de relgas incluidas e incrementamos la */ /* cantidad de reglas q cubren los items q disparan la regla */ /* */ /*************************************************************************/ void TDMC45::AddRule(RuleNo r) { ItemNo i; RuleIn[r] = true; ForEach(i, 0, MaxItem) { if ( Match[r][i] ) { Covered[i]++; } } Verbosity(1) { FReglas<<r; FReglas<<"+ "; FReglas<<Value[r]; } }

/*************************************************************************/ /* */ /* Eliminamos la regla r del conj de reglas includas y decrementamos */ /* la cant de reglas que cubren cada uno de los items cubiertos por */ /* la regla */ /* */ /*************************************************************************/ void TDMC45::DeleteRule(RuleNo r) { ItemNo i; RuleIn[r] = false; ForEach(i, 0, MaxItem) { if ( Match[r][i] ) { Covered[i]--; } } Verbosity(1) { FReglas<<r; FReglas<<""; FReglas<<-Value[r]; } }

/*************************************************************************/ /* */ /* Crea un ndice de reglas includas en RuleIndex. Selecciona primero */ /* aquellas clases cuyas reglas tienen el menor nro de falsos positivos */ /* Dentro de cada clase, pone las relgas con ms aciertos primero */ /* */ /*************************************************************************/ void TDMC45::MakeIndex() { ClassNo c, BestC, Pass; 312 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

RuleNo r, BestR, NewNRules = 0; ItemNo i; Boolean *Included; Included = (Boolean *) calloc(MaxClass+1, sizeof(Boolean)); RuleIndex = (RuleNo *) calloc(NRules+1, sizeof(RuleNo)); Verbosity(1) printf("\nFalsosPos ForEach(i, 0, MaxItem) { Covered[i] = 0; } /* Seleccionamos la mejor clase para poner a continuacin */ Clase\n");

ForEach(Pass, 0, MaxClass) { ForEach(c, 0, MaxClass) { if ( Included[c] ) continue; FalsePos[c] = 0; ForEach(i, 0, MaxItem) { if ( Covered[i] || Class(Item[i]) == c ) continue; ForEach(r, 1, NRules) { if ( Rule[r].Rhs == c && RuleIn[r] && Match[r][i] ) { FalsePos[c]++; break; } } } } BestC = -1; ForEach(c, 0, MaxClass) { if ( ! Included[c] && ( BestC < 0 || FalsePos[c] < FalsePos[BestC] ) ) { BestC = c; } } Included[BestC] = true; Verbosity(1) { FReglas<<FalsePos[BestC]; FReglas<<" "; FReglas<<ClassName->Strings[BestC].c_str(); FReglas<<endl; } /* do { BestR = 0; /* Buscamos la mejor regla */ Ahora analizamos las reglas para esta clase */

ForEach(r, 1, NRules) { if ( RuleIn[r] && Rule[r].Rhs == BestC && ( ! BestR || Rule[r].Error < Rule[BestR].Error ) ) { BestR = r; } } if ( BestR ) { Cdigo Fuente Magdalena Servente 313

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

RuleIndex[++NewNRules] = BestR; RuleIn[BestR] = false; ForEach(i, 0, MaxItem) { Covered[i] |= Match[BestR][i]; } } } while ( BestR ); } NRules = NewNRules; free(Included); } /*************************************************************************/ /* */ /* Determina la clase por defecto. Los empates se resuelven a favor */ /* de la clase ms frecuente */ /* */ /*************************************************************************/ void TDMC45::FindDefault() { ClassNo c; ItemNo i; /* Determinamos los items no cubiertos por ninguna regla */

ForEach(c, 0, MaxClass) { NoRule[c] = 0; } ForEach(i, 0, MaxItem) { if ( ! Covered[i] ) { NoRule[Class(Item[i])]++; } } Verbosity(1) { FReglas<<endl; FReglas<<"Items: No cubiertos Clase"; FReglas<<endl; ForEach(c, 0, MaxClass) { FReglas<<ClassFreq[c]; FReglas<<" "; FReglas<<NoRule[c]; FReglas<<" "; FReglas<< ClassName->Strings[c].c_str(); FReglas<<endl; } FReglas<<endl; } DefaultClass = 0; ForEach(c, 1, MaxClass) { if ( NoRule[c] > NoRule[DefaultClass] || NoRule[c] == NoRule[DefaultClass] && ClassFreq[c] > ClassFreq[DefaultClass] ) { DefaultClass = c; } } } /*************************************************************************/ /* */ /* Dados una regla y un caso, determina la fuerza con la que podemos */ /* determinar que el caso pertenece a la clase especificada en la regla */ /* Si el caso no satisface todas las condiciones de la regla, entonces */ /* la fuerza vale 0. */ /* */ 314 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

/*************************************************************************/ float TDMC45::Fuerza(PR ThisRule,Description Case) { short d; if ( ThisRule.Error > 0.7 ) return 0.0; ForEach(d, 1, ThisRule.Size) { if ( ! Satisfies(Case, ThisRule.Lhs[d]) ) { return 0.0; } } return ( 1 - ThisRule.Error ); } /*************************************************************************/ /* */ /* Determina el nro de bits necesarios para codificar las excepciones */ /* */ /*************************************************************************/ float TDMC45::Biased(int N, int E, float ExpE) { float Rate; if ( ExpE { return } else if ( ExpE { return } <= 1E-6 ) ( E == 0 ? 0.0 : 1E6 );

>= N-1E-6 ) ( E == N ? 0.0 : 1E6 );

Rate = ExpE / N; return -E * Log(Rate) - (N-E) * Log(1-Rate); } float TDMC45::ExceptionBits(int Fires, int FP, int FN) { if ( Fires > 0.5 * (MaxItem+1) ) { return Log(MaxItem+1) + Biased(Fires, FP, 0.5 * (FP+FN)) + Biased(MaxItem+1-Fires, FN, (float) FN); } else { return Log(MaxItem+1) + Biased(Fires, FP, (float) FP) + Biased(MaxItem+1-Fires, FN, 0.5 * (FP+FN)); } } /*************************************************************************/ /* */ /* Determina la longitud de codificacin para todas las reglas */ /* */ /*************************************************************************/ void TDMC45::FindRuleCodes() { RuleNo r; short d, NCond; float Bits; ForEach(r, 1, NRules) { NCond = Rule[r].Size; Bits = 0; ForEach(d, 1, NCond) { Bits += CondBits(Rule[r].Lhs[d]); } Cdigo Fuente Magdalena Servente 315

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

/*

Debemos codificar el nro de condiciones, pero mejorar la codificacin total mediante la forma en que las condiciones pueden reordenarse */

Rule[r].Bits = Bits + LogItemNo[NCond] - LogFact[NCond]; } } /*************************************************************************/ /* */ /* Determina el nro de bits requerido para codificar una condicin */ /* */ /*************************************************************************/ float TDMC45::CondBits(Condition C) { Test t; Attribute a; t = C->CondTest; a = t->Tested; switch ( t->NodeType ) { case BrDiscr: case ThreshContin:

/* prueba de un atrib discreto */ /* prueba de un atrib continuo */

return AttTestBits/REDUNDANCY + BranchBits[a]; case BrSubset: /* prueba de un subconj de atrib discretos */

return AttTestBits/REDUNDANCY + MaxAttVal[a]; } }

/*************************************************************************/ /* */ /* Guarda el conjunto de reglas en el archivo de reglas segn el orden */ /* del ndice */ /* */ /*************************************************************************/ void TDMC45::SaveRules() { short ri, d, v, Bytes; RuleNo r; Test Tst; strcpy(Fn, FileName.c_str()); strcat(Fn, ".rules"); if ( ! ( TRf = fopen(Fn, "w") ) ) {FReglas<<"Error al abrir el archivo de reglas";} if ( TRf ) fclose(TRf); strcpy(Fn, FileName.c_str()); strcat(Fn, ".rules"); if ( ! ( TRf = fopen(Fn, "w") ) ) {FReglas<<"Error al abrir el archivo de reglas";} StreamOut((char *) &NRules, sizeof(RuleNo)); StreamOut((char *) &DefaultClass, sizeof(ClassNo)); ForEach(ri, 1, NRules) { r = RuleIndex[ri]; StreamOut((char *) &Rule[r].Size, sizeof(short)); ForEach(d, 1, Rule[r].Size) { Tst = Rule[r].Lhs[d]->CondTest; StreamOut((char *) &Tst->NodeType, sizeof(short)); StreamOut((char *) &Tst->Tested, sizeof(Attribute)); StreamOut((char *) &Tst->Forks, sizeof(short)); StreamOut((char *) &Tst->Cut, sizeof(float)); if ( Tst->NodeType == BrSubset ) { Bytes = (MaxAttVal[Tst->Tested]>>3) + 1; ForEach(v, 1, Tst->Forks) 316 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

{ StreamOut((char *) Tst->Subset[v], Bytes); } } StreamOut((char *) &Rule[r].Lhs[d]->TestValue, sizeof(short)); } StreamOut((char *) &Rule[r].Rhs, sizeof(ClassNo)); StreamOut((char *) &Rule[r].Error, sizeof(float)); } SaveDiscreteNames(); } /*************************************************************************/ /* */ /* Obtiene un nuevo conj de reglas del archivo de reglas */ /* */ /*************************************************************************/ void TDMC45::GetRules() { RuleNo nr, r; short n, d, v, Bytes; Condition *Cond; Test Tst; ClassNo c; float e; if ( TRf ) fclose(TRf); strcpy(Fn, FileName.c_str()); strcat(Fn, ".rules"); if ( ! ( TRf = fopen(Fn, "r") ) ) {FReglas<<"Error al abrir el archivo de reglas";} StreamIn((char *) &nr, sizeof(RuleNo)); StreamIn((char *) &DefaultClass, sizeof(ClassNo)); ForEach(r, 1, nr) { StreamIn((char *) &n, sizeof(short)); Cond = (Condition *) calloc(n+1, sizeof(Condition)); ForEach(d, 1, n) { Tst = (Test) malloc(sizeof(struct TestRec)); StreamIn((char *) &Tst->NodeType, sizeof(short)); StreamIn((char *) &Tst->Tested, sizeof(Attribute)); StreamIn((char *) &Tst->Forks, sizeof(short)); StreamIn((char *) &Tst->Cut, sizeof(float)); if ( Tst->NodeType == BrSubset ) { Tst->Subset = (Conjunto *) calloc(Tst->Forks + 1, sizeof(Conjunto)); Bytes = (MaxAttVal[Tst->Tested]>>3) + 1; ForEach(v, 1, Tst->Forks) { Tst->Subset[v] = (Conjunto) malloc(Bytes); StreamIn((char *) Tst->Subset[v], Bytes); } } Cond[d] = (Condition) malloc(sizeof(struct CondRec)); Cond[d]->CondTest = FindTest(Tst); StreamIn((char *) &Cond[d]->TestValue, sizeof(short)); } StreamIn((char *) &c, sizeof(ClassNo)); StreamIn((char *) &e, sizeof(float)); NewRule(Cond, n, c, e); free(Cond); } RecoverDiscreteNames(); } /*************************************************************************/ /* */ /* Busca una prueba en el vector de pruebas, si no est all, la agrega */ Cdigo Fuente Magdalena Servente 317

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

/* */ /*************************************************************************/ Test TDMC45::FindTest(Test Newtest) { static short TestSpace=0; short i; ForEach(i, 1, NTests) { if ( SameTest(Newtest, TestVec[i]) ) { free(Newtest); return TestVec[i]; } } NTests++; if ( NTests >= TestSpace ) { TestSpace += 1000; if ( TestSpace > 1000 ) { TestVec = (Test *) realloc(TestVec, TestSpace * sizeof(Test)); } else { TestVec = (Test *) malloc(TestSpace * sizeof(Test)); } } TestVec[NTests] = Newtest; return TestVec[NTests]; } /*************************************************************************/ /* */ /* Verifica si la prueba t1 es igual a la prueba t2 */ /* */ /*************************************************************************/ bool TDMC45::SameTest(Test t1,Test t2) { short i; if ( t1->NodeType != t2->NodeType || t1->Tested != t2->Tested ) { return false; } switch ( t1->NodeType ) { case BrDiscr: return true; case ThreshContin: return t1->Cut == t2->Cut; case BrSubset: ForEach(i, 1, t1->Forks) { if ( t1->Subset[i] != t2->Subset[i] ) { return false; } } } return true; } /*************************************************************************/ /* */ /* Limpia las variables para un nuevo conj de reglas */ /* */ /*************************************************************************/ void TDMC45::InitialiseRules() /* ---------------- */ { NRules = 0; Rule = 0; RuleSpace = 0; } 318 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

/*************************************************************************/ /* */ /* Agrega una nueva regla, al conjunto de reglas actual. Actualiza */ /* Rule[],NRules y,en caso de ser necesario,RuleSpace */ /* */ /*************************************************************************/ bool TDMC45::NewRule(Condition Cond[],short NConds,ClassNo TargetClass,float Err) { short d, r; /* Verificamos si la regla ya existe */

ForEach(r, 1, NRules) { if ( SameRule(r, Cond, NConds, TargetClass) ) { Verbosity(1) printf("\tduplica la regla %d\n", r); /* Mantenemos el estimador de error ms pesismista */

if ( Err > Rule[r].Error ) { Rule[r].Error = Err; } return false; } } /* Verificamos que haya suficiente espacio para una nueva regla */

NRules++; if ( NRules >= RuleSpace ) { RuleSpace += 100; if ( RuleSpace > 100 ) { Rule = (PR *) realloc(Rule, RuleSpace * sizeof(PR)); } else { Rule = (PR *) malloc(RuleSpace * sizeof(PR)); } } /* Formamos la nueva regla */

Rule[NRules].Size = NConds; Rule[NRules].Lhs = (Condition *) calloc(NConds+1, sizeof(Condition)); ForEach(d, 1, NConds) { Rule[NRules].Lhs[d] = (Condition) malloc(sizeof(struct CondRec)); Rule[NRules].Lhs[d]->CondTest = Cond[d]->CondTest; Rule[NRules].Lhs[d]->TestValue = Cond[d]->TestValue; } Rule[NRules].Rhs = TargetClass; Rule[NRules].Error = Err; Verbosity(1) PrintRule(NRules); return true; }

/*************************************************************************/ /* */ /* Decide si la regla actual duplica la regla r */ /* */ /*************************************************************************/ bool TDMC45::SameRule(RuleNo r,Condition Cond[],short NConds,ClassNo TargetClass) { short d, i; Test SubTest1, SubTest2;

Cdigo Fuente

Magdalena Servente

319

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

if ( Rule[r].Size != NConds || Rule[r].Rhs != TargetClass ) { return false; } ForEach(d, 1, NConds) { if ( Rule[r].Lhs[d]->CondTest->NodeType != Cond[d]->CondTest->NodeType || Rule[r].Lhs[d]->CondTest->Tested != Cond[d]->CondTest->Tested ) { return false; } switch ( Cond[d]->CondTest->NodeType ) { case BrDiscr: if ( Rule[r].Lhs[d]->TestValue != Cond[d]->TestValue ) { return false; } break; case ThreshContin: if ( Rule[r].Lhs[d]->CondTest->Cut != Cond[d]->CondTest->Cut ) { return false; } break; case BrSubset: SubTest1 = Rule[r].Lhs[d]->CondTest; SubTest2 = Cond[d]->CondTest; ForEach(i, 1, SubTest1->Forks) { if ( SubTest1->Subset[i] != SubTest2->Subset[i] ) { return false; } } } } return true; } /*************************************************************************/ /* */ /* Imprime el conjunto indexado de reglas actual */ /* */ /*************************************************************************/ void TDMC45::PrintIndexedRules() { short ri; ForEach(ri, 1, NRules ) { PrintRule(RuleIndex[ri]); } printf("\nClase por defecto: %s\n", ClassName[DefaultClass]); } /*************************************************************************/ /* */ /* Imprime la regla r */ /* */ /*************************************************************************/ void TDMC45::PrintRule(RuleNo r) { short d; printf("\nRegla %d:\n", r); ForEach(d, 1, Rule[r].Size) { printf(" "); PrintCondition(Rule[r].Lhs[d]); } printf("\t-> clase %s [%.1f%%]\n", 320 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

ClassName[Rule[r].Rhs], 100 * (1 - Rule[r].Error)); } /*************************************************************************/ /* */ /* Imprime la condicin c de una regla de produccin */ /* */ /*************************************************************************/ void TDMC45::PrintCondition(Condition c) { Test tp; DiscrValue v, pv, Last, Values=0; Boolean First=true; Attribute Att; tp = c->CondTest; v = c->TestValue; Att = tp->Tested; printf("\t%s", AttName[Att]); if ( v < 0 ) { printf(" es desconocido\n"); return; } switch ( tp->NodeType ) { case BrDiscr: printf(" = %s\n", AttValName[Att][v]); break; case ThreshContin: printf(" %s %g\n", ( v == 1 ? "<=" : ">" ), tp->Cut); break; case BrSubset: /* Contamos los valores en la rama

*/

for ( pv=1 ; Values <= 1 && pv <= MaxAttVal[Att] ; pv++ ) { if ( In(pv, tp->Subset[v]) ) { Last = pv; Values++; } } if ( Values == 1 ) { printf(" = %s\n", AttValName[Att][Last]); break; } printf(" en "); ForEach(pv, 1, MaxAttVal[Att]) { if ( In(pv, tp->Subset[v]) ) { if ( First ) { printf("{"); First = false; } else { printf(", "); } printf("%s", AttValName[Att][pv]); } } printf("}\n"); } } /*************************************************************************/ Cdigo Fuente Magdalena Servente 321

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

/* */ /* Poda la regla dadas las condiciones Cond, y el nro de condiciones */ /* NCond, y agrega la regla resultante al actual conjunto de reglas */ /* si es lo suficientemente precisa */ /* */ /*************************************************************************/ void TDMC45::PruneRule(Condition Cond[],short NCond,ClassNo TargetClass) { short d, dd, id, Bestd, Bestid, Remaining=NCond; float DefaultError, Extra; Boolean Alter; Condition Hold; ItemNo i; ForEach(d, 0, NCond) { Deleted[d] = false; } /* Evaluamos la matriz de satisfaccin */

TargetClassFreq[0] = TargetClassFreq[1] = 0; ForEach(i, 0, MaxItem) { ForEach(d, 1, NCond) { CondSatisfiedBy[d][i] = Satisfies(Item[i], Cond[d]); } TargetClassFreq[IsTarget(Item[i])]++; } DefaultError = 1.0 - (TargetClassFreq[true] + 1.0) / (MaxItem + 3.0); /* Buscamos las condiciones a eliminar */

Verbosity(1) { FReglas<<endl; FReglas<<"Poda de la regla para "; FReglas<<ClassName->Strings[TargetClass].c_str(); } do { Alter = false; FindTables(NCond, TargetClass); /* Buscamos la condicin, eliminando aquellas que produciran la mayor mejora en la precisin de la regla. Notas: se utiliza el promedio pesimstico de error, y no el promedio actual de error. Cuando d es 0, estamos trabajando con todas las condiciones */

Bestd = id = 0; Verbosity(1) printf("\n

Err Utilizado

Pesim\tCondicin ausente\n");

ForEach(d, 0, NCond) { if ( Deleted[d] ) continue; if ( Total[d] ) { Actual[d] = Errors[d] / (float) Total[d]; Extra = AddErrs((float) Total[d], (float) Errors[d]); Pessimistic[d] = (Errors[d] + Extra) / Total[d]; } else { Actual[d] = 0; Pessimistic[d] = DefaultError; } Verbosity(1) { 322 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

FReglas<<" "; FReglas<<Errors[d]; FReglas<<" "; FReglas<<Total[d]; FReglas<<100 * Pessimistic[d]; } if ( ! d ) { Verbosity(1) { FReglas<<" FReglas<<endl; } } else { id++; /*

<regla base>";

Si se est usando la opcin, llamamos al test de Fisher para estimar la probabilidad de que la divisin sobre d sea por casualidad */

if ( SIGTEST ) { CondSigLevel[d] = TableProb(Errors[0], Errors[d]-Errors[0], Total[0]-Errors[0], Total[d]-Total[0]-Errors[d]+Errors[0]); Verbosity(1) { FReglas<<" Sig="; FReglas<<CondSigLevel[d]; } } Verbosity(1) PrintCondition(Cond[d]); /* Bestd identifica la condicin con el menor error estimado */

if ( ! Bestd || Pessimistic[d] <= Pessimistic[Bestd] ) { Bestd = d; Bestid = id; } /* Alter ser true si vamos a eliminar una condicin (tanto porque el estimador pesimstico es menor, como porque una de las condiciones no pasa la prueba de sign)

*/

if ( Pessimistic[d] <= Pessimistic[0] || Actual[d] <= Actual[0] || SIGTEST && CondSigLevel[d] > SIGTHRESH ) { Alter = true; } } } if ( Alter ) { Verbosity(1) { FReglas<<" Eliminamos la prueba "; FReglas<<Bestid; FReglas<<endl; } Deleted[Bestd] = true; Remaining--; } } while ( Alter && Remaining ); if ( ! Remaining || ! Total[0] ) { Cdigo Fuente Magdalena Servente 323

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

return; } if ( Pessimistic[0] >= DefaultError ) { Verbosity(1) { FReglas<<" Muy impreciso"; FReglas<<endl; } return; } /* Ordenamos las condiciones */

ForEach(d, 1, Remaining) { dd = 0; ForEach(id, d, NCond) { if ( ! Deleted[id] && ( ! dd || Before(Cond[id]->CondTest, Cond[dd]->CondTest) ) ) { dd = id; } } if ( dd != d ) { Hold = Cond[d]; Cond[d] = Cond[dd]; Cond[dd] = Hold; Deleted[dd] = Deleted[d]; } Deleted[d] = true; } NewRule(Cond, Remaining, TargetClass, Pessimistic[0]); }

/*************************************************************************/ /* */ /* Verifica si la condicin R es redundante */ /* */ /*************************************************************************/ bool TDMC45::Redundant(short R,Condition Cond[],short NCond) { short d, v, vv; Test t, Rt; Rt = Cond[R]->CondTest; v = Cond[R]->TestValue; ForEach(d, 1, NCond) { if ( Deleted[d] || d == R ) continue; t = Cond[d]->CondTest; vv = Cond[d]->TestValue; if ( t->Tested != Rt->Tested ) continue; switch ( t->NodeType ) { case BrDiscr: /* prueba sobre un atrib discreto */ return false; case ThreshContin: /* prueba sobre un atrib contnuo */

if ( vv == v && ( v == 1 ? t->Cut < Rt->Cut : t->Cut > Rt->Cut ) ) { return true; 324 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

} break; case BrSubset: /* sprueba sobre un subconjunto de atrib discretos */

if ( IsSubset(t->Subset[vv], Rt->Subset[v], Rt->Tested) ) { return true; } } } return false; } /*************************************************************************/ /* */ /* Decide si el subconj de valores S1 est contenido en S2 */ /* */ /*************************************************************************/ bool TDMC45::IsSubset(Conjunto S1,Conjunto S2,Attribute Att) { DiscrValue v; ForEach(v, 1, MaxAttVal[Att]) { if ( In(v, S1) && ! In(v, S2) ) return false; } return true; }

/*************************************************************************/ /* */ /* Busca las tablas de distribucin de frecuencias para la condiciones */ /* actuales: */ /* */ /* Total[0] = items q satisfacen todas las condiciones */ /* Total[d] = items q satisfacen todas las condiciones menos d */ /* */ /* Errors[0] = items de clase errnea q satisfacen todas las cond */ /* Errors[d] = items de clase errnea q satisfacen todas las cond */ /* menos d */ /* */ /*************************************************************************/ void TDMC45::FindTables(short NCond,ClassNo TargetClass) { ItemNo i; short Misses, Missed[2], d; Boolean CorrectClass; /* Limpiamos las distribuciones */

ForEach(d, 0, NCond) { Total[d] = Errors[d] = 0; } /* Determinamos las distribuciones */

ForEach(i, 0, MaxItem) { Misses = 0; CorrectClass = IsTarget(Item[i]); for ( d = 1 ; d <= NCond && Misses <= 1 ; d++ ) { if ( ! Deleted[d] && ! CondSatisfiedBy[d][i] ) { Missed[Misses++] = d; } } if ( ! Misses ) Cdigo Fuente Magdalena Servente 325

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

{ UpdateCount(Total, Errors, 0, CorrectClass); } else if ( Misses == 1 ) { UpdateCount(Total, Errors, Missed[0], CorrectClass); } } /* Ajustamos las cuentas para reflejar todos los casos q satisfacen todas las condiciones */

ForEach(d, 1, NCond) { if ( ! Deleted[d] ) { Total[d] += Total[0]; Errors[d] += Errors[0]; } } } /*************************************************************************/ /* */ /* Incrementa los valores de Total[d] y Errors[d] */ /* */ /*************************************************************************/ void TDMC45::UpdateCount(ItemNo T[],ItemNo E[],short d,bool OK) { T[d]++; if ( ! OK ) E[d]++; } /*************************************************************************/ /* */ /* Determina si la descripcin de un caso satisface la cond dada */ /* */ /*************************************************************************/ bool TDMC45::Satisfies(Description CaseDesc,Condition OneCond) { DiscrValue v; float cv; Test t; short s; bool Outcome; t = OneCond->CondTest; /* Determina el resultado de la prueba sobre el item actual */

switch ( t->NodeType ) { case BrDiscr: /* prueba sobre un atrib discreto */ v = DVal(CaseDesc, t->Tested); Outcome = ( v == 0 ? -1 : v ); break; case ThreshContin: /* prueba sobre un atrib contnuo */

cv = CVal(CaseDesc, t->Tested); Outcome = ( cv == Unknown ? -1 : cv <= t->Cut ? 1 : 2 ); break; case BrSubset: /* prueba sobre un subconj de atrib discretos */

v = DVal(CaseDesc, t->Tested); Outcome = -1; ForEach(s, 1, t->Forks) { if ( In(v, t->Subset[s]) ) { Outcome = s; break; } } 326 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

} return ( Outcome == OneCond->TestValue ); } /*************************************************************************/ /* */ /* Distribucin hipergeometrica (usa los log de los factoriales */ /* tabulados) */ /* */ /*************************************************************************/ double TDMC45::Hypergeom(int a,int r,int A,int B) { return exp( LogFact[A] + LogFact[B] + LogFact[r] + LogFact[A+B-r] ( LogFact[a] + LogFact[r-a] + LogFact[A-a] + LogFact[B-(r-a)] + LogFact[A+B]) ); } /*************************************************************************/ /* */ /* TableProb examina la tabla t de contingencias de 2x2 y calcula la */ /* probabilidad de que una divisin al azar pueda producir una divisin */ /* al menos tan extrema como esta. Esto tambin se conoce como la */ /* "Prueba Exacta de Fisher" */ /* */ /*************************************************************************/ float TDMC45::TableProb(int t11,int t12,int t21,int t22) { double Sum=0.0; int A, B, r, a, k, a0; /* Primero, llevamos la tabla a la forma cannica */

if ( t11 + t12 > t21 + t22 ) { A = t11 + t12; B = t21 + t22; if ( t11 { a0 = r = } else { a0 = r = } * (t21 + t22) > t21 * (t11 + t12) ) t11; t11 + t21;

t12; t12 + t22;

} else { A = t21 + t22; B = t11 + t12; if ( t21 * (t11 + t12) > t11 * (t21 + t22) ) { a0 = t21; r = t21 + t11; } else { a0 = t22; r = t22 + t12; } } /* Ahora calculamos la probabilidad */

k = Min(r, A); ForEach(a, a0, k) { Sum += Hypergeom(a, r, A, B); } return Sum; } /*************************************************************************/ Cdigo Fuente Magdalena Servente 327

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

/* */ /* Evala todos los conj de reglas */ /* */ /*************************************************************************/ void TDMC45::EvaluateRulesets(bool DeleteRules) { short t; ItemNo *Errors; float AvSize=0, AvErrs=0; Boolean Final; if ( TRIALS == 1 ) { /* Evaluamos el conj de reglas actual como si no existiera un conj compuesto de reglas */ Interpret(0, MaxItem, DeleteRules, true, true); return; } Errors = (ItemNo *) malloc((TRIALS+1) * sizeof(ItemNo)); ForEach(t, 0, TRIALS) { NRules = PRSet[t].SNRules; Rule = PRSet[t].SRule; RuleIndex = PRSet[t].SRuleIndex; DefaultClass = PRSet[t].SDefaultClass; if ( t < TRIALS ) { FReglas<<endl; FReglas<<"Conjunto de reglas "; FReglas<<t; FReglas<<endl; } else { FReglas<<endl; FReglas<<"Conjunto compuesto de reglas:"; FReglas<<endl; } Final = (t == TRIALS); Errors[t] = Interpret(0, MaxItem, DeleteRules, Final, Final); AvSize += NRules; AvErrs += Errors[t]; if ( DeleteRules ) { PRSet[t].SNRules = NRules; } } /* Imprimimos los resultados */

FReglas<<endl; FReglas<<"Prueba FReglas<<endl; FReglas<<"-----FReglas<<endl;

Tamao ------

Errores"; -------";

ForEach(t, 0, TRIALS) { if ( t < TRIALS ) { FReglas<<t; } else { FReglas<<" **"; } FReglas<<" "; FReglas<<PRSet[t].SNRules; FReglas<<" "; FReglas<<Errors[t]; 328 Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

FReglas<<"("; FReglas<<100 * Errors[t] / (MaxItem+1.0); FReglas<<"%)"; FReglas<<endl; } AvSize /= TRIALS + 1; AvErrs /= TRIALS + 1; FReglas<<" Tamao Promedio = "; FReglas<<AvSize; FReglas<<", errores promedio = "; FReglas<<AvErrs; FReglas<<" ("; FReglas<< 100 * AvErrs / (MaxItem+1.0); FReglas<<"%)"; FReglas<<endl; } /*************************************************************************/ /* */ /* Evala el conjunto de reglas actual */ /* */ /*************************************************************************/ ItemNo TDMC45::Interpret(ItemNo Fp,ItemNo Lp,bool DeleteRules, bool CMInfo, bool Arrow) { ItemNo i, Tested=0, Errors=0, *Better, *Worse, *ConfusionMat; bool FoundRule; ClassNo AssignedClass, AltClass; Attribute Att; RuleNo p, Bestr, ri, ri2, riDrop=0; float ErrorRate, BestRuleConfidence; if ( CMInfo ) { ConfusionMat = (ItemNo *) calloc((MaxClass+1)*(MaxClass+1), sizeof(ItemNo)); } ForEach(ri, 1, NRules) { p = RuleIndex[ri]; Rule[p].Used = Rule[p].Incorrect = 0; } Better = (ItemNo *) calloc(NRules+1, sizeof(ItemNo)); Worse = (ItemNo *) calloc(NRules+1, sizeof(ItemNo)); ForEach(i, Fp, Lp) { /* Buscamos la primera opcin de la regla para este item */ ri = BestRuleIndex(Item[i], 1); Bestr = ( ri ? RuleIndex[ri] : 0 ); FoundRule = Bestr > 0; if ( FoundRule ) { Rule[Bestr].Used++; AssignedClass = Rule[Bestr].Rhs; BestRuleConfidence = Confidence; /* Ahora buscamos la segunda opcin */

ri2 = BestRuleIndex(Item[i], ri+1); AltClass = ( ri2 ? Rule[RuleIndex[ri2]].Rhs : DefaultClass ); if ( AltClass != AssignedClass ) { if ( AssignedClass == Class(Item[i]) ) { Better[ri]++; } else if ( AltClass == Class(Item[i]) ) { Worse[ri]++; } } } Cdigo Fuente Magdalena Servente 329

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

else { AssignedClass = DefaultClass; } if ( CMInfo ) { ConfusionMat[Class(Item[i])*(MaxClass+1)+AssignedClass]++; } Tested++; if ( AssignedClass != Class(Item[i]) ) { Errors++; if ( FoundRule ) Rule[Bestr].Incorrect++; Verbosity(3) { FReglas<<endl; ForEach(Att, 0, MaxAtt) { FReglas<<" "; FReglas <<AttName->Strings[Att].c_str(); FReglas<<": "; if ( MaxAttVal[Att] ) { if ( DVal(Item[i],Att) ) { FReglas<<AttValName[Att][DVal(Item[i],Att)].c_str(); FReglas<<endl; } else { FReglas<<"?"; FReglas<<endl; } } else { if ( CVal(Item[i],Att) != Unknown ) { FReglas<<CVal(Item[i],Att); FReglas<<endl; } else { FReglas<<"?"; FReglas<<endl; } } } FReglas<<" "; FReglas<<i; FReglas<<": Clase dada"; FReglas<<ClassName->Strings[Class(Item[i])].c_str(); if ( FoundRule ) { FReglas<<" La regla "; FReglas<<Bestr; FReglas<<" ["; FReglas<<100 * BestRuleConfidence; FReglas<<"%] determina la clase"; } else { FReglas<<" Clase por defecto "; } FReglas<<ClassName->Strings[AssignedClass].c_str(); FReglas<<endl; } } } FReglas<<endl; FReglas<<"Regla FReglas<<endl; FReglas<<"----FReglas<<endl; 330

Tamao ------

Error -----

Usada -----

Errores -------

Ventaja"; -------";

Magdalena Servente

Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

ForEach(ri, 1, NRules) { p = RuleIndex[ri]; if ( Rule[p].Used > 0 ) { ErrorRate = Rule[p].Incorrect / (float) Rule[p].Used; FReglas<<p; FReglas<<" "; FReglas<<Rule[p].Size; FReglas<<" "; FReglas<<100 * Rule[p].Error; FReglas<<"% "; FReglas<<Rule[p].Used; FReglas<<" "; FReglas<< Rule[p].Incorrect; FReglas<<" ("; FReglas<<100 * ErrorRate; FReglas<<"%) "; FReglas<<Better[ri]-Worse[ri]; FReglas<<" ("; FReglas<<Better[ri]; FReglas<<"|"; FReglas<<Worse[ri]; FReglas<<") "; FReglas<<ClassName->Strings[Rule[p].Rhs].c_str(); FReglas<<endl; /* Verificamos si esta regla debera ser eliminada. Nota: podemos eliminar solo una regla por vez, porque Better y Worse se ven afectados */

if ( DeleteRules && ! riDrop && Worse[ri] > Better[ri] ) { riDrop = ri; } } } free(Better); free(Worse); if ( riDrop ) { FReglas<<endl; FReglas<<"Eliminamos la regla "; FReglas<<RuleIndex[riDrop]; FReglas<<endl; ForEach(ri, riDrop+1, NRules) { RuleIndex[ri-1] = RuleIndex[ri]; } NRules--; if ( CMInfo ) free(ConfusionMat); return Interpret(Fp, Lp, DeleteRules, true, Arrow); } else { FReglas<<endl; FReglas<<"Probadas "; FReglas<<Tested; FReglas<<", errores "; FReglas<<Errors; FReglas<<" ("; FReglas<<100 * Errors / (float) Tested; FReglas<<"%)"; FReglas<<( Arrow ? " <<" : "" ); FReglas<<endl; } if ( CMInfo ) { PrintConfusionMatrix(ConfusionMat); free(ConfusionMat); } Cdigo Fuente Magdalena Servente 331

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

return Errors; } /*************************************************************************/ /* */ /* Busca la mejor regla para el caso dado, dejando la probabilidad */ /* en Confidence */ /* */ /*************************************************************************/ RuleNo TDMC45::BestRuleIndex(Description CaseDesc,RuleNo Start) { RuleNo r, ri; ForEach(ri, Start, NRules) { r = RuleIndex[ri]; Confidence = Fuerza(Rule[r], CaseDesc); if ( Confidence > 0.1 ) { return ri; } } Confidence = 0.0; return 0; }

D.5. MDULOS DE CLASES DE DATOS


D.5.1. UTipos
D.5.1.1. UTipos.h
//--------------------------------------------------------------------------#ifndef UTiposH #define UTiposH //--------------------------------------------------------------------------//Definicin de constantes #define LONG_CLASSIFIER 3 /*Longitud del campo del clasificador*/ #define MAX_CANT_DESCRIPTORES 20 /*Cantidad mxima de descriptores que puede haber en la tabla*/ #define MAX_CANT_CLASIFICADORES 10 /*Cantidad mxima de valores distintos que puede haber para el clasificador*/ #define MAX_HIJOS 20 /*Mxima de cantidad de hijos que puede tener un nodo del rbol*/ #define MAX_NIVELES 200 #define MAX_CHAR 100

//--------------------------------------------------------------------------//--------------------------------------------------------------------------// DECLARACION DE TIPOS //--------------------------------------------------------------------------//--------------------------------------------------------------------------//Tabla de correlacin //*****************EL TAMAO DE LA TABLA DEBERA SER DINMICO typedef double TTablaCorrel[MAX_CANT_DESCRIPTORES+1][MAX_CANT_CLASIFICADORES+1]; typedef struct tree_node *tree_ptr; struct tree_node { short int flag_hoja;

/* 0 si es hoja y todos los valores son "Yes" 1 si es hoja y todos los valores son "No" 2 si es hoja y sus valores son mixtos 3 si no es hoja*/

int desc;

332

Magdalena Servente

Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

tree_ptr pHijos[MAX_HIJOS]; //hijo derecho short int D[MAX_CANT_DESCRIPTORES];/*Descriptores vlidos para el nodo*/ }; typedef tree_ptr DECISION_TREE; typedef typedef typedef typedef AnsiString TVecValores [MAX_NIVELES]; AnsiString TTablaValores [MAX_NIVELES][MAX_NIVELES]; char TRule [MAX_CHAR]; int TVecInt [MAX_NIVELES];

class TParametros { public: AnsiString ArchivoIni; AnsiString NombreBD; AnsiString TablaBD; AnsiString TablaReglas; AnsiString ColClasificador; AnsiString ExtensionFileReglas; TStringList *LClasificadores; int iFormatoReglas; /* 0: Insight2+ 1: KappaPC 2: ambos 3: ninguno*/ int iSistema; /* 0: ID3 1: C4.5 */ int iCriterio; /* 0: Ganancia 1: Proporcin de ganancia */ int iPoda; /* 0: Si 1: No */ int iConjuntos; /* indica si las pruebas en el C4.5 se realizan sobre grupos de atrib discretos 0: Si 1: No */ int iMinObjs; /* Cantidad mnima de objetos que debe tener una rama en el C4.5 */ int iCF; /* Nivel de confianza para la poda en el C4.5 */ TParametros(AnsiString ArchIni); //constructor //Toma los parmetros del archivo .ini ~TParametros(); //destructor //Refresca los parmetros a partir del archivo .ini /*Devuelve 0 si no hubo problemas, -1 en caso contrario*/ int RefrescarParams(); //Guardar los parmetros en el .ini /*Devuelve 0 si no hubo problemas, -1 en caso contrario*/ int GrabarParams(); };

//--------------------------------------------------------------------------#endif

D.5.1.2. UTipos.cpp
//--------------------------------------------------------------------------#include <vcl.h> #pragma hdrstop #include "UTipos.h" //--------------------------------------------------------------------------#pragma package(smart_init)

//--------------------------------------------------------------------------//--------------------------------------------------------------------------// IMPLEMENTACIN DE LA CLASE TParametros //--------------------------------------------------------------------------Cdigo Fuente Magdalena Servente 333

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

//--------------------------------------------------------------------------TParametros::TParametros(AnsiString ArchIni) //constructor //Toma los parmetros del archivo .ini { int i; char Buffer[80]; ArchivoIni=ArchIni; LClasificadores = new TStringList(); //Cargamos las opciones por default del archivo .ini //Cargamos los datos asociados con los clasificadores GetPrivateProfileString("Clasificadores", "ColClasif", "???", Buffer, Buffer, ArchivoIni.c_str()); if (Buffer!="???") ColClasificador=Trim(Buffer); GetPrivateProfileString("Clasificadores", "lClasif", "???", Buffer, Buffer, ArchivoIni.c_str()); if (Buffer!="???") { LClasificadores->Add(AnsiString(strtok(Buffer, ","))); i=0; while (Trim(LClasificadores->Strings[i])!="") { LClasificadores->Add(AnsiString(strtok(NULL, ","))); i++; } LClasificadores->Delete(i); }

sizeof

sizeof

//Cargamos los datos relacionados con la Base de Datos GetPrivateProfileString("BaseDeDatos", "Tabla", "???", ArchivoIni.c_str()); if (Buffer!="???") TablaBD=Trim(Buffer); GetPrivateProfileString("BaseDeDatos", ArchivoIni.c_str()); if (Buffer!="???") NombreBD=Trim(Buffer); "Alias", "???",

Buffer,

sizeof

Buffer,

Buffer,

sizeof

Buffer,

//Cargamos los datos asociados con las reglas de decisin GetPrivateProfileString("Reglas", "Extension", "???", Buffer, ArchivoIni.c_str()); if (Buffer!="???") ExtensionFileReglas=Trim(Buffer); GetPrivateProfileString("Reglas", "Formato", "???", ArchivoIni.c_str()); if (Buffer!="???") iFormatoReglas=StrToInt(Trim(Buffer)); Buffer,

sizeof

Buffer,

sizeof

Buffer,

//Cargamos los datos asociados con el sistema de resolucin y sus opciones GetPrivateProfileString("Resolucion", "Sistema", "???", Buffer, sizeof Buffer, ArchivoIni.c_str()); if (Buffer!="???") iSistema=StrToInt(Trim(Buffer)); GetPrivateProfileString("Resolucion", "Criterio", "???", Buffer, sizeof Buffer, ArchivoIni.c_str()); if (Buffer!="???") iCriterio=StrToInt(Trim(Buffer)); GetPrivateProfileString("Resolucion", "Poda", ArchivoIni.c_str()); if (Buffer!="???") iPoda=StrToInt(Trim(Buffer)); //Cargamos los datos asociados con el C4.5 GetPrivateProfileString("C45", "Conjuntos", ArchivoIni.c_str()); if (Buffer!="???") 334 Magdalena Servente "???", Buffer, sizeof Buffer,

"???",

Buffer,

sizeof

Buffer,

Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

iConjuntos=StrToInt(Trim(Buffer)); GetPrivateProfileString("C45", "MinObjs", ArchivoIni.c_str()); if (Buffer!="???") iMinObjs=StrToInt(Trim(Buffer)); GetPrivateProfileString("C45", "CF", ArchivoIni.c_str()); if (Buffer!="???") iCF=StrToInt(Trim(Buffer)); } //--------------------------------------------------------------------------TParametros::~TParametros() //destructor { ArchivoIni.~AnsiString(); NombreBD.~AnsiString(); TablaBD.~AnsiString(); TablaReglas.~AnsiString(); ColClasificador.~AnsiString(); ExtensionFileReglas.~AnsiString(); delete LClasificadores; } //--------------------------------------------------------------------------int TParametros::RefrescarParams() //Refresca los parmetros a partir del archivo .ini /*Devuelve 0 si no hubo problemas, -1 en caso contrario*/ { int i; char Buffer[80]; try { LClasificadores = new TStringList(); //Cargamos las opciones por default del archivo .ini //Cargamos los datos asociados con los clasificadores GetPrivateProfileString("Clasificadores", "ColClasif", "???", Buffer, Buffer, ArchivoIni.c_str()); if (Buffer!="???") ColClasificador=Trim(Buffer); GetPrivateProfileString("Clasificadores", "lClasif", "???", Buffer, Buffer, ArchivoIni.c_str()); if (Buffer!="???") { LClasificadores->Add(AnsiString(strtok(Buffer, ","))); i=0; while (Trim(LClasificadores->Strings[i])!="") { LClasificadores->Add(AnsiString(strtok(NULL, ","))); i++; } LClasificadores->Delete(i); } "???", Buffer, sizeof Buffer,

"???",

Buffer,

sizeof

Buffer,

sizeof

sizeof

//Cargamos los datos relacionados con la Base de Datos GetPrivateProfileString("BaseDeDatos", "Tabla", "???", ArchivoIni.c_str()); if (Buffer!="???") TablaBD=Trim(Buffer); GetPrivateProfileString("BaseDeDatos", ArchivoIni.c_str()); if (Buffer!="???") NombreBD=Trim(Buffer); "Alias", "???",

Buffer,

sizeof

Buffer,

Buffer,

sizeof

Buffer,

//Cargamos los datos asociados con las reglas de decisin GetPrivateProfileString("Reglas", "Extension", "???", Buffer, ArchivoIni.c_str()); if (Buffer!="???") ExtensionFileReglas=Trim(Buffer); Cdigo Fuente Magdalena Servente

sizeof

Buffer,

335

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

GetPrivateProfileString("Reglas", "Formato", "???", ArchivoIni.c_str()); if (Buffer!="???") iFormatoReglas=StrToInt(Trim(Buffer));

Buffer,

sizeof

Buffer,

//Cargamos los datos asociados con el sistema de resolucin y sus opciones GetPrivateProfileString("Resolucion", "Sistema", "???", Buffer, sizeof Buffer, ArchivoIni.c_str()); if (Buffer!="???") iSistema=StrToInt(Trim(Buffer)); GetPrivateProfileString("Resolucion", "Criterio", "???", Buffer, sizeof Buffer, ArchivoIni.c_str()); if (Buffer!="???") iCriterio=StrToInt(Trim(Buffer)); GetPrivateProfileString("Resolucion", "Poda", ArchivoIni.c_str()); if (Buffer!="???") iPoda=StrToInt(Trim(Buffer)); //Cargamos los datos asociados con el C4.5 GetPrivateProfileString("C45", "Conjuntos", ArchivoIni.c_str()); if (Buffer!="???") iConjuntos=StrToInt(Trim(Buffer)); GetPrivateProfileString("C45", "MinObjs", ArchivoIni.c_str()); if (Buffer!="???") iMinObjs=StrToInt(Trim(Buffer)); GetPrivateProfileString("C45", "CF", ArchivoIni.c_str()); if (Buffer!="???") iCF=StrToInt(Trim(Buffer)); "???", Buffer, sizeof Buffer,

"???",

Buffer,

sizeof

Buffer,

"???",

Buffer,

sizeof

Buffer,

"???",

Buffer,

sizeof

Buffer,

return(0); } catch(...) { return(-1); } } //--------------------------------------------------------------------------int TParametros::GrabarParams() //Guardar los parmetros en el .ini /*Devuelve 0 si no hubo problemas, -1 en caso contrario*/ { AnsiString lista; int index;

try

//Actualizamos el archivo de inicio WritePrivateProfileString("Clasificadores", "ColClasif", ColClasificador.c_str(), ArchivoIni.c_str()); WritePrivateProfileString("BaseDeDatos", "Alias", NombreBD.c_str(), ArchivoIni.c_str()); WritePrivateProfileString("BaseDeDatos", "Tabla", TablaBD.c_str(), ArchivoIni.c_str()); WritePrivateProfileString("Reglas", "Extension", ExtensionFileReglas.c_str(), ArchivoIni.c_str()); //Clasificadores lista= ""; index=0; while (index<LClasificadores->Count) { AppendStr(lista, LClasificadores->Strings[index]); AppendStr(lista, ", "); index++; }

336

Magdalena Servente

Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

WritePrivateProfileString("Clasificadores", ArchivoIni.c_str()); //Formato de las reglas lista=IntToStr(iFormatoReglas); WritePrivateProfileString("Reglas", ArchivoIni.c_str()); //Sistema de resolucin lista=IntToStr(iSistema); WritePrivateProfileString("Resolucion", ArchivoIni.c_str()); lista=IntToStr(iCriterio); WritePrivateProfileString("Resolucion", ArchivoIni.c_str()); lista=IntToStr(iPoda); WritePrivateProfileString("Resolucion", ArchivoIni.c_str());

"lClasif",

lista.c_str(),

"Formato",

lista.c_str(),

"Sistema",

lista.c_str(),

"Criterio",

lista.c_str(),

"Poda",

lista.c_str(),

//C4.5 lista=IntToStr(iConjuntos); WritePrivateProfileString("C45", "Conjuntos", lista.c_str(), ArchivoIni.c_str()); lista=IntToStr(iMinObjs); WritePrivateProfileString("C45", "MinObjs", lista.c_str(), ArchivoIni.c_str()); lista=IntToStr(iCF); WritePrivateProfileString("C45", "CF", lista.c_str(), ArchivoIni.c_str());

lista.~AnsiString(); return(0); } catch(...) { lista.~AnsiString(); return(-1); } } //--------------------------------------------------------------------------//--------------------------------------------------------------------------// FIN DE LA CLASE TParametros //--------------------------------------------------------------------------//---------------------------------------------------------------------------

D.5.2. Types.h
/*************************************************************************/ /* */ /* Definiciones de tipos para C4.5 */ /* ------------------------------*/ /* */ /*************************************************************************/ typedef typedef typedef typedef typedef typedef char *Conjunto; int ItemNo; float ItemCount; short ClassNo, DiscrValue; short Attribute;

/* nro de data item */ /* cant de items (parciales) */ /* nro de clase, 0..MaxClass */ /* valor discreto del atributo (0 = ?) */ /* nro de atributo, 0..MaxAtt */

union _attribute_value { DiscrValue _discr_val; float _cont_val; } AttValue, *Description; CVal(Case,Attribute) Case[Attribute]._cont_val DVal(Case,Attribute) Case[Attribute]._discr_val Class(Case) Case[MaxAtt+1]._discr_val Magdalena Servente 337

#define #define #define

Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

#define

Unknown

-999

/* valor desconocido para un atrib continuo */

#define #define #define

BrDiscr 1 ThreshContin 2 BrSubset 3

/* tipos de nodo: /* /*

rama */ lmite de corte */ prueba de subconjuntos*/

typedef struct tree_record *Tree; struct tree_record { short NodeType; ClassNo Leaf; ItemCount Items, *ClassDist, Errors; Attribute Tested; short Forks; float Cut, Lower, Upper; Conjunto *Subset; Tree *Branch; }; typedef Tree DECISION_TREE_C45;

/* /* /* /* /* /* /* /* /* /* /* /*

0=hoja 1=rama 2=corte 3=subconj */ clase ms frecuente del nodo */ nro de items en el nodo */ distrib de clase de los items */ nro de errores en el nodo */ atribute referenciado en la prueba */ nro de ramas en el nodo */ lmite para los atrib continuos */ lmite inferior del valor lmite */ lmite superior del valor lmite */ subconj de valores discretos */ Branch[x] = (sub)rbol para el resultado x */

#define #define

IGNORAR DISCRETE

1 2

/* estado especial de un atrib: no utilizar */ /* estado especial de un atrib: incorporar los valores a medida que se leen los datos */

typedef short

RuleNo;

/* nro de regla */

typedef struct TestRec *Test; struct TestRec { short Attribute short float Conjunto };

NodeType; Tested; Forks; Cut; *Subset;

/* /* /* /* /*

tipo de prueba */ atributo testeado */ ramas posibles */ valor lmite (si es relevante) */ subconjunto (si es relevante) */

typedef struct CondRec *Condition; struct CondRec { Test short };

CondTest; TestValue;

/* antecedente de la prueba */ /* resultado de la prueba */

typedef struct ProdRuleRec PR; struct ProdRuleRec { short Condition ClassNo float ItemNo

Size; *Lhs; Rhs; Error, Bits; Used, Incorrect;

/* nro de condiciones */ /* condiciones */ /* clase resultante de la regla */ /* proporcin estimada de error */ /* bits para codificar la regla */ /* cant de veces en q se uso la regla */ /* cant de veces en q la regla fue incorrecta */

};

typedef struct RuleSetRec RuleSet; struct RuleSetRec { PR RuleNo 338

*SRule; SNRules,

/* reglas */ /* cant de reglas */ Magdalena Servente Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

ClassNo };

*SRuleIndex; /* indice de reglas */ SDefaultClass; /* clase por defecto */

D.5.3. Defns.h
/*************************************************************************/ /* */ /* Definiciones utilizadas en el C4.5 */ /* ---------------------------------*/ /* */ /*************************************************************************/

#include <stdio.h> #include <math.h> #define None #define Epsilon long random(); #define Random #define #define #define #define #define #define #define #define #define #define Max(a,b) Min(a,b) Round(x) Log2 Log(x) Bit(b) In(b,s) ClearBits(n,s) CopyBits(n,f,t) SetBit(b,s) -1 1E-3

((random()&2147483647) / 2147483648.0) ((a)>(b) ? a : b) ((a)<(b) ? a : b) ((int) (x+0.5)) 0.69314718055994530942 ((x) <= 0 ? 0.0 : log((float)x) / Log2) (1 << (b)) ((s[(b) >> 3]) & Bit((b) & 07)) memset(s,0,n) memcpy(t,f,n) (s[(b) >> 3] |= Bit((b) & 07)) for(v=f ; v<=l ; ++v) if(VERBOSITY >= d) if ( v<l||v>h ) {printf("\t** valor invlido **\n"); exit(1);}

#define ForEach(v,f,l) #define Verbosity(d) #define Check(v,l,h)

D.5.4. Rulex.h
/*************************************************************************/ /* */ /* Datos globales para la construccin y aplicacin de las reglas */ /* -------------------------------------------------------------*/ /* */ /*************************************************************************/ #define Before(n1,n2) (n1->Tested < n2->Tested || n1->NodeType < n2->NodeType ||n1>Tested == n2->Tested && n1->Cut < n2->Cut) #define IsTarget(case) extern PR extern RuleNo *Rule; NRules, *RuleIndex; RuleSpace; (Class(case) == TargetClass ? 1 : 0) /* reglas de produccin */ /* nro de relgas de produccin */ /* ndeice de las relgas de produccin */ /* espacio reservado para las relgas */ /* conjuntos de reglas */ /* clase por defecto asociada con un conj de reglas */ /* utilizar la prueba de Fisher en la Magdalena Servente 339

extern short

extern RuleSet *PRSet; extern ClassNo DefaultClass;

extern Boolean SIGTEST, Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

SIMANNEAL; extern float SIGTHRESH, REDUNDANCY, AttTestBits, *BranchBits; extern float extern double *LogItemNo; *LogFact;

poda de reglas */ /* usar simulated annealing */ /* nivel de sig usado en la poda de relgas */ /* factor que regula la codificacin entre reglas y excepciones */ /* bits promedio necesarios para codificar un atributo testeado */ /* idem para el valor del atributo */ /* LogItemNo[i] = log2(i) */ /* LogFact[i] = log2(i!) */

340

Magdalena Servente

Cdigo Fuente

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

REFERENCIAS
[Babic et al, 1998] Babic, A., Mathiesen, U., Hedin, K., Bodemar, G., Wigertz, O. 1998. Assessing an AI Knowledge-Base for Asymptomatic Liver Diseases. Department of Medical Informatics, Department of Internal Diseases, Department of Infectious Diseases, Linkping University Hospital, Suecia. Faculty of Electrical and Computer Engineering, University of Ljubljana, Eslovenia. Department of Internal Diseases, Oskarshamn County Hospital, Suecia. Baldwin, J.F., Lawry, J., Martin, T.P. 2000 Mass Assignment Induction of Decision Trees on Words. A.I. Group, Departament of Engineering Mathematics, University of Bristol, Reino Unido, {jim.baldwin, j.lawry, trevor.martin}@bristol.ac.uk Bergadano, F., Matwin, S. Michalski, R. S., Zhang, J. (1992) Learning Two-TieredDescriptions of flexible Concepts: the POSEIDON System. En Machine Learning, Volumen 8, pginas 5-43, DBLP, www.dblp.uni-tier.de, Dinamarca. Blockeel, H., De Raedt, L., 1997 Top-Down Induction of Logical Decision Trees. Katholieke Universiteit Leuven, Departament of Computer Science, Celestijnelaan, Blgica Blum, A., Langley, P. 1997 Selection of Relevant Features and Examples in Machine Learning. School of Computer Science, Carnegie Mellon University, Pittisburgh, Pennsylvania, Institute for the Study of Learning and Expertise, Palo Alto, California, EE.UU. Edward S. Blurock, 1996 The ID3 Algorithm, Research Institute for Symbolic Computation, www.risc.unilinz.ac.at/people/bulrock/ANALYSIS/manual/document, Austria Cabena, P., Choi, H.H., Kim, S., Otsuka, S., Reinschmidt, J., Saarenvirta, G. 2000. Intelligent Miner for Data Applications Guide, International Technical Support Organization, IBM, http://www.redbooks.ibm.com Callahan, B., Coombs, J. 1998 Training Decision Trees with ID3, http://www.css.tayloru.edu/~jcoombs/proj/ml/id3.htm Chen, H. 1994. Machine Learning for Information Retrieval: Neural Networks, Symbolic Learning, and Genetic Algorithms. JASIS, http://ai.bpa.arizona.edu/papers/mlir93/mlir93.html Davidsson, P. 1995. ID3-SD: An Algortithm for Learning Characteristic Decision Trees by Controlling the Degree of Generalization. Departament of Computer Science, Lund University, Suecia DeJong, G.F., Mooney, R.J. 1986. Explanation-Based Learning. An Alternative View, en Machine Learning, Volumen 1, pginas 145-176. Kluwer Academic Publishing Elomaa, T. 1993. In Defense of C4.5: Notes on Learning One-Level Decision Trees. Departament of Computer Science, University of Helsinki, Finlandia 1974 Diccionario Enciclopdico Abreviado. Espasa-Calpe S.A., Madrid. Tomo I, Sptima Edicin, Espaa. Fayad, U. M., Piatetsky-Shapiro, G., Smyth, P., Uhturudsamy, R. (eds). 1996 Advances in Knowledge Discovery and Data Mining, San Mateo, AAAI Press, EE.UU. Fjara, 2000. A Decision Tree Algorithm. www.cs.uml.edu/~fjara/mineset/id3/id3_example/id3_algoritm.html Frank, E. , Witten, I.H. 1999. Making Better Use of Global Discretization, Proceedings 16th International Conference on Machine Learning, pginas 115-123. Departament of Computer Science, University of Waikato, Nueva Zelanda Gallion, R., St Clair, D., Sabharwal, C., Bond, W.E. 1993. Dynamic ID3: A Symbolic Learning Algorithm for Many-Valued Attribute
Magdalena Servente 341

[Baldwin et al, 2000]

[Bergadano et al, 1992]

[Blockeel y De Raedt, 1997]

[Blum, Langley, 1997]

[Blurock, 1996]

[Cabena et al, 2000]

[Callahan, B., Coombs, 1998] [Chen, 1994]

[Davidsson, 1995]

[DeJong, Mooney, 1986]

[Elomaa, 1993]

[Espasa-Calpe, 1974] [Fayad et al, 1996]

[Fjara, 2000] [Frank y Witten, 1999]

[Gallion et al, 1993]


Referencias

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

[Garca Martnez et al, 1987]

[Garca Martnez, 1994]

[Garca Martnez, 1997] [Gestwicki, 1997] [Grossman et al, 1999]

[Hall, 1998] [Holsheimer, Siebes, 1994]

[Holte, 1993]

[Hunt et al, 1966] [Hunt, 1975] [Joachims et al, 1995]

[Joachims et al, 1997]

[Joshi, 1997] [Kerns, Mansour, 1996]

[Klemettinen et al, 1994]

[Korab, 1997]

[Mannila et al, 1994]

[Michalski et al, 1998] [Michalski et al, 1982]

[Michalski, 1983]

Domains. Engineering Education Center, University of MissouriRolla, St. Luis, EE.UU. Garca Martnez, R., Frtz, W., y Blanqu, J. 1987. Un algoritmo de aprendizaje de conceptos para sistemas inteligentes. Anales del V Congreso Nacional de Informtica y Teleinformtica. Pginas 91-96. Buenos Aires. Junio. Argentina Garca Martnez, R. 1994. Adquisicin de Conocimiento. En Abecasis, S. y Heras, C. Metodologa de la Investigacin. Prologado por el Dr. L. Santal. Editorial Nueva Librera. Argentina Garca Martnez, R. 1997 Sistemas Autnomos: Aprendizaje Automtico. Nueva Librera, Buenos Aires, Argentina Gestwicki, P. 1997 ID3: History, Implementation, and Applications, citeseer.nj.nec.com/398697.html Grossman, R., Kasif, S., Moore, R., Rocke, D., Ullman, J. 1999. Data Mining Research: Opportunities and Challenges, A Report of three NSF Workshops on Mining Large, Massive, and Distributed Data, January 1999, Chicago, EE.UU. Hall, P.W. 1998. Machine Learning ID3 Classification. Philipv@apk.net, http://junior.apk.net/~philiv/rschmlid.htm Holsheimer, M., Siebes, A.P.J.M. 1994. Data Mining: the search for knowledge in databases. Computer Science/Departament of Algorithmics and Architectire, Centrum voor Wiskunde en Informatica, CS-R9406, Amsterdam, Holanda. Holte, R.1993. Very Simple Classification Rules Perform Well on Most Commonly Used Datasets. Computer Science Departament, University of Ottawa, Canada. Hunt, E.B., Marin, J., Stone, P.J. 1966. Experiments in Induction. New York: Academic Press, EE.UU. Hunt, E.B. 1975. Artificial Intelligence. New York: Academic Press, EE.UU. Joachims, T., Freitag, D., Mitchell, T. 1997 Web Watcher: A Tour Guide for the World Wide Web, School of Computer Science, Carnegie Mellon University, EE.UU. Joachims, T., Mitchell, T., Freitag, D., Armstrong, R. 1995. Web Watcher: Machine Learning and Hypertext, School of Computer Science, Carnegie Mellon University, EE.UU. Joshi, K.P. 1997. Analysis of Data Mining Algorithms, http://userpages.umbc.edu/~kjoshi1/data-mine/proj_rpt.htm Kearns, M., Mansour, Y. 1996. On the Boosting Ability of Top-Down Decision Tree Learning Algorithms, AT&T Research, Tel-Aviv University, Israel. Klemettinen, M., Mannila, H., Ronkainen, P., Toivonen, H., Verkamo, A. 1994. Finding Interesting Rules from Large Sets of Discovered Association Rules, University of Helsinki, Department of Computer Science, Helsinki, Finlandia. Korab, H. 1997. Rule Induction: Decision Trees and Rules, http://www.ncsa.uiuc.edu/News/Access/Stories/97Stories/KUFRIN.ht ml Mannila, H., Toivonen, H., Verkamo, A. 1994. Efficient Algorithms for Discovering Association Rules, University of Helsinki, Department of Computer Science, Helsinki, Finlandia. Michalski, R.S., Bratko, I., Kubat M. 1998. Machine Learning and Data Mining. Methods and Applications. Wiley & Sons Ltd., EE.UU. Michalski, R. S., Baskin, A. B., Spackman, K. A. 1982. A LogicBased Approach to Conceptual Database Analysis, Sixth Annual Symposium on Computer Applications on Medical Care, George Washington University, Medical Center, Washington, DC, EE.UU. Michalski, R. S. 1983. A Theory and Methodology of Inductive Learning. En Michalski, R. S., Carbonell, J. G., Mitchell, T. M. (eds.). (1983) Machine Learning: An Artificial Intelligence Approach, Vol. I.
Magdalena Servente Referencias

342

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

Morgan-Kauffman, EE.UU. [Michalski, 1991] Michalski, R. S. 1991. Towards an Unified Theory of Learning: An Outline of Basic Ideas, Proceedings of the 3rd World Conference on the Fundamentals of Artificial Intelligence, Paris, Julio 1-5, 1991 [Michalski, Tecuci, 1994] Michalski, R. S., Tecuci, G. (eds) 1994. Machine Learning: A Multistrategy Approach, Vol.IV, Morgan Kauffinan, EE.UU. [Michie, 1986] Michie, D. 1986. On Machine Intelligence (2nd ed), Ellis Horwood, Chichester, Reino Unido [Michie, 1998] Michie, D. 1988 Machine Learning in the next five years, EWSL-88, 3rd European Working Session on Leaming, Pitman, Glasgow, Londres, Reino Unido. [Mitchell, 1997] Mitchell, T. 1997. Machine Learning. MCB/McGraw-Hill, Carnegie Mellon University, EE.UU. [Mitchell, 2000a] Mitchell, T. 2000 Decision Trees. Cornell University, www.cs.cornell.edu/courses/c5478/2000SP, EE.UU. [Mitchell, 2000b] Mitchell, T. 2000 Decision Trees 2. Cornell University, www.cs.cornell.edu/courses/c5478/2000SP, EE.UU. [Montalvetti, 1995] Montalvetti, Mario 1995. Sistemas de adquisicin automtica de conocimientos, Tesis de grado en Ingeniera en Computacin. Universidad Catlica de Santiago del Estero, Argentina. [Monter, 2001] Monter, C. 2001. Equiparacin de Marcos. Notas de Seminario. Escuela de Posgrado, Instituto Tecnolgico de Buenos Aires, Argentina [Quinlan y Cameron-Jones, 1995] Quinlan, J.R., Cameron-Jones, R.M. 1995. Oversearching and Layered Search in Empirical Learning. Basser Departament of Computer Science, University of Science, Australia. [Quinlan, 1986] Quinlan, J.R. 1986. Induction of Decision Trees. En Machine Learning, Captulo 1, p.81-106. Morgan Kaufmann, 1990 [Quinlan, 1987] Quinlan, J.R. 1987. Generating Production Rules from Decision trees. Proceeding of the Tenth International Joint Conference on Artificial Intelligence, pginas. 304-307. San Mateo, CA., Morgan Kaufmann, EE.UU. [Quinlan, 1988b] Quinlan, J.R. 1988. Decision trees and multi-valued attributes. En J.E. Hayes, D. Michie, and J. Richards (eds.), Machine Intelligence, Volumen II, pginas. 305-318.Oxford University Press, Oxford, Reino Unido [Quinlan, 1989] Quinlan, J.R. 1989. Unknown Attribute Values in Induction. Basser Departament of Computer Science, University of Science, Australia. [Quinlan, 1990] Quinlan, J. R. 1990. Learning Logic Definitions from Relations. En Machine Leaming, Vol 5, pginas 239-266. Oxford University Press, Oxford, Reino Unido [Quinlan, 1993a] Quinlan, J.R. 1993. The Effect of Noise on Concept Learning, En R. S. Michalski, J. G. Carbonell, & T. M. Mitchells (Eds.) Machine Learning, The Artificial Intelligence Approach. Morgan Kaufmann, Vol. I, Captulo 6, pginas149-167. San Mateo, CA: Morgan Kaufmann, EE.UU. [Quinlan, 1993b] Quinlan, J.R. 1993. Learning Efficient Classification Procedures and Their Application to Chess Games, En R. S. Michalski, J. G. Carbonell, & T. M. Mitchells (Eds.) Machine Learning, The Artificial Intelligence Approach. Morgan Kaufmann, Vol. II, Captulo 15, pginas 463-482, EE.UU. [Quinlan, 1993c] Quinlan, J.R. 1993. Combining Instance-Based and Model-Based Learning. Basser Departament of Computer Science, University of Science, Australia. [Quinlan, 1993d] Quinlan, J.R. 1993 C4.5: Programs for Machine Learning. Morgan Kaufmann Publishers, San Mateo, California, EE.UU. [Quinlan, 1995] Quinlan, J.R. 1995 MDL and Categorical Theories. Basser Departament of Computer Science, University of Science, Australia.
Referencias Magdalena Servente 343

Algoritmos TDIDT aplicados a la Minera de Datos Inteligente

[Quinlan, 1996a]

[Quinlan, 1996b]

[Riddle, 1997] [Rissanen, 1983]

[S/A, 19950]

[S/A, 1998]

[S/A, 1999] [Thakore, 1993]

[Thrun et al, 1991]

[Thrun et al, 1998]

[Witten y Frank, 2000]

Quinlan, J.R. 1996. Improved Use of Continuous Attributes in C4.5. Basser Departament of Computer Science, University of Science, Australia. Quinlan, J.R.1996. Learning First-Order Definitions of Functions. Basser Departament of Computer Science, University of Science, Australia Riddle, P.J. 1997. ID3 Algorithm. www.cs.auckland.ac.nz/~pat/706_99/ln/node75.html, Nueva Zelanda Rissanen, J. 1983. A universal prior for integers and estimation by minimum description length. En Annals of Statistics 11, Vol 2, p. 416431 S/A. 1995. Building Classification Models: ID3 and C4.5, yoda.cis.temple.edu:8080/UGAIWWW/lectures/C45, Pensilvania, EE.UU. S/A 1998.Confidence intervals for small sample sizes. En Engineering Statistics Handbook, Information Technology Laboratory, NIST, http://www.itl.nist.gov/div898/handbook/prc/section2/prc242.htm, EE.UU. S/A. 1999. What is Data Mining?, www.citeseer.nj.nec.com/69212.html. Thakore, M., St Clair, D. 1993. Effect of the X2 test on the Construction of ID3 decision trees, Sun Microsystems, University of MO-Rolla, Engineering Education Center, St. Louis, EE.UU. Thrun, S., Bala, J., Bratko, I., Cestnik, B., Cheng, J., De Jong, K., Dzeroski, S., Fahlman, S.E., Fisher, D., Hamann, R., Kaufman, K., Keller, S., Kononenko, I., Michalski, R.S., Mitchell, T., Pachowicz, P., Reich, Y., Vafaie, H., Van de Welde, W., Wenzel, W., Wnek, J, Zhang, J. 1991 The MONKs Problems. A Performance Comparison of Different Learning Algorithms, Carnegie Mellon University, Pittisburgh, EE.UU. Thrun, S., Faloustos, C., Mitchell, T., Wasserman, L. 1998 Automated Learning and Discovery: State-Of-The-Art and Research Topics in a Rapidly Growing Field. CMU-CALD-98-100, Center for Automated Learning and Discovery, Carnegie Mellon University, Pittisburgh, EE.UU. Witten, I.H., Frank, E. 2000. Data Mining: Practical Machine Learning Tools and Techniques with Java Implementations. Morgan Kaufmann, San Diego, EE.UU.

344

Magdalena Servente

Referencias

También podría gustarte