12.07.2015 Views

Algoritmos TDIDT aplicados a la Mineria de Datos ... - Laboratorios

Algoritmos TDIDT aplicados a la Mineria de Datos ... - Laboratorios

Algoritmos TDIDT aplicados a la Mineria de Datos ... - Laboratorios

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

ALGORITMOS <strong>TDIDT</strong> APLICADOS A LAMINERIA DE DATOS INTELIGENTETESIS DE GRADO EN INGENIERIA INFORMATICAFACULTAD DE INGENIERIAUNIVERSIDAD DE BUENOS AIRESLABORATORIO DE SISTEMAS INTELIGENTESTESISTA:DIRECTOR:Srta. Magdalena SERVENTEProf. Dr. Ramón GARCIA MARTINEZFEBRERO 2002


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteRESUMENLa Minería <strong>de</strong> <strong>Datos</strong> (Data Mining) es <strong>la</strong> búsqueda <strong>de</strong> patrones interesantes y <strong>de</strong> regu<strong>la</strong>rida<strong>de</strong>simportantes en gran<strong>de</strong>s bases <strong>de</strong> datos. El Aprendizaje Automático es el campo <strong>de</strong> <strong>la</strong> IngenieríaInformática en el que se estudian y <strong>de</strong>sarrol<strong>la</strong>n algoritmos que implementan los distintos mo<strong>de</strong>los <strong>de</strong>aprendizaje y su aplicación a <strong>la</strong> resolución <strong>de</strong> problemas prácticos. La minería <strong>de</strong> datos inteligente utilizamétodos <strong>de</strong> aprendizaje automático para <strong>de</strong>scubrir y enumerar patrones presentes en los datos.Uno <strong>de</strong> los métodos más conocidos para <strong>de</strong>scribir los atributos <strong>de</strong> una entidad <strong>de</strong> una base <strong>de</strong> datos esutilizar un árbol <strong>de</strong> <strong>de</strong>cisión o <strong>de</strong> c<strong>la</strong>sificación, que pue<strong>de</strong> transformarse sin inconveniente a un conjunto<strong>de</strong> reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión.En este contexto, el propósito <strong>de</strong> este proyecto es estudiar <strong>de</strong> que manera <strong>la</strong> familia <strong>TDIDT</strong>, que aborda elproblema <strong>de</strong> inducir árboles <strong>de</strong> <strong>de</strong>cisión, pue<strong>de</strong> utilizarse para <strong>de</strong>scubrir automáticamente reg<strong>la</strong>s <strong>de</strong>negocio a partir <strong>de</strong> <strong>la</strong> información disponible en una base <strong>de</strong> datos. Se trabajó en particu<strong>la</strong>r con losmétodos ID3 y C4.5, miembros <strong>de</strong> dicha familia. El trabajo contemp<strong>la</strong> el diseño, especificación eimplementación <strong>de</strong> un ambiente <strong>de</strong> minería <strong>de</strong> datos que integra ambos algoritmos. A<strong>de</strong>más, se <strong>de</strong>sarrollóun método <strong>de</strong> evaluación <strong>de</strong> los resultados para <strong>de</strong>terminar <strong>la</strong> calidad <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s obtenidas.Pa<strong>la</strong>bras c<strong>la</strong>ve: minería <strong>de</strong> datos, aprendizaje automático, árboles <strong>de</strong> <strong>de</strong>cisión, reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión,<strong>TDIDT</strong>, ID3, C4.5ABSTRACTData mining is the search of interesting patterns and relevant regu<strong>la</strong>rities in <strong>la</strong>rge data bases. MachineLearning is the Informatic Engineering’s field <strong>de</strong>voted to the analysis and <strong>de</strong>velopment of algorithmsimplementing the different learning mo<strong>de</strong>ls 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 <strong>de</strong>scribe the attributes of an entity of a data base is the use of a<strong>de</strong>cision or c<strong>la</strong>ssification tree, which can easily be turned into a set of <strong>de</strong>cision rules.Within this context, the purpose of the present project is to analyze the way in which the <strong>TDIDT</strong> family,which studies the problem of inducing <strong>de</strong>cision trees, can be used to discover automatically business rulesfrom the information avai<strong>la</strong>ble in a data base.ResumenMagdalena Servente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteThe work was focused in the ID3 and C4.5 methods, which belong to the family above mentioned. Thework inclu<strong>de</strong>s the <strong>de</strong>sign, specification and implementation of a data mining system that combines bothalgorithms. Furthermore, to <strong>de</strong>termine the quality of the rules obtained, an evaluation method of thecorresponding results was <strong>de</strong>veloped.Keywords: data mining, machine learning, <strong>de</strong>cision trees, <strong>de</strong>cision rules, <strong>TDIDT</strong>, ID3, C4.5ResumenMagdalena Servente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteIndice Magdalena Servente i


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente4.3.1.5. Resolución <strong>de</strong> un ejemplo utilizando el ID3 584.3.2. Limitaciones al ID3 624.3.2.1. Valores continuos 624.3.2.3. Ventanas 634.4. C4.5 644.4.1. Algoritmo C4.5 644.4.2. Características particu<strong>la</strong>res <strong>de</strong>l C4.5 654.4.2.1. Pruebas utilizadas 654.4.2.2. Pruebas sobre atributos continuos 654.4.2.2. Atributos <strong>de</strong>sconocidos 664.4.3. Poda <strong>de</strong> los Árboles <strong>de</strong> Decisión 684.4.3.1. ¿Cuándo <strong>de</strong>bemos simplificar? 694.4.3.2. Poda en Base a Errores 704.4.4. Estimación <strong>de</strong> <strong>la</strong> Proporción <strong>de</strong> Errores para los Árboles <strong>de</strong> Decisión 724.4.5. Construcción <strong>de</strong> un árbol <strong>de</strong> <strong>de</strong>cisión utilizando el C4.5 724.4.6. Generalización <strong>de</strong> reg<strong>la</strong>s 764.4.6.1. Conjuntos <strong>de</strong> Reg<strong>la</strong>s 774.4.6.2. Or<strong>de</strong>n <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses y elección <strong>de</strong> <strong>la</strong> c<strong>la</strong>se por <strong>de</strong>fecto 804.4.6.3. Generalización <strong>de</strong> un árbol <strong>de</strong> <strong>de</strong>cisión a reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión utilizando el C4.5 804.5. Sistema integrador 834.5.1. Descripción general 834.5.2. Diseño <strong>de</strong>l sistema integrador 854.5.2.1. Diseño para el ID3 854.5.2.2. Diseño para el C4.5 90CAPÍTULO 5: RESULTADOS OBTENIDOS 975.1. Interpretación <strong>de</strong> los resultados 975.1.1. Interpretación <strong>de</strong> resultados en el ID3 975.1.1.1. Árboles <strong>de</strong> <strong>de</strong>cisión 975.1.1.2. Reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión 985.1.2. Interpretación <strong>de</strong> resultados en el C4.5 985.1.2.1. Árboles <strong>de</strong> <strong>de</strong>cisión 985.1.2.2. Reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión 1005.2. Descripción <strong>de</strong> los dominios 1005.2.1. Créditos 1015.2.2. Cardiología 1025.2.3. Votaciones 102iv Magdalena Servente Indice


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente5.2.4. Estudio sobre hongos 1035.2.5. Elita: Base <strong>de</strong> Asteroi<strong>de</strong>s 1045.2.6. Hipotiroidismo 1055.2.7. I<strong>de</strong>ntificación <strong>de</strong> vidrios 1065.3. Resultados Obtenidos con el ID3 1075.3.1. Créditos 1085.3.1.1. ID3 utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1085.3.1.2. ID3 utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1105.3.1.3. Conclusiones 1125.3.2. Cardiología 1135.3.2.1. ID3 utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1135.3.2.2. ID3 utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1155.3.2.3. Conclusiones 1175.3.3. Votaciones 1185.3.4.1. ID3 utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1185.3.4.2. ID3 utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1235.3.4.3. Conclusiones 1285.3.4. Estudio sobre hongos 1295.3.4.1. ID3 utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1295.3.4.2 ID3. utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1325.3.4.3. Conclusiones 1345.4. Resultados Obtenidos con el C4.5 1355.4.1. Créditos 1355.4.1.1. Utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1355.4.1.2. Utilizando <strong>la</strong> proporción <strong>de</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1375.4.1.3. Conclusiones 1395.4.2. Cardiología 1405.4.2.1. Utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1405.4.2.2. Utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1425.4.2.3. Conclusiones 1445.4.3. Votaciones 1455.4.3.1. Utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1455.4.3.2. Utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1475.4.3.3. Conclusiones 1495.4.4. Estudio sobre hongos 1505.4.4.1. Utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1505.4.4.2. Utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1535.4.4.3. Conclusiones 1575.4.5. Elita 158Indice Magdalena Servente v


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente5.4.5.1. Utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1585.4.3.2. Utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1605.4.5.3. Conclusiones 1625.4.6. Hipotiroidismo 1635.4.6.1. Utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1635.4.6.2. Utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1665.4.6.3. Conclusiones 1695.4.7. I<strong>de</strong>ntificación <strong>de</strong> vidrios 1695.4.7.1. Utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1695.4.7.2. Utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisión 1735.4.7.3. Conclusiones 1775.5. Comparación <strong>de</strong> los resultados obtenidos con el ID3 y con el C4.5 1775.5.1. Créditos 1775.5.2. Cardiología 1805.5.3. Votaciones 1815.5.4. Estudio sobre hongos 1855.6. Análisis general <strong>de</strong> los resultados obtenidos 1875.6.1. Porcentaje <strong>de</strong> error 1875.6.2. Cantidad <strong>de</strong> datos <strong>de</strong> entrenamiento 188CAPÍTULO 6: CONCLUSIONES 1916.1. Conclusiones Generales 1916.1.1. Conceptos <strong>de</strong>stacables 1916.1.2. Espacio <strong>de</strong> hipótesis 1926.2. Análisis <strong>de</strong> los Resultados Obtenidos 1936.3. Análisis <strong>de</strong> <strong>la</strong> solución propuesta 1936.4. Una mirada al futuro 1956.4.1. Atributos multivaluados en el ID3 y el C4.5 1956.4.2. El futuro <strong>de</strong> <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente 196ANEXO A: MANUAL DEL USUARIO 197A.1. Características Generales 197A.2. Funcionalidad 198A.2.1. Pantal<strong>la</strong> principal 198vi Magdalena Servente Indice


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteA.2.2. Descripción <strong>de</strong>l menú 198A.2.2.1. Menú Resolución 199A.2.2.2. Menú Evaluación 199A.2.2.3. Menú Opciones 200A.2.2.4. Menú Ayuda 201ANEXO B: CONJUNTOS DE DATOS 203ANEXO C: DOCUMENTACIÓN DEL SISTEMA 205C.1. Interacción <strong>de</strong> los Módulos 205C.2. Descripción <strong>de</strong> los archivos fuente 206C.2.1. <strong>TDIDT</strong>.cpp 206C.2.2. Módulos <strong>de</strong> pantal<strong>la</strong>s principales 207C.2.2.1. UPrincipal 207C.2.2.2. UInfoGral 207C.2.3. Módulos <strong>de</strong> opciones generales 207C.2.3.1. UBD 207C.2.3.2. UCambioTab<strong>la</strong> 207C.2.3.3. frmOpcionesSist 207C.2.3.4. UElegirRendimiento 208C.2.3.5. URendimiento 208C.2.3.6. UArbol 208C.2.4. Módulos <strong>de</strong> minería <strong>de</strong> datos 208C.2.4.1. UDMID3 208C.2.4.2. UDMC45 209C.2.5. Módulos <strong>de</strong> c<strong>la</strong>ses <strong>de</strong> datos 209C.2.5.1. UTipos 209C.2.5.2. Types.h 209C.2.5.3. Defns.h 209C.2.5.4. Rulex.h 209C.3. Estructuras <strong>de</strong> datos 209C.3.1. Estructuras <strong>de</strong> datos generales 209C.3.2. Estructuras <strong>de</strong> datos <strong>de</strong>l ID3 210C.3.4. Estructuras <strong>de</strong> datos <strong>de</strong>l C4.5 211ANEXO D: CÓDIGO FUENTE 213D.1. <strong>TDIDT</strong>.cpp 213Indice Magdalena Servente vii


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteD.2. Módulos <strong>de</strong> Pantal<strong>la</strong>s Principales 214D.2.1. UPrincipal 214D.2.1.1. UPrincipal.h 214D.2.1.1. UPrincipal.cpp 215D.2.2. UInfoGral 217D.2.2.1. UInfoGral.h 217D.2.2.2. UInfoGral.cpp 218D.3. Módulos <strong>de</strong> opciones generales 219D.3.1. UBD 219D.3.1.1. UBD.h 219D.3.1.2. UBD.cpp 219D.3.2. UCambioTab<strong>la</strong> 220D.3.2.1. UCambioTab<strong>la</strong>.h 220D.3.2.2. UCambioTab<strong>la</strong>.cpp 220D.3.3. frmOpcionesSist 223D.3.3.1. frmOpcionesSist.h 223D.3.3.2. frmOpcionesSist.cpp 224D.3.4. UElegirRendimiento 225D.3.4.1. UElegirRendimiento.h 225D.3.4.2. UElegirRendmiento.cpp 226D.3.5. URendimiento 228D.3.5.1. URendimiento.h 228D.3.5.2. URendmiento.cpp 228D.3.6. Uarbol 229D.3.6.1. UArbol.h 229D.3.6.2. UArbol.cpp 229D.4. Módulos <strong>de</strong> minería <strong>de</strong> datos 231D.4.1. UDMID3 231D.4.1.1. UDMID3.h 231D.4.1.2. UDMID3.cpp 233D.4.2. UDMC45 251D.4.2.1. UDMC45.h 251D.4.2.2. UDMC45.cpp 256D.5. Módulos <strong>de</strong> c<strong>la</strong>ses <strong>de</strong> datos 332D.5.1. UTipos 332D.5.1.1. UTipos.h 332D.5.1.2. UTipos.cpp 333D.5.2. Types.h 337viii Magdalena Servente Indice


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteD.5.3. Defns.h 339D.5.4. Rulex.h 339REFERENCIAS 341Indice Magdalena Servente ix


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteCAPÍTULO 1INTRODUCCIÓNLa Minería <strong>de</strong> <strong>Datos</strong> (Data Mining) es <strong>la</strong> búsqueda <strong>de</strong> patrones interesantes y <strong>de</strong> regu<strong>la</strong>rida<strong>de</strong>simportantes en gran<strong>de</strong>s bases <strong>de</strong> datos [Fayad et al., 1996- Grossman et al., 1999]. Al hab<strong>la</strong>r <strong>de</strong> minería<strong>de</strong> datos inteligente [Evangelos, 1996, Michalski et al., 1998] nos referimos específicamente a <strong>la</strong>aplicación <strong>de</strong> métodos <strong>de</strong> aprendizaje automático u otros métodos simi<strong>la</strong>res, para <strong>de</strong>scubrir y enumerarpatrones presentes en los datos.El Aprendizaje Automático es el campo <strong>de</strong> <strong>la</strong> Ingeniería Informática en el que se estudian y <strong>de</strong>sarrol<strong>la</strong>nalgoritmos que implementan los distintos mo<strong>de</strong>los <strong>de</strong> aprendizaje y su aplicación a <strong>la</strong> resolución <strong>de</strong>problemas prácticos [Michalski, 1983- Dejong & Money 1986; Bergadano et al., 1992]. Entre losproblemas abordados en este campo, está el <strong>de</strong> inducir conocimientos a partir <strong>de</strong> datos o ejemplos[Michalski, 1983,1991; Michie, 1988; García Martínez, 1994]. Esto resulta una alternativa <strong>de</strong> solución aproblemas que no pue<strong>de</strong>n ser resueltos mediante algoritmos tradicionales, entre los cuales po<strong>de</strong>mosmencionar especificación <strong>de</strong> condiciones asociadas a diagnósticos técnicos o clínicos, i<strong>de</strong>ntificación <strong>de</strong>características que permitan reconocimiento visual <strong>de</strong> objetos, <strong>de</strong>scubrimiento <strong>de</strong> patrones o regu<strong>la</strong>rida<strong>de</strong>sen estructuras <strong>de</strong> información (en particu<strong>la</strong>r en bases <strong>de</strong> datos <strong>de</strong> gran tamaño), entre otros.Los métodos tradicionales <strong>de</strong> Análisis <strong>de</strong> <strong>Datos</strong> incluyen el trabajo con variables estadísticas, varianza,<strong>de</strong>sviación estándar, covarianza y corre<strong>la</strong>ción entre los atributos; análisis <strong>de</strong> componentes (<strong>de</strong>terminación<strong>de</strong> combinaciones lineales ortogonales que maximizan una varianza <strong>de</strong>terminada), análisis <strong>de</strong> factores(<strong>de</strong>terminación <strong>de</strong> grupos corre<strong>la</strong>cionados <strong>de</strong> atributos), análisis <strong>de</strong> clusters (<strong>de</strong>terminación <strong>de</strong> grupos <strong>de</strong>conceptos que están cercanos según una función <strong>de</strong> distancia dada), análisis <strong>de</strong> regresión (búsqueda <strong>de</strong> loscoeficientes <strong>de</strong> una ecuación <strong>de</strong> los puntos dados como datos), análisis multivariable <strong>de</strong> <strong>la</strong> varianza, yanálisis <strong>de</strong> los discriminantes [Michalski et al., 1982]. Todos estos métodos están orientadosnuméricamente. Son esencialmente cuantitativos.En contraposición, los métodos basados en Aprendizaje Automático, están orientados principalmentehacia el <strong>de</strong>sarrollo <strong>de</strong> <strong>de</strong>scripciones simbólicas <strong>de</strong> los datos, que puedan caracterizar uno o más grupos <strong>de</strong>conceptos [García Martínez et al., 1987, Mitchel, 1996], diferenciar entre distintas c<strong>la</strong>ses, crear nuevasc<strong>la</strong>ses, crear una nueva c<strong>la</strong>sificación conceptual, seleccionar los atributos más representativos, y sercapaces <strong>de</strong> pre<strong>de</strong>cir secuencias lógicas [Michalski et al., 1983; 1986; Michalski, Tecuci, 1994]. Sonesencialmente cualitativos.Introducción Magdalena Servente 1


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEn <strong>la</strong>s bases <strong>de</strong> datos <strong>la</strong>s entida<strong>de</strong>s se caracterizan generalmente por el valor <strong>de</strong> los atributos y no por <strong>la</strong>sre<strong>la</strong>ciones entre el<strong>la</strong>s, con lo cual se utilizan métodos atribucionales. Uno <strong>de</strong> los métodos más conocidospara <strong>de</strong>scribir los atributos <strong>de</strong> una entidad es utilizar un árbol <strong>de</strong> <strong>de</strong>cisión o <strong>de</strong> c<strong>la</strong>sificación [Michalski etal., 1998Grossman et al., 1999], cuyos nodos correspon<strong>de</strong>n a los atributos, <strong>la</strong>s ramas que salen <strong>de</strong> ellosson los valores <strong>de</strong> los atributos, y <strong>la</strong>s hojas son correspon<strong>de</strong>n a c<strong>la</strong>ses individuales. La gran ventaja <strong>de</strong> losárboles <strong>de</strong> c<strong>la</strong>sificación es que se pue<strong>de</strong>n transformar sin inconveniente a un conjunto <strong>de</strong> reg<strong>la</strong>s <strong>de</strong><strong>de</strong>cisión.En este contexto, el propósito <strong>de</strong> este proyecto es estudiar <strong>de</strong> que manera <strong>la</strong> familia <strong>TDIDT</strong> [Quin<strong>la</strong>n,1986; 1990], que aborda el problema <strong>de</strong> inducir árboles <strong>de</strong> <strong>de</strong>cisión, pue<strong>de</strong> utilizarse para <strong>de</strong>scubrirautomáticamente reg<strong>la</strong>s <strong>de</strong> negocio a partir <strong>de</strong> <strong>la</strong> información disponible en una base <strong>de</strong> datos.En el capítulo 2 se presenta el estado actual <strong>de</strong>l Aprendizaje Automático (Sección 2.1), en múltiplesaspectos, que incluyen <strong>la</strong> c<strong>la</strong>sificación general <strong>de</strong> este tipo <strong>de</strong> sistemas (Sección 2.1.1) el esquema general<strong>de</strong> un sistema <strong>de</strong> Aprendizaje Automático (Sección 2.1.2) y los distintos tipos <strong>de</strong> aprendizaje en general(Sección 2.1.3). Luego, se presenta el estado actual <strong>de</strong> <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> (Sección 2.2), incluyendo<strong>de</strong>scripciones <strong>de</strong>: el <strong>de</strong>scubrimiento <strong>de</strong> conocimientos (Sección 2.2.1), los problemas inherentes a<strong>la</strong>prendizaje <strong>de</strong> conceptos (Sección 2.2.2), <strong>la</strong>s tareas realizadas por un sistema <strong>de</strong> Minería <strong>de</strong> <strong>Datos</strong>(Sección 2.2.3), los principales métodos <strong>de</strong> <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> (Sección 2.2.4) y sus componentes(Sección 2.2.5). A partir <strong>de</strong> <strong>la</strong> presentación <strong>de</strong> estos dos gran<strong>de</strong>s temas, se presentan varias aplicacionesen <strong>la</strong>s que se realiza Minería <strong>de</strong> <strong>Datos</strong> con sistemas <strong>de</strong> Aprendizaje Automático (Sección 2.3.1), entre loscuales se encuentra <strong>la</strong> familia <strong>TDIDT</strong> (Top-Down-Induction-Trees) (Sección 2.4) en <strong>la</strong> cual centraremosnuestra atención. Se explica <strong>la</strong> construcción <strong>de</strong> los árboles <strong>TDIDT</strong> (Sección 2.4.1), el tratamiento <strong>de</strong> losatributos <strong>de</strong>sconocidos (Sección 2.4.2), y <strong>la</strong> transformación <strong>de</strong> los árboles a reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión (Sección2.4.3). Finalmente, se presentan varios métodos utilizados actualmente para evaluar los distintos métodos<strong>de</strong> Aprendizaje Automático (Sección 2.5)En el capítulo 3 se presenta el contexto <strong>de</strong> nuestro problema <strong>de</strong> interés (Sección 3.1) y <strong>la</strong>s cuestiones quelos algoritmos ID3 y C4.5 pertenecientes a <strong>la</strong> familia <strong>TDIDT</strong> <strong>de</strong>ben resolver (Sección 3.2).En el capítulo 4 se presentan todos los aspectos <strong>de</strong> <strong>la</strong> solución propuesta. Para ello se <strong>de</strong>scriben <strong>la</strong>scaracterísticas generales <strong>de</strong> <strong>la</strong> misma (Sección 4.1): el marco teórico (Sección 4.1.1), <strong>la</strong>s condiciones que<strong>de</strong>ben cumplir los datos sobre los que se realiza <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> (Sección 4.1.2) y los tipos <strong>de</strong>resultados obtenidos (Sección 4.1.3). En <strong>la</strong> Sección 4.2 se presenta una <strong>de</strong>scripción general <strong>de</strong> losalgoritmos ID3 y C4.5 que se utilizan para estudiar el problema. Se explica cómo realizar <strong>la</strong> división <strong>de</strong>los datos <strong>de</strong> entrada (Sección 4.2.1) y <strong>la</strong> elección <strong>de</strong>l criterio <strong>de</strong> división (Sección 4.2.1.1). Luego, sepresenta una <strong>de</strong>scripción <strong>de</strong>tal<strong>la</strong>da <strong>de</strong>l algoritmo ID3 (Sección 4.3.1) y <strong>de</strong> sus limitaciones (Sección4.3.2). A modo <strong>de</strong> ejemplo, se muestra <strong>la</strong> utilización <strong>de</strong>l ID3 para generar un árbol y reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión(Sección 4.3.1.5). También se <strong>de</strong>tal<strong>la</strong> el algoritmo C4.5 (Sección 4.4) y sus características particu<strong>la</strong>res(Sección 4.4.2), <strong>la</strong>s cuales lo diferencian <strong>de</strong>l ID3, resaltando <strong>la</strong> poda <strong>de</strong> los árboles <strong>de</strong> <strong>de</strong>cisión (Sección2 Magdalena Servente Introducción


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente4.4.3) y <strong>la</strong> estimación <strong>de</strong> errores en dichos árboles (Sección 4.4.4). En <strong>la</strong> sección 4.4.5 se ejemplifican losmétodos anteriores. La generalización <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión realizada por el C4.5 se explica en <strong>la</strong>sección 4.4.6. A continuación, se <strong>de</strong>tal<strong>la</strong> el diseño <strong>de</strong>l sistema integrador utilizado para estudiar el éxito<strong>de</strong> <strong>la</strong> solución propuesta (Sección 4.5). Para este sistema se presenta una <strong>de</strong>scripción general (Sección4.5.1) y el diseño <strong>de</strong> <strong>la</strong>s secciones <strong>de</strong>l sistema para el ID3 (Sección 4.5.2.1) y para el C4.5 (Sección4.5.2.2)En el capítulo 5 se presentan los resultados obtenidos. Primero, se explica <strong>la</strong> manera en que <strong>de</strong>berealizarse <strong>la</strong> interpretación <strong>de</strong> los mismos (Sección 5.1), se presentan los formatos <strong>de</strong> los árboles y <strong>la</strong>sreg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión tanto para el ID3 (Sección 5.1.1) como para el C4.5 (Sección 5.1.2). Luego, se<strong>de</strong>scriben los dominios <strong>de</strong> datos sobre los que se trabajó (Sección 5.2), y se analizan los resultadosobtenidos con el ID3 (Sección 5.3) y con el C4.5 (Sección 5.4). En cada caso se presenta, el árbol y <strong>la</strong>sreg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión obtenidos, y <strong>la</strong> evaluación <strong>de</strong> resultados sobre el conjunto <strong>de</strong> datos <strong>de</strong> prueba. En <strong>la</strong>sección 5.5 se comparan los resultados obtenidos con el ID3 y con el C4.5 en los distintos dominios. Y en<strong>la</strong> sección 5.6 se realiza un análisis general <strong>de</strong> los resultados.En el capítulo 6 se presentan <strong>la</strong>s conclusiones <strong>de</strong>l trabajo realizado. Primero se <strong>de</strong>stacan los conceptosmás importantes a tener en cuenta a <strong>la</strong> hora <strong>de</strong> aplicar algún método como el ID3 y el C4.5 (Sección6.1.1). Luego, se analiza <strong>la</strong> búsqueda que realizan estos dos métodos en el espacio <strong>de</strong> hipótesis (Sección6.1.2). Se extraen conclusiones a partir <strong>de</strong> los resultados obtenidos (Sección 6.2) y se analiza <strong>la</strong> soluciónpropuesta (Sección 6.3). Finalmente, se p<strong>la</strong>ntean mejoras y temas a tener en cuenta para continuar con el<strong>de</strong>sarrollo <strong>de</strong> este tipo <strong>de</strong> algoritmos <strong>de</strong> aprendizaje <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> (Sección 6.4).El Anexo A <strong>de</strong>scribe el sistema en forma <strong>de</strong> un resumido manual <strong>de</strong>l usuario. Se <strong>de</strong>scriben <strong>la</strong>scaracterísticas generales <strong>de</strong>l sistema (Sección A.1) y <strong>la</strong>s funciones <strong>de</strong> cada uno <strong>de</strong> los menúes (SecciónA.2), <strong>de</strong>tal<strong>la</strong>ndo <strong>la</strong>s acciones que pue<strong>de</strong>n realizarse con cada una <strong>de</strong> <strong>la</strong>s opciones disponibles.En el Anexo B se <strong>de</strong>tal<strong>la</strong>n los conjuntos <strong>de</strong> datos utilizados para realizar <strong>la</strong>s pruebas <strong>de</strong>scriptas en elCapítulo 5. Para cada uno <strong>de</strong> los dominios, se muestran los conjuntos <strong>de</strong> datos <strong>de</strong> entrenamiento y prueba.Los datos presentados correspon<strong>de</strong>n a los siguientes dominios: Créditos (Sección B.1), Cardiología(Sección B.2), Votaciones (Sección B.3), Estudio sobre hongos (Sección B.4), Elita: Base <strong>de</strong> Asteroi<strong>de</strong>s(Sección B.5), Hipotiroidismo (Sección B.6), I<strong>de</strong>ntificación <strong>de</strong> vidrios (Sección B.7).El Anexo C es un complemento a <strong>la</strong> explicación <strong>de</strong> <strong>la</strong> funcionalidad <strong>de</strong>l sistema <strong>de</strong> <strong>la</strong> Sección 4.5. En <strong>la</strong>sección C.1 se <strong>de</strong>tal<strong>la</strong> <strong>la</strong> interacción entre los módulos <strong>de</strong>l sistema. Las principales funciones <strong>de</strong> cada uno<strong>de</strong> estos módulos se presentan en <strong>la</strong> sección C.2. En <strong>la</strong> sección C.3 se <strong>de</strong>tal<strong>la</strong>n <strong>la</strong>s principales estructuras<strong>de</strong> datos utilizadas por el sistemaIntroducción Magdalena Servente 3


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteFinalmente, en el anexo D se presenta el código fuente <strong>de</strong>l sistema <strong>de</strong>sarrol<strong>la</strong>do. En <strong>la</strong> sección D.1 sepresenta el código fuente <strong>de</strong>l archivo <strong>TDIDT</strong>.cpp que es el archivo inicial <strong>de</strong>l proyecto y es quieninicializa al resto <strong>de</strong> los formu<strong>la</strong>rios requeridos. En <strong>la</strong> sección D.2 se presenta el código fuente <strong>de</strong> <strong>la</strong>spantal<strong>la</strong>s principales. A continuación, se <strong>de</strong>tal<strong>la</strong>n los códigos fuentes <strong>de</strong> los módulos <strong>de</strong> opcionesgenerales (Sección D:3), <strong>de</strong> los módulos <strong>de</strong> minería <strong>de</strong> datos (Sección D.4) y <strong>de</strong> los módulos <strong>de</strong> c<strong>la</strong>ses oestructuras <strong>de</strong> datos (Sección D.5)En <strong>la</strong>s Referencias se <strong>de</strong>tal<strong>la</strong>n <strong>la</strong> bibliografía y <strong>la</strong>s referencias utilizadas para realizar el trabajo.4 Magdalena Servente Introducción


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteCAPÍTULO 2:ESTADO DEL ARTEEste capítulo presenta el estado actual <strong>de</strong>l Aprendizaje Automático (Sección 2.1), en múltiplesaspectos, que incluyen <strong>la</strong> c<strong>la</strong>sificación general <strong>de</strong> este tipo <strong>de</strong> sistemas (Sección 2.1.1) elesquema general <strong>de</strong> un sistema <strong>de</strong> Aprendizaje Automático (Sección 2.1.2) y los distintos tipos<strong>de</strong> aprendizaje en general (Sección 2.1.3). Luego, se presenta el estado actual <strong>de</strong> <strong>la</strong> Minería <strong>de</strong><strong>Datos</strong> (Sección 2.2), incluyendo <strong>de</strong>scripciones <strong>de</strong>: el <strong>de</strong>scubrimiento <strong>de</strong> conocimientos (Sección2.2.1), los problemas inherentes al aprendizaje <strong>de</strong> conceptos (Sección 2.2.2), <strong>la</strong>s tareas realizadaspor un sistema <strong>de</strong> Minería <strong>de</strong> <strong>Datos</strong> (Sección 2.2.3), los principales métodos <strong>de</strong> <strong>la</strong> Minería <strong>de</strong><strong>Datos</strong> (Sección 2.2.4) y sus componentes (Sección 2.2.5). A partir <strong>de</strong> <strong>la</strong> presentación <strong>de</strong> estosdos gran<strong>de</strong>s temas, se presentan varias aplicaciones en <strong>la</strong>s que se realiza Minería <strong>de</strong> <strong>Datos</strong> consistemas <strong>de</strong> Aprendizaje Automático (Sección 2.3.1), entre los cuales se encuentra <strong>la</strong> familia<strong>TDIDT</strong> (Top-Down-Induction-Trees) (Sección 2.4) en <strong>la</strong> cual centraremos nuestra atención. Seexplica <strong>la</strong> construcción <strong>de</strong> los árboles <strong>TDIDT</strong> (Sección 2.4.1), el tratamiento <strong>de</strong> los atributos<strong>de</strong>sconocidos (Sección 2.4.2), y <strong>la</strong> transformación <strong>de</strong> los árboles a reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión (Sección2.4.3). Finalmente, se presentan varios métodos utilizados actualmente para evaluar los distintosmétodos <strong>de</strong> Aprendizaje Automático (Sección 2.5)El Aprendizaje Automático (Machine Learning) es el campo <strong>de</strong>dicado al <strong>de</strong>sarrollo <strong>de</strong> métodoscomputacionales para los procesos <strong>de</strong> aprendizaje, y a <strong>la</strong> aplicación <strong>de</strong> los sistemas informáticos <strong>de</strong>aprendizaje a problemas prácticos [Michalski et al, 1998]. La Minería <strong>de</strong> <strong>Datos</strong> (Data Mining) es <strong>la</strong>búsqueda <strong>de</strong> patrones e importantes regu<strong>la</strong>rida<strong>de</strong>s en bases <strong>de</strong> datos <strong>de</strong> gran volumen [Michalski et al,1998].Estos dos campos han ido creciendo a lo <strong>la</strong>rgo <strong>de</strong> los años, y han cobrado una importancia consi<strong>de</strong>rable.Hoy en día, como se almacenan gran<strong>de</strong>s volúmenes <strong>de</strong> información en todas <strong>la</strong>s activida<strong>de</strong>s humanas, <strong>la</strong>Minería <strong>de</strong> <strong>Datos</strong> está cobrando gran importancia, se busca obtener información valiosa a partir <strong>de</strong> losdatos guardados. La Minería <strong>de</strong> <strong>Datos</strong> utiliza métodos y estrategias <strong>de</strong> otras áreas o ciencias, entre <strong>la</strong>scuales po<strong>de</strong>mos nombrar al Aprendizaje Automático. Cuando este tipo <strong>de</strong> técnicas se utilizan para realizar<strong>la</strong> minería, <strong>de</strong>cimos que estamos ante una Minería <strong>de</strong> <strong>Datos</strong> Inteligente.El campo <strong>de</strong> aplicación <strong>de</strong>l Aprendizaje Automático, no obstante, no se limita únicamente a <strong>la</strong> Minería <strong>de</strong><strong>Datos</strong>, existen múltiples aplicaciones <strong>de</strong> Aprendizaje Automático en funcionamiento. Si analizamos suaplicación a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> en particu<strong>la</strong>r, encontramos que hay varios métodos que se utilizan conéxito hoy en día, entre los cuales se encuentran los métodos <strong>de</strong> inducción. Nuestro análisis se centrará enEstado <strong>de</strong>l Arte Magdalena Servente 5


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteuna familia <strong>de</strong> métodos <strong>de</strong> inducción conocida como <strong>la</strong> familia <strong>TDIDT</strong> (Top Down Induction Trees), y enparticu<strong>la</strong>r en los algoritmos ID3 y C4.5 <strong>de</strong>sarrol<strong>la</strong>dos por Quin<strong>la</strong>n, pertenecientes a <strong>la</strong> misma.2.1. APRENDIZAJE AUTOMÁTICOEl Aprendizaje Automático se enfrenta con el <strong>de</strong>safío <strong>de</strong> <strong>la</strong> construcción <strong>de</strong> programas computacionalesque automáticamente mejoren con <strong>la</strong> experiencia [Mitchell, 1997]. Estos programas computacionales sonsistemas <strong>de</strong> aprendizaje capaces <strong>de</strong> adquirir conocimientos <strong>de</strong> alto nivel y/o estrategias para <strong>la</strong> resolución<strong>de</strong> problemas mediante ejemplos, en forma análoga a <strong>la</strong> mente humana [Michalski et al, 1998]. A partir<strong>de</strong> los ejemplos provistos por un tutor o instructor y <strong>de</strong> los conocimientos <strong>de</strong> base o conocimientosprevios, el sistema <strong>de</strong> aprendizaje crea <strong>de</strong>scripciones generales <strong>de</strong> conceptos.¿Cómo sabemos si un sistema ha adquirido algún conocimiento? Siguiendo el análisis <strong>de</strong> Witten [Witteny Frank, 2000], po<strong>de</strong>mos p<strong>la</strong>ntearnos <strong>la</strong>s siguientes preguntas: ¿qué es el aprendizaje?, y ¿qué es elAprendizaje Automático? Si buscamos <strong>la</strong> <strong>de</strong>finición <strong>de</strong> Aprendizaje en <strong>la</strong> Enciclopedia, encontraremos<strong>la</strong>s siguientes <strong>de</strong>finiciones o alguna simi<strong>la</strong>r: “Adquirir el conocimiento <strong>de</strong> alguna cosa por medio <strong>de</strong>lestudio, <strong>de</strong> <strong>la</strong> experiencia o al ser instruido; Concebir alguna cosa por meras apariencias o con pocofundamento; Tomar algo en <strong>la</strong> memoria; Ser informado <strong>de</strong>; recibir instrucción” [Espasa-Calpe, 1974].Todas estas <strong>de</strong>finiciones se aplican con facilidad a los seres humanos, veamos si pue<strong>de</strong>n aplicarsetambién a los sistemas informáticos. En términos <strong>de</strong> Aprendizaje Automático lo primero que <strong>de</strong>bemos sercapaces <strong>de</strong> hacer es <strong>de</strong>terminar si un sistema informático ha aprendido o no. En el caso <strong>de</strong> <strong>la</strong>s dosprimeras <strong>de</strong>finiciones esto es imposible: no existe ninguna manera <strong>de</strong> preguntarle si ha adquiridoconocimiento, ya que si le hacemos preguntas acerca <strong>de</strong> <strong>la</strong>s cosas que <strong>de</strong>bería haber aprendido, noestaríamos midiendo sus nuevos conocimientos, sino su capacidad <strong>de</strong> respon<strong>de</strong>r preguntas. En cuanto a<strong>la</strong>s últimas dos <strong>de</strong>finiciones, el hecho <strong>de</strong> guardar en memoria y recibir instrucciones son triviales para unacomputadora, son activida<strong>de</strong>s “vitales” para el<strong>la</strong> que realiza todo el tiempo. De esto se <strong>de</strong>duce que unacomputadora sería capaz <strong>de</strong> apren<strong>de</strong>r a <strong>la</strong> luz <strong>de</strong> <strong>la</strong>s últimas dos <strong>de</strong>finiciones.Esta afirmación no tiene nada <strong>de</strong> novedoso para nosotros. Si un sistema <strong>de</strong> información es capaz <strong>de</strong>apren<strong>de</strong>r, entonces <strong>de</strong>be ser capaz <strong>de</strong> aplicar los conocimientos memorizados o instruidos en una nuevasituación. Esto es justamente lo que evaluamos para saber si un ser humano ha aprendido o no, evaluamossu respuesta ante una nueva situación. Siguiendo esta línea <strong>de</strong> pensamiento, po<strong>de</strong>mos afirmar entoncesque <strong>la</strong>s cosas (y los seres humanos también) apren<strong>de</strong>n cuando cambian su comportamiento <strong>de</strong> manera talque les permite <strong>de</strong>sarrol<strong>la</strong>rse mejor en el futuro. A <strong>la</strong> luz <strong>de</strong> esta <strong>de</strong>finición que asocia el aprendizaje a <strong>la</strong>performance más que al conocimiento, el aprendizaje es más fácil <strong>de</strong> medir: po<strong>de</strong>mos analizar si unsistema ha aprendido al ponerlo en una situación en <strong>la</strong> que estuvo anteriormente y observando si se<strong>de</strong>sempeña mejor.6 Magdalena Servente Estado <strong>de</strong>l Arte


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEsta <strong>de</strong>finición sigue siendo engañosa. Una gran variedad <strong>de</strong> objetos modifican su comportamiento <strong>de</strong>manera tal que los hacen <strong>de</strong>sempeñarse mejor y, sin embargo, no se pue<strong>de</strong> <strong>de</strong>cir que hayan aprendido.Tomemos por ejemplo, nuestras mejores pantuf<strong>la</strong>s, ¿po<strong>de</strong>mos <strong>de</strong>cir que han aprendido <strong>la</strong> forma <strong>de</strong>nuestro pie? Sin embargo, han cambiado su forma, su comportamiento para adaptarse mejor a nuestro piey ciertamente son más cómodas que cuando eran nuevas. L<strong>la</strong>mamos entrenamiento al tipo <strong>de</strong> aprendizajeque se realiza sin pensar. Entrenamos a los animales y a <strong>la</strong>s p<strong>la</strong>ntas, pero hab<strong>la</strong>r <strong>de</strong>l entrenamiento <strong>de</strong> unapantuf<strong>la</strong> sería ridículo. El aprendizaje, a diferencia <strong>de</strong>l entrenamiento, requiere pensar, implica tener elpropósito, directo o indirecto, <strong>de</strong> apren<strong>de</strong>r; alguien o algo que apren<strong>de</strong> <strong>de</strong>be tener <strong>la</strong> intención <strong>de</strong> hacerlo.El aprendizaje sin pensar es meramente un entrenamiento. Los sistemas <strong>de</strong> Aprendizaje Automáticotienen <strong>la</strong> intención <strong>de</strong> construir un mo<strong>de</strong>lo a partir <strong>de</strong> los datos <strong>de</strong> entrada y cambian su comportamiento<strong>de</strong> manera tal que son capaces <strong>de</strong> c<strong>la</strong>sificar nuevos datos y <strong>de</strong>sarrol<strong>la</strong>rse mejor en antiguas situaciones. Enfin, po<strong>de</strong>mos afirmar que los sistemas son capaces <strong>de</strong> apren<strong>de</strong>r. Aún no sabemos, sin embargo, cómohacer para que los sistemas aprendan en el mismo grado que los humanos. No obstante, se han creadoalgoritmos efectivos en ciertas tareas <strong>de</strong> aprendizaje, y el entendimiento teórico <strong>de</strong>l aprendizaje estácomenzando a emerger [Mitchell, 1997].Para complementar el enfoque anterior, <strong>de</strong>bemos preguntarnos cómo apren<strong>de</strong>n los seres humanos yanalizar si los si los sistemas son capaces <strong>de</strong> apren<strong>de</strong>r <strong>de</strong> <strong>la</strong> misma manera. Los humanos apren<strong>de</strong>mosmediante tres mecanismos distinguibles: inducción, <strong>de</strong>ducción y abducción. Po<strong>de</strong>mos afirmar que lossistemas apren<strong>de</strong>n cuando son capaces <strong>de</strong> generar nuevos conocimientos, por cualquiera <strong>de</strong> los tresmétodos anteriores [Monter, 2001]. En un sistema <strong>de</strong> Aprendizaje Automático, dicha generación <strong>de</strong>conocimientos se realiza cuando los datos se transforman a un nivel superior que nos es más útil. Porejemplo, cuando los datos presentes en una base <strong>de</strong> datos se transforman en un mo<strong>de</strong>lo <strong>de</strong> datos que losc<strong>la</strong>sifica según sus características o atributos.Los algoritmos <strong>de</strong> <strong>la</strong> familia <strong>TDIDT</strong> que analizaremos, justamente construyen un mo<strong>de</strong>lo <strong>de</strong> nivelsuperior. ¿Po<strong>de</strong>mos afirmar entonces que son sistemas <strong>de</strong> Aprendizaje Automático?El tema fundamental para construir un sistema <strong>de</strong> aprendizaje automático es, según Mitchell [Mitchell,1997], p<strong>la</strong>ntear el problema <strong>de</strong> aprendizaje <strong>de</strong> manera correcta. Para ello, <strong>de</strong>be contar con <strong>la</strong>s tres partesesenciales <strong>de</strong> <strong>la</strong> siguiente <strong>de</strong>finición:“Se pue<strong>de</strong> afirmar que un programa computacional es capaz <strong>de</strong> apren<strong>de</strong>r a partir <strong>de</strong> <strong>la</strong> experiencia E conrespecto a un grupo <strong>de</strong> tareas T y según <strong>la</strong> medida <strong>de</strong> performance P, si su performance en <strong>la</strong>s tareas T,medida según P, mejora con <strong>la</strong> experiencia E.”Veremos que esto se cumple para los algoritmos <strong>de</strong> <strong>la</strong> familia <strong>TDIDT</strong>.Estado <strong>de</strong>l Arte Magdalena Servente 7


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentecomparten todas <strong>la</strong>s aves y que <strong>la</strong>s diferencias <strong>de</strong>l resto <strong>de</strong> los seres vivos). A <strong>la</strong> luz <strong>de</strong> esta <strong>de</strong>finiciónvemos que si los límites entre conceptos no están c<strong>la</strong>ramente <strong>de</strong>finidos, pue<strong>de</strong> no ser fácil c<strong>la</strong>sificar unejemplo en particu<strong>la</strong>r. Por ejemplo, cuál es el límite entre un edificio alto y un edificio bajo, entre unamujer atractiva y una no atractiva.Existen dos técnicas <strong>de</strong> inferencia generales que se utilizan para extraer <strong>de</strong>scripciones a partir <strong>de</strong> losconceptos: <strong>la</strong> <strong>de</strong>ducción y <strong>la</strong> inducción. La <strong>de</strong>ducción es <strong>la</strong> técnica que infiere información como unaconsecuencia lógica <strong>de</strong> los ejemplos y conocimientos <strong>de</strong> base [Holsheimer, Siebes, 1994]. La inducciónes <strong>la</strong> técnica que infiere información generalizada <strong>de</strong> los ejemplos y conocimientos <strong>de</strong> base.En <strong>la</strong> inducción, po<strong>de</strong>mos trabajar con jerarquías <strong>de</strong> generalización, representadas por árboles o grafos[Michalski et al, 1998]. En una jerarquía <strong>de</strong> generalización, un concepto pue<strong>de</strong> <strong>de</strong>scribirse por los objetos<strong>de</strong>l nivel base o por cualquier objeto en un nivel superior. Analizando <strong>la</strong> Figura 2.2, po<strong>de</strong>mos <strong>de</strong>scribir a<strong>la</strong> Universidad <strong>de</strong> Buenos Aires con los objetos <strong>de</strong> nivel base, en cuyo caso <strong>de</strong>cimos que es unainstitución educativa, universitaria y pública; o po<strong>de</strong>mos <strong>de</strong>scribir<strong>la</strong> con los objetos <strong>de</strong> nivel superiordiciendo que <strong>la</strong> Universidad <strong>de</strong> Buenos Aires es una institución educativa.InstitucionesEducativasPrimarias Secundarias Terciarias UniversitariasPúblicasPrivadasUBAUTNFigura 2.2 Jerarquía <strong>de</strong> generalizaciónEn este tipo <strong>de</strong> jerarquías, po<strong>de</strong>mos i<strong>de</strong>ntificar tres nociones que re<strong>la</strong>cionan los conceptos: efecto <strong>de</strong> nivelbásico (basic-level effect), tipicalidad (typicality) y <strong>de</strong>pen<strong>de</strong>ncia contextual (contextual <strong>de</strong>pen<strong>de</strong>ncy)[Michalski et al, 1998]. El efecto <strong>de</strong> nivel básico hace referencia al hecho <strong>de</strong> que los conceptos <strong>de</strong> nivelbase pue<strong>de</strong>n ser <strong>de</strong>scriptos por características fácilmente i<strong>de</strong>ntificables por los humanos, lo cual hace quesu aprendizaje sea simple para nosotros. Mientras que los conceptos <strong>de</strong> nivel superior se <strong>de</strong>finen comogrupos <strong>de</strong> conceptos <strong>de</strong> nivel básico que comparten alguna característica en común. La segunda noción,<strong>la</strong> tipicalidad, analiza cuán típico es un concepto. Pue<strong>de</strong> medirse <strong>de</strong> acuerdo a <strong>la</strong> cantidad <strong>de</strong>características comunes que comparte con otros conceptos, y a <strong>la</strong> cantidad <strong>de</strong> características heredadas <strong>de</strong>los superconceptos (conceptos <strong>de</strong> nivel superior). En el aprendizaje, <strong>la</strong> tipicalidad es muy importante, porejemplo, tratar <strong>de</strong> enseñar el concepto <strong>de</strong> pájaro con los ejemplos <strong>de</strong> un pingüino, un ganso y un avestruz,Estado <strong>de</strong>l Arte Magdalena Servente 9


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteComo lenguaje <strong>de</strong>scriptivo, <strong>la</strong> lógica <strong>de</strong> atributos es mucho más práctica que <strong>la</strong> lógica <strong>de</strong> or<strong>de</strong>n cero. Poreso, es utilizada en muchos programas <strong>de</strong> Aprendizaje Automático, como los <strong>de</strong> <strong>la</strong> familia <strong>TDIDT</strong>(Árboles inductivos <strong>de</strong> arriba hacia abajo - Top-Down Induction Trees).La lógica <strong>de</strong> predicados <strong>de</strong> primer or<strong>de</strong>n utiliza <strong>la</strong>s cláusu<strong>la</strong>s <strong>de</strong> Horn para representar conceptos. Estascláusu<strong>la</strong>s simplifican <strong>la</strong>s <strong>de</strong>scripciones complicadas mediante el uso <strong>de</strong> predicados y variables. Sonbastante potentes, incluso permiten <strong>la</strong> expresión <strong>de</strong> conceptos recursivos. El lenguaje Prolog se basa en <strong>la</strong>lógica <strong>de</strong> predicados <strong>de</strong> primer or<strong>de</strong>n. Este tipo <strong>de</strong> lógica se utiliza en algunos programas <strong>de</strong> AprendizajeAutomático, como el algoritmo FOIL. Un ejemplo <strong>de</strong> una cláusu<strong>la</strong> <strong>de</strong> Horn sería:Abuelo(X,Z) :- Padre(X,Y), Padre(Y,Z)Por último, <strong>la</strong> lógica <strong>de</strong> predicados <strong>de</strong> segundo or<strong>de</strong>n consi<strong>de</strong>ra a los nombres <strong>de</strong> los predicados comovariables. La expresión anterior quedaría <strong>de</strong> <strong>la</strong> forma:p(X,Z) :- q(X,Y), q(Y,Z)don<strong>de</strong> p es Abuelo y q es Padre.Este tipo <strong>de</strong> lógica es <strong>la</strong> <strong>de</strong> mayor po<strong>de</strong>r <strong>de</strong>scriptivo. Sin embargo, dada su complejidad rara vez se utilizaen los sistemas <strong>de</strong> Aprendizaje Automático.2.1.3. Aprendizaje2.1.3.1. Aprendizaje supervisado y no supervisadoExisten dos tipos <strong>de</strong> aprendizaje: el supervisado y el no supervisado [Michalski et al, 1998], [Holsheimer,Siebes, 1994]. En el aprendizaje supervisado o aprendizaje a partir <strong>de</strong> ejemplos, el instructor o experto<strong>de</strong>fine c<strong>la</strong>ses y provee ejemplos <strong>de</strong> cada una. El sistema <strong>de</strong>be obtener una <strong>de</strong>scripción para cada c<strong>la</strong>se.Cuando el instructor <strong>de</strong>fine una única c<strong>la</strong>se, provee ejemplos positivos (pertenecen a <strong>la</strong> c<strong>la</strong>se) y negativos(no pertenecen a <strong>la</strong> c<strong>la</strong>se). En este caso, los ejemplos importantes son los cercanos al límite, porqueproveen información útil sobre los límites <strong>de</strong> <strong>la</strong> c<strong>la</strong>se. Cuando el instructor <strong>de</strong>fine varias c<strong>la</strong>ses, el sistemapue<strong>de</strong> optar por realizar <strong>de</strong>scripciones discriminantes o no. Un conjunto <strong>de</strong> <strong>de</strong>scripciones es discriminantesi el total <strong>de</strong> <strong>la</strong>s <strong>de</strong>scripciones cubren todas <strong>la</strong>s c<strong>la</strong>ses, pero una <strong>de</strong>scripción cubre una so<strong>la</strong> c<strong>la</strong>se enparticu<strong>la</strong>r.Estado <strong>de</strong>l Arte Magdalena Servente 11


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEn el aprendizaje no supervisado o aprendizaje a partir <strong>de</strong> observaciones y <strong>de</strong>scubrimientos, el sistema<strong>de</strong>be agrupar los conceptos 1 sin ayuda alguna <strong>de</strong> un instructor. El sistema recibe los ejemplos, pero no sepre<strong>de</strong>fine ninguna c<strong>la</strong>se. Por lo tanto, <strong>de</strong>be observar los ejemplos y buscar características en común quepermitan formar grupos. Como resultado, este tipo <strong>de</strong> aprendizaje genera un conjunto <strong>de</strong> <strong>de</strong>scripciones <strong>de</strong>c<strong>la</strong>ses, que juntas cubren todas <strong>la</strong>s c<strong>la</strong>ses y en particu<strong>la</strong>r <strong>de</strong>scriben a una única c<strong>la</strong>se.2.1.3.2. Tipos <strong>de</strong> aprendizaje automáticoExisten varios tipos <strong>de</strong> aprendizaje que pue<strong>de</strong>n c<strong>la</strong>sificarse como supervisados o no supervisados. Acontinuación, se presentan los distintos tipos <strong>de</strong> aprendizaje automático[García Martínez, 1997].• Aprendizaje por memorización• Aprendizaje por instrucción• Aprendizaje por <strong>de</strong>ducción• Aprendizaje por analogía• Aprendizaje por inducción• Aprendizaje por ejemplos• Aprendizaje por observación - <strong>de</strong>scubrimiento• Observación pasiva• Experimentación activaEn el aprendizaje por memorización los sistemas reciben conocimientos <strong>de</strong>l medio ambiente y losguardan sin ningún tipo <strong>de</strong> procesamiento. Su complejidad se encuentra en el almacenamiento <strong>de</strong> losconocimientos y no en su adquisición. Lo importante en estos casos es que <strong>la</strong> información esté disponible1 También conocido como formación <strong>de</strong> clusters.12 Magdalena Servente Estado <strong>de</strong>l Arte


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentecuando se requiera; no hay ningún tipo <strong>de</strong> inferencia ni procesamiento, por lo tanto, los conocimientos<strong>de</strong>ben ser adquiridos y almacenados en un nivel que los haga directamente utilizables.En el caso <strong>de</strong>l aprendizaje por instrucción, los conocimientos son provistos por un instructor o experto en<strong>la</strong> materia (aprendizaje supervisado). La información provista es abstracta o <strong>de</strong> índole general, por lotanto, el sistema tendrá que inferir los <strong>de</strong>talles. Es <strong>de</strong>cir, el sistema <strong>de</strong>berá transformar <strong>la</strong> informaciónprovista en términos abstractos <strong>de</strong> alto nivel, a reg<strong>la</strong>s que puedan ser utilizadas directamente en <strong>la</strong> tarea<strong>de</strong>l sistema.El aprendizaje por <strong>de</strong>ducción o aprendizaje guiado por <strong>la</strong> especificación <strong>de</strong>staca o especifica <strong>la</strong>sre<strong>la</strong>ciones existentes entre conceptos. El sistema transforma <strong>la</strong>s especificaciones recibidas como entradaen un algoritmo que actualiza re<strong>la</strong>ciones.En el aprendizaje por analogía, el sistema, que recibe información relevante a problemas análogos a losque está tratando <strong>de</strong> resolver, <strong>de</strong>be <strong>de</strong>scubrir <strong>la</strong>s analogías e inferir reg<strong>la</strong>s aplicables al problema. Se trata<strong>de</strong> generar nuevos conocimientos utilizando información preexistente.En el aprendizaje por inducción, el sistema genera nuevos conocimientos que no están presentes en formaimplícita <strong>de</strong>ntro <strong>de</strong>l conocimiento disponible. El aprendizaje por inducción abarca el aprendizaje porejemplos y el aprendizaje por observación y <strong>de</strong>scubrimiento.En el aprendizaje por ejemplos, el sistema recibe varios ejemplos como entrada y <strong>de</strong>be generalizarlos enun proceso inductivo para presentarlos como salida. Generalmente, en este tipo <strong>de</strong> aprendizaje existen dostipos <strong>de</strong> ejemplos, los positivos y los negativos. Los ejemplos positivos fuerzan <strong>la</strong> generalización,mientras que los ejemplos negativos previenen que esta sea excesiva. Se trata <strong>de</strong> que el conocimientoadquirido cubra todos los ejemplos positivos y ningún ejemplo negativo. A este tipo <strong>de</strong> aprendizajepertenece <strong>la</strong> familia <strong>TDIDT</strong>. Debe tenerse en cuenta, que los ejemplos a partir <strong>de</strong> los cuales apren<strong>de</strong> elsistema, <strong>de</strong>ben ser representativos <strong>de</strong> los conceptos que se está tratando <strong>de</strong> enseñar. A<strong>de</strong>más, <strong>la</strong>distribución <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses en el conjunto <strong>de</strong> ejemplos <strong>de</strong> entrenamiento, a partir <strong>de</strong> los que el sistemaapren<strong>de</strong>, <strong>de</strong>be ser simi<strong>la</strong>r a <strong>la</strong> distribución existente en los datos sobre los cuales se aplicará el mo<strong>de</strong>loresultante.En el aprendizaje por observación y <strong>de</strong>scubrimiento, el sistema forma teorías o criterios <strong>de</strong> c<strong>la</strong>sificaciónen jerarquías taxonómicas, a partir <strong>de</strong> <strong>la</strong> inducción realizando tareas <strong>de</strong> <strong>de</strong>scubrimiento. Pertenece al tipo<strong>de</strong> aprendizaje no supervisado y, como tal, permite que el sistema c<strong>la</strong>sifique <strong>la</strong> información <strong>de</strong> entradapara formar conceptos. Existen dos formas en <strong>la</strong>s que el sistema interactúa con el entorno: <strong>la</strong> observaciónpasiva, en <strong>la</strong> cual el sistema c<strong>la</strong>sifica <strong>la</strong>s observaciones <strong>de</strong> múltiples puntos <strong>de</strong>l medio; y <strong>la</strong> observaciónactiva, en <strong>la</strong> cual el sistema observa el entorno, realiza cambios en el mismo, y luego analiza losresultados.Estado <strong>de</strong>l Arte Magdalena Servente 13


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente2.1.3.3 Métodos clásicos <strong>de</strong> aprendizajeExisten dos métodos clásicos <strong>de</strong> aprendizaje inductivo a partir <strong>de</strong> ejemplos que <strong>de</strong>bemos conocer: e<strong>la</strong>prendizaje AQ y el aprendizaje según el método <strong>de</strong> divi<strong>de</strong> y reinarás [Michalski et al, 1998].2.1.3.3.1 Aprendizaje AQEl aprendizaje AQ se basa en <strong>la</strong> i<strong>de</strong>a <strong>de</strong> cubrir progresivamente los datos <strong>de</strong> entrenamiento a medida quese generan reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión. Su esencia está en <strong>la</strong> búsqueda <strong>de</strong> un conjunto <strong>de</strong> reg<strong>la</strong>s (conjunciones <strong>de</strong>pares atributo-valor o predicados arbitrarios) que cubran todos los ejemplos positivos y ningún ejemplonegativo. En lugar <strong>de</strong> dividir los ejemplos en subconjuntos, el aprendizaje AQ generaliza, paso a paso, <strong>la</strong>s<strong>de</strong>scripciones <strong>de</strong> los ejemplos positivos seleccionados [Michalski et al, 1998].2.1.3.3.2 Aprendizaje divi<strong>de</strong> y reinarásEl aprendizaje “divi<strong>de</strong> y reinarás” particiona el conjunto <strong>de</strong> ejemplos en subconjuntos sobre los cuales sepue<strong>de</strong> trabajar con mayor facilidad. En <strong>la</strong> lógica proposicional, por ejemplo, se parte el conjunto <strong>de</strong>acuerdo a los valores <strong>de</strong> un atributo en particu<strong>la</strong>r, entonces, todos los miembros <strong>de</strong> un subconjuntotendrán un mismo valor para dicho atributo. Dentro <strong>de</strong> este tipo <strong>de</strong> aprendizaje, encontramos <strong>la</strong> familia<strong>TDIDT</strong> (Top-Down Induction Trees), <strong>la</strong> cual se explica con mayor <strong>de</strong>talle en <strong>la</strong> Sección 2.42.2. MINERÍA DE DATOSLa enorme cantidad <strong>de</strong> bases <strong>de</strong> datos en todas <strong>la</strong>s áreas <strong>de</strong> aplicación humana, <strong>de</strong>manda nuevas ypo<strong>de</strong>rosas técnicas <strong>de</strong> transformación <strong>de</strong> los datos en conocimientos útiles. Entre dichas técnicas po<strong>de</strong>mosnombrar a <strong>la</strong>s pertenecientes al aprendizaje automático, el análisis estadístico <strong>de</strong> datos, <strong>la</strong> visualización <strong>de</strong>datos, y <strong>la</strong>s re<strong>de</strong>s neuronales. La Minería <strong>de</strong> <strong>Datos</strong> se refiere a <strong>la</strong> aplicación <strong>de</strong> técnicas <strong>de</strong> aprendizajeautomático, entre otros métodos, para encontrar importantes patrones en los datos. El <strong>de</strong>scubrimiento <strong>de</strong>conocimientos pone su énfasis en el ciclo <strong>de</strong> análisis <strong>de</strong> datos en sí, analiza su ciclo <strong>de</strong> vida.La Minería <strong>de</strong> <strong>Datos</strong> busca generar información simi<strong>la</strong>r a <strong>la</strong> que podría producir un experto humano, quea<strong>de</strong>más satisfaga el Principio <strong>de</strong> Comprensibilidad. La Minería <strong>de</strong> <strong>Datos</strong> es el proceso <strong>de</strong> <strong>de</strong>scubrirconocimientos interesantes, como patrones, asociaciones, cambios, anomalías y estructuras significativas14 Magdalena Servente Estado <strong>de</strong>l Arte


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentea partir <strong>de</strong> gran<strong>de</strong>s cantida<strong>de</strong>s <strong>de</strong> datos almacenadas en bases <strong>de</strong> datos, data warehouses, o cualquier otromedio <strong>de</strong> almacenamiento <strong>de</strong> información.La Minería <strong>de</strong> <strong>Datos</strong> es un campo en pleno <strong>de</strong>sarrollo en el que se aplican métodos <strong>de</strong> varias disciplinascomo los presentes en sistemas <strong>de</strong> bases <strong>de</strong> datos, data warehousing, estadística, el AprendizajeAutomático, visualización <strong>de</strong> datos, obtención <strong>de</strong> información y computación <strong>de</strong> alta performance.A<strong>de</strong>más también se utilizan métodos <strong>de</strong> <strong>la</strong>s áreas <strong>de</strong> re<strong>de</strong>s neuronales, reconocimiento <strong>de</strong> patrones,análisis espacial <strong>de</strong> datos, bases <strong>de</strong> datos <strong>de</strong> imágenes, procesamiento <strong>de</strong> señales y programación lógicainductiva (ILP). Numerosos especialistas seña<strong>la</strong>n que <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> necesita <strong>de</strong> <strong>la</strong> integración <strong>de</strong>enfoques <strong>de</strong> múltiples disciplinas [Mitchell, 1997].Una gran cantidad <strong>de</strong> métodos <strong>de</strong> análisis <strong>de</strong> datos han sido <strong>de</strong>sarrol<strong>la</strong>dos en estadística. El AprendizajeAutomático ha contribuido en el área <strong>de</strong> c<strong>la</strong>sificación e inducción. Las re<strong>de</strong>s neuronales, por su <strong>la</strong>do, sonefectivas en <strong>la</strong> c<strong>la</strong>sificación, predicción y clustering <strong>de</strong> datos. Sin embargo, con <strong>la</strong> gran cantidad <strong>de</strong> datosalmacenados en <strong>la</strong>s bases <strong>de</strong> datos sobre los cuales se <strong>de</strong>be hacer <strong>la</strong> minería <strong>de</strong> datos, todos estos métodos<strong>de</strong>ben re-analizarse o esca<strong>la</strong>rse para ser efectivos.A<strong>de</strong>más para procesar gran<strong>de</strong>s volúmenes <strong>de</strong> datos <strong>de</strong> los cuales <strong>de</strong>ben extraerse patronesautomáticamente, es necesario contar con una gran capacidad computacional <strong>de</strong> procesamiento. Esnecesario, entonces, <strong>de</strong>sarrol<strong>la</strong>r métodos <strong>de</strong> minería <strong>de</strong> datos distribuidos, paralelos e incrementales.2.2.1. Descubrimiento <strong>de</strong> conocimientosLa Minería <strong>de</strong> <strong>Datos</strong> no <strong>de</strong>be confundirse con el <strong>de</strong>scubrimiento <strong>de</strong> conocimientos (knowledge discovery),aunque muchos investigadores consi<strong>de</strong>ran que <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> no es más que un paso esencial en el<strong>de</strong>scubrimiento <strong>de</strong> conocimientos. En general, un proceso <strong>de</strong> <strong>de</strong>scubrimiento <strong>de</strong> conocimientos consiste<strong>de</strong> una repetición iterativa <strong>de</strong> los siguientes pasos [S/A, 1999]:• Limpieza <strong>de</strong> datos (Data cleaning) procesamiento <strong>de</strong> los datos ruidosos, erróneos, faltantes oirrelevantes• Integración <strong>de</strong> datos (Data integration) integración <strong>de</strong> múltiples fuentes heterogéneas <strong>de</strong> datos enuna única fuente.• Selección <strong>de</strong> datos (Data selection) extracción <strong>de</strong> los datos relevantes al área <strong>de</strong> análisis <strong>de</strong><strong>la</strong>lmacenamiento <strong>de</strong> datos.Estado <strong>de</strong>l Arte Magdalena Servente 15


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente• Transformación <strong>de</strong> datos (Data transformation) transformación o consolidación <strong>de</strong> los datos enformas apropiadas para <strong>la</strong> minería mediante procedimientos <strong>de</strong> agregación.• Minería <strong>de</strong> <strong>Datos</strong>: proceso esencial don<strong>de</strong> se aplican diversos métodos para extraer patrones <strong>de</strong> losdatos.• Evaluación <strong>de</strong> patrones (Pattern evaluation) i<strong>de</strong>ntificación <strong>de</strong> patrones interesantes basándose enalgún parámetro <strong>de</strong> comparación impuesto por el usuario.• Presentación <strong>de</strong> los conocimientos (Knowledge presentation) técnicas <strong>de</strong> visualización yrepresentación <strong>de</strong> los conocimientos obtenidos.Con los sistemas <strong>de</strong> bases <strong>de</strong> datos re<strong>la</strong>cionales existentes hoy en día, los cuatro procesos iniciales:limpieza, integración, selección y transformación <strong>de</strong> datos pue<strong>de</strong>n realizarse mediante <strong>la</strong> construcción <strong>de</strong>data warehouses. Los procesos <strong>de</strong> minería <strong>de</strong> datos, evaluación <strong>de</strong> patrones y presentación <strong>de</strong>conocimientos generalmente se agrupan en el proceso que se conoce como Minería <strong>de</strong> <strong>Datos</strong>. De ahí <strong>la</strong>confusión que pue<strong>de</strong> llegar a existir con el nombre.2.2.2. Problemas inherentes al proceso <strong>de</strong> aprendizajeUna <strong>de</strong> <strong>la</strong>s mayores c<strong>la</strong>ses <strong>de</strong> exploración <strong>de</strong> datos está basada en métodos para el aprendizaje inductivosimbólico a partir <strong>de</strong> ejemplos. Dado un conjunto <strong>de</strong> ejemplos <strong>de</strong> c<strong>la</strong>ses <strong>de</strong> <strong>de</strong>cisión diferentes yconocimientos <strong>de</strong> base, el aprendizaje inductivo genera <strong>de</strong>scripciones para cada c<strong>la</strong>se. En este sentido<strong>de</strong>be enfrentarse a varios problemas como [Michalski et al, 1998]:• Aprendizaje a partir <strong>de</strong> datos incorrectos• Aprendizaje a partir <strong>de</strong> datos incompletos• Aprendizaje a partir <strong>de</strong> datos distribuidos• Aprendizaje a partir <strong>de</strong> conceptos que evolucionan a través <strong>de</strong>l tiempo• Aprendizaje a partir <strong>de</strong> datos que se obtienen a través <strong>de</strong>l tiempo• Aprendizaje a partir <strong>de</strong> datos subjetivos16 Magdalena Servente Estado <strong>de</strong>l Arte


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente• Aprendizaje a partir <strong>de</strong> conceptos flexibles• Aprendizaje <strong>de</strong> conceptos en distintos niveles <strong>de</strong> generalización• Integración <strong>de</strong> <strong>de</strong>scubrimientos cualitativos y cuantitativos.• Predicción cualitativaCabe <strong>de</strong>stacar que muchos <strong>de</strong> estos problemas son los mismos con los que se enfrenta un sistema <strong>de</strong>Aprendizaje Automático que apren<strong>de</strong> a partir <strong>de</strong> ejemplos, que pue<strong>de</strong>n tener imperfecciones o pue<strong>de</strong>nestar incompletos, o incluso, no ser representativos <strong>de</strong>l problema que se está analizando.2.2.3. Tareas realizadas por un sistema <strong>de</strong> Minería <strong>de</strong> <strong>Datos</strong>Un sistema <strong>de</strong> Minería <strong>de</strong> <strong>Datos</strong> actual realiza una o más <strong>de</strong> <strong>la</strong>s siguientes tareas:• Descripción <strong>de</strong> c<strong>la</strong>ses: provee una c<strong>la</strong>sificación concisa y resumida <strong>de</strong> un conjunto <strong>de</strong> datos y losdistingue unos <strong>de</strong> otros. La c<strong>la</strong>sificación <strong>de</strong> los datos se conoce como caracterización, y <strong>la</strong> distinciónentre ellos como comparación o discriminación.• Asociación: es el <strong>de</strong>scubrimiento <strong>de</strong> re<strong>la</strong>ciones <strong>de</strong> asociación o corre<strong>la</strong>ción en un conjunto <strong>de</strong> datos.Las asociaciones se expresan como condiciones atributo-valor y <strong>de</strong>ben estar presentes varias vecesen los datos.• C<strong>la</strong>sificación: analiza un conjunto <strong>de</strong> datos <strong>de</strong> entrenamiento cuya c<strong>la</strong>sificación <strong>de</strong> c<strong>la</strong>se se conoce yconstruye un mo<strong>de</strong>lo <strong>de</strong> objetos para cada c<strong>la</strong>se. Dicho mo<strong>de</strong>lo pue<strong>de</strong> representarse con árboles <strong>de</strong><strong>de</strong>cisión o con reg<strong>la</strong>s <strong>de</strong> c<strong>la</strong>sificación, que muestran <strong>la</strong>s características <strong>de</strong> los datos. El mo<strong>de</strong>lo pue<strong>de</strong>ser utilizado para <strong>la</strong> mayor comprensión <strong>de</strong> los datos existentes y para <strong>la</strong> c<strong>la</strong>sificación <strong>de</strong> los datosfuturos.• Predicción: esta función <strong>de</strong> <strong>la</strong> minería predice los valores posibles <strong>de</strong> datos faltantes o <strong>la</strong> distribución<strong>de</strong> valores <strong>de</strong> ciertos atributos en un conjunto <strong>de</strong> objetos.• Clustering: i<strong>de</strong>ntifica clusters en los datos, don<strong>de</strong> un cluster es una colección <strong>de</strong> datos “simi<strong>la</strong>res”.La similitud pue<strong>de</strong> medirse mediante funciones <strong>de</strong> distancia, especificadas por los usuarios o porexpertos. La Minería <strong>de</strong> <strong>Datos</strong> trata <strong>de</strong> encontrar clusters <strong>de</strong> buena calidad que sean esca<strong>la</strong>bles agran<strong>de</strong>s bases <strong>de</strong> datos y a data warehouses multidimensionales.Estado <strong>de</strong>l Arte Magdalena Servente 17


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente• Análisis <strong>de</strong> series a través <strong>de</strong>l tiempo: analiza un gran conjunto <strong>de</strong> datos obtenidos con el correr <strong>de</strong>ltiempo para encontrar en él regu<strong>la</strong>rida<strong>de</strong>s y características interesantes, incluyendo <strong>la</strong> búsqueda <strong>de</strong>patrones secuenciales, periódicos, modas y <strong>de</strong>sviaciones.2.2.4. Métodos <strong>de</strong> Minería <strong>de</strong> <strong>Datos</strong>La Minería <strong>de</strong> <strong>Datos</strong> abarca un terreno muy amplio, no es so<strong>la</strong>mente aplicar un algoritmo existente a unconjunto <strong>de</strong> datos. Las herramientas existentes actualmente incluyen mecanismos para <strong>la</strong> preparación <strong>de</strong>los datos, su visualización y <strong>la</strong> interpretación <strong>de</strong> los resultados. Muchas <strong>de</strong> <strong>la</strong>s herramientas funcionanbien en espacios <strong>de</strong> pocas dimensiones con datos numéricos, pero sus limitaciones comienzan a apareceren espacios <strong>de</strong> mayores dimensiones o con datos no numéricos. A continuación se presentan algunosmétodos <strong>de</strong> minería <strong>de</strong> datos que resuelven distintos problemas inherentes a <strong>la</strong> misma [Thrun et al, 1998].• Aprendizaje activo/Diseño Experimental (Active Learning/Experimental <strong>de</strong>sign): el aprendizajeactivo, por el <strong>la</strong>do <strong>de</strong> <strong>la</strong> Inteligencia Artificial, y el diseño experimental, por el <strong>la</strong>do <strong>de</strong> <strong>la</strong> Estadística,tratan <strong>de</strong> resolver el problema <strong>de</strong> <strong>la</strong> elección <strong>de</strong>l método a aplicar durante el aprendizaje. Suponenque durante el proceso <strong>de</strong> aprendizaje, existe <strong>la</strong> oportunidad <strong>de</strong> influir sobre los datos, recor<strong>de</strong>mos <strong>la</strong>diferencia entre <strong>la</strong> exploración pasiva y <strong>la</strong> experimentación activa. El aprendizaje activo afronta elproblema <strong>de</strong> cómo explorar.• Aprendizaje acumu<strong>la</strong>tivo (Cumu<strong>la</strong>tive learning): Muchas bases <strong>de</strong> datos crecen continuamente.Tomemos por ejemplo, una base <strong>de</strong> datos sobre transacciones financieras en un banco. Apren<strong>de</strong>r apartir <strong>de</strong> bases <strong>de</strong> datos <strong>de</strong> este tipo es difícil ya que los datos <strong>de</strong>ben ser analizados acumu<strong>la</strong>tivamentea medida que se incorporan a <strong>la</strong> base. Nos encontramos entonces ante el <strong>de</strong>safío <strong>de</strong> diseñaralgoritmos que puedan incorporar nuevos datos y adaptarse a los cambios generados por <strong>la</strong>incorporación <strong>de</strong> los mismos.• Aprendizaje multitarea (Multitask learning): Muchos dominios se caracterizan por pertenecer afamilias <strong>de</strong> problemas <strong>de</strong> aprendizaje re<strong>la</strong>cionados o simi<strong>la</strong>res. Tomemos, por ejemplo, el dominiomédico. Mientras que cada enfermedad posee su aprendizaje individual con bases <strong>de</strong> datos <strong>de</strong>dicadas,muchas enfermeda<strong>de</strong>s tienen causas y/o síntomas en común, sería provechoso entonces favorecer elintercambio <strong>de</strong> información entre los distintos resultados <strong>de</strong> los algoritmos.• Aprendizaje a partir <strong>de</strong> datos tabu<strong>la</strong>dos y no tabu<strong>la</strong>dos (Learning from <strong>la</strong>beled and un<strong>la</strong>beleddata): en muchas aplicaciones el problema no está en <strong>la</strong> obtención <strong>de</strong> los datos, sino en <strong>la</strong> tabu<strong>la</strong>ción<strong>de</strong> los mismos.18 Magdalena Servente Estado <strong>de</strong>l Arte


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente• Aprendizaje re<strong>la</strong>cional (Re<strong>la</strong>tional Learning): en muchos problemas <strong>de</strong> aprendizaje <strong>la</strong>s entida<strong>de</strong>sno se <strong>de</strong>scriben a partir <strong>de</strong> un conjunto estático <strong>de</strong> atributos, sino a partir <strong>de</strong> <strong>la</strong>s re<strong>la</strong>ciones entreentida<strong>de</strong>s. En <strong>la</strong>s bases <strong>de</strong> datos inteligentes encontrar patrones o re<strong>la</strong>ciones entre entida<strong>de</strong>s es unproblema primordial.• Aprendiendo a partir <strong>de</strong> bases <strong>de</strong> datos <strong>de</strong> gran tamaño (Learning from extremely <strong>la</strong>rgedatabases): muchas bases <strong>de</strong> datos son <strong>de</strong>masiado gran<strong>de</strong>s como para ser leídas y procesadas por unacomputadora más <strong>de</strong> una vez. Lo cual imposibilita el uso <strong>de</strong> algoritmos que requieran múltiplespasadas sobre los datos. Debe afrontarse entonces, el <strong>de</strong>safío <strong>de</strong> encontrar algoritmos inteligentes quesean esca<strong>la</strong>bles eficientemente a gran<strong>de</strong>s bases <strong>de</strong> datos.• Aprendiendo a partir <strong>de</strong> bases <strong>de</strong> datos extremadamente pequeñas (Learning from extremelysmall databases): en el otro extremo, existen también bases <strong>de</strong> datos que son <strong>de</strong>masiado pequeñaspara los algoritmos existentes. Por ejemplo, en robótica <strong>la</strong> cantidad <strong>de</strong> ejemplos es limitada, sinembargo, muchos <strong>de</strong> los métodos <strong>de</strong> aprendizaje actuales requieren un gran número <strong>de</strong> ejemplos.Debe encontrarse entonces un método que trabaje eficientemente con un número limitado <strong>de</strong> datos, obien, que se base en el conocimiento previo.• Aprendiendo con conocimientos previos (Learning with prior knowledge): En muchos casos, seposeen conocimientos efectivos acerca <strong>de</strong>l fenómeno en estudio. Deben existir métodos capaces <strong>de</strong>incorporar conocimientos previos tanto abstractos, como diversos o inciertos.• Aprendiendo a partir <strong>de</strong> datos <strong>de</strong> distintos tipos (Learning from mixed media data): Muchosjuegos <strong>de</strong> datos contienen varios tipos <strong>de</strong> datos. Un buen ejemplo, se presenta en <strong>la</strong>s bases <strong>de</strong> datosmédicas que contienen estadísticas acerca <strong>de</strong> los pacientes, gráficos, rayos X, etc. La gran mayoría <strong>de</strong>los algoritmos actuales sólo pue<strong>de</strong>n trabajar con un único tipo <strong>de</strong> datos, con lo cual <strong>de</strong>ben encontrarsemétodos capaces <strong>de</strong> manejar los distintos tipos o formatos <strong>de</strong> datos presentes en una base <strong>de</strong> datos.• Aprendiendo re<strong>la</strong>ciones casuales (Learning casual re<strong>la</strong>tionships): La mayoría <strong>de</strong> los algoritmos <strong>de</strong>aprendizaje <strong>de</strong>tectan <strong>la</strong> corre<strong>la</strong>ción entre los datos, pero son incapaces <strong>de</strong> <strong>de</strong>terminar o mo<strong>de</strong><strong>la</strong>r <strong>la</strong>scasualida<strong>de</strong>s, y, por lo tanto, fal<strong>la</strong>n al tratar <strong>de</strong> pre<strong>de</strong>cir algunos efectos externos. Deben diseñarse,entonces, algoritmos que incorporen <strong>la</strong>s casualida<strong>de</strong>s.• Visualización y Minería <strong>de</strong> <strong>Datos</strong> interactiva (Visualization and Interactive Data Mining): Enmuchos casos, <strong>la</strong> minería <strong>de</strong> datos es un proceso interactivo, en el cual el análisis <strong>de</strong> datos automáticose mezc<strong>la</strong> con <strong>la</strong>s <strong>de</strong>cisiones <strong>de</strong> control <strong>de</strong> un experto <strong>de</strong> campo. Deben diseñarse herramientas quecontemplen el intercambio entre estas dos áreas.Estado <strong>de</strong>l Arte Magdalena Servente 19


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente2.2.5. Componentes <strong>de</strong> <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong>La Minería <strong>de</strong> <strong>Datos</strong> cuenta con tres gran<strong>de</strong>s componentes [Joshi, 1997]: Clustering o c<strong>la</strong>sificación,Reg<strong>la</strong>s <strong>de</strong> asociación y Análisis <strong>de</strong> Secuencias.En el Clustering o C<strong>la</strong>sificación se analizan los datos y se generan conjuntos <strong>de</strong> reg<strong>la</strong>s que agrupen yc<strong>la</strong>sifiquen los datos futuros. Debe tenerse en cuenta que en <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> se busca obtener reg<strong>la</strong>sque particionen los datos en c<strong>la</strong>ses pre<strong>de</strong>finidas, esto se torna complicado cuando hay una gran cantidad<strong>de</strong> atributos y millones <strong>de</strong> registros.Una reg<strong>la</strong> <strong>de</strong> asociación es una reg<strong>la</strong> que implica o presenta ciertas re<strong>la</strong>ciones entre un grupo <strong>de</strong> objetosen una base <strong>de</strong> datos. En el proceso <strong>de</strong> <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> se obtienen varias reg<strong>la</strong>s <strong>de</strong> este tipo condistintos niveles <strong>de</strong> abstracción. Nuevamente, no <strong>de</strong>bemos olvidar que esto pue<strong>de</strong> implicar el análisisiterativo <strong>de</strong> bases <strong>de</strong> datos transaccionales o re<strong>la</strong>cionales, con millones <strong>de</strong> registros, lo cual presenta unelevado costo operativo. Por lo tanto, <strong>la</strong> obtención <strong>de</strong> reg<strong>la</strong>s a partir <strong>de</strong> bases <strong>de</strong> datos re<strong>la</strong>cionales otransaccionales es un importante tema <strong>de</strong> estudio.Por último, el análisis <strong>de</strong> secuencias trata <strong>de</strong> encontrar patrones que ocurren con una secuencia<strong>de</strong>terminada. Trabaja sobre datos que aparecen en distintas transacciones – a diferencia <strong>de</strong> los datos queaparecen re<strong>la</strong>cionados mediante reg<strong>la</strong>s <strong>de</strong>ntro <strong>de</strong> una misma transacción -.A continuación se presentan ejemplos <strong>de</strong> algoritmos <strong>de</strong> Minería <strong>de</strong> <strong>Datos</strong> existentes, <strong>de</strong> cada uno <strong>de</strong> lostipos presentados.2.2.5.1. <strong>Algoritmos</strong> <strong>de</strong> C<strong>la</strong>sificación (C<strong>la</strong>ssification Algorithms)En <strong>la</strong> C<strong>la</strong>sificación <strong>de</strong> <strong>Datos</strong> se <strong>de</strong>sarrol<strong>la</strong> una <strong>de</strong>scripción o mo<strong>de</strong>lo para cada una <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses presentesen <strong>la</strong> base <strong>de</strong> datos. Existen muchos métodos <strong>de</strong> c<strong>la</strong>sificación como aquellos basados en los árboles <strong>de</strong><strong>de</strong>cisión <strong>TDIDT</strong> como el ID3 y el C4.5, los métodos estadísticos, <strong>la</strong>s re<strong>de</strong>s neuronales, y los conjuntosdifusos, entre otros.A continuación se <strong>de</strong>scriben brevemente aquellos métodos <strong>de</strong> Aprendizaje Automático que han sido<strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> con cierto éxito:• <strong>Algoritmos</strong> estadísticos: Muchos algoritmos estadísticos han sido utilizados por los analistas para<strong>de</strong>tectar patrones inusuales en los datos y explicar dichos patrones mediante <strong>la</strong> utilización <strong>de</strong> mo<strong>de</strong>losestadísticos, como, por ejemplo, los mo<strong>de</strong>los lineales. Estos métodos se han ganado su lugar yseguirán siendo utilizados en los años veni<strong>de</strong>ros.20 Magdalena Servente Estado <strong>de</strong>l Arte


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente• Re<strong>de</strong>s Neuronales: <strong>la</strong>s re<strong>de</strong>s neuronales imitan <strong>la</strong> capacidad <strong>de</strong> <strong>la</strong> mente humana para encontrarpatrones. Han sido aplicadas con éxito en aplicaciones que trabajan sobre <strong>la</strong> c<strong>la</strong>sificación <strong>de</strong> losdatos.• <strong>Algoritmos</strong> genéticos: técnicas <strong>de</strong> optimización que utilizan procesos como el entrecruzamientogenético, <strong>la</strong> mutación y <strong>la</strong> selección natural en un diseño basado en los conceptos <strong>de</strong> <strong>la</strong> evoluciónnatural.• Método <strong>de</strong>l vecino más cercano: es una técnica que c<strong>la</strong>sifica cada registro <strong>de</strong> un conjunto <strong>de</strong> datosen base a <strong>la</strong> combinación <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses <strong>de</strong> los k registros más simi<strong>la</strong>res. Generalmente se utiliza enbases <strong>de</strong> datos históricas.• Reg<strong>la</strong>s <strong>de</strong> inducción: <strong>la</strong> extracción <strong>de</strong> reg<strong>la</strong>s si-entonces a partir <strong>de</strong> datos <strong>de</strong> importancia estadística.• Visualización <strong>de</strong> los datos: <strong>la</strong> interpretación visual <strong>de</strong> <strong>la</strong>s re<strong>la</strong>ciones entre datos multidimensionales• C<strong>la</strong>sificadores basados en instancias o ejemplos: Una manera <strong>de</strong> c<strong>la</strong>sificar un caso es a partir <strong>de</strong> uncaso simi<strong>la</strong>r cuya c<strong>la</strong>se es conocida, y pre<strong>de</strong>cir que el caso pertenecerá a esa misma c<strong>la</strong>se. Estafilosofía es <strong>la</strong> base para los sistemas basados en instancias, que c<strong>la</strong>sifican nuevos casos refiriéndose acasos simi<strong>la</strong>res recordados. Un c<strong>la</strong>sificador basado en instancias necesita teorías simbólicas. Losproblemas centrales <strong>de</strong> este tipo <strong>de</strong> sistemas se pue<strong>de</strong>n resumir en tres preguntas: ¿cuáles casos <strong>de</strong>entrenamiento <strong>de</strong>ben ser recordados?, ¿cómo pue<strong>de</strong> medirse <strong>la</strong> similitud entre los casos?, y ¿cómo<strong>de</strong>be re<strong>la</strong>cionarse el nuevo caso a los casos recordados?Los métodos <strong>de</strong> aprendizaje basados en reg<strong>la</strong>s <strong>de</strong> c<strong>la</strong>sificación buscan obtener reg<strong>la</strong>s o árboles <strong>de</strong> <strong>de</strong>cisiónque particionen un grupo <strong>de</strong> datos en c<strong>la</strong>ses pre<strong>de</strong>finidas. Para cualquier dominio real, el espacio <strong>de</strong> datoses <strong>de</strong>masiado gran<strong>de</strong> como para realizar una búsqueda exhaustiva en el mismo.En cuanto a los métodos inductivos, <strong>la</strong> elección <strong>de</strong>l atributo para cada uno <strong>de</strong> los nodos se basa en <strong>la</strong>ganancia <strong>de</strong> entropía generada por cada uno <strong>de</strong> los atributos. Una vez que se ha recopi<strong>la</strong>do <strong>la</strong> informaciónacerca <strong>de</strong> <strong>la</strong> distribución <strong>de</strong> todas <strong>la</strong>s c<strong>la</strong>ses, <strong>la</strong> ganancia en <strong>la</strong> entropía se calcu<strong>la</strong> utilizando <strong>la</strong> teoría <strong>de</strong> <strong>la</strong>información o bien el índice <strong>de</strong> Gini [Joshi, 1997].2.2.5.2. <strong>Algoritmos</strong> <strong>de</strong> reg<strong>la</strong>s <strong>de</strong> asociaciónUna reg<strong>la</strong> <strong>de</strong> asociación es una reg<strong>la</strong> que implica ciertas re<strong>la</strong>ciones <strong>de</strong> asociación entre distintos objetos<strong>de</strong> una base <strong>de</strong> datos, como pue<strong>de</strong> ser: “ocurren juntos” o “uno implica lo otro”. Dado un conjunto <strong>de</strong>Estado <strong>de</strong>l Arte Magdalena Servente 21


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentetransacciones, don<strong>de</strong> cada transacción es un conjunto <strong>de</strong> ítems, una reg<strong>la</strong> <strong>de</strong> asociación es una expresión<strong>de</strong> <strong>la</strong> forma XY, don<strong>de</strong> X e Y son conjuntos <strong>de</strong> ítems. Un ejemplo <strong>de</strong> reg<strong>la</strong> <strong>de</strong> asociación sería: “30% <strong>de</strong><strong>la</strong>s transacciones que contienen niños, también contienen pañales; 2% <strong>de</strong> <strong>la</strong>s transacciones contienenambas cosas”. En este caso el 30% es el nivel <strong>de</strong> confianza <strong>de</strong> <strong>la</strong> reg<strong>la</strong> y 2% es <strong>la</strong> cantidad <strong>de</strong> casos querespaldan <strong>la</strong> reg<strong>la</strong>. La cuestión está en encontrar todas <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> asociación que satisfagan losrequerimientos <strong>de</strong> confianza mínima y máxima impuestos por el usuario.2.2.5.3. Análisis <strong>de</strong> SecuenciasEn este caso se trabaja sobre datos que tienen una cierta secuencia entre sí. Cada dato es una listaor<strong>de</strong>nada <strong>de</strong> transacciones (o ítems). Generalmente, existe un tiempo <strong>de</strong> transacción asociado con cadadato. El problema consiste en encontrar patrones secuenciales <strong>de</strong> acuerdo a un límite mínimo impuestopor el usuario, dicho límite se mi<strong>de</strong> en función al porcentaje <strong>de</strong> datos que contienen el patrón. Porejemplo, un patrón secuencial pue<strong>de</strong> estar dado por los usuarios <strong>de</strong> un vi<strong>de</strong>o club que alqui<strong>la</strong>n “ArmaMortal”, luego “Arma Mortal 2”, “Arma Mortal 3” y finalmente “Arma Mortal 4”, lo cual no implica quetodos lo hagan en ese or<strong>de</strong>n.2.3. APRENDIZAJE AUTOMÁTICO Y MINERÍA DE DATOSLa automatización <strong>de</strong>l proceso <strong>de</strong> aprendizaje se conoce como Aprendizaje Automático. La Minería <strong>de</strong><strong>Datos</strong> es un caso especial <strong>de</strong> Aprendizaje Automático don<strong>de</strong> el escenario observado es una base <strong>de</strong> datos.Los gráficos que se encuentran a continuación explican este concepto [Holsheimer, Siebes, 1994].EejemplosCcodificación <strong>de</strong> losejemplosMLFigura 2.6. Diagrama <strong>de</strong> Aprendizaje AutomáticoEn <strong>la</strong> figura 2.6, el entorno E representa el mundo real, el entorno sobre el cual se realiza el aprendizaje. Erepresenta un número finito <strong>de</strong> observaciones u objetos que son codificados en algún formato legible paraAprendizaje Automático. El conjunto <strong>de</strong> ejemplos codificados constituye el conjunto <strong>de</strong> entrenamientopara el sistema <strong>de</strong> aprendizaje automático.Por su <strong>la</strong>do, en <strong>la</strong> figura 2.7, <strong>la</strong> codificación C es reemp<strong>la</strong>zada por una base <strong>de</strong> datos, que mo<strong>de</strong><strong>la</strong> elentorno. Cada estado en <strong>la</strong> base <strong>de</strong> datos refleja algún estado <strong>de</strong> E, y cada transición <strong>de</strong> estados en <strong>la</strong> base22 Magdalena Servente Estado <strong>de</strong>l Arte


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente<strong>de</strong> datos representa una transición <strong>de</strong> estados en E. El algoritmo utilizado para realizar <strong>la</strong> minería <strong>de</strong> datosconstruye entonces un mo<strong>de</strong>lo a partir <strong>de</strong> los datos en <strong>la</strong> base <strong>de</strong> datos.EejemplosBDcodificación <strong>de</strong> losejemplosDMFigura 2.7. Diagrama <strong>de</strong> Minería <strong>de</strong> <strong>Datos</strong>Aunque a simple vista, <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> parece muy simi<strong>la</strong>r a Aprendizaje Automático, hayimportantes diferencias que <strong>de</strong>ben tenerse en cuenta. La base <strong>de</strong> datos generalmente se construye confines distintos a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong>, con lo cual <strong>la</strong> base se diseña según los requerimientos <strong>de</strong>l sistema yno según los requerimientos <strong>de</strong>l algoritmo <strong>de</strong> aprendizaje.2.3.1. AplicacionesA continuación se <strong>de</strong>scriben algunos algoritmos <strong>de</strong> Aprendizaje Automático que han sido utilizados conéxito en <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong>. Algunos <strong>de</strong> ellos son generales y pue<strong>de</strong>n ser utilizados en varios dominios<strong>de</strong> conocimiento, mientras que otros fueron diseñados para dominios particu<strong>la</strong>res.2.3.1.1. ID3Este sistema ha sido el que más impacto ha tenido en <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong>. Desarrol<strong>la</strong>do en los añosochenta por Quin<strong>la</strong>n, ID3 significa Induction Decision Trees, y es un sistema <strong>de</strong> aprendizaje supervisadoque construye árboles <strong>de</strong> <strong>de</strong>cisión a partir <strong>de</strong> un conjunto <strong>de</strong> ejemplos. Estos ejemplos son tup<strong>la</strong>scompuestas por varios atributos y una única c<strong>la</strong>se. El dominio <strong>de</strong> cada atributo <strong>de</strong> estas tup<strong>la</strong>s estálimitado a un conjunto <strong>de</strong> valores. Las primeras versiones <strong>de</strong>l ID3 generaban <strong>de</strong>scripciones para dosc<strong>la</strong>ses: positiva y negativa. En <strong>la</strong>s versiones posteriores, se eliminó esta restricción, pero se mantuvo <strong>la</strong>restricción <strong>de</strong> c<strong>la</strong>ses disjuntas. ID3 genera <strong>de</strong>scripciones que c<strong>la</strong>sifican cada uno <strong>de</strong> los ejemplos <strong>de</strong>lconjunto <strong>de</strong> entrenamiento.Este sistema tiene una buena performance en un amplio rango <strong>de</strong> aplicaciones, entre <strong>la</strong>s cuales po<strong>de</strong>mosnombrar, aplicaciones <strong>de</strong> dominios médicos, artificiales y el análisis <strong>de</strong> juegos <strong>de</strong> ajedrez. El nivel <strong>de</strong>precisión en <strong>la</strong> c<strong>la</strong>sificación es alto. Sin embargo, el sistema no hace uso <strong>de</strong>l conocimiento <strong>de</strong>l dominio.A<strong>de</strong>más, muchas veces los árboles son <strong>de</strong>masiado frondosos, lo cual conlleva a una difícil interpretación.En estos casos pue<strong>de</strong>n ser transformados en reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión para hacerlos más comprensibles.Estado <strong>de</strong>l Arte Magdalena Servente 23


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente2.3.1.2. C4.5El C4.5 es una extensión <strong>de</strong>l ID3 que permite trabajar con valores continuos para los atributos, separandolos posibles resultados en dos ramas: una para aquellos A i N. Este algoritmo fuepropuesto por Quin<strong>la</strong>n en 1993. El algoritmo C4.5 genera un árbol <strong>de</strong> <strong>de</strong>cisión a partir <strong>de</strong> los datosmediante particiones realizadas recursivamente. El árbol se construye mediante <strong>la</strong> estrategia <strong>de</strong>profundidad-primero (<strong>de</strong>pth-first). El algoritmo consi<strong>de</strong>ra todas <strong>la</strong>s pruebas posibles que pue<strong>de</strong>n dividir elconjunto <strong>de</strong> datos y selecciona <strong>la</strong> prueba que resulta en <strong>la</strong> mayor ganancia <strong>de</strong> información. Para cadaatributo discreto, se consi<strong>de</strong>ra una prueba con n resultados, siendo n el número <strong>de</strong> valores posibles quepue<strong>de</strong> tomar el atributo. Para cada atributo continuo, se realiza una prueba binaria sobre cada uno <strong>de</strong> losvalores que toma el atributo en los datos.2.3.1.3. AQ15El AQ15 fue <strong>de</strong>sarrol<strong>la</strong>do por Michalski. Es un sistema <strong>de</strong> aprendizaje inductivo que genera reg<strong>la</strong>s <strong>de</strong><strong>de</strong>cisión, don<strong>de</strong> el antece<strong>de</strong>nte es una fórmu<strong>la</strong> lógica. Una característica particu<strong>la</strong>r <strong>de</strong> este sistema es <strong>la</strong>inducción constructiva (constructive induction), es <strong>de</strong>cir, el uso <strong>de</strong> conocimientos <strong>de</strong>l dominio paragenerar nuevos atributos que no están presentes en los datos <strong>de</strong> entrada.Al igual que el ID3, el AQ15 está diseñado para <strong>la</strong> generación <strong>de</strong> reg<strong>la</strong>s fuertes, es <strong>de</strong>cir, que para cadac<strong>la</strong>se, se construye una reg<strong>la</strong> que cubre todos los ejemplos positivos y ningún ejemplo negativo. Elsistema soluciona el problema <strong>de</strong> los ejemplos incompletos o inconsistentes mediante un pre o postprocesamiento. En el post procesamiento, a<strong>de</strong>más, se reduce <strong>de</strong> forma drástica <strong>la</strong> cantidad <strong>de</strong> reg<strong>la</strong>sgeneradas mediante el truncamiento <strong>de</strong> reg<strong>la</strong>s, el cual no afecta <strong>la</strong> precisión <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s obtenidas.AQ15 ha sido testeado en dominios médicos, como el diagnóstico en <strong>la</strong> limfografía, diagnóstico <strong>de</strong> cáncer<strong>de</strong> mama y <strong>la</strong> ubicación <strong>de</strong>l tumor primario. En estos casos, se obtuvieron reg<strong>la</strong>s con el mismo nivel <strong>de</strong>precisión que el <strong>de</strong> los expertos humanos. En todos los casos, los datos <strong>de</strong> entrenamiento son conjuntoschicos, <strong>de</strong> unos cientos <strong>de</strong> ejemplos.2.3.1.4. CN2El sistema CN2, <strong>de</strong>sarrol<strong>la</strong>do por C<strong>la</strong>rk y Niblett, es una adaptación <strong>de</strong>l AQ15. La gran <strong>de</strong>sventaja <strong>de</strong>lAQ15 es que elimina los ruidos mediante pre y post procesamiento y no durante <strong>la</strong> ejecución <strong>de</strong><strong>la</strong>lgoritmo. El objetivo <strong>de</strong>l CN2 es, entonces, incorporar el manejo <strong>de</strong> datos ruidosos al algoritmo en sí.Combina entonces <strong>la</strong>s técnicas <strong>de</strong> poda utilizadas en el ID3, con <strong>la</strong>s técnicas <strong>de</strong> reg<strong>la</strong>s condicionalesutilizadas en el AQ15.24 Magdalena Servente Estado <strong>de</strong>l Arte


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEl CN2 genera reg<strong>la</strong>s simples y comprensibles en dominios don<strong>de</strong> los datos pue<strong>de</strong>n tener ruido.Construye reg<strong>la</strong>s probabilísticas, es <strong>de</strong>cir, el antece<strong>de</strong>nte en cada reg<strong>la</strong> cubre ejemplos positivos <strong>de</strong> unac<strong>la</strong>se, pero también pue<strong>de</strong> cubrir ejemplos <strong>de</strong> otra c<strong>la</strong>se en menor número. De esta forma no restringe elespacio <strong>de</strong> búsqueda únicamente a aquel<strong>la</strong>s reg<strong>la</strong>s inferibles a partir <strong>de</strong> los ejemplos.La performance el ID3, AQ15 y CN2 ha sido comparada en dominios médicos y artificiales. Lasestructuras <strong>de</strong> conocimiento generadas en cada caso son <strong>de</strong> simi<strong>la</strong>r calidad y complejidad.2.3.1.5. DBLearnEl sistema DBLearn fue diseñado por Cai, Han y Cercone y utiliza conocimientos <strong>de</strong>l dominio paragenerar <strong>de</strong>scripciones para subconjuntos pre<strong>de</strong>finidos <strong>de</strong> una base <strong>de</strong> datos re<strong>la</strong>cional. Las característicasespeciales <strong>de</strong> este sistema son su estrategia <strong>de</strong> búsqueda <strong>de</strong> abajo hacia arriba (bottom up); el uso <strong>de</strong>conocimientos <strong>de</strong>l dominio como jerarquías <strong>de</strong> valores <strong>de</strong> atributos y el uso <strong>de</strong>l álgebra re<strong>la</strong>cional. Elconjunto <strong>de</strong> entrenamiento es una tab<strong>la</strong> <strong>de</strong> datos re<strong>la</strong>cional con n-tup<strong>la</strong>s.El sistema DBLearn es re<strong>la</strong>tivamente simple, ya que utiliza solo dos operaciones <strong>de</strong> generalización paraconstruir los <strong>de</strong>scriptores. La generalización está orientada a los atributos, lo cual limita el conjunto <strong>de</strong><strong>de</strong>scriptores que pue<strong>de</strong>n ser construidos. La performance <strong>de</strong>l sistema es buena, y <strong>la</strong> complejidad en eltiempo está en el or<strong>de</strong>n <strong>de</strong> los O(N logN), siendo N <strong>la</strong> cantidad inicial <strong>de</strong> tup<strong>la</strong>s.2.3.1.6. Meta-DendralEl sistema Meta-Dendral es un sistema especial para <strong>la</strong> generación <strong>de</strong> reg<strong>la</strong>s <strong>de</strong> conocimiento en <strong>la</strong>estereoscopia. Esta ciencia estudia <strong>la</strong> estructura tridimensional <strong>de</strong> <strong>la</strong> molécu<strong>la</strong>. El Meta-Dendral esinteresante porque utiliza un sistema <strong>de</strong> representación <strong>de</strong> conocimientos totalmente diferente a losanteriores. Al buscar generar reg<strong>la</strong>s que puedan pre<strong>de</strong>cir dón<strong>de</strong> se romperá <strong>la</strong> estructura <strong>de</strong> una molécu<strong>la</strong>,toma <strong>la</strong>s estructuras molecu<strong>la</strong>res como entrada.El sistema ha sido exitoso para encontrar reg<strong>la</strong>s <strong>de</strong> fragmentación <strong>de</strong>sconocidas hasta el momento. Sinembargo, <strong>la</strong> estrategia <strong>de</strong> búsqueda es ineficiente, ya que genera muchas reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión que luego soneliminadas en <strong>la</strong> etapa <strong>de</strong> optimización. Es muy difícil encontrar heurísticas que guíen <strong>la</strong> búsqueda y noexisten técnicas explícitas que ayu<strong>de</strong>n a eliminar ruidos o a <strong>de</strong>stacar casos especiales.Estado <strong>de</strong>l Arte Magdalena Servente 25


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente2.3.1.7. RADIX/RXEl sistema RX se utiliza para el <strong>de</strong>scubrimiento <strong>de</strong> re<strong>la</strong>ciones en bases <strong>de</strong> datos clínicas. La diferenciaimportante con otros sistemas es que incorpora <strong>la</strong> noción <strong>de</strong> tiempo: un dato es un conjunto <strong>de</strong> ejemplosque guardan información <strong>de</strong> un paciente en diferentes momentos, y los conocimientos generados son <strong>de</strong>naturaleza causal. El sistema divi<strong>de</strong> su proceso <strong>de</strong> <strong>de</strong>scubrimiento en dos etapas: primero genera hipótesisy, luego, utiliza técnicas avanzadas <strong>de</strong> estadística para validar<strong>la</strong>s.El sistema RX fue utilizado en una base <strong>de</strong> reumatología y sirvió para probar hipótesis acerca <strong>de</strong> <strong>la</strong>cantidad <strong>de</strong> droga prodnisone que aumenta el colesterol en <strong>la</strong> sangre. Sin embargo, <strong>la</strong> principal <strong>de</strong>sventaja<strong>de</strong> este sistema es que no utiliza información <strong>de</strong>l dominio para guiar <strong>la</strong> búsqueda. Una versión mejorada<strong>de</strong>l RX, el RADIX, sí lo hace.2.3.1.8. BACONEl sistema BACON utiliza algoritmos <strong>de</strong> análisis <strong>de</strong> datos para <strong>de</strong>scubrir re<strong>la</strong>ciones matemáticas entredatos numéricos. Ha re<strong>de</strong>scubierto leyes como <strong>la</strong> ley <strong>de</strong> Ohm para circuitos eléctricos y <strong>la</strong> ley <strong>de</strong><strong>de</strong>sp<strong>la</strong>zamiento <strong>de</strong> Arquími<strong>de</strong>s. Los datos <strong>de</strong> entrenamiento son numéricos y, normalmente, songeneradas en algún experimento previo. Cada tup<strong>la</strong> esta constituida por los valores <strong>de</strong> <strong>la</strong>s medicionesdurante el experimento.El sistema BACON tiene varias <strong>de</strong>sventajas: no consi<strong>de</strong>ra el ruido en los datos, ni <strong>la</strong> inconsistencia o losdatos incompletos. A<strong>de</strong>más, consi<strong>de</strong>ra que todas <strong>la</strong>s variables son relevantes, y explora todas <strong>la</strong>ssoluciones posibles utilizando un grafo, lo cual empeora consi<strong>de</strong>rablemente su performance.2.3.1.9. SLIQEl algoritmo SLIQ (Supervised Learning In Quest) fue <strong>de</strong>sarrol<strong>la</strong>do por el equipo Quest <strong>de</strong> IBM. Estealgoritmo utiliza los árboles <strong>de</strong> <strong>de</strong>cisión para c<strong>la</strong>sificar gran<strong>de</strong>s cantida<strong>de</strong>s <strong>de</strong> datos. El uso <strong>de</strong> técnicas <strong>de</strong>pre-or<strong>de</strong>namiento en <strong>la</strong> etapa <strong>de</strong> crecimiento <strong>de</strong>l árbol, evita los costos <strong>de</strong> or<strong>de</strong>namiento en cada uno <strong>de</strong>los nodos. SLIQ mantiene una lista or<strong>de</strong>nada in<strong>de</strong>pendiente <strong>de</strong> cada uno <strong>de</strong> los valores <strong>de</strong> los atributoscontinuos y una lista separada <strong>de</strong> cada una <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses. Un registro en <strong>la</strong> lista or<strong>de</strong>nada <strong>de</strong> atributosconsiste en el valor <strong>de</strong>l atributo y un índice a <strong>la</strong> c<strong>la</strong>se correspondiente en <strong>la</strong> lista <strong>de</strong> c<strong>la</strong>ses. SLIQconstruye el árbol <strong>de</strong> forma ancho-primero (breadth-first). Para cada uno <strong>de</strong> los atributos busca en <strong>la</strong> listacorrespondiente y calcu<strong>la</strong> los valores <strong>de</strong> entropía para cada uno <strong>de</strong> los nodos <strong>de</strong> <strong>la</strong> fronterasimultáneamente. A partir <strong>de</strong> <strong>la</strong> información obtenida se particionan los nodos <strong>de</strong> <strong>la</strong> frontera, y seexpan<strong>de</strong>n para obtener una nueva frontera.26 Magdalena Servente Estado <strong>de</strong>l Arte


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteAunque SLIQ trabaja con datos que pue<strong>de</strong>n estar en disco mientras se ejecuta el algoritmo, necesita quecierta información resida en memoria permanentemente durante <strong>la</strong> totalidad <strong>de</strong> <strong>la</strong> ejecución <strong>de</strong>l mismo.Dicha información crece proporcionalmente a <strong>la</strong> cantidad <strong>de</strong> registros <strong>de</strong> entrada, lo cual limita en granmedida <strong>la</strong> cantidad <strong>de</strong> registros <strong>de</strong> entrenamiento. Para solucionar este problema el equipo <strong>de</strong> <strong>de</strong>sarrollo<strong>de</strong>l Quest, ha <strong>de</strong>sarrol<strong>la</strong>do otro algoritmo <strong>de</strong> c<strong>la</strong>sificación basado en árboles <strong>de</strong> <strong>de</strong>cisión: el SPRINT(Sca<strong>la</strong>ble PaRallelizable INduction of <strong>de</strong>cision Trees). El SPRINT elimina todas <strong>la</strong>s restricciones <strong>de</strong>memoria presentes en el SLIQ.2.4 LA FAMILIA <strong>TDIDT</strong>La familia <strong>de</strong> los Top Down Induction Trees (<strong>TDIDT</strong>) pertenece a los métodos inductivos <strong>de</strong>l AprendizajeAutomático que apren<strong>de</strong>n a partir <strong>de</strong> ejemplos prec<strong>la</strong>sificados. En Minería <strong>de</strong> <strong>Datos</strong>, se utiliza paramo<strong>de</strong><strong>la</strong>r <strong>la</strong>s c<strong>la</strong>sificaciones en los datos mediante árboles <strong>de</strong> <strong>de</strong>cisión.2.4.1. Construcción <strong>de</strong> los árboles <strong>de</strong> <strong>de</strong>cisiónLos árboles <strong>TDIDT</strong>, a los cuales pertenecen los generados por el ID3 y pos el C4.5, se construyen a partir<strong>de</strong>l método <strong>de</strong> Hunt. El esqueleto <strong>de</strong> este método para construir un árbol <strong>de</strong> <strong>de</strong>cisión a partir <strong>de</strong> unconjunto T <strong>de</strong> datos <strong>de</strong> entrenamiento es muy simple. Sean <strong>la</strong>s c<strong>la</strong>ses {C 1 , C 2 ,. . ., C k }. Existen tresposibilida<strong>de</strong>s:1. T contiene uno o más casos, todos pertenecientes a un única c<strong>la</strong>se C j :El árbol <strong>de</strong> <strong>de</strong>cisión para T es una hoja i<strong>de</strong>ntificando <strong>la</strong> c<strong>la</strong>se C j .2. T no contiene ningún caso:El árbol <strong>de</strong> <strong>de</strong>cisión es una hoja, pero <strong>la</strong> c<strong>la</strong>se asociada <strong>de</strong>be ser <strong>de</strong>terminada por informaciónque no pertenece a T. Por ejemplo, una hoja pue<strong>de</strong> escogerse <strong>de</strong> acuerdo a conocimientos <strong>de</strong> base<strong>de</strong>l dominio, como ser <strong>la</strong> c<strong>la</strong>se mayoritaria.3. T contiene casos pertenecientes a varias c<strong>la</strong>ses:En este caso, <strong>la</strong> i<strong>de</strong>a es refinar T en subconjuntos <strong>de</strong> casos que tiendan, o parezcan ten<strong>de</strong>r haciauna colección <strong>de</strong> casos pertenecientes a una única c<strong>la</strong>se. Se elige una prueba basada en un únicoEstado <strong>de</strong>l Arte Magdalena Servente 27


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteatributo, que tiene uno o más resultados, mutuamente excluyentes {O 1 , O 2 ,. . ., O n }. T separticiona en los subconjuntos T 1 , T 2 ,. . ., T n don<strong>de</strong> T i contiene todos los casos <strong>de</strong> T que tienen elresultado O i para <strong>la</strong> prueba elegida. El árbol <strong>de</strong> <strong>de</strong>cisión para T consiste en un nodo <strong>de</strong> <strong>de</strong>cisióni<strong>de</strong>ntificando <strong>la</strong> prueba, con una rama para cada resultado posible. El mecanismo <strong>de</strong> construcción<strong>de</strong>l árbol se aplica recursivamente a cada subconjunto <strong>de</strong> datos <strong>de</strong> entrenamientos, para que <strong>la</strong> i-ésima rama lleve al árbol <strong>de</strong> <strong>de</strong>cisión construido por el subconjunto T i <strong>de</strong> datos <strong>de</strong> entrenamiento.2.4.1.1. Cálculo <strong>de</strong> <strong>la</strong> Ganancia <strong>de</strong> InformaciónEn los casos, en los que el conjunto T contiene ejemplos pertenecientes a distintas c<strong>la</strong>ses, se realiza unaprueba sobre los distintos atributos y se realiza una partición según el “mejor” atributo. Para encontrar el“mejor” atributo, se utiliza <strong>la</strong> teoría <strong>de</strong> <strong>la</strong> información, que sostiene que <strong>la</strong> información se maximizacuando <strong>la</strong> entropía se minimiza. La entropía <strong>de</strong>termina <strong>la</strong> azarosidad o <strong>de</strong>sestructuración <strong>de</strong> un conjunto.Supongamos que tenemos ejemplos positivos y negativos. En este contexto <strong>la</strong> entropía <strong>de</strong>l subconjunto S i ,H(S i ), pue<strong>de</strong> calcu<strong>la</strong>rse como:H ( S ) p log p p log p (2.1)i+ + − −= −i i−i i+Don<strong>de</strong> pies <strong>la</strong> probabilidad <strong>de</strong> que un ejemplo tomado al azar <strong>de</strong> S i sea positivo. Esta probabilidadpue<strong>de</strong> calcu<strong>la</strong>rse como+i+ni=n + np (2.2)+i−iSiendo n <strong>la</strong> cantidad <strong>de</strong> ejemplos positivos <strong>de</strong> S i , y+ i−ni<strong>la</strong> cantidad <strong>de</strong> ejemplos negativos.−+La probabilidad pise calcu<strong>la</strong> en forma análoga a pi, reemp<strong>la</strong>zando <strong>la</strong> cantidad <strong>de</strong> ejemplos positivospor <strong>la</strong> cantidad <strong>de</strong> ejemplos negativos, y viceversa.Generalizando <strong>la</strong> expresión (2.1) para cualquier tipo <strong>de</strong> ejemplos, obtenemos <strong>la</strong> fórmu<strong>la</strong> general <strong>de</strong> <strong>la</strong>entropía:in∑H ( S ) = − p log p (2.3)i=1ii28 Magdalena Servente Estado <strong>de</strong>l Arte


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEn todos los cálculos re<strong>la</strong>cionados con <strong>la</strong> entropía, <strong>de</strong>finimos 0log0 igual a 0.Si el atributo at divi<strong>de</strong> el conjunto S en los subconjuntos S i , i = 1,2, . .. . . , n, entonces, <strong>la</strong> entropía total<strong>de</strong>l sistema <strong>de</strong> subconjuntos será:n∑i=1( S ) ⋅ H( )H ( S,at)= P(2.4)iS iDon<strong>de</strong> H ( S i) es <strong>la</strong> entropía <strong>de</strong>l subconjunto S iy ( S i)P es <strong>la</strong> probabilidad <strong>de</strong> que un ejemplopertenezca a S . Pue<strong>de</strong> calcu<strong>la</strong>rse, utilizando los tamaños re<strong>la</strong>tivos <strong>de</strong> los subconjuntos, como:iP( S )SSii= (2.5)La ganancia en información pue<strong>de</strong> calcu<strong>la</strong>rse como <strong>la</strong> disminución en entropía. Es <strong>de</strong>cir:( S, at) H ( S) − H ( S at)I ,= (2.6)Don<strong>de</strong> H ( S)es el valor <strong>de</strong> <strong>la</strong> entropía a priori, antes <strong>de</strong> realizar <strong>la</strong> subdivisión, y ( S at)<strong>de</strong> <strong>la</strong> entropía <strong>de</strong>l sistema <strong>de</strong> subconjuntos generados por <strong>la</strong> partición según at.H , es el valorEl uso <strong>de</strong> <strong>la</strong> entropía para evaluar el mejor atributo no es el único método existente o utilizado enAprendizaje Automático. Sin embargo, es el utilizado por Quin<strong>la</strong>n al <strong>de</strong>sarrol<strong>la</strong>r el ID3 y su sucesor elC4.5.2.4.1.2. <strong>Datos</strong> NuméricosLos árboles <strong>de</strong> <strong>de</strong>cisión pue<strong>de</strong>n generarse tanto a partir <strong>de</strong> atributos discretos como <strong>de</strong> atributosnuméricos. Cuando se trabaja con atributos discretos, <strong>la</strong> partición <strong>de</strong>l conjunto según el valor <strong>de</strong> unatributo es simple. Por ejemplo, agrupamos todos los animales que tengan pico, siendo tiene_pico unatributo y sus posibles valores si y no. En el caso <strong>de</strong> los atributos numéricos esta división no es tansimple. Por ejemplo, si queremos partir los días <strong>de</strong> un mes en función a <strong>la</strong> cantidad <strong>de</strong> lluvia caída, es casiimposible que encontremos dos días con exactamente <strong>la</strong> misma cantidad <strong>de</strong> precipitaciones.Estado <strong>de</strong>l Arte Magdalena Servente 29


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligentePara solucionar este problema, pue<strong>de</strong> recurrirse a <strong>la</strong> binarización. Este método consiste en formar dosrangos <strong>de</strong> valores <strong>de</strong> acuerdo al valor <strong>de</strong> un atributo, que pue<strong>de</strong>n tomarse como simbólicos. Por ejemplo,si en un día hubo 100ml <strong>de</strong> lluvia, pue<strong>de</strong>n crearse los intervalos [0,100) y [100, +∝) y el cálculo <strong>de</strong> <strong>la</strong>entropía se realiza como si los dos intervalos fueran los dos valores simbólicos que pue<strong>de</strong> tomar e<strong>la</strong>tributo.2.4.1.3. Poda <strong>de</strong> los árboles generadosExisten varias razones para <strong>la</strong> poda <strong>de</strong> los árboles generados por los métodos <strong>de</strong> <strong>TDIDT</strong> [Michalski et al,1998]. Entre el<strong>la</strong>s po<strong>de</strong>mos nombrar <strong>la</strong> sobregeneralización, <strong>la</strong> evaluación <strong>de</strong> atributos poco importantes osignificativos, y el gran tamaño <strong>de</strong>l árbol obtenido. En el primer caso, un árbol pue<strong>de</strong> haber sidoconstruido a partir <strong>de</strong> ejemplos con ruido, con lo cual algunas ramas <strong>de</strong>l árbol pue<strong>de</strong>n ser engañosas. Encuanto a <strong>la</strong> evaluación <strong>de</strong> atributos no relevantes, éstos <strong>de</strong>ben podarse ya que sólo agregan niveles en elárbol y no contribuyen a <strong>la</strong> ganancia <strong>de</strong> información. Por último, si el árbol obtenido es <strong>de</strong>masiadoprofundo o <strong>de</strong>masiado frondoso, se dificulta <strong>la</strong> interpretación por parte <strong>de</strong>l usuario, con lo cual hubierasido lo mismo utilizar un método <strong>de</strong> caja negra.Existen dos enfoques para podar los árboles: <strong>la</strong> pre-poda (preprunning) y <strong>la</strong> post-poda (postprunning). Enel primer caso se <strong>de</strong>tiene el crecimiento <strong>de</strong>l árbol cuando <strong>la</strong> ganancia <strong>de</strong> información producida al dividirun conjunto no supera un umbral <strong>de</strong>terminado. En <strong>la</strong> post-poda se podan algunas ramas una vez que se haterminado <strong>de</strong> construir el árbol.El primer enfoque, tiene <strong>la</strong> atracción <strong>de</strong> que no se pier<strong>de</strong> tiempo en construir una estructura que luego serásimplificada en el árbol final. El método típico en estos casos es buscar <strong>la</strong> mejor manera <strong>de</strong> partir elsubconjunto y evaluar <strong>la</strong> partición <strong>de</strong>s<strong>de</strong> el punto <strong>de</strong> vista estadístico mediante <strong>la</strong> teoría <strong>de</strong> <strong>la</strong> ganancia <strong>de</strong>información, reducción <strong>de</strong> errores, etc. Si esta evaluación es menor que un límite pre<strong>de</strong>terminado, <strong>la</strong>división se <strong>de</strong>scarta y el árbol para el subconjunto es simplemente <strong>la</strong> hoja más apropiada. Sin embargo,este tipo <strong>de</strong> método tiene <strong>la</strong> contra <strong>de</strong> que no es fácil <strong>de</strong>tener un particionamiento en el momentoa<strong>de</strong>cuado, un límite muy alto pue<strong>de</strong> terminar con <strong>la</strong> partición antes <strong>de</strong> que los beneficios <strong>de</strong> particionessubsiguientes parezcan evi<strong>de</strong>ntes, mientras que un límite <strong>de</strong>masiado bajo resulta en una simplificación<strong>de</strong>masiado leve.El segundo enfoque es, entonces, el utilizado por el ID3 y el C4.5. Una vez construido el árbol se proce<strong>de</strong>a su simplificación según los criterios propios <strong>de</strong> cada uno <strong>de</strong> los algoritmos.30 Magdalena Servente Estado <strong>de</strong>l Arte


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente2.4.1.4. El Principio <strong>de</strong> Longitud <strong>de</strong> Descripción MínimaEl fin último <strong>de</strong> los sistemas <strong>de</strong> aprendizaje es apren<strong>de</strong>r una “teoría” <strong>de</strong>l dominio <strong>de</strong> los ejemplos, unateoría que es predictiva en el sentido <strong>de</strong> que es capaz <strong>de</strong> pre<strong>de</strong>cir <strong>la</strong> c<strong>la</strong>se <strong>de</strong> nuevos instancias. Al hab<strong>la</strong>r<strong>de</strong> teorías po<strong>de</strong>mos estar refiriéndonos a árboles o reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión entre otros.Existe un principio <strong>de</strong> <strong>la</strong> ciencia conocido como Afeitadora <strong>de</strong> Occam (Occam’s Razor) [Mitchell,2000a], que <strong>de</strong>termina que cuando todas <strong>la</strong>s condiciones son iguales, se prefieren <strong>la</strong>s teorías simples. Es<strong>de</strong>cir, <strong>la</strong> mejor teoría científica es aquel<strong>la</strong> que explica todos los hechos y tiene el menor tamaño. ComoEinstein sostuvo: “Todo <strong>de</strong>be hacerse lo más simple posible, pero no más simple que eso”. ¿Cómoaplicamos <strong>la</strong> Afeitadora <strong>de</strong> Occam al Aprendizaje Automático? En el caso <strong>de</strong> estos sistemas, todas <strong>la</strong>steorías generadas contienen errores, po<strong>de</strong>mos <strong>de</strong>cir que estos errores son como <strong>la</strong>s excepciones a <strong>la</strong>misma. Entonces, para asegurarnos que todas <strong>la</strong>s condiciones sean iguales, <strong>de</strong>bemos incluir <strong>la</strong>sexcepciones en <strong>la</strong> teoría.El Principio <strong>de</strong> Longitud <strong>de</strong> Descripción Mínima (MDL) [Joachims et al, 1995], [Mitchell, 2000b],[Quin<strong>la</strong>n, 1993d;1995], [Quin<strong>la</strong>n y Cameron-Jones, 1995] sostiene que <strong>la</strong> mejor teoría para un conjunto<strong>de</strong> datos es aquel<strong>la</strong> que minimiza el tamaño <strong>de</strong> <strong>la</strong> teoría y <strong>la</strong> cantidad <strong>de</strong> información necesaria paraespecificar <strong>la</strong>s excepciones. Des<strong>de</strong> el punto <strong>de</strong> vista <strong>de</strong>l Aprendizaje Automático esto significa que dadoun conjunto <strong>de</strong> instancias, un sistema <strong>de</strong> aprendizaje infiere una teoría a partir <strong>de</strong> el<strong>la</strong>s. Supongamos unaanalogía con el campo <strong>de</strong> <strong>la</strong>s comunicaciones: <strong>la</strong> teoría con <strong>la</strong>s excepciones <strong>de</strong>be ser transmitida por uncanal perfecto. El MDL sostiene que <strong>la</strong> mejor generalización es aquel<strong>la</strong> que requiere <strong>la</strong> menor cantidad <strong>de</strong>bits para transmitir <strong>la</strong> generalización junto con los ejemplos a partir <strong>de</strong> <strong>la</strong> cual fue generada. Esto evita <strong>la</strong>steorías que satisfacen los datos al extremo sobreajuste, ya que los ejemplos se transmiten también, y <strong>la</strong>steorías <strong>de</strong>masiado extensas serán penalizadas. Por otro <strong>la</strong>do, también se pue<strong>de</strong> transmitir <strong>la</strong> teoría nu<strong>la</strong>que no ayuda en lo más mínimo al transmitir los ejemplos. Entonces, pue<strong>de</strong>n transmitirse tanto <strong>la</strong>s teoríassimples como aquel<strong>la</strong>s muy complejas y el MDL provee una forma <strong>de</strong> medir <strong>la</strong> performance <strong>de</strong> losalgoritmos basándose en los datos <strong>de</strong> entrenamiento únicamente. Esta parece ser <strong>la</strong> solución i<strong>de</strong>al alproblema <strong>de</strong> medir <strong>la</strong> performance.Veamos cómo aplicamos el principio MDL. Supongamos que un sistema <strong>de</strong> aprendizaje genera una teoríaT, basada en un conjunto <strong>de</strong> entrenamiento E, y requiere una cierta cantidad <strong>de</strong> bits L[T] para codificar <strong>la</strong>teoría. Dada <strong>la</strong> teoría, el conjunto <strong>de</strong> entrenamiento pue<strong>de</strong> codificarse en una cantidad L[E/T] <strong>de</strong> bits.L[E/T] está dada por <strong>la</strong> función <strong>de</strong> ganancia <strong>de</strong> información sumando todos los miembros <strong>de</strong>l conjunto <strong>de</strong>entrenamiento. La longitud <strong>de</strong> <strong>de</strong>scripción total <strong>de</strong> <strong>la</strong> teoría es L[E]+L[E/T]. El principio MDLrecomienda <strong>la</strong> teoría T que minimiza esta suma.Recor<strong>de</strong>mos que los algoritmos <strong>de</strong> <strong>la</strong> familia <strong>TDIDT</strong> realizan una búsqueda en el espacio <strong>de</strong> hipótesisposibles, constituido por todos los árboles <strong>de</strong> <strong>de</strong>cisión posibles. Su sesgo inductivo, siguiendo el principioEstado <strong>de</strong>l Arte Magdalena Servente 31


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente<strong>de</strong> <strong>la</strong> Afeitadora <strong>de</strong> Occam, es una preferencia sobre los árboles pequeños frente a los árboles másprofundos y frondosos.2.4.2. Atributos DesconocidosCuando explicamos el método <strong>de</strong> Hunt, consi<strong>de</strong>ramos que todos los resultados <strong>de</strong> todas <strong>la</strong>s pruebas paratodos los casos eran conocidos. Dividimos el conjunto T <strong>de</strong> datos <strong>de</strong> entrenamiento en los subconjuntos{T i } según los resultados <strong>de</strong> una prueba en particu<strong>la</strong>r, y, una vez construido el árbol, c<strong>la</strong>sificamos un casotomando <strong>la</strong> rama correspondiente al resultado <strong>de</strong> <strong>la</strong> prueba <strong>de</strong> cada nodo <strong>de</strong> <strong>de</strong>cisión. Como cada pruebase basa en un único atributo, el resultado <strong>de</strong> una prueba no pue<strong>de</strong> <strong>de</strong>terminarse si no se conoce el valor <strong>de</strong><strong>la</strong>tributo.¿Qué pasa cuando los datos están incompletos como ocurre generalmente con cualquier conjunto <strong>de</strong> datos<strong>de</strong> <strong>la</strong> vida real? Po<strong>de</strong>mos tomar dos caminos posibles ante los datos incompletos: <strong>de</strong>scartar unaproporción importante <strong>de</strong> los datos por incompletos y <strong>de</strong>c<strong>la</strong>rar algunos casos como inc<strong>la</strong>sificables, oadaptar los algoritmos para po<strong>de</strong>r trabajar con valores <strong>de</strong> atributos faltantes. En <strong>la</strong> mayoría <strong>de</strong> los casos, <strong>la</strong>primera opción es inaceptable. Para po<strong>de</strong>r aplicar <strong>la</strong> segunda opción, hay tres cuestiones importantes que<strong>de</strong>ben ser tenidas en cuenta:1. Selección <strong>de</strong> una prueba en <strong>la</strong> cual <strong>la</strong> partición <strong>de</strong>l conjunto <strong>de</strong> entrenamiento se realiza en base a uncriterio heurístico como ser <strong>la</strong> ganancia o <strong>la</strong> proporción <strong>de</strong> ganancia. Si dos pruebas distintas utilizanatributos con distinta cantidad <strong>de</strong> valores <strong>de</strong>sconocidos, ¿cómo <strong>de</strong>be tenerse esto en cuenta al medirsu importancia re<strong>la</strong>tiva?2. Una vez que una prueba ha sido seleccionada, los casos <strong>de</strong> entrenamiento con valores <strong>de</strong>sconocidospara los atributos relevantes no pue<strong>de</strong>n ser asociados con una respuesta particu<strong>la</strong>r <strong>de</strong> <strong>la</strong> prueba, y, porlo tanto, no pue<strong>de</strong>n asignarse a un subconjunto {T i }. ¿Cómo <strong>de</strong>ben tratarse estos casos durante <strong>la</strong>partición?3. Cuando el árbol <strong>de</strong> <strong>de</strong>cisión se utiliza para c<strong>la</strong>sificar un caso nuevo, ¿cómo <strong>de</strong>be proce<strong>de</strong>r el sistemaal encontrarse con un valor <strong>de</strong> atributo <strong>de</strong>sconocido para el nodo <strong>de</strong> <strong>de</strong>cisión que está tratando <strong>de</strong>evaluar?Varios autores han tratado <strong>de</strong> resolver estos problemas, generalmente rellenando los valores <strong>de</strong>sconocidoscon los valores más frecuentes. En un estudio realizado por Quin<strong>la</strong>n, [Quin<strong>la</strong>n, 1989], se comparan <strong>la</strong>ssoluciones más comunes a este problema. El autor llega a <strong>la</strong> conclusión general <strong>de</strong> que existen varios32 Magdalena Servente Estado <strong>de</strong>l Arte


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteenfoques que son notablemente inferiores, pero no existe ningún enfoque que sea c<strong>la</strong>ramente superior. Acontinuación se presenta un resumen <strong>de</strong>l estudio.2.4.2.1. Estudio sobre datos con atributos <strong>de</strong>sconocidos en <strong>la</strong> Inducción2.4.2.1.1. Métodos analizadosTodos los enfoques <strong>de</strong>scriptos a continuación fueron implementados como variantes <strong>de</strong> un programa queconstruye un árbol <strong>de</strong> <strong>de</strong>cisión utilizando <strong>la</strong> proporción <strong>de</strong> ganancia [Quin<strong>la</strong>n, 1989]. Los árbolesproducidos no fueron podados. Varios enfoques para solucionar los tres problemas p<strong>la</strong>nteados fueronexplorados. Cada uno <strong>de</strong> ellos tiene una letra i<strong>de</strong>ntificatoria, tal que una combinación <strong>de</strong> letras implicauna combinación <strong>de</strong> métodos.Al evaluar una prueba basada en el atributo AI -R -S -C -Ignorar los casos <strong>de</strong>l conjunto <strong>de</strong> entrenamiento con valores <strong>de</strong>sconocidosReducir <strong>la</strong> ganancia <strong>de</strong> información aparente al testear A en <strong>la</strong> proporción <strong>de</strong> casos convalores <strong>de</strong>sconocidos para A: si A tiene una proporción <strong>de</strong> valores <strong>de</strong>sconocidos <strong>de</strong>l x%, <strong>la</strong>prueba sobre A no dará información x% <strong>de</strong>l tiempo.“Completar” los valores <strong>de</strong>sconocidos <strong>de</strong> A antes <strong>de</strong> calcu<strong>la</strong>r <strong>la</strong> ganancia <strong>de</strong> A [Shapiro,1983], basándose en los valores <strong>de</strong> otros atributosCompletar los valores <strong>de</strong> A con el valor más frecuente para el atributo antes <strong>de</strong> calcu<strong>la</strong>r <strong>la</strong>ganancia.Al partir el conjunto <strong>de</strong> entrenamiento utilizando una prueba sobre el atributo A y un caso <strong>de</strong>entrenamiento tiene un valor <strong>de</strong>sconocido <strong>de</strong> A.I -S -Ignorar el casoDeterminar el valor <strong>de</strong> A utilizando el método <strong>de</strong> Shapiro y asignarlo al subconjuntocorrespondiente.C - Tratar el caso como si tuviera el valor más común <strong>de</strong> A.P -F -A -Asignar el caso a uno <strong>de</strong> los subconjuntos con probabilidad proporcional al número <strong>de</strong> casoscon valores conocidos en cada subconjunto.Asignar una fracción <strong>de</strong>l caso a cada subconjunto utilizando <strong>la</strong>s proporciones explicadas enel inciso anterior.Incluir el caso en todos los subconjuntosU - Desarrol<strong>la</strong>r una rama separada para los casos <strong>de</strong> valores <strong>de</strong>sconocidos <strong>de</strong> A.Estado <strong>de</strong>l Arte Magdalena Servente 33


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteAl c<strong>la</strong>sificar un caso nuevo con un valor <strong>de</strong>sconocido <strong>de</strong>l atributo A que <strong>de</strong>be ser evaluado.U -S -Si existe una rama especial para los valores <strong>de</strong>sconocidos <strong>de</strong> A, tomar<strong>la</strong>Determinar el resultado más probable <strong>de</strong> A y actuar <strong>de</strong> acuerdo con ello.C - Tratar el caso como si fuese el <strong>de</strong>l valor más común <strong>de</strong> A.F -H -Explorar todas <strong>la</strong>s ramas, combinando los resultados para reflejar <strong>la</strong>s probabilida<strong>de</strong>s <strong>de</strong> losdistintos resultados.Parar en este punto y asignar el caso a <strong>la</strong> c<strong>la</strong>se más frecuente.2.4.2.1.2. Casos analizados• Valores <strong>de</strong>sconocidos al particionar: los resultados <strong>de</strong> <strong>la</strong>s pruebas reve<strong>la</strong>n una c<strong>la</strong>ra superioridad <strong>de</strong>lRFF (asignar casos fraccionales a los subconjuntos) y una c<strong>la</strong>ra <strong>de</strong>sventaja <strong>de</strong>l RIF (ignorar los casos<strong>de</strong> entrenamiento con valores <strong>de</strong>sconocidos).• Valores <strong>de</strong>sconocidos al c<strong>la</strong>sificar: <strong>la</strong> estrategia <strong>de</strong> parar ante los valores <strong>de</strong>sconocidos dio muymalos resultados, mientras que todos <strong>la</strong>s otras estrategias dieron resultados simi<strong>la</strong>res• Valores <strong>de</strong>sconocidos al seleccionar <strong>la</strong>s pruebas: ignorar los valores <strong>de</strong>sconocidos dio resultadospeores que reducir <strong>la</strong> ganancia o completar los valores, pero no existió un método c<strong>la</strong>ramentesuperior entre estos dos últimos.2.4.2.1.3. Resultados obtenidosEl estudio se concentró en dominios con altos niveles <strong>de</strong> valores <strong>de</strong>sconocidos y conjuntos <strong>de</strong>entrenamiento chicos. Este estudio proporcionó evi<strong>de</strong>ncia para <strong>la</strong>s siguientes hipótesis:• En <strong>la</strong> evaluación <strong>de</strong> pruebas, los enfoques que ignoran los casos con valores <strong>de</strong>sconocidos (y por lotanto no tienen en cuenta <strong>la</strong> proporción <strong>de</strong> <strong>de</strong>sconocimiento) presentan malos resultados cuando estaproporción varía <strong>de</strong> atributo en atributo.• Cuando el conjunto <strong>de</strong> entrenamiento se divi<strong>de</strong> ignorando los casos con valores <strong>de</strong>sconocidos para e<strong>la</strong>tributo probado, se obtienen resultados pobres (esta es <strong>la</strong> forma en que el ID3 realiza <strong>la</strong>sparticiones). El enfoque <strong>de</strong> dividir los casos entre los subconjuntos resultó muy bueno.34 Magdalena Servente Estado <strong>de</strong>l Arte


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteDurante <strong>la</strong> c<strong>la</strong>sificación, tratar <strong>de</strong> <strong>de</strong>terminar el resultado más probable <strong>de</strong> una prueba, funciona bien enalgunos dominios (aquellos en los cuales <strong>la</strong> sustitución pue<strong>de</strong> realizarse con confianza), pero muy mal enotros. La combinación <strong>de</strong> todos los resultados posibles es más resilente, dando una mayor certeza en <strong>la</strong>c<strong>la</strong>sificación general.2.4.3. Transformación a Reg<strong>la</strong>s <strong>de</strong> DecisiónLos árboles <strong>de</strong> <strong>de</strong>cisión <strong>de</strong>masiado gran<strong>de</strong>s son difíciles <strong>de</strong> enten<strong>de</strong>r porque cada nodo <strong>de</strong>be serinterpretado <strong>de</strong>ntro <strong>de</strong>l contexto fijado por <strong>la</strong>s ramas anteriores. Cada prueba tiene sentido, so<strong>la</strong>mente, sise analiza junto con los resultados <strong>de</strong> <strong>la</strong>s pruebas previas. Cada prueba en el árbol tiene un contexto únicoque es crucial a <strong>la</strong> hora <strong>de</strong> enten<strong>de</strong>r<strong>la</strong> y pue<strong>de</strong> ser muy difícil compren<strong>de</strong>r un árbol en el cual el contextocambia <strong>de</strong>masiado seguido al recorrerlo. A<strong>de</strong>más, <strong>la</strong> estructura <strong>de</strong> árbol pue<strong>de</strong> hacer que un concepto enparticu<strong>la</strong>r que<strong>de</strong> fragmentado, lo cual hace que el árbol sea aún más difícil <strong>de</strong> enten<strong>de</strong>r. Existen dosmaneras <strong>de</strong> solucionar estos problemas: <strong>de</strong>finir nuevos atributos que estén re<strong>la</strong>cionados con <strong>la</strong>s tareas ocambiar <strong>de</strong> método <strong>de</strong> representación, por ejemplo, a reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión.En cualquier árbol <strong>de</strong> <strong>de</strong>cisión, <strong>la</strong>s condiciones que <strong>de</strong>ben satisfacerse cuando un caso se c<strong>la</strong>sifica por unahoja pue<strong>de</strong>n encontrarse analizando los resultados <strong>de</strong> <strong>la</strong>s pruebas en el camino recorrido <strong>de</strong>s<strong>de</strong> <strong>la</strong> raíz. Esmás, si el camino fuese transformado directamente en una reg<strong>la</strong> <strong>de</strong> producción, dicha reg<strong>la</strong> podría serexpresada como una conjunción <strong>de</strong> todas <strong>la</strong>s condiciones que <strong>de</strong>ben ser satisfechas para llegar a <strong>la</strong> hoja.Consecuentemente, todos los antece<strong>de</strong>ntes <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s generadas <strong>de</strong> esta manera serían mutuamenteexcluyentes y exhaustivos.Al hab<strong>la</strong>r <strong>de</strong> reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión o <strong>de</strong> producción nos referimos a una estructura <strong>de</strong> <strong>la</strong> forma:Si atributo 1 =valor X y atributo 2 =valor Y .... y atributo n =valor ZEntonces c<strong>la</strong>se KDiremos que una reg<strong>la</strong> cubre un caso si el caso satisface todas <strong>la</strong>s condiciones en el antece<strong>de</strong>nte <strong>de</strong> <strong>la</strong>misma.Estado <strong>de</strong>l Arte Magdalena Servente 35


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente2.5.EVALUACIÓN DE LOS MÉTODOS DE APRENDIZAJELa evaluación es <strong>la</strong> c<strong>la</strong>ve <strong>de</strong>l progreso en <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong>. Existen varias maneras <strong>de</strong> inferirestructuras a partir <strong>de</strong> los datos; para <strong>de</strong>terminar cuál es el mejor método para cada conjunto <strong>de</strong> datos,<strong>de</strong>be existir una manera <strong>de</strong> evaluar los métodos <strong>de</strong> aprendizaje y compararlos entre sí.Si se cuenta con una gran cantidad <strong>de</strong> datos, <strong>la</strong> evaluación no es problema: se genera un mo<strong>de</strong>lo a partir<strong>de</strong> un conjunto gran<strong>de</strong> <strong>de</strong> entrenamiento y, luego, se lo prueba con otro gran conjunto <strong>de</strong> datos. Sinembargo, aunque <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> implica por su <strong>de</strong>finición trabajar con gran<strong>de</strong>s cantida<strong>de</strong>s <strong>de</strong> datos,los conjuntos <strong>de</strong> datos <strong>de</strong> buena calidad son pocos. Los datos <strong>de</strong> entrenamiento <strong>de</strong>ben ser cuidadosamentegenerados y analizados por expertos humanos, un recurso que escasea.Existen varios indicadores <strong>de</strong> <strong>la</strong> performance <strong>de</strong> un algoritmo <strong>de</strong> aprendizaje. Algunos <strong>de</strong> ellos se<strong>de</strong>scriben a continuación [Michalski et al, 1998]:• Precisión: cantidad <strong>de</strong> ejemplos positivos y negativos evaluados correctamente. Algunas veces, esimportante distinguir entre dos tipos <strong>de</strong> errores: los ejemplos positivos c<strong>la</strong>sificados como negativos(errores <strong>de</strong> omisión) y viceversa (errores <strong>de</strong> comisión). Estos dos tipos <strong>de</strong> errores nos ayudan a<strong>de</strong>terminar si los conceptos aprendidos son <strong>de</strong>masiado generales o <strong>de</strong>masiado específicos. Para queun sistema sea preciso, es necesario que genere <strong>de</strong>scripciones que sean consistentes (no cubranningún ejemplo negativo) y que sean completas (cubran todos los ejemplos positivos).• Eficiencia: un sistema <strong>de</strong>be ser capaz <strong>de</strong> generar <strong>de</strong>scripciones correctas con un número mínimo <strong>de</strong>ejemplos. Un instructor no siempre pue<strong>de</strong> dotar al sistema <strong>de</strong> una cantidad infinita <strong>de</strong> ejemplos, y <strong>la</strong>velocidad en el aprendizaje es un indicador <strong>de</strong> inteligencia. Dentro <strong>de</strong> <strong>la</strong> eficiencia, <strong>de</strong>bemos evaluartambién los requerimientos computacionales. Estos se mi<strong>de</strong>n en función a <strong>la</strong> cantidad <strong>de</strong> tiempo yrecursos que un sistema necesita para llegar a una buena <strong>de</strong>scripción.• Comprensibilidad: es importante que los conceptos generados sean comprensibles al usuario, yaque el fin último <strong>de</strong> estos sistemas es que el usuario aprenda algo <strong>de</strong> ellos.• Robustez: contra el ruido y contra los ejemplos incompletos. Cada sistema maneja estos dosproblemas <strong>de</strong> forma diferente, con lo cual <strong>de</strong>be evaluarse en cada sistema en particu<strong>la</strong>r.• Requerimientos especiales: en algunos dominios, se requiere que un sistema aprenda a medida quellegan los ejemplos. Esto se conoce como aprendizaje incremental y es, especialmente, importante enaquel<strong>la</strong>s áreas en que los conceptos evolucionan, cambian su significado a través <strong>de</strong>l tiempo.36 Magdalena Servente Estado <strong>de</strong>l Arte


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente2.5.1 Evaluación en <strong>la</strong> familia <strong>TDIDT</strong>Para los problemas <strong>de</strong> c<strong>la</strong>sificación, como los <strong>de</strong> <strong>la</strong> familia <strong>TDIDT</strong>, es natural medir <strong>la</strong> performance <strong>de</strong>lc<strong>la</strong>sificador con una proporción <strong>de</strong> error. El c<strong>la</strong>sificador predice <strong>la</strong> c<strong>la</strong>se <strong>de</strong> cada instancia: si <strong>la</strong>predicción es correcta, estamos ante un éxito; si no lo es, estamos ante un error. La proporción <strong>de</strong> error,entonces, es simplemente <strong>la</strong> cantidad <strong>de</strong> errores sobre <strong>la</strong> cantidad total <strong>de</strong> instancias c<strong>la</strong>sificadas.Por supuesto, lo que nos interesa es estimar <strong>la</strong> proporción <strong>de</strong> errores sobre los nuevos datos y no sobre losdatos <strong>de</strong> entrenamiento, los cuales ya están c<strong>la</strong>sificados. ¿Po<strong>de</strong>mos <strong>de</strong>cir que <strong>la</strong> proporción <strong>de</strong> errorestimada a partir <strong>de</strong> los datos <strong>de</strong> entrenamiento es correcta para los datos futuros? No, si los datos sobrelos que se estimó el error fueron utilizados al generar el c<strong>la</strong>sificador. La proporción <strong>de</strong> error sobre losdatos <strong>de</strong> entrenamiento no es un buen indicador <strong>de</strong> los errores futuros; como el c<strong>la</strong>sificador se generó apartir <strong>de</strong> estos datos, <strong>la</strong> proporción <strong>de</strong> error es subjetiva y totalmente optimista. La proporción <strong>de</strong> errorgenerada a partir <strong>de</strong> los datos <strong>de</strong> entrenamiento se conoce como error <strong>de</strong> sustitución, ya que se calcu<strong>la</strong> alsustituir <strong>la</strong>s instancias en un c<strong>la</strong>sificador que fue construido a partir <strong>de</strong> el<strong>la</strong>s. A pesar <strong>de</strong> que no es un buenestimador para <strong>la</strong> predicción <strong>de</strong> futuros errores, es muy útil conocerlo.Para pre<strong>de</strong>cir <strong>la</strong> performance <strong>de</strong>l c<strong>la</strong>sificador en los datos futuros, necesitamos evaluar <strong>la</strong> proporción <strong>de</strong>error sobre datos no utilizados durante <strong>la</strong> construcción <strong>de</strong>l mismo. El conjunto in<strong>de</strong>pendiente <strong>de</strong> datosutilizado con este propósito es el conjunto <strong>de</strong> prueba. Es esencial que el conjunto <strong>de</strong> prueba no haya sidoutilizado para nada en <strong>la</strong> generación <strong>de</strong>l c<strong>la</strong>sificador. Entonces, aquellos esquemas en que <strong>la</strong> construcciónse realiza en dos etapas o requieren probar el c<strong>la</strong>sificador, trabajan con dos conjuntos <strong>de</strong> datos: el <strong>de</strong>entrenamiento y el <strong>de</strong> prueba.Po<strong>de</strong>mos <strong>de</strong>cir que a mayor cantidad <strong>de</strong> datos, mejor c<strong>la</strong>sificador y mejor estimador <strong>de</strong> error. El problemaestá cuando hay una pequeña cantidad <strong>de</strong> datos <strong>de</strong> entrenamiento. En muchas situaciones, los datos <strong>de</strong>entrenamiento y prueba <strong>de</strong>ben c<strong>la</strong>sificarse manualmente. Debemos encontrar <strong>la</strong> forma <strong>de</strong> encontrar unbuen estimador <strong>de</strong> error, aún cuando los datos <strong>de</strong> prueba escasean. A continuación, se explican variosmétodos para evaluar los algoritmos <strong>de</strong> c<strong>la</strong>sificación.2.5.2. Métodos <strong>de</strong> evaluación2.5.2.1. Evaluación Cruzada (Cross-Validation)Cuando existe una cantidad limitada <strong>de</strong> datos <strong>de</strong> entrenamiento y prueba, pue<strong>de</strong> aplicarse el método <strong>de</strong>retención (holdout) para estimar <strong>la</strong> proporción <strong>de</strong> error [Witten y Frank, 2000]. Este método reserva unacierta cantidad <strong>de</strong> datos al azar para prueba y utiliza el resto para el entrenamiento. En general, se reservaun tercio para prueba y se utilizan dos tercios como datos <strong>de</strong> entrenamiento.Estado <strong>de</strong>l Arte Magdalena Servente 37


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligentePor supuesto, siempre cabe <strong>la</strong> posibilidad <strong>de</strong> que los datos utilizados para entrenamiento y prueba no seanrepresentativos <strong>de</strong> los datos sobre los que se utilizará el mo<strong>de</strong>lo posteriormente. En general, no se pue<strong>de</strong>afirmar si un conjunto es representativo o no, pero existe una prueba muy simple que vale <strong>la</strong> penarealizar: cada una <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses <strong>de</strong>l conjunto total <strong>de</strong> datos <strong>de</strong>bería estar representada en <strong>la</strong> mismaproporción en los datos <strong>de</strong> entrenamiento y prueba, y esta proporción <strong>de</strong>bería ser simi<strong>la</strong>r a <strong>la</strong> que sepresentará cuando se aplique el mo<strong>de</strong>lo generado al caso real. Supongamos que todos los ejemplos <strong>de</strong> unac<strong>la</strong>se <strong>de</strong>terminada no entran en el conjunto <strong>de</strong> entrenamiento, el c<strong>la</strong>sificador generado será incorrecto. Altrabajar con <strong>la</strong> hipótesis <strong>de</strong>l Universo Cerrado, no po<strong>de</strong>mos preten<strong>de</strong>r que c<strong>la</strong>sifique correctamente losmiembros <strong>de</strong> una c<strong>la</strong>se que no sabía que existía. Si en el conjunto <strong>de</strong> prueba hay datos <strong>de</strong> esa c<strong>la</strong>se, <strong>la</strong>proporción <strong>de</strong> error obtenida será muy gran<strong>de</strong>. Entonces, al dividir al azar los datos prec<strong>la</strong>sificados entrelos conjuntos <strong>de</strong> entrenamiento y prueba, <strong>de</strong>bemos garantizar que cada c<strong>la</strong>se esté correctamenterepresentada tanto en los datos <strong>de</strong> prueba como en los <strong>de</strong> entrenamiento. Este procedimiento se conocecomo estratificación (stratification), y po<strong>de</strong>mos hab<strong>la</strong>r <strong>de</strong> una retención estratificada.Una manera <strong>de</strong> evitar <strong>la</strong> ten<strong>de</strong>ncia introducida por los datos retenidos, es repetir el proceso completo(entrenamiento y prueba) varias veces con distintas divisiones <strong>de</strong> los datos. En cada iteración, una mismaproporción <strong>de</strong> los datos se retiene al azar para <strong>la</strong>s pruebas y el resto se utiliza para el entrenamiento. Lasproporciones <strong>de</strong> error obtenidas en <strong>la</strong>s múltiples iteraciones se promedian para obtener una proporción <strong>de</strong>error general. Este método se conoce como retención repetida (repeated holdout).En un procedimiento <strong>de</strong> retención general podríamos elegir cambiar los roles <strong>de</strong> los datos <strong>de</strong>entrenamiento y <strong>de</strong> prueba entre sí. No obstante, esto es factible únicamente si trabajamos con unaproporción 50:50, lo cual no es i<strong>de</strong>al ya que conviene utilizar más <strong>de</strong>l 50% <strong>de</strong> los datos para elentrenamiento. Para solucionar este problema utilizamos una variación <strong>de</strong>l método estadístico <strong>de</strong>validación cruzada (cross-validation).En <strong>la</strong> validación cruzada, se <strong>de</strong>termina con anterioridad una cierta cantidad <strong>de</strong> pliegos o particiones <strong>de</strong> losdatos. Supongamos que utilizamos tres, es <strong>de</strong>cir, los datos se divi<strong>de</strong>n al azar en tres particiones <strong>de</strong>aproximadamente <strong>la</strong> misma cantidad, y cada una a su turno se utiliza para prueba mientras que <strong>la</strong>s otrasdos se utilizan para entrenamiento. Por lo tanto, utilizamos un tercio para prueba y dos tercios paraentrenamiento, y repetimos el procedimiento tres veces. Las tres proporciones <strong>de</strong> error obtenidas sepromedian para llegar a una proporción <strong>de</strong> error general. Este procedimiento conocido como validacióncruzada <strong>de</strong> tres pliegues (threefold cross-validation), pue<strong>de</strong> trabajar con datos estratificados, en cuyo casosería validación cruzada <strong>de</strong> tres pliegues estratificada.Po<strong>de</strong>mos generalizar el método para llegar a una validación cruzada <strong>de</strong> n pliegues, estratificada o no. Elcaso más utilizado para pre<strong>de</strong>cir <strong>la</strong> proporción <strong>de</strong> error <strong>de</strong> una técnica <strong>de</strong> aprendizaje es utilizar unavalidación cruzada <strong>de</strong> diez pliegues. A<strong>de</strong>más, <strong>la</strong>s pruebas han <strong>de</strong>mostrado que el uso <strong>de</strong> <strong>la</strong> estratificaciónmejora los resultados levemente [Witten y Frank, 2000]. Utilizar una validación cruzada <strong>de</strong> diez plieguespue<strong>de</strong> no ser suficiente para obtener un buen estimador <strong>de</strong> <strong>la</strong> proporción <strong>de</strong> error. Distintas validaciones38 Magdalena Servente Estado <strong>de</strong>l Arte


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentecruzadas <strong>de</strong> diez pliegues dan distintos resultados dado que <strong>la</strong> división en pliegues se realiza al azar. Laestratificación reduce <strong>la</strong> variación entre los resultados pero no <strong>la</strong> elimina. Si se quiere obtener unaestimación <strong>de</strong> <strong>la</strong> proporción <strong>de</strong> error muy precisa, generalmente, se repite <strong>la</strong> validación cruzada <strong>de</strong> diezpliegues diez veces y se promedian los resultados. Esto implica invocar al algoritmo <strong>de</strong> aprendizaje cienveces con conjuntos <strong>de</strong> datos <strong>de</strong>l tamaño <strong>de</strong>l 90% <strong>de</strong>l conjunto original. Obtener una buena medida <strong>de</strong> <strong>la</strong>performance es un método que consume gran<strong>de</strong>s recursos computacionales.2.5.2.2 Dejar-uno-afuera (Leave-one-out)La validación cruzada <strong>de</strong> diez pliegues es una manera normalmente utilizada para estimar <strong>la</strong> proporción<strong>de</strong> error, pero no es <strong>la</strong> única. Existen otras técnicas bastante popu<strong>la</strong>res como <strong>la</strong> <strong>de</strong> <strong>de</strong>jar-uno-afuera. Estatécnica es simplemente una validación cruzada <strong>de</strong> n pliegues don<strong>de</strong> n es el número <strong>de</strong> instancias <strong>de</strong>lconjunto <strong>de</strong> datos. Por turnos, cada una <strong>de</strong> <strong>la</strong>s instancias se <strong>de</strong>ja afuera y se entrena el c<strong>la</strong>sificador con elresto <strong>de</strong> <strong>la</strong>s instancias. Se lo evalúa según el resultado <strong>de</strong> <strong>la</strong> c<strong>la</strong>sificación <strong>de</strong> <strong>la</strong> instancia que habíaquedado afuera. Los resultados <strong>de</strong> <strong>la</strong>s n evaluaciones luego se promedian para <strong>de</strong>terminar <strong>la</strong> proporción<strong>de</strong> error.Este procedimiento es atractivo por dos razones [Witten y Frank, 2000]. Primero, se utiliza <strong>la</strong> mayorcantidad <strong>de</strong> ejemplos posibles para el entrenamiento, lo cual se presume incrementa <strong>la</strong> posibilidad <strong>de</strong> queel c<strong>la</strong>sificador sea correcto. Segundo, el procedimiento es <strong>de</strong>terminístico: no se parten los datos al azar.A<strong>de</strong>más, no tiene sentido repetir el procedimiento diez ni cien veces, ya que siempre se obtendrá elmismo resultado. Debe tenerse en cuenta que dado el alto costo computacional <strong>de</strong> aplicar este método, noes factible utilizarlo para gran<strong>de</strong>s conjunto <strong>de</strong> datos. Sin embargo, este método es el mejor para pequeñosconjuntos <strong>de</strong> datos porque, en cierta medida, evalúa todas <strong>la</strong>s posibilida<strong>de</strong>s.2.5.2.3. BootstrapEste método está basado en el procedimiento estadístico <strong>de</strong> obtener muestras con sustitución. En losmétodos anteriores, cuando se tomaba una muestra <strong>de</strong> los datos <strong>de</strong> entrenamiento o <strong>de</strong> prueba, se lo hacíasin reemp<strong>la</strong>zo. Es <strong>de</strong>cir, <strong>la</strong> misma instancia, una vez seleccionada, no podía seleccionarse nuevamente. Lamayoría <strong>de</strong> <strong>la</strong>s técnicas <strong>de</strong> aprendizaje pue<strong>de</strong>n, no obstante, utilizar <strong>la</strong> misma instancia dos veces, y elhecho <strong>de</strong> repetirse genera una diferencia.La i<strong>de</strong>a <strong>de</strong>l bootstrap es tomar muestras <strong>de</strong>l conjunto <strong>de</strong> datos con remp<strong>la</strong>zo para formar un conjunto <strong>de</strong>entrenamiento. Para ello, un conjunto <strong>de</strong> n instancias se muestrea n veces, con reemp<strong>la</strong>zo, y se obtieneotro conjunto <strong>de</strong> datos <strong>de</strong> n instancias. Como algunas instancias <strong>de</strong>l segundo conjunto estarán repetidas,Estado <strong>de</strong>l Arte Magdalena Servente 39


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente<strong>de</strong>ben existir algunas instancias <strong>de</strong>l conjunto original que no fueron seleccionadas. Utilizaremos estasinstancias para el conjunto <strong>de</strong> prueba.La probabilidad <strong>de</strong> que una instancia particu<strong>la</strong>r sea elegida para el conjunto <strong>de</strong> entrenamiento es <strong>de</strong> 1/n, y,por lo tanto, hay un 1-1/n <strong>de</strong> probabilidad <strong>de</strong> que no sea elegida. Si multiplicamos esto según <strong>la</strong>s noportunida<strong>de</strong>s <strong>de</strong> ser elegida, obtenemos <strong>la</strong> siguiente probabilidad <strong>de</strong> que no sea escogida:⎛ 1 ⎞⎜1-⎟⎝ n ⎠n= e-1= 0.368Entonces, un conjunto <strong>de</strong> datos lo suficientemente gran<strong>de</strong> contendrá un 36.8% <strong>de</strong> instancias <strong>de</strong> prueba yun 63.2% <strong>de</strong> entrenamiento. Esta es <strong>la</strong> razón por <strong>la</strong> cual este método se conoce como el 0.632 bootstrap.El error estimado sobre el conjunto <strong>de</strong> prueba será pesimista porque el c<strong>la</strong>sificador tiene en cuenta sólo el63% <strong>de</strong> los datos <strong>de</strong>l conjunto original, lo cual es poco frente al 90% <strong>de</strong> <strong>la</strong> validación cruzada <strong>de</strong> diezpliegues. Para compensar el error <strong>de</strong>l conjunto <strong>de</strong> entrenamiento se combina con el error en el conjunto <strong>de</strong>prueba <strong>de</strong> <strong>la</strong> siguiente manera:e = 0.632×e + 0.368×pruebae entrenamientoLuego, todo el proceso <strong>de</strong> bootstrap se repite varias veces, y todos los estimadores <strong>de</strong> error se promedian.2.5.3. Estimación <strong>de</strong>l costoHasta ahora no hemos consi<strong>de</strong>rado el costo <strong>de</strong> tomar ma<strong>la</strong>s <strong>de</strong>cisiones y ma<strong>la</strong>s c<strong>la</strong>sificaciones. Laoptimización <strong>de</strong> <strong>la</strong>s proporciones <strong>de</strong> c<strong>la</strong>sificación sin consi<strong>de</strong>rar el costo <strong>de</strong> los errores, generalmentelleva a resultados extraños. Existe un ejemplo famoso <strong>de</strong> un sistema <strong>de</strong> inducción utilizado para pre<strong>de</strong>cirlos períodos fértiles <strong>de</strong> <strong>la</strong>s vacas en un tambo. Las vacas se contro<strong>la</strong>ron con un i<strong>de</strong>ntificador electrónicoen <strong>la</strong> oreja, y otros atributos como el volumen <strong>de</strong> leche y su composición química. En <strong>la</strong>s primeraspruebas <strong>de</strong>l sistema <strong>de</strong> aprendizaje automático, los resultados afirmaban que <strong>la</strong>s vacas nunca estaban en elperíodo fértil. El período menstrual <strong>de</strong> <strong>la</strong>s vacas es simi<strong>la</strong>r al <strong>de</strong> los humanos, con lo cual <strong>la</strong> reg<strong>la</strong>generada era correcta el 97% <strong>de</strong> <strong>la</strong>s veces, un grado <strong>de</strong> precisión impresionante para el dominio <strong>de</strong> <strong>la</strong>agricultura. Sin embargo, lo que se buscaba eran reg<strong>la</strong>s que predijeran cuando una vaca estaba fértil y nocuando no lo estaba, con lo cual, los costos <strong>de</strong> los dos casos <strong>de</strong> error son distintos. La evaluación porexactitud en <strong>la</strong> c<strong>la</strong>sificación asume costos iguales por naturaleza.40 Magdalena Servente Estado <strong>de</strong>l Arte


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteSi los costos son conocidos, pue<strong>de</strong>n incluirse en el análisis <strong>de</strong> los métodos. Restringiremos nuestroanálisis a los casos que tienen c<strong>la</strong>ses sí y no únicamente. Los cuatro resultados posibles <strong>de</strong> una predicciónpue<strong>de</strong>n listarse en una matriz <strong>de</strong> confusión como <strong>la</strong> que se muestra a continuación.C<strong>la</strong>se predichaC<strong>la</strong>se verda<strong>de</strong>raSíNoSí Verda<strong>de</strong>ro positivo Falso NegativoNo Falso Positivo Verda<strong>de</strong>ro NegativoLos verda<strong>de</strong>ros positivos y verda<strong>de</strong>ros negativos son los casos sin error. Los falsos positivoscorrespon<strong>de</strong>n a aquel<strong>la</strong>s instancias negativas que fueron c<strong>la</strong>sificadas como positivas, mientras que losfalsos negativos son aquel<strong>la</strong>s instancias c<strong>la</strong>sificadas como negativas cuando en realidad son positivas.Estos dos casos <strong>de</strong> errores generalmente tienen distintos costos, como los casos c<strong>la</strong>sificadoscorrectamente tienen distintos beneficios. El hecho <strong>de</strong> pensar en el costo genera mejores <strong>de</strong>cisiones.No obstante, <strong>la</strong> mayoría <strong>de</strong> los algoritmos <strong>de</strong> aprendizaje automático no tienen en cuenta el costo a<strong>la</strong>pren<strong>de</strong>r. Existen, sin embargo, dos maneras <strong>de</strong> transformarlo fácilmente. La primera i<strong>de</strong>a paratransformar un c<strong>la</strong>sificador para que tome en cuenta el costo, es variar <strong>la</strong> cantidad <strong>de</strong> ejemplos positivos ynegativos en los datos <strong>de</strong> entrenamiento <strong>de</strong> acuerdo a <strong>la</strong> importancia <strong>de</strong> cada uno <strong>de</strong> los errores. Otra i<strong>de</strong>aes pon<strong>de</strong>rar <strong>la</strong>s instancias. Por ejemplo, al generar un árbol <strong>de</strong> <strong>de</strong>cisión, una instancia pue<strong>de</strong> dividirse enpartes con un esquema <strong>de</strong> pon<strong>de</strong>ración que indique <strong>la</strong> proporción con que <strong>de</strong>be tomarse cada rama.Estado <strong>de</strong>l Arte Magdalena Servente 41


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente42 Magdalena Servente Estado <strong>de</strong>l Arte


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteCAPÍTULO 3DESCRIPCIÓN DEL PROBLEMAEn este capítulo se presenta el contexto <strong>de</strong> nuestro problema <strong>de</strong> interés (Sección 3.1) y <strong>la</strong>scuestiones que los algoritmos ID3 y C4.5 pertenecientes a <strong>la</strong> familia <strong>TDIDT</strong> <strong>de</strong>ben resolver(Sección 3.2).3.1. CONTEXTO DEL PROBLEMAAl haberse tornado económico el almacenamiento <strong>de</strong> datos en medios físicos y al tornarse re<strong>la</strong>tivamentefácil y/o accesible <strong>la</strong> recolección <strong>de</strong> dichos datos, <strong>la</strong>s bases <strong>de</strong> datos crecen en forma <strong>de</strong>smesurada. Hoyen día se recolectan datos simplemente por estar al alcance <strong>de</strong> <strong>la</strong> mano, sin tener en cuenta su importancialógica o práctica, o sin siquiera saber si son importantes en algún sentido. El almacenamiento masivo <strong>de</strong>información hace que <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> tenga una importancia cada vez mayor. El análisis <strong>de</strong> los datosque se recolectan actualmente para toda actividad humana y para cualquier evento o hecho <strong>de</strong>l universo,exce<strong>de</strong> <strong>la</strong>s capacida<strong>de</strong>s <strong>de</strong> una persona.Existen muchos tipos <strong>de</strong> análisis y muchos tipos <strong>de</strong> resultados obtenibles. Por ejemplo, po<strong>de</strong>mos realizarun análisis estadístico sobre <strong>la</strong> distribución <strong>de</strong> una pob<strong>la</strong>ción <strong>de</strong> ardil<strong>la</strong>s en un bosque a lo <strong>la</strong>rgo <strong>de</strong> losaños; u obtener <strong>la</strong> varianza y <strong>de</strong>sviación estándar <strong>de</strong> los <strong>de</strong>pósitos japoneses en el mercado americano <strong>de</strong><strong>la</strong> última década; o realizar un análisis <strong>de</strong> componentes para un <strong>de</strong>terminado experimento físico, entreotros.Los métodos nombrados hasta ahora son esencialmente cuantitativos. Sin embargo, ¿qué pasa cuando másallá <strong>de</strong> los mo<strong>de</strong>los matemáticos encerrados en los datos, nos interesan los mo<strong>de</strong>los lógicos? ¿Cuándomás allá <strong>de</strong> <strong>la</strong>s direcciones para hacer un mailing <strong>de</strong> <strong>la</strong> base <strong>de</strong> personas, nos interesa hacer un mailingsólo a los potenciales clientes? ¿Cómo distinguimos a los potenciales clientes <strong>de</strong>l resto <strong>de</strong> <strong>la</strong> gente? ¿Quécaracterísticas tienen en común? ¿Qué datos los distinguen? Cuando el análisis <strong>de</strong> los datos que estamosbuscando exce<strong>de</strong> los alcances <strong>de</strong> un mo<strong>de</strong>lo cuantitativo y está orientado hacia una <strong>de</strong>scripción cualitativa<strong>de</strong> los datos, <strong>de</strong>bemos utilizar los algoritmos inteligentes.Estos algoritmos <strong>de</strong>l Aprendizaje Automático están orientados hacia el <strong>de</strong>sarrollo <strong>de</strong> <strong>de</strong>scripcionessimbólicas <strong>de</strong> los datos que puedan caracterizar a uno o más conceptos, diferenciar entre c<strong>la</strong>ses <strong>de</strong>Descripción <strong>de</strong>l Problema Magdalena Servente 43


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteconceptos y <strong>de</strong>scribir porqué razón un objeto pertenece a una c<strong>la</strong>se y no a otra. Con este tipo <strong>de</strong>algoritmos nuestro problema <strong>de</strong>l análisis <strong>de</strong> los potenciales clientes estaría resuelto.Existen muchos tipos <strong>de</strong> algoritmos <strong>de</strong> Aprendizaje Automático; no obstante, los más útiles para nosotrosson aquellos que no quedan encerrados en el “cerebro” <strong>de</strong> <strong>la</strong> computadora, sino que pue<strong>de</strong>n adaptarse anuestra forma <strong>de</strong> pensar. Si el resultado <strong>de</strong> realizar Minería <strong>de</strong> <strong>Datos</strong> inteligente sobre una base es una redneuronal, ésta pue<strong>de</strong> ser muy útil para c<strong>la</strong>sificar nuevos ejemplos, en <strong>la</strong> medida en que sean c<strong>la</strong>sificadospor medio <strong>de</strong> un programa entrenado para ello. Una persona jamás será capaz <strong>de</strong> aplicar rápida yefectivamente una red neuronal u otro mo<strong>de</strong>lo simi<strong>la</strong>r para c<strong>la</strong>sificar distintos datos. En cambio si <strong>la</strong>persona se encuentra ante un árbol <strong>de</strong> <strong>de</strong>cisión o un conjunto <strong>de</strong> reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión que <strong>de</strong>be aplicar enor<strong>de</strong>n como resultado <strong>de</strong> <strong>la</strong> Minería, <strong>la</strong> c<strong>la</strong>sificación <strong>de</strong>l nuevo caso es tan fácil como <strong>la</strong> lectura <strong>de</strong>l árbol<strong>de</strong>s<strong>de</strong> <strong>la</strong> raíz hasta <strong>la</strong>s hojas.Este tipo <strong>de</strong> mo<strong>de</strong>lo <strong>de</strong> datos que representa los conceptos inherentes y ocultos en los datos, <strong>de</strong> forma talque son fáciles <strong>de</strong> interpretar, utilizar e incorporar para <strong>la</strong> persona humana son los que más enriquecennuestro conocimiento y, como tales, aquellos sobre los cuales focalizaremos nuestra atención.En <strong>la</strong>s bases <strong>de</strong> datos, <strong>la</strong>s entida<strong>de</strong>s se caracterizan, generalmente, por un conjunto <strong>de</strong> atributos que <strong>la</strong>s<strong>de</strong>scriben. Los atributos pue<strong>de</strong>n ser tanto discretos como continuos, pero lo importante es que todas <strong>la</strong>sentida<strong>de</strong>s están <strong>de</strong>scriptas por el mismo grupo <strong>de</strong> atributos. En los problemas <strong>de</strong> c<strong>la</strong>sificación, un atributoparticu<strong>la</strong>r, conocido como c<strong>la</strong>se, <strong>de</strong>scribe al tipo <strong>de</strong> concepto.3.2. APLICACIÓN DE LOS ALGORITMOS DE LA FAMILIA<strong>TDIDT</strong> A LA MINERÍA DE DATOSEn este contexto se p<strong>la</strong>ntea <strong>la</strong> siguiente cuestión:¿En qué medida los algoritmos <strong>de</strong> <strong>la</strong> familia <strong>TDIDT</strong> pue<strong>de</strong>n usarse para generar mo<strong>de</strong>los válidos en losproblemas <strong>de</strong> c<strong>la</strong>sificación?Analizar <strong>la</strong> aplicación <strong>de</strong> todos los <strong>Algoritmos</strong> Inteligentes a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> exce<strong>de</strong>ría los alcances<strong>de</strong> este trabajo; por en<strong>de</strong>, vamos a centrar nuestro análisis en aquellos algoritmos que generan árboles yreg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión que son mo<strong>de</strong>los que un ser humano pue<strong>de</strong> interpretar y aplicar fácilmente. Un buenmo<strong>de</strong>lo <strong>de</strong> datos para c<strong>la</strong>sificar fenómenos meteorológicos <strong>de</strong>scriptos en función <strong>de</strong> varias medidasambientales tomadas en los días previos, pue<strong>de</strong>n ayudar a un meteorólogo a <strong>de</strong>terminar si habrá sol,lloverá, o habrá un tornado.44 Magdalena Servente Descripción <strong>de</strong>l Problema


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteDe esta manera <strong>la</strong> cuestión previa se reformu<strong>la</strong> en <strong>la</strong>s siguientes:Cuestión 1:¿Qué tipos <strong>de</strong> sistemas generan como resultado árboles <strong>de</strong> <strong>de</strong>cisión?Cuestión 2:¿Qué condiciones <strong>de</strong>ben cumplir los datos para que su análisis con el ID3 o el C4.5 sea útily válido?Cuestión 3:¿Qué tan fácil es para un humano trabajar con estos algoritmos?Cuestión 4:¿Cuáles son los resultados <strong>de</strong>l sistema?Cuestión 5:¿Cómo po<strong>de</strong>mos medir <strong>la</strong> calidad <strong>de</strong> los resultados obtenidos?Descripción <strong>de</strong>l Problema Magdalena Servente 45


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente46 Magdalena Servente Descripción <strong>de</strong>l Problema


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteCAPÍTULO 4SOLUCIÓN PROPUESTAEn este capítulo se presentan todos los aspectos <strong>de</strong> <strong>la</strong> solución propuesta. Para ello se <strong>de</strong>scriben<strong>la</strong>s características generales <strong>de</strong> <strong>la</strong> misma (Sección 4.1): el marco teórico (Sección 4.1.1), <strong>la</strong>scondiciones que <strong>de</strong>ben cumplir los datos sobre los que se realiza <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> (Sección4.1.2) y los tipos <strong>de</strong> resultados obtenidos (Sección 4.1.3). En <strong>la</strong> Sección 4.2 se presenta una<strong>de</strong>scripción general <strong>de</strong> los algoritmos ID3 y C4.5 que se utilizan para estudiar el problema. Seexplica cómo realizar <strong>la</strong> división <strong>de</strong> los datos <strong>de</strong> entrada (Sección 4.2.1) y <strong>la</strong> elección <strong>de</strong>l criterio<strong>de</strong> división (Sección 4.2.1.1). Luego, se presenta una <strong>de</strong>scripción <strong>de</strong>tal<strong>la</strong>da <strong>de</strong>l algoritmo ID3(Sección 4.3.1) y <strong>de</strong> sus limitaciones (Sección 4.3.2). A modo <strong>de</strong> ejemplo, se muestra <strong>la</strong>utilización <strong>de</strong>l ID3 para generar un árbol y reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión (Sección 4.3.1.5). También se<strong>de</strong>tal<strong>la</strong> el algoritmo C4.5 (Sección 4.4) y sus características particu<strong>la</strong>res (Sección 4.4.2), <strong>la</strong>scuales lo diferencian <strong>de</strong>l ID3, resaltando <strong>la</strong> poda <strong>de</strong> los árboles <strong>de</strong> <strong>de</strong>cisión (Sección 4.4.3) y <strong>la</strong>estimación <strong>de</strong> errores en dichos árboles (Sección 4.4.4). En <strong>la</strong> sección 4.4.5 se ejemplifican losmétodos anteriores. La generalización <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión realizada por el C4.5 se explicaen <strong>la</strong> sección 4.4.6. A continuación, se <strong>de</strong>tal<strong>la</strong> el diseño <strong>de</strong>l sistema integrador utilizado paraestudiar el éxito <strong>de</strong> <strong>la</strong> solución propuesta (Sección 4.5). Para este sistema se presenta una<strong>de</strong>scripción general (Sección 4.5.1) y el diseño <strong>de</strong> <strong>la</strong>s secciones <strong>de</strong>l sistema para el ID3 (Sección4.5.2.1) y para el C4.5 (Sección 4.5.2.2)La mayoría <strong>de</strong> <strong>la</strong>s aplicaciones <strong>de</strong> <strong>la</strong> Inteligencia Artificial a tareas <strong>de</strong> importancia práctica construyen unmo<strong>de</strong>lo <strong>de</strong> conocimiento utilizable por un experto humano. En algunos casos, <strong>la</strong> tarea que el expertorealiza es una c<strong>la</strong>sificación, es <strong>de</strong>cir, asigna objetos a categorías o c<strong>la</strong>ses <strong>de</strong>terminadas según suspropieda<strong>de</strong>s [Quin<strong>la</strong>n 1993d]. En un mo<strong>de</strong>lo <strong>de</strong> c<strong>la</strong>sificación, <strong>la</strong> conexión entre c<strong>la</strong>ses y propieda<strong>de</strong>spue<strong>de</strong> <strong>de</strong>finirse utilizando <strong>de</strong>s<strong>de</strong> un simple diagrama <strong>de</strong> flujo hasta un manual <strong>de</strong> procedimientoscomplejo y <strong>de</strong>sestructurado. Si restringimos nuestra discusión a mo<strong>de</strong>los ejecutables, es <strong>de</strong>cir, a aquellosque pue<strong>de</strong>n ser representados como programas <strong>de</strong> computación, existen dos maneras muy diferentes en<strong>la</strong>s que se pue<strong>de</strong> construir un mo<strong>de</strong>lo. Por un <strong>la</strong>do, el mo<strong>de</strong>lo pue<strong>de</strong> obtenerse a partir <strong>de</strong> entrevistasrelevantes con uno o más expertos. Por otro <strong>la</strong>do, si se cuenta con c<strong>la</strong>sificaciones almacenadas conanterioridad, éstas pue<strong>de</strong>n ser examinadas para construir un mo<strong>de</strong>lo inductivo a partir <strong>de</strong> el<strong>la</strong>s, medianteuna generalización <strong>de</strong> ejemplos específicos. Los sistemas ID3 y C4.5 pertenecen a este segundo grupo[Blockeel y De Raedt, 1997].Solución Propuesta Magdalena Servente 47


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente4.1. CARACTERÍSTICAS GENERALES4.1.1. Marco teóricoSi intentamos p<strong>la</strong>ntear el problema <strong>de</strong> aprendizaje <strong>de</strong> un mo<strong>de</strong>lo <strong>de</strong> datos a partir <strong>de</strong> ejemplos <strong>de</strong>s<strong>de</strong> unmarco teórico, nos encontramos ante el siguiente esquema [Blockeel y De Raedt, 1997]:Dados:• un conjunto C <strong>de</strong> c<strong>la</strong>ses,• un conjunto E <strong>de</strong> ejemplos prec<strong>la</strong>sificadosEncontrar:Una hipótesis H (conjunto <strong>de</strong> cláusu<strong>la</strong>s) tal que:∀ e ∈ E: H ∩ e = c ∧ H ∩ e ≠ c’ (4.1)Don<strong>de</strong> c es <strong>la</strong> c<strong>la</strong>se <strong>de</strong>l ejemplo e y c’ ∈ C-{c}Presentar los resultados obtenidos como:• un árbol <strong>de</strong> <strong>de</strong>cisión,• un conjunto <strong>de</strong> reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión.El sistema generará un árbol <strong>de</strong> <strong>de</strong>cisión fruto <strong>de</strong> <strong>la</strong> naturaleza en sí <strong>de</strong> los algoritmos <strong>de</strong> <strong>la</strong> familia<strong>TDIDT</strong>. El árbol <strong>de</strong> inducción resultante será construido <strong>de</strong>s<strong>de</strong> raíz hacia <strong>la</strong>s hojas (top-down). El mo<strong>de</strong>logenerado es muy útil para el usuario ya que permite una fácil visualización <strong>de</strong> los resultados. A<strong>de</strong>más,transformaremos el árbol a reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión que pue<strong>de</strong>n ser utilizadas por otros programas <strong>de</strong>c<strong>la</strong>sificación o ser transformadas en sentencias SQL para c<strong>la</strong>sificar nuevos datos rápidamente.48 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente4.1.2. <strong>Datos</strong> <strong>de</strong> EntradaAntes <strong>de</strong> analizar <strong>la</strong> familia <strong>TDIDT</strong> <strong>de</strong>bemos tener en cuenta que no todas <strong>la</strong>s tareas <strong>de</strong> c<strong>la</strong>sificación sonapropiadas para este enfoque inductivo, a continuación se listan los requerimientos que <strong>de</strong>ben cumplirse[Mitchell, 1997], [Quin<strong>la</strong>n, 1986; 1993b]:• Descripciones <strong>de</strong> atributo-valor (Attriute-value <strong>de</strong>scription): los datos a ser analizados <strong>de</strong>benpo<strong>de</strong>r expresarse como un archivo p<strong>la</strong>no, es <strong>de</strong>cir, toda <strong>la</strong> información <strong>de</strong> un objeto o caso <strong>de</strong>bepo<strong>de</strong>r expresarse en términos <strong>de</strong> una colección fija <strong>de</strong> propieda<strong>de</strong>s o atributos 2 . Cada atributo pue<strong>de</strong>ser discreto o numérico, pero los atributos utilizados para <strong>de</strong>scribir un caso no pue<strong>de</strong>n variar <strong>de</strong> uncaso a otro. Esto restringe los dominios <strong>de</strong> aplicación en los cuales los objetos tienen inherentementeatributos variables. El hecho <strong>de</strong> que los atributos no puedan variar <strong>de</strong> un caso a otro, no restringeaquellos casos en los cuales los valores <strong>de</strong> algunos atributos son <strong>de</strong>sconocidos.• C<strong>la</strong>ses pre<strong>de</strong>finidas: <strong>la</strong>s categorías a <strong>la</strong>s cuales se asignan los casos <strong>de</strong>ben estar establecidas <strong>de</strong>antemano. Esto significa que los algoritmos se aplican sobre un conjunto <strong>de</strong> datos <strong>de</strong> entrenamientopreviamente c<strong>la</strong>sificados, <strong>de</strong>l tipo {valor_atributo 1 , valor_atributo 2 , ...., valor_atributo n , c<strong>la</strong>se k }. En<strong>la</strong> terminología <strong>de</strong>l Aprendizaje Automático, esto se conoce como aprendizaje supervisado, encontraposición al aprendizaje no supervisado en el cual <strong>la</strong> agrupación <strong>de</strong> casos se encuentra mediantey durante el análisis.• C<strong>la</strong>ses discretas y disjuntas: <strong>la</strong>s c<strong>la</strong>ses a <strong>la</strong>s cuales se asignan los casos <strong>de</strong>ben ser totalmentedisjuntas: un caso pertenece o no pertenece a una c<strong>la</strong>se, pero no pue<strong>de</strong> pertenecer a dos c<strong>la</strong>ses a <strong>la</strong>vez. A<strong>de</strong>más, <strong>de</strong>ben existir muchos más casos que c<strong>la</strong>ses para que el mo<strong>de</strong>lo generado sea válido enel dominio analizado. Por otro <strong>la</strong>do, dado <strong>la</strong> naturaleza <strong>de</strong> los árboles <strong>de</strong> <strong>de</strong>cisión, <strong>la</strong>s c<strong>la</strong>ses <strong>de</strong>ben serdiscretas o discretizarse en caso <strong>de</strong> ser continuas.• <strong>Datos</strong> suficientes: los patrones generados por <strong>la</strong> generalización inductiva no serán válidos si no selos pue<strong>de</strong>n distinguir <strong>de</strong> <strong>la</strong>s casualida<strong>de</strong>s. Como esta diferenciación se basa generalmente en pruebasestadísticas, <strong>de</strong>ben existir casos suficientes para que dichas pruebas sean efectivas. La cantidad <strong>de</strong>datos requeridos está afectada por factores como <strong>la</strong> cantidad <strong>de</strong> propieda<strong>de</strong>s y c<strong>la</strong>ses, y <strong>la</strong>complejidad <strong>de</strong>l mo<strong>de</strong>lo <strong>de</strong> c<strong>la</strong>sificación; a medida que estos se incrementan, se necesitan más datospara construir un mo<strong>de</strong>lo confiable.2 El hecho <strong>de</strong> que los datos <strong>de</strong>ben po<strong>de</strong>r expresarse como un archivo p<strong>la</strong>no, no restringe <strong>la</strong> aplicación <strong>de</strong>l ID3 o <strong>de</strong>l C4.5 a una únicatab<strong>la</strong> <strong>de</strong> una base <strong>de</strong> datos, sino que para aplicarse a múltiples tab<strong>la</strong>s, éstas <strong>de</strong>ben ser <strong>de</strong>snormalizadas hasta obtener una tab<strong>la</strong> conlos atributos que se <strong>de</strong>sea analizar.Solución Propuesta Magdalena Servente 49


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente• Los datos <strong>de</strong> entrenamiento pue<strong>de</strong>n contener errores: según Mitchell, los métodos <strong>de</strong> aprendizajeutilizando árboles <strong>de</strong> <strong>de</strong>cisión son robustos frente a los errores, tanto en los valores <strong>de</strong> <strong>la</strong>s c<strong>la</strong>sescomo en los valores <strong>de</strong> los atributos <strong>de</strong> los datos <strong>de</strong> entrenamiento [Mitchell 1997].• Los datos <strong>de</strong> entrenamiento pue<strong>de</strong>n contener valores <strong>de</strong> atributos faltantes: los métodos <strong>de</strong> <strong>la</strong>familia <strong>TDIDT</strong> pue<strong>de</strong>n utilizarse aún cuando no se conocen todos los valores <strong>de</strong> todos los atributos<strong>de</strong> los datos <strong>de</strong> entrenamiento. El tratamiento <strong>de</strong> valores faltantes varía <strong>de</strong> un algoritmo a otro y seráexplicado para el ID3 en <strong>la</strong> sección 4.3.1.3 y para el C4.5 en <strong>la</strong> sección 4.4.2.2.• Mo<strong>de</strong>los lógicos generados: los programas sólo construyen c<strong>la</strong>sificadores que pue<strong>de</strong>n serexpresados como árboles <strong>de</strong> <strong>de</strong>cisión o como un conjunto <strong>de</strong> reg<strong>la</strong>s <strong>de</strong> producción. Estos mo<strong>de</strong>losrestringen <strong>la</strong>s <strong>de</strong>scripciones <strong>de</strong> c<strong>la</strong>ses a una expresión lógica cuyas primitivas son afirmacionesacerca <strong>de</strong> los valores <strong>de</strong> atributos particu<strong>la</strong>res. La expresión lógica representada por un árbol <strong>de</strong><strong>de</strong>cisión es una disyunción <strong>de</strong> conjunciones. Todos aquellos casos que requieran un mo<strong>de</strong>lo <strong>de</strong> otraíndole no podrán ser analizados por los algoritmos ID3 o C4.5.4.1.3. Resultados Generados4.1.3.1. Características <strong>de</strong> los árboles <strong>de</strong> <strong>de</strong>cisiónLos árboles <strong>de</strong> <strong>de</strong>cisión representan una estructura <strong>de</strong> datos que organiza eficazmente los <strong>de</strong>scriptores. Seconstruye un árbol <strong>de</strong> forma tal que en cada nodo se realiza una prueba sobre el valor <strong>de</strong> los <strong>de</strong>scriptoresy <strong>de</strong> acuerdo con <strong>la</strong> respuesta se va <strong>de</strong>scendiendo en <strong>la</strong>s ramas, hasta llegar al final <strong>de</strong>l camino don<strong>de</strong> seencuentra el valor <strong>de</strong>l c<strong>la</strong>sificador. Se pue<strong>de</strong> analizar un árbol <strong>de</strong> <strong>de</strong>cisión como una caja negra en función<strong>de</strong> cuyos parámetros (<strong>de</strong>scriptores) se obtiene un cierto valor <strong>de</strong>l c<strong>la</strong>sificador.EntradaEntrada: p1, p2Nodos<strong>de</strong>scriptoresd1(p1)F(d1(p1),d2(p2))=cd2(p2)cccHojas o Nodos <strong>de</strong>c<strong>la</strong>sificadoresSalida: cSalidaFigura 4.1: Estructura <strong>de</strong> un árbol <strong>de</strong> <strong>de</strong>cisión50 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteUn árbol <strong>de</strong> <strong>de</strong>cisión pue<strong>de</strong> analizarse como una disyunción <strong>de</strong> conjunciones. Cada camino <strong>de</strong>s<strong>de</strong> <strong>la</strong> raízhasta <strong>la</strong>s hojas representa una conjunción, y todos los caminos son alternativos, es <strong>de</strong>cir, sondisyunciones.4.1.3.2. Características <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónLas reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión o <strong>de</strong> producción son una alternativa a los árboles <strong>de</strong> <strong>de</strong>cisión, y todo árbol <strong>de</strong><strong>de</strong>cisión pue<strong>de</strong> llevarse a reg<strong>la</strong>s <strong>de</strong> este tipo [Witten y Frank, 2000], [Korab, 1997], [Blurock, 1996].Antece<strong>de</strong>nte => ConsecuenteDon<strong>de</strong> el antece<strong>de</strong>nte es una conjunción entre distintas pruebas <strong>de</strong> valor sobre los valores <strong>de</strong> los atributos;y el consecuente es una c<strong>la</strong>se para todos los casos que satisfagan el antece<strong>de</strong>nte. Por ejemplo,Si atributo 1 =”valor a” y atributo 2 = “valor y”, entonces C<strong>la</strong>se KLas reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión se presentan en or<strong>de</strong>n, y <strong>de</strong>ben interpretarse <strong>de</strong> esa manera. El or<strong>de</strong>n <strong>de</strong>terminacuáles reg<strong>la</strong>s <strong>de</strong>ben ejecutarse primero. Al c<strong>la</strong>sificar un nuevo caso se avanza en <strong>la</strong> lista hasta llegar a unantece<strong>de</strong>nte que sea satisfecho por el caso, entonces <strong>la</strong> c<strong>la</strong>se <strong>de</strong>l caso es <strong>la</strong> correspondiente al consecuente<strong>de</strong> dicha reg<strong>la</strong>. El C4.5 en particu<strong>la</strong>r, agregar una última reg<strong>la</strong> a <strong>la</strong> lista, ésta no tiene antece<strong>de</strong>nte, es <strong>la</strong>reg<strong>la</strong> con <strong>la</strong> c<strong>la</strong>se por <strong>de</strong>fecto, es <strong>de</strong>cir, si el caso no satisfizo ninguna <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s anteriores, entonces es<strong>de</strong> <strong>la</strong> c<strong>la</strong>se indicada por <strong>la</strong> última reg<strong>la</strong> que no tiene antece<strong>de</strong>nte.En el caso <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión, agregar una nueva reg<strong>la</strong> implica simplemente añadir<strong>la</strong> a <strong>la</strong> lista <strong>de</strong>reg<strong>la</strong>s sin necesidad <strong>de</strong> hacer cambios <strong>de</strong> estructura, mientras que agregar una nueva reg<strong>la</strong> en un árbolimplicaría rehacer <strong>la</strong> estructura <strong>de</strong>l mismo.4.1.3.3. Presentación <strong>de</strong> los resultadosTanto el ID3 como el C4.5 generan un c<strong>la</strong>sificador <strong>de</strong> <strong>la</strong> forma <strong>de</strong> un árbol <strong>de</strong> <strong>de</strong>cisión, cuya estructura es[Quin<strong>la</strong>n 1993d]:• Una hoja, indicando una c<strong>la</strong>se, oSolución Propuesta Magdalena Servente 51


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente• Un nodo <strong>de</strong> <strong>de</strong>cisión que especifica alguna prueba a ser realizada sobre un único atributo, con unarama y subárbol para cada valor posible <strong>de</strong> <strong>la</strong> prueba.El árbol <strong>de</strong> <strong>de</strong>cisión generado por el C4.5 cuenta con varias características particu<strong>la</strong>res: cada hoja tieneasociados dos números, que indican el número <strong>de</strong> casos <strong>de</strong> entrenamientos cubiertos por cada hoja y <strong>la</strong>cantidad <strong>de</strong> ellos c<strong>la</strong>sificados erróneamente por <strong>la</strong> hoja. Es en cierta manera, un estimador <strong>de</strong>l éxito <strong>de</strong>lárbol sobre los casos <strong>de</strong> entrenamiento. El ID3, en cambio, no c<strong>la</strong>sifica erróneamente a los datos <strong>de</strong>entrenamiento, con lo cual no son necesarios este tipo <strong>de</strong> indicadores. Es por ello, que este algoritmo, adiferencia <strong>de</strong>l C4.5, corre el riesgo <strong>de</strong> caer en sobreajuste.El propósito <strong>de</strong> construir mo<strong>de</strong>los <strong>de</strong> c<strong>la</strong>sificación no se limita al <strong>de</strong>sarrollo <strong>de</strong> predictores precisos,también es esencial que el mo<strong>de</strong>lo construido sea comprensible para los seres humanos. Michie critica alID3 al sostener que los resultados recientes <strong>de</strong>muestran que los programas construidos sobre <strong>la</strong> base <strong>de</strong>sistemas tales como el ID3 pue<strong>de</strong>n ser consi<strong>de</strong>rados, <strong>de</strong> alguna manera, “super-programas” y al mismotiempo ser incomprensibles para <strong>la</strong>s personas. [Michie 1986, p.233] Se han estudiado varias maneras <strong>de</strong>simplificar los árboles <strong>de</strong> <strong>de</strong>cisión. Por ejemplo, en el sistema integrado propuesto, los árboles generadospor el C4.5 como por el ID3 se transforman en un conjunto <strong>de</strong> reg<strong>la</strong>s <strong>de</strong> producción o <strong>de</strong>cisión, unformato que parece más comprensible que los árboles, cuando estos últimos son <strong>de</strong>masiado extensos ofrondosos.4.2. DESCRIPCIÓN GENERAL DE LOS ALGORITMOSEl algoritmo principal <strong>de</strong> los sistemas <strong>de</strong> <strong>la</strong> familia <strong>TDIDT</strong>, a <strong>la</strong> cual pertenecen el ID3 y su <strong>de</strong>scendienteel C4.5, es el proceso <strong>de</strong> generación <strong>de</strong> un árbol <strong>de</strong> <strong>de</strong>cisión inicial a partir <strong>de</strong> un conjunto <strong>de</strong> datos <strong>de</strong>entrenamiento. La i<strong>de</strong>a original está basada en un trabajo <strong>de</strong> Hove<strong>la</strong>nd y Hunt <strong>de</strong> los años 50, culminadoen el libro Experiments in Induction [Hunt et al, 1966] que <strong>de</strong>scribe varios experimentos con variasimplementaciones <strong>de</strong> sistemas <strong>de</strong> aprendizaje <strong>de</strong> conceptos (concept learning systems - CLS).4.2.1. División <strong>de</strong> los datosRecor<strong>de</strong>mos que el método “divi<strong>de</strong> y reinarás” realiza en cada paso una partición <strong>de</strong> los datos <strong>de</strong>l nodosegún una prueba realizada sobre el “mejor” atributo. Cualquier prueba que divida a T en una manera notrivial, tal que al menos dos subconjuntos distintos {T i } no estén vacíos, eventualmente resultará en unapartición <strong>de</strong> subconjuntos <strong>de</strong> una única c<strong>la</strong>se, aún cuando <strong>la</strong> mayoría <strong>de</strong> los subconjuntos contengan unsolo ejemplo. Sin embargo, el proceso <strong>de</strong> construcción <strong>de</strong>l árbol no apunta meramente a encontrarcualquier partición <strong>de</strong> este tipo, sino a encontrar un árbol que revele una estructura <strong>de</strong>l dominio y, por lo52 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentetanto, tenga po<strong>de</strong>r predictivo. Para ello, necesitamos un número importante <strong>de</strong> casos en cada hoja o, dicho<strong>de</strong> otra manera, <strong>la</strong> partición <strong>de</strong>be tener <strong>la</strong> menor cantidad <strong>de</strong> c<strong>la</strong>ses posibles. En el caso i<strong>de</strong>al, nos gustaríaelegir en cada paso <strong>la</strong> prueba que genere el árbol más pequeño.Entonces, estamos buscando un árbol <strong>de</strong> <strong>de</strong>cisión compacto que sea consistente con los datos <strong>de</strong>entrenamiento. Podríamos explorar todos los árboles posibles y elegir el más simple.Desafortunadamente, un número exponencial <strong>de</strong> árboles <strong>de</strong>bería ser analizado. El problema <strong>de</strong> encontrarel árbol <strong>de</strong> <strong>de</strong>cisión más pequeño consistente con un conjunto <strong>de</strong> entrenamiento es <strong>de</strong> complejidad NPcompleta.La mayoría <strong>de</strong> los métodos <strong>de</strong> construcción <strong>de</strong> árboles <strong>de</strong> <strong>de</strong>cisión, incluyendo el C4.5 y el ID3, nopermiten volver a estados anteriores, es <strong>de</strong>cir, son algoritmos golosos sin vuelta atrás. Una vez que se haescogido una prueba para particionar el conjunto actual, típicamente basándose en <strong>la</strong> maximización <strong>de</strong>alguna medida local <strong>de</strong> progreso, <strong>la</strong> partición se concreta y <strong>la</strong>s consecuencias <strong>de</strong> una elección alternativano se exploran. Por este motivo, <strong>la</strong> elección <strong>de</strong>be ser bien realizada.4.2.1.1. Elección <strong>de</strong>l criterio <strong>de</strong> divisiónPara realizar <strong>la</strong> división <strong>de</strong> los datos en cada paso, Quin<strong>la</strong>n propone <strong>la</strong> utilización <strong>de</strong> los métodos <strong>de</strong> <strong>la</strong>Teoría <strong>de</strong> <strong>la</strong> Información. En un principio, el ID3 utilizaba <strong>la</strong> ganancia como criterio <strong>de</strong> división. Sinembargo, a partir <strong>de</strong> numerosas pruebas se <strong>de</strong>scubrió que este criterio no era efectivo en todos los casos yse obtenían mejores resultados si se normalizaba el criterio en cada paso. Por lo tanto, comenzó autilizarse <strong>la</strong> ganancia <strong>de</strong> información, con mayor éxito. El C4.5 también utiliza este último criterio pararealizar <strong>la</strong> división <strong>de</strong> los casos. Quin<strong>la</strong>n afirma que en su opinión el criterio <strong>de</strong> proporción <strong>de</strong> gananciaes robusto y generalmente da resultados más consistentes que el criterio <strong>de</strong> ganancia [Quin<strong>la</strong>n 1988b].La solución propuesta permite <strong>la</strong> utilización <strong>de</strong> ambos criterios. Se estudiarán y compararán los resultadosobtenidos con el ID3 y con el C4.5 utilizando <strong>la</strong> ganancia y <strong>la</strong> proporción <strong>de</strong> ganancia.4.2.1.1.1. Criterio <strong>de</strong> GananciaRecor<strong>de</strong>mos <strong>la</strong> <strong>de</strong>finición <strong>de</strong> ganancia presentada en <strong>la</strong> ecuación 2.6. Supongamos que tenemos unaprueba posible con n resultados que particionan al conjunto T <strong>de</strong> entrenamiento en los subconjuntos T 1 ,T 2 ,. . ., T n . Si <strong>la</strong> prueba se realiza sin explorar <strong>la</strong>s divisiones subsiguientes <strong>de</strong> los subconjuntos T i , <strong>la</strong> únicainformación disponible para evaluar <strong>la</strong> partición es <strong>la</strong> distribución <strong>de</strong> c<strong>la</strong>ses en T y sus subconjuntos.Solución Propuesta Magdalena Servente 53


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteConsi<strong>de</strong>remos una medida simi<strong>la</strong>r luego <strong>de</strong> que T ha sido particionado <strong>de</strong> acuerdo a los n resultados <strong>de</strong> <strong>la</strong>prueba X. La información esperada (entropía) pue<strong>de</strong> <strong>de</strong>terminarse como <strong>la</strong> suma pon<strong>de</strong>rada <strong>de</strong> lossubconjuntos, <strong>de</strong> <strong>la</strong> siguiente maneraHni( T,X ) = ∑ × H( Ti)i=1TT(4.2)La cantidad( T, X ) = H( T ) − H ( T X )I ,(4.3)mi<strong>de</strong> <strong>la</strong> información ganada al partir T <strong>de</strong> acuerdo a <strong>la</strong> prueba X. El criterio <strong>de</strong> ganancia, entonces,selecciona <strong>la</strong> prueba que maximice <strong>la</strong> ganancia <strong>de</strong> información. Es <strong>de</strong>cir, antes <strong>de</strong> particionar los datos encada nodo, se calcu<strong>la</strong> <strong>la</strong> ganancia que resultaría <strong>de</strong> particionar el conjunto <strong>de</strong> datos según cada uno <strong>de</strong> losatributos posibles. Se realiza <strong>la</strong> partición que resulta en <strong>la</strong> mayor ganancia.4.2.1.1.2. Criterio <strong>de</strong> Proporción <strong>de</strong> GananciaEl criterio <strong>de</strong> ganancia tiene un <strong>de</strong>fecto muy serio: presenta una ten<strong>de</strong>ncia muy fuerte a favorecer <strong>la</strong>spruebas con muchos resultados. Analicemos una prueba sobre un atributo que sea <strong>la</strong> c<strong>la</strong>ve primaria <strong>de</strong> unconjunto <strong>de</strong> datos, en <strong>la</strong> cual, obtendremos un único subconjunto para cada caso, y para cada subconjuntotendremos I (T,X) = 0, entonces <strong>la</strong> ganancia <strong>de</strong> información será máxima. Des<strong>de</strong> el punto <strong>de</strong> vista <strong>de</strong> <strong>la</strong>predicción, este tipo <strong>de</strong> división no es útil.Esta ten<strong>de</strong>ncia inherente al criterio <strong>de</strong> ganancia pue<strong>de</strong> corregirse mediante una suerte <strong>de</strong> normalización,en <strong>la</strong> cual se ajusta <strong>la</strong> ganancia aparente, atribuible a pruebas con muchos resultados. Consi<strong>de</strong>remos elcontenido <strong>de</strong> información <strong>de</strong> un mensaje correspondiente a los resultados <strong>de</strong> <strong>la</strong>s pruebas. Por analogía a <strong>la</strong><strong>de</strong>finición <strong>de</strong> <strong>la</strong> I(S) tenemos:I _ divisiónn( X ) = −∑i=1TiT⎛ Ti× log 2⎜⎝ T⎞⎟⎠(4.4)Esto representa <strong>la</strong> información potencial generada al dividir T en n subconjuntos, mientras que <strong>la</strong>ganancia <strong>de</strong> información mi<strong>de</strong> <strong>la</strong> información relevante a una c<strong>la</strong>sificación que nace <strong>de</strong> <strong>la</strong> misma división.Entonces,I(T,X )proporción _ <strong>de</strong> _ ganancia(X ) =I _ división(X )(4.5)54 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteexpresa <strong>la</strong> proporción útil <strong>de</strong> información generada en <strong>la</strong> partición. Si <strong>la</strong> partición es casi trivial, <strong>la</strong>información <strong>de</strong> <strong>la</strong> división será pequeña y esta proporción se volverá inestable. Para evitar este fenómeno,el criterio <strong>de</strong> proporción <strong>de</strong> ganancia selecciona una prueba que maximice <strong>la</strong> expresión anterior, sujeto a<strong>la</strong> restricción <strong>de</strong> que <strong>la</strong> información <strong>de</strong> <strong>la</strong> división sea gran<strong>de</strong>, al menos tan gran<strong>de</strong> como <strong>la</strong> gananciapromedio sobre todas <strong>la</strong>s pruebas realizadas.4.3. ID3El algoritmo ID3 fue diseñado en 1993 por J. Ross Quin<strong>la</strong>n [Quin<strong>la</strong>n, 93a, Quin<strong>la</strong>n, 1993b]. El ID3 tomaobjetos <strong>de</strong> una c<strong>la</strong>se conocida y los <strong>de</strong>scribe en términos <strong>de</strong> una colección fija <strong>de</strong> propieda<strong>de</strong>s o <strong>de</strong>atributos, y produce un árbol <strong>de</strong> <strong>de</strong>cisión sobre estos atributos que c<strong>la</strong>sifica correctamente todos losobjetos [Quin<strong>la</strong>n, 1993b]. Hay ciertas cualida<strong>de</strong>s que diferencian a este algoritmo <strong>de</strong> otros sistemasgenerales <strong>de</strong> inferencia. La primera se basa en <strong>la</strong> forma en que el esfuerzo requerido para realizar unatarea <strong>de</strong> inducción crece con <strong>la</strong> dificultad <strong>de</strong> <strong>la</strong> tarea. El ID3 fue diseñado específicamente para trabajarcon masas <strong>de</strong> objetos, y el tiempo requerido para procesar los datos crece sólo linealmente con <strong>la</strong>dificultad, como producto <strong>de</strong>:• <strong>la</strong> cantidad <strong>de</strong> objetos presentados como ejemplos,• <strong>la</strong> cantidad <strong>de</strong> atributos dados para <strong>de</strong>scribir estos objetos, y• <strong>la</strong> complejidad <strong>de</strong>l concepto a ser <strong>de</strong>sarrol<strong>la</strong>do (medido por <strong>la</strong> cantidad <strong>de</strong> nodos en el árbol <strong>de</strong><strong>de</strong>cisión)Esta linealidad se consigue a costo <strong>de</strong>l po<strong>de</strong>r <strong>de</strong>scriptivo: los conceptos <strong>de</strong>sarrol<strong>la</strong>dos por el ID3 sólotoman <strong>la</strong> forma <strong>de</strong> árboles <strong>de</strong> <strong>de</strong>cisión basados en los atributos dados, y este “lenguaje” es mucho másrestrictivo que <strong>la</strong> lógica <strong>de</strong> primer or<strong>de</strong>n o <strong>la</strong> lógica multivaluada, en <strong>la</strong> cual otros sistemas expresan susconceptos [Quin<strong>la</strong>n, 1993b].El ID3 fue presentado como <strong>de</strong>scendiente <strong>de</strong>l CLS creado por Hunt. El ID3, como contrapartida <strong>de</strong> suantecesor, es un mecanismo mucho más simple para el <strong>de</strong>scubrimiento <strong>de</strong> una colección <strong>de</strong> objetospertenecientes a dos o más c<strong>la</strong>ses. Cada objeto <strong>de</strong>be estar <strong>de</strong>scripto en términos <strong>de</strong> un conjunto fijo <strong>de</strong>atributos, cada uno <strong>de</strong> los cuales cuenta con su conjunto <strong>de</strong> posibles valores <strong>de</strong> atributos. Por ejemplo, e<strong>la</strong>tributo humedad pue<strong>de</strong> tener los valores {alta, baja}, y el atributo clima, {soleado, nub<strong>la</strong>do, lluvioso}.Una reg<strong>la</strong> <strong>de</strong> c<strong>la</strong>sificación en <strong>la</strong> forma <strong>de</strong> un árbol <strong>de</strong> <strong>de</strong>cisión pue<strong>de</strong> construirse para cualquier conjuntoC <strong>de</strong> atributos <strong>de</strong> esa forma [Quin<strong>la</strong>n, 1993b]. Si C está vacío, entonces se lo asocia arbitrariamente acualquiera <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses. Si no, C contiene los representantes <strong>de</strong> varias c<strong>la</strong>ses; se selecciona un atributo yse particiona C en conjuntos disjuntos C 1 , C 2 ,..., C n , don<strong>de</strong> C i contiene aquellos miembros <strong>de</strong> C que tienenSolución Propuesta Magdalena Servente 55


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteel valor i para el atributo seleccionado. Cada una <strong>de</strong> estos subconjuntos se maneja con <strong>la</strong> mismaestrategia. El resultado es un árbol en el cual cada hoja contiene un nombre <strong>de</strong> c<strong>la</strong>se y cada nodo interiorespecifica un atributo para ser testeado con una rama correspondiente al valor <strong>de</strong>l atributo.4.3.1. Descripción <strong>de</strong>l ID3El objetivo <strong>de</strong>l ID3 es crear una <strong>de</strong>scripción eficiente <strong>de</strong> un conjunto <strong>de</strong> datos mediante <strong>la</strong> utilización <strong>de</strong>un árbol <strong>de</strong> <strong>de</strong>cisión. Dados datos consistentes, es <strong>de</strong>cir, sin contradicción entre ellos, el árbol resultante<strong>de</strong>scribirá el conjunto <strong>de</strong> entrada a <strong>la</strong> perfección. A<strong>de</strong>más, el árbol pue<strong>de</strong> ser utilizado para pre<strong>de</strong>cir losvalores <strong>de</strong> nuevos datos, asumiendo siempre que el conjunto <strong>de</strong> datos sobre el cual se trabaja esrepresentativo <strong>de</strong> <strong>la</strong> totalidad <strong>de</strong> los datos.Dados:• Un conjunto <strong>de</strong> datos• Un conjunto <strong>de</strong> <strong>de</strong>scriptores <strong>de</strong> cada dato• Un c<strong>la</strong>sificador/conjunto <strong>de</strong> c<strong>la</strong>sificadores para cada objeto.Se <strong>de</strong>sea obtener:• Un árbol <strong>de</strong> <strong>de</strong>cisión simple basándose en <strong>la</strong> entropía, don<strong>de</strong> los nodos pue<strong>de</strong>n ser:1. Nodos intermedios: en don<strong>de</strong> se encuentran los <strong>de</strong>scriptores escogidos según el criterio <strong>de</strong>entropía, que <strong>de</strong>terminan cuál rama es <strong>la</strong> que <strong>de</strong>be tomarse.2. Hojas: estos nodos <strong>de</strong>terminan el valor <strong>de</strong>l c<strong>la</strong>sificador.Este procedimiento <strong>de</strong> formación <strong>de</strong> reg<strong>la</strong>s funcionará siempre dado que no existen dos objetospertenecientes a distintas c<strong>la</strong>ses pero con idéntico valor para cada uno <strong>de</strong> sus atributos; si este casollegara a presentarse, los atributos son ina<strong>de</strong>cuados para el proceso <strong>de</strong> c<strong>la</strong>sificación.Hay dos conceptos importantes a tener en cuenta en el algoritmo ID3[Blurock, 1996]: <strong>la</strong> entropía y elárbol <strong>de</strong> <strong>de</strong>cisión. La entropía se utiliza para encontrar el parámetro más significativo en <strong>la</strong>caracterización <strong>de</strong> un c<strong>la</strong>sificador. El árbol <strong>de</strong> <strong>de</strong>cisión es un medio eficiente e intuitivo para organizar los<strong>de</strong>scriptores que pue<strong>de</strong>n ser utilizados con funciones predictivas.56 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente4.3.1.1. Algoritmo ID3A continuación se presenta el algoritmo <strong>de</strong>l método ID3 para <strong>la</strong> construcción <strong>de</strong> árboles <strong>de</strong> <strong>de</strong>cisión enfunción <strong>de</strong> un conjunto <strong>de</strong> datos previamente c<strong>la</strong>sificados.Función ID3(R: conjunto <strong>de</strong> atributos no c<strong>la</strong>sificadores,C: atributo c<strong>la</strong>sificador,S: conjunto <strong>de</strong> entrenamiento) <strong>de</strong>vuelve un árbol <strong>de</strong> <strong>de</strong>cisión;ComienzoSi S está vacío,<strong>de</strong>volver un único nodo con Valor Fal<strong>la</strong>;Si todos los registros <strong>de</strong> S tienen el mismo valor para el atributo c<strong>la</strong>sificador,Devolver un único nodo con dicho valor;Si R está vacío, entonces<strong>de</strong>volver un único nodo con el valor más frecuente <strong>de</strong>l atributo c<strong>la</strong>sificador enlos registros <strong>de</strong> S [Nota: habrá errores, es <strong>de</strong>cir, registros que no estarán bienc<strong>la</strong>sificados en este caso];Si R no está vacío, entoncesD ! atributo con mayor Ganancia(D,S) entre los atributos <strong>de</strong> R;Sean {dj| j=1,2, .., m} los valores <strong>de</strong>l atributo D;Sean {Sj| j=1,2, .., m} los subconjuntos <strong>de</strong> S correspondientes a los valores <strong>de</strong>dj respectivamente;Devolver un árbol con <strong>la</strong> raíz nombrada como D y con los arcos nombrados d1, d2,.., dm que van respectivamente a los árbolesID3(R-{D}, C, S1), ID3(R-{D}, C, S2), .., ID3(R-{D}, C, Sm);Fin4.3.1.2. Poda <strong>de</strong> los árboles <strong>de</strong> <strong>de</strong>cisiónLa poda <strong>de</strong> los árboles <strong>de</strong> <strong>de</strong>cisión se realiza con el objetivo <strong>de</strong> que éstos sean más comprensibles. Locual implica que tengan menos niveles y/o sean menos frondosos. La poda aplicada en el ID3 se realizauna vez que el árbol ha sido generado y es un mecanismo bastante simple: si <strong>de</strong> un nodo nacen muchasramas, <strong>la</strong>s cuales terminan todas en <strong>la</strong> misma c<strong>la</strong>se, entonces se reemp<strong>la</strong>za dicho nodo por una hoja con <strong>la</strong>c<strong>la</strong>se común. En caso contrario, se analizan todos los nodos hijos.4.3.1.3. Pasaje a reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónPara pasar a reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión, el ID3 recorre el árbol <strong>de</strong>s<strong>de</strong> <strong>la</strong> raíz hasta <strong>la</strong>s hojas y genera una reg<strong>la</strong> porcada camino recorrido. El antece<strong>de</strong>nte <strong>de</strong> cada reg<strong>la</strong> estará compuesto por <strong>la</strong> conjunción <strong>de</strong> <strong>la</strong>s pruebas <strong>de</strong>valor <strong>de</strong> cada nodo visitado, y <strong>la</strong> c<strong>la</strong>se será <strong>la</strong> correspondiente a <strong>la</strong> hoja. El recorrido <strong>de</strong>l árbol se basa enel recorrido <strong>de</strong> preor<strong>de</strong>n (<strong>de</strong> raíz a hojas, <strong>de</strong> izquierda a <strong>de</strong>recha). Como estamos trabajando con árbolesn-arios, este recorrido es único.Solución Propuesta Magdalena Servente 57


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente4.3.1.4. Atributos <strong>de</strong>sconocidosEs necesario que todos los casos presentados al ID3 estén <strong>de</strong>scriptos por los mismos atributos. Esto limita<strong>la</strong> aplicación <strong>de</strong>l algoritmo, ya que no siempre se cuenta con toda <strong>la</strong> información necesaria. Imaginemosuna base <strong>de</strong> datos histórica en <strong>la</strong> que se fueron agregando atributos a medida que se lo consi<strong>de</strong>rónecesario, para los primeros casos <strong>de</strong> <strong>la</strong> misma no se conocerán los valores <strong>de</strong> los nuevos atributos. ElID3 pue<strong>de</strong> trabajar con atributos <strong>de</strong>sconocidos, los consi<strong>de</strong>ra como si fuesen un nuevo valor, por ello, sellega a <strong>la</strong> convención <strong>de</strong> que los valores <strong>de</strong>sconocidos, <strong>de</strong>ben expresarse con un “?” en los datos. El “?”constituye un nuevo valor posible para el atributo en cuestión.4.3.1.5. Resolución <strong>de</strong> un ejemplo utilizando el ID3En esta sección se presentarán un árbol y un conjunto <strong>de</strong> reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión obtenidos utilizando el ID3,para ejemplificar su aplicación. Supongamos que queremos analizar cuáles días son convenientes parajugar al tenis basándonos en <strong>la</strong> humedad, el viento y el estado <strong>de</strong>l tiempo. Los datos que se utilizarán sepresentan en <strong>la</strong> siguiente tab<strong>la</strong>:Estado Humedad Viento JuegoTenisSoleado Alta Leve NoSoleado Alta Fuerte NoNub<strong>la</strong>do Alta Leve SiLluvia Alta Leve SiLluvia Normal Leve SiLluvia Normal Fuerte NoNub<strong>la</strong>do Normal Fuerte SiSoleado Alta Leve NoSoleado Normal Leve SiLluvia Normal Leve SiSoleado Normal Fuerte SiNub<strong>la</strong>do Alta Fuerte SiNub<strong>la</strong>do Normal Leve SiLluvia Alta Fuerte SiEn el caso <strong>de</strong> este ejemplo, los árboles y <strong>la</strong>s reg<strong>la</strong>s obtenidos utilizando <strong>la</strong> ganancia y <strong>la</strong> proporción <strong>de</strong>ganancia son iguales. Se mostrarán ambos ejemplos juntos con fines prácticos.Construcción <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisiónA partir <strong>de</strong> todos los datos disponibles, el ID3 analiza todas <strong>la</strong>s divisiones posibles según los distintosatributos y calcu<strong>la</strong> <strong>la</strong> ganancia y/o <strong>la</strong> proporción <strong>de</strong> ganancia. Comecemos analizando el atributo Estado.58 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEl atributo Estado tiene <strong>la</strong> siguiente distribución <strong>de</strong> datos:Lluvia Nub<strong>la</strong>do SoleadoNo 1 0 3Si 4 4 2Totales 5 4 5Para calcu<strong>la</strong>r <strong>la</strong> ganancia y, por lo tanto, también <strong>la</strong> proporción <strong>de</strong> ganancia, es necesario calcu<strong>la</strong>r <strong>la</strong>entropía <strong>de</strong>l conjunto. Entonces,SiSi NoNo 10 10 4 4H ( S)= − p log p − p log2p = − log2− log214 14 14 142=0.86312bitsCalcu<strong>la</strong>mos ahora <strong>la</strong> entropía que tendrían los conjuntos resultantes <strong>de</strong> <strong>la</strong> división <strong>de</strong> datos según esteatributo.H(S,Estado)=2∑i=1P( S ) ⋅ H( )iS i=514⎛⎜−⎝1log5215−4log524 ⎞⎟ +5 ⎠414⎛⎜−⎝0log4204−4log424 ⎞⎟ +4 ⎠514⎛⎜−⎝3log5235−2log522 ⎞⎟5 ⎠54 5H ( S,Estado)= × 0.7219 + × 0 + 0.97095 = 0. 6046bits14 14 14Ahora calcu<strong>la</strong>mos <strong>la</strong> ganancia resultante <strong>de</strong> dividir al subconjunto según el atributo Estado, tendremos:( S, Estado) = H( S) − H ( S,Estado) = 0. bitsGanancia 25852Para calcu<strong>la</strong>r <strong>la</strong> proporción <strong>de</strong> ganancia <strong>de</strong>bemos conocer primero <strong>la</strong> información <strong>de</strong> <strong>la</strong> división que secalcu<strong>la</strong> como:nS ⎛ S ⎞ 5 ⎛ 5 ⎞ 4 ⎛ 4 ⎞ 5 ⎛ 5 ⎞I _ división = ∑222 ⎜ ⎟i 1 S ⎜⎟S ⎟⎜ ⎟ ⎜= ⎝ ⎠ 14 ⎝14⎠ 14 ⎝14⎠ 14 ⎝14⎠ii( S) − × log ⎜ ⎟ = − × log − × log − × log 1.577bits2=Finalmente, calcu<strong>la</strong>mos <strong>la</strong> proporción <strong>de</strong> ganancia.Ganancia(S)proporción _ <strong>de</strong> _ ganancia(S)== 0. 491042bitsI _ división(S)De <strong>la</strong> misma manera en que calcu<strong>la</strong>mos <strong>la</strong> ganancia y <strong>la</strong> proporción <strong>de</strong> ganancia para el caso anterior,calcu<strong>la</strong>mos para el atributo Humedad los siguientes valores:Solución Propuesta Magdalena Servente 59


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteGanancia=0.0746702 bitsProporción <strong>de</strong> ganancia =0.14934 bitsPara el caso <strong>de</strong>l atributo Viento obtenemos los siguientes valores:Ganancia=0.00597769 bitsProporción <strong>de</strong> ganancia =0.0122457 bitsUna vez que hemos calcu<strong>la</strong>do <strong>la</strong>s ganancias y proporciones <strong>de</strong> ganancia para todos los atributosdisponibles, <strong>de</strong>bemos elegir el atributo según el cual dividiremos a este conjunto <strong>de</strong> datos. Recor<strong>de</strong>mosque tanto en el caso <strong>de</strong> <strong>la</strong> ganancia como en el <strong>de</strong> <strong>la</strong> proporción <strong>de</strong> ganancia, el mejor atributo para <strong>la</strong>división es aquel que <strong>la</strong> maximiza. En este ejemplo, <strong>la</strong> división según el atributo Estado es <strong>la</strong> que mayorganancia y proporción <strong>de</strong> ganancia ofrece. Esto significa que el nodo raíz <strong>de</strong>l árbol será un nodo queevalúa el atributo Estado.La figura 4.2 esquematiza <strong>la</strong> construcción <strong>de</strong> un árbol <strong>de</strong> <strong>de</strong>cisión utilizando el ID3 para el conjunto <strong>de</strong>datos en cuestión. La figura 4.3 presenta el árbol <strong>de</strong> <strong>de</strong>cisión obtenido.Transformación a reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónComo se explicó en <strong>la</strong> sección 4.3.1.3 para pasar un árbol <strong>de</strong> <strong>de</strong>cisión a reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión, el ID3 lorecorre en preor<strong>de</strong>n y cada vez que llega a una hoja, escribe <strong>la</strong> reg<strong>la</strong> que tiene como consecuente el valor<strong>de</strong> <strong>la</strong> misma, y como antece<strong>de</strong>nte, <strong>la</strong> conjunción <strong>de</strong> <strong>la</strong>s pruebas <strong>de</strong> valor especificados en todos los nodosrecorridos <strong>de</strong>s<strong>de</strong> <strong>la</strong> raíz para llegar a dicha hoja. Analicemos el pasaje <strong>de</strong>l árbol <strong>de</strong> <strong>la</strong> figura 4.3 a reg<strong>la</strong>s <strong>de</strong><strong>de</strong>cisión.El recorrido <strong>de</strong>l árbol comienza por <strong>la</strong> raíz Estado, continúa por los nodos Viento y Humedad hasta llegara <strong>la</strong> hoja “SI”. La reg<strong>la</strong> generada para este recorrido será:Reg<strong>la</strong> 0SI Estado = LluviaY Viento = FuerteY Humedad = AltaENTONCES JuegoTenis = SiSi seguimos el recorrido preor<strong>de</strong>n, llegamos a continuación a <strong>la</strong> hoja “NO”, obteniendo en este caso <strong>la</strong>siguiente reg<strong>la</strong>:Reg<strong>la</strong> 1SI Estado = LluviaY Viento = FuerteY Humedad = NormalENTONCES JuegoTenis = No60 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteLluviaEstado Humedad Viento JuegoTenisSoleado Alta Leve NoSoleado Alta Fuerte NoNub<strong>la</strong>do Alta Leve SiLluvia Alta Leve SiLluvia Normal Leve SiLluvia Normal Fuerte NoNub<strong>la</strong>do Normal Fuerte SiSoleado Alta Leve NoSoleado Normal Leve SiLluvia Normal Leve SiSoleado Normal Fuerte SiNub<strong>la</strong>do Alta Fuerte SiNub<strong>la</strong>do Normal Leve SiLluvia Alta Fuerte SiEstadoNub<strong>la</strong>doEstado Humedad Viento JuegoTenis Estado Humedad Viento JuegoTenisLluvia Alta Leve SiNub<strong>la</strong>do Alta Leve SiLluvia Normal Leve SiNub<strong>la</strong>do Normal Fuerte SiLluvia Normal Fuerte NoNub<strong>la</strong>do Alta Fuerte SiLluvia Normal Leve SiNub<strong>la</strong>do Normal Leve SiLluvia Alta Fuerte SiSIViento HUMEDADGanancia=0.170951Proporción <strong>de</strong> ganancia =0.358525VIENTOGanancia=0.321928Proporción <strong>de</strong> ganancia =0.675162AltaSoleadoESTADOganancia=0.258521proporción <strong>de</strong> ganancia=0.491042HUMEDADGanancia=0.0746702Proporción <strong>de</strong> ganancia =0.14934VIENTOGanancia=0.00597769Proporción <strong>de</strong> ganancia=0.0122457Estado Humedad Viento JuegoTenisSoleado Alta Leve NoSoleado Alta Fuerte NoSoleado Alta Leve NoSoleado Normal Leve SiSoleado Normal Fuerte SiHumedadHUMEDADGanancia=0.970951Proporción <strong>de</strong> ganancai=2.03632VIENTONormalGanancia=0.0199731Proporción <strong>de</strong> ganancia=0.0418885LeveFuerteEstado Humedad Viento JuegoTenisSoleado Alta Leve NoSoleado Alta Fuerte NoSoleado Alta Leve NoNOEstado Humedad Viento JuegoTenisSoleado Normal Leve SiSoleado Normal Fuerte SiSIEstado Humedad Viento JuegoTenisLluvia Alta Leve SiLluvia Normal Leve SiLluvia Normal Leve SiSIEstado Humedad Viento JuegoTenisLluvia Normal Fuerte NoLluvia Alta Fuerte SiHumedadAltaNormalEstado Humedad Viento JuegoTenisLluvia Alta Fuerte SiSIEstado Humedad Viento JuegoTenisLluvia Normal Fuerte NoNOFigura 4.2: Esquema <strong>de</strong> <strong>la</strong> construcción <strong>de</strong> un árbol <strong>de</strong> <strong>de</strong>cisión utilizando el ID3Solución Propuesta Magdalena Servente 61


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteLluviaEstadoSoleadoVientoNub<strong>la</strong>doSIHumedadFuerteLeveAltaNormalHumedadSINOSIAltaNormalSINOFigura 4.3: Arbol <strong>de</strong> <strong>de</strong>cisión obtenido con el ID3Recorriendo en este sentido el árbol, el resto <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s obtenidas se muestran a continuación.Reg<strong>la</strong> 2SI Estado = LluviaY Viento = LeveENTONCES JuegoTenis = SiReg<strong>la</strong> 3SI Estado = Nub<strong>la</strong>doENTONCES JuegoTenis = SiReg<strong>la</strong> 4SI Estado = SoleadoY Humedad = AltaENTONCES JuegoTenis = NoReg<strong>la</strong> 5SI Estado = SoleadoY Humedad = NormalENTONCES JuegoTenis = Si4.3.2. Limitaciones al ID34.3.2.1. Valores continuosEl ID3 pue<strong>de</strong> aplicarse a cualquier conjunto <strong>de</strong> datos, siempre y cuando los atributos sean discretos. Estesistema no cuenta con <strong>la</strong> facilidad <strong>de</strong> trabajar con atributos continuos ya que analiza <strong>la</strong> entropía sobrecada uno <strong>de</strong> los valores <strong>de</strong> un atributo, por lo tanto, tomaría cada valor <strong>de</strong> un atributo continuoindividualmente en el cálculo <strong>de</strong> <strong>la</strong> entropía, lo cual no es útil en muchos <strong>de</strong> los dominios. Cuando setrabaja con atributos continuos generalmente se piensa en rangos <strong>de</strong> valores y no en valores particu<strong>la</strong>res.62 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteExisten varias maneras <strong>de</strong> solucionar este problema <strong>de</strong>l ID3, como <strong>la</strong> agrupación <strong>de</strong> valores presentada en[Gallion et al, 1993] o <strong>la</strong> discretización <strong>de</strong> los mismos explicada en [Blurock, 1996], [Quin<strong>la</strong>n, 1993d]. ElC4.5 resolvió el problema <strong>de</strong> los atributos continuos mediante <strong>la</strong> discretización, explicada en <strong>la</strong> Sección2.4.1.2.4.3.2.3. VentanasEl proceso <strong>de</strong>scripto para <strong>la</strong> construcción <strong>de</strong> árboles <strong>de</strong> <strong>de</strong>cisión asume que <strong>la</strong>s operaciones <strong>de</strong> cálculo,especialmente, <strong>la</strong>s <strong>de</strong> evaluación <strong>de</strong> <strong>la</strong>s frecuencias re<strong>la</strong>tivas (en <strong>la</strong>s que se <strong>de</strong>ben contar elementos) <strong>de</strong>lconjunto C, pue<strong>de</strong>n ser realizadas eficientemente, lo cual significa, en <strong>la</strong> práctica, que para que el procesosea rápido, C <strong>de</strong>be residir en memoria. ¿Qué pasa si C es tan gran<strong>de</strong> que no cabe en memoria? Lasolución aplicada por ID3 es una solución iterativa, que crea sucesivos árboles <strong>de</strong> <strong>de</strong>cisión <strong>de</strong> precisióncada vez mayor, hasta llegar al árbol <strong>de</strong> <strong>de</strong>cisión óptimo. El método pue<strong>de</strong> resumirse como [Quin<strong>la</strong>n,1993b]:Elegir un conjunto aleatorio <strong>de</strong> instancias (l<strong>la</strong>mado ventana).Repetir:Formar una reg<strong>la</strong> para explicar <strong>la</strong> ventana actualEncontrar <strong>la</strong>s excepciones a <strong>la</strong> reg<strong>la</strong> en el resto <strong>de</strong> <strong>la</strong>s instanciasCrear una nueva ventana a partir <strong>de</strong> <strong>la</strong> ventana actual y <strong>la</strong>s excepciones a <strong>la</strong>reg<strong>la</strong> generada a partir <strong>de</strong> el<strong>la</strong>Hasta que no que<strong>de</strong>n excepciones a <strong>la</strong> reg<strong>la</strong>.El proceso termina cuando se forma una reg<strong>la</strong> que no tenga excepciones y sea correcta para todo C. Sehan testeado dos métodos para formar <strong>la</strong> nueva ventana. En el primero, <strong>la</strong> ventana actual crece por <strong>la</strong>adición <strong>de</strong> excepciones hasta un número especificado. El segundo método trata <strong>de</strong> i<strong>de</strong>ntificar los objetos“c<strong>la</strong>ves” en <strong>la</strong> ventana actual y reemp<strong>la</strong>za el resto por excepciones. Ambos métodos fueron probados conun problema <strong>de</strong> c<strong>la</strong>sificación no trivial <strong>de</strong> 14 atributos y cerca <strong>de</strong> 20.000 objetos para los cuales un árbol<strong>de</strong> <strong>de</strong>cisión correcto contenía 20 nodos [Quin<strong>la</strong>n, 1993b]. Las conclusiones obtenidas <strong>de</strong> estas pruebasfueron:• Los métodos convergen rápidamente; generalmente, se precisaron sólo 4 iteraciones para llegar a unárbol <strong>de</strong> <strong>de</strong>cisión correcto.• Fue posible <strong>de</strong>sarrol<strong>la</strong>r un árbol correcto a partir <strong>de</strong> <strong>la</strong> ventana final que contenía sólo una pequeñafracción <strong>de</strong>l total <strong>de</strong> los objetos• El proceso no fue sensible a parámetros como el tamaño <strong>de</strong> <strong>la</strong> ventana inicial.Solución Propuesta Magdalena Servente 63


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente• El tiempo requerido para obtener un árbol <strong>de</strong> <strong>de</strong>cisión correcto para el problema <strong>de</strong> c<strong>la</strong>sificacióncrece linealmente con <strong>la</strong> cantidad <strong>de</strong> ejemplos que están siendo analizados.4.4. C4.5El C4.5 se basa en el ID3, por lo tanto, <strong>la</strong> estructura principal <strong>de</strong> ambos métodos es <strong>la</strong> misma. El C4.5construye un árbol <strong>de</strong> <strong>de</strong>cisión mediante el algoritmo “divi<strong>de</strong> y reinarás” y evalúa <strong>la</strong> información en cadacaso utilizando los criterios <strong>de</strong> entropía y ganancia o proporción <strong>de</strong> ganancia, según sea el caso. Acontinuación, se explicarán <strong>la</strong>s características particu<strong>la</strong>res <strong>de</strong> este método que lo diferencian <strong>de</strong> suantecesor.4.4.1. Algoritmo C4.5El algoritmo <strong>de</strong>l método C4.5 para <strong>la</strong> construcción <strong>de</strong> árboles <strong>de</strong> <strong>de</strong>cisión a gran<strong>de</strong>s rasgos muy simi<strong>la</strong>r al<strong>de</strong>l ID3. Varía en <strong>la</strong> manera en que realiza <strong>la</strong>s pruebas sobre los atributos, tal como se <strong>de</strong>tal<strong>la</strong> en <strong>la</strong>ssecciones siguientes.Función C4.5(R: conjunto <strong>de</strong> atributos no c<strong>la</strong>sificadores,C: atributo c<strong>la</strong>sificador,S: conjunto <strong>de</strong> entrenamiento) <strong>de</strong>vuelve un árbol <strong>de</strong> <strong>de</strong>cisión;ComienzoSi S está vacío,<strong>de</strong>volver un único nodo con Valor Fal<strong>la</strong>;Si todos los registros <strong>de</strong> S tienen el mismo valor para el atributo c<strong>la</strong>sificador,Devolver un único nodo con dicho valor;Si R está vacío, entonces<strong>de</strong>volver un único nodo con el valor más frecuente <strong>de</strong>l atributo c<strong>la</strong>sificador enlos registros <strong>de</strong> S [Nota: habrá errores, es <strong>de</strong>cir, registros que no estarán bienc<strong>la</strong>sificados en este caso];Si R no está vacío, entoncesD ! atributo con mayor Proporción <strong>de</strong> Ganancia(D,S) entre los atributos <strong>de</strong> R;Sean {dj| j=1,2, .., m} los valores <strong>de</strong>l atributo D;Sean {Sj| j=1,2, .., m} los subconjuntos <strong>de</strong> S correspondientes a los valores <strong>de</strong>dj respectivamente;Devolver un árbol con <strong>la</strong> raíz nombrada como D y con los arcos nombrados d1, d2,.., dm que van respectivamente a los árbolesC4.5(R-{D}, C, S1), C4.5(R-{D}, C, S2), .., C4.5(R-{D}, C, Sm);Fin64 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente4.4.2. Características particu<strong>la</strong>res <strong>de</strong>l C4.54.4.2.1. Pruebas utilizadasEn cada nodo, el sistema <strong>de</strong>be <strong>de</strong>cidir cuál prueba escoge para dividir los datos. Los tres tipos <strong>de</strong> pruebasposibles propuestas por el C4.5 son [Quin<strong>la</strong>n, 1993d]:1. La prueba “estándar” para los atributos discretos, con un resultado y una rama para cada valorposible <strong>de</strong>l atributo.2. Una prueba más compleja, basada en un atributo discreto, en don<strong>de</strong> los valores posibles sonasignados a un número variable <strong>de</strong> grupos con un resultado posible para cada grupo, en lugar <strong>de</strong> paracada valor.3. Si un atributo A tiene valores numéricos continuos, se realiza una prueba binaria con resultados A ≤ Zy A > Z, para lo cual <strong>de</strong>be <strong>de</strong>terminarse el valor límite Z.Todas estas pruebas se evalúan <strong>de</strong> <strong>la</strong> misma manera, mirando el resultado <strong>de</strong> <strong>la</strong> proporción <strong>de</strong> ganancia, oalternativamente, el <strong>de</strong> <strong>la</strong> ganancia, resultante <strong>de</strong> <strong>la</strong> división que producen. Ha sido útil agregar unarestricción adicional: para cualquier división, al menos dos <strong>de</strong> los subconjuntos T i <strong>de</strong>ben contener unnúmero razonable <strong>de</strong> casos. Esta restricción, que evita <strong>la</strong>s subdivisiones casi triviales es tenida en cuentaso<strong>la</strong>mente cuando el conjunto T es pequeño.4.4.2.2. Pruebas sobre atributos continuosLas pruebas para valores continuos trabajan con un valor límite arbitrario. El método utilizado para ellopor el C4.5 es muy simple [Quin<strong>la</strong>n, 1993d] [Quin<strong>la</strong>n, 1996a]. Primero, los casos <strong>de</strong> entrenamiento T seor<strong>de</strong>nan según los valores <strong>de</strong>l atributo A continuo que está siendo consi<strong>de</strong>rado. Existe un número finito <strong>de</strong>estos valores.Sean {v 1 , v 2 ,. . ., v m } los valores que toma el atributo A. Cualquier valor límite entre v i y v i+1 tendrá elmismo efecto al dividir los casos entre aquellos cuyo valor para A pertenece al subconjunto {v 1 , v 2 ,. . .,v i } y aquellos cuyo valor pertenece a {v i+1 , v i+2 ,. . ., v m }. Entonces, existen sólo m – 1 divisiones posibles<strong>de</strong> según el valor <strong>de</strong> A y todas son examinadas. Al estar or<strong>de</strong>nados, <strong>la</strong>s sucesivas pruebas para todos losvalores, pue<strong>de</strong>n realizarse en una única pasada.Típicamente se elige el punto medio <strong>de</strong>l intervalo como valor límite representativo, entonces el iésimovalor límite sería:Solución Propuesta Magdalena Servente 65


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentev i+ v i+12(4.6)C4.5 se diferencia <strong>de</strong> otros algoritmos en que elige el mayor valor <strong>de</strong> A en todo el conjunto <strong>de</strong> casos <strong>de</strong>entrenamiento que no exce<strong>de</strong> el punto medio presentado, en lugar <strong>de</strong>l punto medio en sí mismo, comovalor límite; <strong>de</strong> esta manera se asegura que todos los valores límites que aparezcan en el árbol y/o <strong>la</strong>sreg<strong>la</strong>s ocurran al menos una vez en los datos.El método utilizado para <strong>la</strong> binarización <strong>de</strong> atributos tiene una gran <strong>de</strong>sventaja. Mientras que todas <strong>la</strong>soperaciones <strong>de</strong> construcción <strong>de</strong> un árbol <strong>de</strong> <strong>de</strong>cisión crecen linealmente con el número <strong>de</strong> casos <strong>de</strong>entrenamiento, el or<strong>de</strong>namiento <strong>de</strong> d valores continuos crece proporcionalmente a d x log(d). Entonces, eltiempo requerido para construir un árbol a partir <strong>de</strong> un gran conjunto <strong>de</strong> datos <strong>de</strong> entrenamiento, pue<strong>de</strong>estar dominado por el or<strong>de</strong>namiento <strong>de</strong> datos con valores continuos.4.4.2.2. Atributos <strong>de</strong>sconocidosC4.5 asume que todos los resultados <strong>de</strong> pruebas <strong>de</strong>sconocidos se distribuyen probabilísticamente según <strong>la</strong>frecuencia re<strong>la</strong>tiva <strong>de</strong> los valores conocidos. Un caso (posiblemente fraccional) con un valor <strong>de</strong>sconocidose divi<strong>de</strong> en fragmentos cuyos pesos son proporcionales a dichas frecuencias re<strong>la</strong>tivas, dando porresultado que un caso pue<strong>de</strong> seguir múltiples caminos en el árbol. Esto se aplica tanto cuando los casos <strong>de</strong>entrenamiento se divi<strong>de</strong>n durante <strong>la</strong> construcción <strong>de</strong>l árbol, como cuando el árbol se utiliza para c<strong>la</strong>sificarcasos.4.4.2.2.1. Evaluación <strong>de</strong> <strong>la</strong>s pruebasLa modificación <strong>de</strong>l criterio <strong>de</strong> ganancia es bastante directa. La ganancia <strong>de</strong> una prueba mi<strong>de</strong> <strong>la</strong>información sobre <strong>la</strong> pertenencia a una c<strong>la</strong>se que pue<strong>de</strong> esperarse como resultado <strong>de</strong> partir un conjunto <strong>de</strong>datos <strong>de</strong> entrenamiento, calcu<strong>la</strong>da al restar <strong>la</strong> información que se espera que sea necesaria para i<strong>de</strong>ntificar<strong>la</strong> c<strong>la</strong>se <strong>de</strong> un objeto <strong>de</strong>spués <strong>de</strong> <strong>la</strong> partición a <strong>la</strong> misma cantidad antes <strong>de</strong> <strong>la</strong> partición. Es evi<strong>de</strong>nte queuna prueba no pue<strong>de</strong> proveer información <strong>de</strong> pertenencia a una c<strong>la</strong>se si no se conoce el valor <strong>de</strong> unatributo.Sea T el conjunto <strong>de</strong> datos <strong>de</strong> entrenamiento y X una prueba basada en un atributo A, supongamos que elvalor <strong>de</strong> A se conoce únicamente en una fracción F <strong>de</strong> casos en T. Sean I(T) e I X (T) calcu<strong>la</strong>das según <strong>la</strong>ecuación 2.4, excepto que sólo se tienen en cuenta los casos para los cuales el valor <strong>de</strong> A es conocido. La<strong>de</strong>finición <strong>de</strong> ganancia pue<strong>de</strong> corregirse a:66 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteGananciaF ×( X ) = probabilidad _ A_sea _ conocido×( I( T ) − I ( T ))+ probabilidad _ A_no _ sea _ conocido×0 =( I( T ) − I ( T)XX(4.7)o, en otras pa<strong>la</strong>bras, <strong>la</strong> ganancia aparente <strong>de</strong> mirar a los casos con valores conocidos, multiplicada por <strong>la</strong>fracción <strong>de</strong> dichos casos en el conjunto <strong>de</strong> entrenamiento.El cálculo <strong>de</strong> <strong>la</strong> proporción <strong>de</strong> ganancia se realiza <strong>de</strong> <strong>la</strong> misma manera que en <strong>la</strong> ecuación 4.5. La<strong>de</strong>finición <strong>de</strong> información <strong>de</strong> <strong>la</strong> división pue<strong>de</strong> modificarse <strong>de</strong> manera simi<strong>la</strong>r, consi<strong>de</strong>rando los casos convalores <strong>de</strong>sconocidos como un grupo más, entonces, si una prueba tienen n resultados, su información <strong>de</strong><strong>la</strong> división se calcu<strong>la</strong> como <strong>la</strong> prueba dividido n+1subconjuntos.I _ divisiónn 1( ) ∑ + X = −i=1Ti× logT + 12⎛ Ti⎞⎜ ⎟⎝ T + 1⎠(4.8)4.4.1.2.2. Partición <strong>de</strong>l conjunto <strong>de</strong> entrenamientoUna prueba pue<strong>de</strong> seleccionar <strong>de</strong>l conjunto <strong>de</strong> pruebas posibles, como antes, pero utilizando <strong>la</strong>s versionesmodificadas <strong>de</strong> ganancia e información <strong>de</strong> <strong>la</strong> división. Si <strong>la</strong> prueba X con resultados O 1 , O 2 , ..., O N esescogida y tiene algunos valores <strong>de</strong>sconocidos para algunos <strong>de</strong> los datos <strong>de</strong> entrenamiento, el concepto <strong>de</strong>particionamiento <strong>de</strong>be ser generalizado, según un criterio probabilístico.Cuando un caso T con un resultado conocido O i es asignado al subconjunto T i , esto significa que <strong>la</strong>probabilidad <strong>de</strong> que el caso pertenezca a T i es 1 y <strong>de</strong> que pertenezca a todos los otros subconjuntos es 0.Cuando el resultado es <strong>de</strong>sconocido, sólo se pue<strong>de</strong> realizar una afirmación estadística más débil.Entonces, se asocia con cada caso <strong>de</strong>l subconjunto T i un peso representando <strong>la</strong> probabilidad <strong>de</strong> que el casopertenezca a cada subconjunto. Si el resultado para el caso es conocido, entonces el peso es 1; si el casotiene un resultado <strong>de</strong>sconocido, entonces el peso es simplemente <strong>la</strong> probabilidad <strong>de</strong>l resultado O i en estepunto. Cada subconjunto T i es una colección <strong>de</strong> casos fraccionales posibles, tal que |T i | <strong>de</strong>be serreinterpretada como <strong>la</strong> suma <strong>de</strong> los pesos fraccionales <strong>de</strong> los casos pertenecientes al subconjunto.Los casos <strong>de</strong> entrenamiento en T pue<strong>de</strong>n tener pesos no unitarios, ya que T pue<strong>de</strong> ser el resultado <strong>de</strong> unapartición previa. Entonces, en general, un caso <strong>de</strong> T con peso p cuyo resultado no se conoce, es asignado acada subconjunto T i con peso:P x probabilidad_<strong>de</strong>_resultado_O i (4.9)Solución Propuesta Magdalena Servente 67


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteLa probabilidad_<strong>de</strong>_resultado_O i se estima como <strong>la</strong> suma <strong>de</strong> los pesos <strong>de</strong> los casos en T con valoresconocidos que tienen resultado O i , sobre <strong>la</strong> suma <strong>de</strong> los pesos <strong>de</strong> los casos en T con resultado conocidospara <strong>la</strong> prueba.4.4.1.2.3. C<strong>la</strong>sificación <strong>de</strong> un nuevo casoSe toma un enfoque simi<strong>la</strong>r cuando el árbol <strong>de</strong> <strong>de</strong>cisión es utilizado para c<strong>la</strong>sificar un caso. Si en un nodo<strong>de</strong> <strong>de</strong>cisión el atributo relevante no se conoce, <strong>de</strong> manera tal que el resultado <strong>de</strong> <strong>la</strong> prueba no pue<strong>de</strong><strong>de</strong>terminarse, el sistema explora todos los resultados posibles y combina aritméticamente <strong>la</strong>sc<strong>la</strong>sificaciones resultantes. Como para cada atributo pue<strong>de</strong>n existir múltiples caminos <strong>de</strong>s<strong>de</strong> <strong>la</strong> raíz <strong>de</strong>lárbol hasta <strong>la</strong>s hojas, una “c<strong>la</strong>sificación” es una distribución <strong>de</strong> c<strong>la</strong>ses más que una única c<strong>la</strong>se. Cuando <strong>la</strong>distribución <strong>de</strong> c<strong>la</strong>ses total para un caso nuevo ha sido establecida <strong>de</strong> esta manera, <strong>la</strong> c<strong>la</strong>se con <strong>la</strong>probabilidad más alta, es asignada como “<strong>la</strong>” c<strong>la</strong>se predicha.La información <strong>de</strong> <strong>la</strong> división aún se <strong>de</strong>termina a partir <strong>de</strong>l conjunto <strong>de</strong> entrenamiento completo y esmayor, ya que existe una categoría extra para los valores <strong>de</strong>sconocidos.Cada hoja en el árbol <strong>de</strong> <strong>de</strong>cisión resultante tiene asociados dos valores: (N/E). N es <strong>la</strong> suma <strong>de</strong> los casosfraccionales que llegan a <strong>la</strong> hoja; y E es el número <strong>de</strong> casos cubiertos por <strong>la</strong> hoja, que no pertenecen a <strong>la</strong>c<strong>la</strong>se <strong>de</strong> <strong>la</strong> misma.4.4.3. Poda <strong>de</strong> los Árboles <strong>de</strong> DecisiónEl método recursivo <strong>de</strong> particionamiento para construir los árboles <strong>de</strong> <strong>de</strong>cisión <strong>de</strong>scripto anteriormente,subdividirá el conjunto <strong>de</strong> entrenamiento hasta que <strong>la</strong> partición contenga casos <strong>de</strong> una única c<strong>la</strong>se, o hastaque <strong>la</strong> prueba no ofrezca mejora alguna. Esto da como resultado, generalmente, un árbol muy complejoque sobreajusta los datos al inferir una estructura mayor que <strong>la</strong> requerida por los casos <strong>de</strong> entrenamiento[Mitchell, 2000b] [Quin<strong>la</strong>n, 1995]. A<strong>de</strong>más, el árbol inicial generalmente es extremadamente complejo ytiene una proporción <strong>de</strong> errores superior a <strong>la</strong> <strong>de</strong> un árbol más simple. Mientras que el aumento encomplejidad se compren<strong>de</strong> a simple vista, <strong>la</strong> mayor proporción <strong>de</strong> errores pue<strong>de</strong> ser más difícil <strong>de</strong>visualizar.Para enten<strong>de</strong>r este problema, supongamos que tenemos un conjunto <strong>de</strong> datos dos c<strong>la</strong>ses, don<strong>de</strong> unaproporción p ≥ 0.5 <strong>de</strong> los casos pertenecen a <strong>la</strong> c<strong>la</strong>se mayoritaria. Si un c<strong>la</strong>sificador asigna todos los casoscon valores in<strong>de</strong>terminados a <strong>la</strong> c<strong>la</strong>se mayoritaria, <strong>la</strong> proporción esperada <strong>de</strong> error es c<strong>la</strong>ramente 1 – p. Si,68 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteen cambio, el c<strong>la</strong>sificador asigna un caso a <strong>la</strong> c<strong>la</strong>se mayoritaria con probabilidad p y a <strong>la</strong> otra c<strong>la</strong>se conprobabilidad 1 - p, su proporción esperada <strong>de</strong> error es <strong>la</strong> suma <strong>de</strong>:• <strong>la</strong> probabilidad <strong>de</strong> que un caso perteneciente a <strong>la</strong> c<strong>la</strong>se mayoritaria sea asignado a <strong>la</strong> otra c<strong>la</strong>se, p x (1– p), y• <strong>la</strong> probabilidad <strong>de</strong> que un caso perteneciente a <strong>la</strong> otra c<strong>la</strong>se sea asignado a <strong>la</strong> c<strong>la</strong>se mayoritaria, (1 –p) x pque 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 c<strong>la</strong>sificador tendrá una mayor proporción <strong>de</strong> errores. Un árbol <strong>de</strong> <strong>de</strong>cisión complejotiene una gran similitud con este segundo tipo <strong>de</strong> c<strong>la</strong>sificador. Los casos no se re<strong>la</strong>cionan a una c<strong>la</strong>se,entonces, el árbol manda cada caso al azar a alguna <strong>de</strong> <strong>la</strong>s hojas.Un árbol <strong>de</strong> <strong>de</strong>cisión no se simplifica borrando todo el árbol a favor <strong>de</strong> una rama, sino que se eliminan <strong>la</strong>spartes <strong>de</strong>l árbol que no contribuyen a <strong>la</strong> exactitud <strong>de</strong> <strong>la</strong> c<strong>la</strong>sificación para los nuevos casos, produciendoun árbol menos complejo, y por lo tanto, más comprensible.4.4.3.1. ¿Cuándo <strong>de</strong>bemos simplificar?Existen, básicamente, dos maneras <strong>de</strong> modificar el método <strong>de</strong> particionamiento recursivo para producirárboles más simples: <strong>de</strong>cidir no dividir más un conjunto <strong>de</strong> casos <strong>de</strong> entrenamiento, o removerretrospectivamente alguna parte <strong>de</strong> <strong>la</strong> estructura construida por el particionamiento recursivo.El primer enfoque, conocido como pre-poda, tiene <strong>la</strong> ventaja <strong>de</strong> que no se pier<strong>de</strong> tiempo en construir unaestructura que luego será simplificada en el árbol final. Los sistemas que lo aplican, generalmente buscan<strong>la</strong> mejor manera <strong>de</strong> partir el subconjunto y evalúan <strong>la</strong> partición <strong>de</strong>s<strong>de</strong> el punto <strong>de</strong> vista estadísticomediante <strong>la</strong> teoría <strong>de</strong> <strong>la</strong> ganancia <strong>de</strong> información, reducción <strong>de</strong> errores, etc. Si esta evaluación es menorque un límite pre<strong>de</strong>terminado, <strong>la</strong> división se <strong>de</strong>scarta y el árbol para el subconjunto es simplemente <strong>la</strong>hoja más apropiada. Sin embargo, este tipo <strong>de</strong> método tiene <strong>la</strong> <strong>de</strong>sventaja <strong>de</strong> que no es fácil <strong>de</strong>tener unparticionamiento en el momento a<strong>de</strong>cuado, un límite muy alto pue<strong>de</strong> terminar con <strong>la</strong> partición antes <strong>de</strong>que los beneficios <strong>de</strong> particiones subsiguientes parezcan evi<strong>de</strong>ntes, mientras que un límite <strong>de</strong>masiado bajoresulta en una simplificación <strong>de</strong>masiado leve.El C4.5 utiliza el segundo enfoque, el método <strong>de</strong> divi<strong>de</strong> y reinarás procesa los datos <strong>de</strong> entrenamientolibremente, y el árbol sobreajustado producido es podado <strong>de</strong>spués. Los procesos computacionales extrasinvertidos en <strong>la</strong> construcción <strong>de</strong> partes <strong>de</strong>l árbol que luego serán podadas pue<strong>de</strong>n ser sustanciales, pero elSolución Propuesta Magdalena Servente 69


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentecosto no supera los beneficios <strong>de</strong> explorar una mayor cantidad <strong>de</strong> particiones posibles. El crecimiento y<strong>la</strong> poda <strong>de</strong> los árboles son más lentos, pero más confiables.La poda <strong>de</strong> los árboles <strong>de</strong> <strong>de</strong>cisión llevará, sin duda, a c<strong>la</strong>sificar erróneamente una mayor cantidad <strong>de</strong> loscasos <strong>de</strong> entrenamiento. Por lo tanto, <strong>la</strong>s hojas <strong>de</strong> un árbol podado no contendrán necesariamente unaúnica c<strong>la</strong>se sino una distribución <strong>de</strong> c<strong>la</strong>ses, como se explicó con anterioridad. Asociado a cada hoja, habráuna distribución <strong>de</strong> c<strong>la</strong>ses especificando, para cada c<strong>la</strong>se, <strong>la</strong> probabilidad <strong>de</strong> que un caso <strong>de</strong> entrenamientoen <strong>la</strong> hoja pertenezca a dicha c<strong>la</strong>se.4.4.3.2. Poda en Base a ErroresGeneralmente, <strong>la</strong> simplificación <strong>de</strong> los árboles <strong>de</strong> <strong>de</strong>cisión se realiza <strong>de</strong>scartando uno o más subárboles yreemp<strong>la</strong>zándolos por hojas. Al igual que en <strong>la</strong> construcción <strong>de</strong> árboles, <strong>la</strong>s c<strong>la</strong>ses asociadas con cada hojase encuentran al examinar los casos <strong>de</strong> entrenamiento cubiertos por <strong>la</strong> hoja y eligiendo el caso másfrecuente. A<strong>de</strong>más <strong>de</strong> este método, el C4.5 permite reemp<strong>la</strong>zar un subárbol por alguna <strong>de</strong> sus ramas.Supongamos que fuera posible pre<strong>de</strong>cir <strong>la</strong> proporción <strong>de</strong> errores <strong>de</strong> un árbol y sus subárboles. Estoinmediatamente llevaría al siguiente método <strong>de</strong> poda: “Comenzar por <strong>la</strong>s hojas y examinar cada subárbol.Si un reemp<strong>la</strong>zo <strong>de</strong>l subárbol por una hoja o por su rama más frecuentemente utilizada, lleva a unaproporción <strong>de</strong> errores predicha (predicted error rate) menor, entonces podar el árbol <strong>de</strong> acuerdo a ello,recordando que <strong>la</strong>s proporciones <strong>de</strong> errores predichas para todos los subárboles que lo contienen se veránafectadas”. Como <strong>la</strong> proporción <strong>de</strong> errores predicha para un árbol disminuye si disminuyen <strong>la</strong>sproporciones <strong>de</strong> errores predichas en cada una <strong>de</strong> sus ramas, este proceso generaría un árbol con unaproporción <strong>de</strong> errores predicha mínima.¿Cómo po<strong>de</strong>mos pre<strong>de</strong>cir <strong>la</strong> proporción <strong>de</strong> errores? Está c<strong>la</strong>ro que calcu<strong>la</strong>r <strong>la</strong> proporción <strong>de</strong> errores apartir <strong>de</strong> los datos <strong>de</strong> entrenamiento para los cuales el árbol fue construido, no es un estimador útil, ya queen lo que respecta al conjunto <strong>de</strong> entrenamiento, <strong>la</strong> poda siempre aumenta <strong>la</strong> proporción <strong>de</strong> errores.Existen dos familias <strong>de</strong> técnicas para pre<strong>de</strong>cir <strong>la</strong> proporción <strong>de</strong> errores. La primer familia predice <strong>la</strong>proporción <strong>de</strong> errores <strong>de</strong> un árbol y sus subárboles utilizando un nuevo conjunto <strong>de</strong> casos distinto <strong>de</strong>lconjunto <strong>de</strong> entrenamiento. Como estos casos no fueron examinados durante <strong>la</strong> construcción <strong>de</strong>l árbol, losestimadores obtenidos a partir <strong>de</strong> ellos son insesgados y, <strong>de</strong> existir suficientes casos, confiables. Ejemplos<strong>de</strong> esta familia son:• Poda según <strong>la</strong> complejidad <strong>de</strong>l costo (Cost-complexity pruning) [Breinman et al, 1984] en <strong>la</strong> cual <strong>la</strong>proporción <strong>de</strong> errores predicha para un árbol se mo<strong>de</strong><strong>la</strong> como <strong>la</strong> suma pon<strong>de</strong>rada <strong>de</strong> su complejidad ysus errores en los casos <strong>de</strong> entrenamiento, con los casos extras utilizados para <strong>de</strong>terminar loscoeficientes <strong>de</strong> <strong>la</strong> pon<strong>de</strong>ración.70 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente• Poda <strong>de</strong> reducción <strong>de</strong> errores (Reduced-error pruning)[Quin<strong>la</strong>n, 1987e], que evalúa <strong>la</strong> proporción <strong>de</strong>errores <strong>de</strong> un árbol y sus componentes directamente a partir <strong>de</strong>l nuevo conjunto <strong>de</strong> casos.La <strong>de</strong>sventaja <strong>de</strong> esta familia <strong>de</strong> técnicas es simplemente que una parte <strong>de</strong>l conjunto <strong>de</strong> datosprec<strong>la</strong>sificados a partir <strong>de</strong> los que se construyó el árbol <strong>de</strong>be guardarse para <strong>de</strong>terminar los errores,entonces el árbol <strong>de</strong>be ser construido a partir <strong>de</strong> un conjunto <strong>de</strong> datos más pequeño. Una solución a esteproblema es utilizar un enfoque <strong>de</strong> referencias cruzadas. Este consiste en dividir los casos disponibles enbloques iguales <strong>de</strong> tamaño C y, para cada bloque, un árbol se construye con todos los otros bloques y semi<strong>de</strong>n los errores con el bloque elegido. Para valores mo<strong>de</strong>rados <strong>de</strong> C, se asume que el árbol construido apartir <strong>de</strong> todos los bloques menos uno será muy simi<strong>la</strong>r al construido a partir <strong>de</strong> todos los datos. Porsupuesto que <strong>de</strong>ben construirse C árboles y no uno solo.El enfoque tomado por el C4.5 pertenece a <strong>la</strong> segunda familia <strong>de</strong> técnicas que utilizan únicamente elconjunto <strong>de</strong> entrenamiento a partir <strong>de</strong>l cual se construyó el árbol. La estimación <strong>de</strong> <strong>la</strong> proporción <strong>de</strong>errores pura se ajusta para reflejar su propia ten<strong>de</strong>ncia. El método utilizado por el C4.5 se <strong>de</strong>scribe acontinuación.Cuando una hoja cubre N casos <strong>de</strong> entrenamiento, E <strong>de</strong> ellos en forma errónea, el estimador <strong>de</strong> <strong>la</strong>proporción <strong>de</strong> errores <strong>de</strong> resubstitución para dicha hoja es N/E. Po<strong>de</strong>mos enten<strong>de</strong>r esto <strong>de</strong> manera naifcomo E “eventos” en N pruebas. Si el conjunto <strong>de</strong> N casos <strong>de</strong> entrenamiento se tomase como una muestra(lo cual, por supuesto, no es cierto), nos podríamos preguntar qué nos dice este resultado acerca <strong>de</strong> <strong>la</strong>probabilidad <strong>de</strong> un evento (error) en <strong>la</strong> totalidad <strong>de</strong> <strong>la</strong> pob<strong>la</strong>ción <strong>de</strong> casos cubiertos por <strong>la</strong> hoja. Laprobabilidad <strong>de</strong> error no pue<strong>de</strong> <strong>de</strong>terminarse <strong>de</strong> forma exacta, pero cuenta con límites <strong>de</strong> confianza. Paraun límite <strong>de</strong> confianza CF, el límite superior <strong>de</strong> esta probabilidad pue<strong>de</strong> encontrarse a partir <strong>de</strong> los límites<strong>de</strong> confianza para <strong>la</strong> distribución binomial; el límite superior se expresa como U CF (E,N). Como en <strong>la</strong>distribución binomial los límites superior e inferior son simétricos, <strong>la</strong> probabilidad <strong>de</strong> que el promedioreal <strong>de</strong> errores exceda U CF (E,N)es CF/2. El C4.5 simplemente igua<strong>la</strong> el estimador <strong>de</strong> error predicho <strong>de</strong> <strong>la</strong>hoja con su límite superior, bajo el argumento <strong>de</strong> que el árbol fue construido para minimizar <strong>la</strong>proporción <strong>de</strong> error observada. Aunque los fundamentos <strong>de</strong> esta heurística son cuestionables y vio<strong>la</strong>nalgunos principios estadísticos, <strong>la</strong>s estimaciones producidas presentan frecuentemente resultadosaceptables.Para simplificar el cálculo, <strong>la</strong>s proporciones <strong>de</strong> error para <strong>la</strong>s hojas y subárboles se computan asumiendoque fueron utilizados para c<strong>la</strong>sificar un conjunto <strong>de</strong> nuevos casos <strong>de</strong>l mismo tamaño <strong>de</strong>l conjunto <strong>de</strong>entrenamiento. Entonces, una hoja que cubre N casos <strong>de</strong> entrenamiento con un estimador <strong>de</strong> errorpredicho <strong>de</strong> U CF (E,N) generaría N x U CF (E,N) errores predichos. Análogamente, <strong>la</strong> cantidad <strong>de</strong> errorespredichos asociados con un (sub)árbol es <strong>la</strong> suma <strong>de</strong> los errores predichos para cada una <strong>de</strong> sus ramas.Solución Propuesta Magdalena Servente 71


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente4.4.4. Estimación <strong>de</strong> <strong>la</strong> Proporción <strong>de</strong> Errores para losÁrboles <strong>de</strong> DecisiónUna vez podados, <strong>la</strong>s hojas <strong>de</strong> los árboles <strong>de</strong> <strong>de</strong>cisión generados por el C4.5 tendrán dos númerosasociados: N y E. N es <strong>la</strong> cantidad <strong>de</strong> casos <strong>de</strong> entrenamiento cubiertos por <strong>la</strong> hoja, y E es <strong>la</strong> cantidad <strong>de</strong>errores predichos si un conjunto <strong>de</strong> N nuevos casos fuera c<strong>la</strong>sificados por el árbol.La suma <strong>de</strong> los errores predichos en <strong>la</strong>s hojas, dividido el número <strong>de</strong> casos <strong>de</strong> entrenamiento, es unestimador inmediato <strong>de</strong>l error <strong>de</strong> un árbol podado sobre nuevos casos.4.4.5. Construcción <strong>de</strong> un árbol <strong>de</strong> <strong>de</strong>cisión utilizando elC4.5Supongamos que queremos construir un árbol <strong>de</strong> <strong>de</strong>cisión para los siguientes datos:Estado Humedad Viento JuegoTenis? Alta Leve NoSoleado Alta Fuerte NoNub<strong>la</strong>do Alta Leve SiLluvia Alta Leve SiLluvia Normal Leve SiLluvia Normal Fuerte NoNub<strong>la</strong>do Normal Fuerte SiSoleado Alta Leve NoSoleado Normal Leve SiLluvia Normal Leve SiSoleado Normal Fuerte SiNub<strong>la</strong>do Alta Fuerte SiNub<strong>la</strong>do Normal Leve SiLluvia Alta Fuerte SiEste es el mismo conjunto <strong>de</strong> datos que fue utilizado en <strong>la</strong> sección 4.3.1.5 para construir un árbolutilizando el ID3 con <strong>la</strong> diferencia que es el valor <strong>de</strong>l atributo Estado para el primer caso es <strong>de</strong>sconocido.En este caso, <strong>la</strong> distribución <strong>de</strong> datos para el atributo Estado es:Desconocido Soleado Nub<strong>la</strong>do LluviaNo 1 2 0 1Si 0 2 4 4Totales 1 4 4 572 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligentePrimero calcu<strong>la</strong>mos <strong>la</strong> entropía <strong>de</strong>l conjunto. Recor<strong>de</strong>mos que, como se explicó en <strong>la</strong> sección 4.4.2.2, no<strong>de</strong>bemos tener en cuenta los atributos <strong>de</strong>sconocidos. Entonces, trabajamos sobre un total <strong>de</strong> 13 casos, <strong>de</strong>los cuales 3 son positivos. Tendremos,3 3 10 10H ( S)= − log2 − log2= 0. 7793bits13 13 13 13Calcu<strong>la</strong>mos ahora <strong>la</strong> entropía que tendrían los conjuntos resultantes <strong>de</strong> <strong>la</strong> división <strong>de</strong> datos según esteatributo.4 ⎛ 2 2 2 2 ⎞ 4 ⎛ 0 0 4 4 ⎞ 5 ⎛ 1 1 4 4 ⎞H ( S,Estado)= ⎜−log2 − log2 ⎟ + ⎜−log2− log2 ⎟ + ⎜−log2− log2⎟ = 0. 58536bits13 ⎝ 4 4 4 4 ⎠ 13 ⎝ 4 4 4 4 ⎠ 13 ⎝ 5 5 5 5 ⎠Ahora calcu<strong>la</strong>mos <strong>la</strong> ganancia resultante <strong>de</strong> dividir al subconjunto según el atributo Estado, tendremos:13Ganancia 18014( S, Estado) = ( 0.7793−0.58536) = 0. bitsAl calcu<strong>la</strong>r al información <strong>de</strong> <strong>la</strong> división, <strong>de</strong>bemos tener en cuenta una categoría extra para el valor<strong>de</strong>sconocido para el atributo. La información <strong>de</strong> <strong>la</strong> división se calcu<strong>la</strong> como:4 ⎛ 4 ⎞ 4 ⎛ 4 ⎞ 5 ⎛ 5 ⎞ 1 ⎛ 1 ⎞I _ división2 ⎜ ⎟2 ⎜ ⎟2 ⎜ ⎟2 ⎜ ⎟ = 83514 ⎝14⎠ 14 ⎝14⎠ 14 ⎝14⎠ 14 ⎝14⎠( S) = − × log − × log − × log − × log 1. bitsFinalmente, calcu<strong>la</strong>mos <strong>la</strong> proporción <strong>de</strong> ganancia.Ganancia(S)proporción _ <strong>de</strong> _ ganancia(S)== 0. 098bitsI _ división(S)De <strong>la</strong> misma manera en que calcu<strong>la</strong>mos <strong>la</strong> ganancia y <strong>la</strong> proporción <strong>de</strong> ganancia para el caso anterior,calcu<strong>la</strong>mos para el atributo Humedad los siguientes valores:Ganancia=0.0746702 bitsProporción <strong>de</strong> ganancia =0.0746702 bitsPara el caso <strong>de</strong>l atributo Viento obtenemos los siguientes valores:Ganancia=0.00597769 bitsProporción <strong>de</strong> ganancia =0.0060687 bitsAl igual que con el ID3, conviene dividir el conjunto según el atributo Estado tanto si trabajamos con <strong>la</strong>ganancia como si trabajamos con <strong>la</strong> proporción <strong>de</strong> ganancia. Al dividir los 14 casos para continuar con <strong>la</strong>construcción <strong>de</strong>l árbol, los 13 casos para los que el valor <strong>de</strong> Estado es conocido, no presentan problemas yse reparten según el valor <strong>de</strong> Estado. Mientras que el caso en que no se conoce el valor <strong>de</strong> Estado, seSolución Propuesta Magdalena Servente 73


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentereparte entre los conjuntos que tienen Soleado, Nub<strong>la</strong>do y Lluvia con los pesos 4/13, 4/16 y 5/13respectivamente.Tomemos por ejemplo, <strong>la</strong> división <strong>de</strong> los datos para el valor Nub<strong>la</strong>do <strong>de</strong>l atributo Estado. Los datos quese tienen en cuenta en este caso son:Estado Humedad Viento JuegoTenis Peso? Alta Leve No 4/13Nub<strong>la</strong>do Alta Leve Si 1Nub<strong>la</strong>do Normal Fuerte Si 1Nub<strong>la</strong>do Alta Fuerte Si 1Nub<strong>la</strong>do Normal Leve Si 1La distribución <strong>de</strong> datos para el atributo Humedad es:Desconocido Alta NormalNo 0 0.3 0Si 0 2 2Totales 0 2.3 2Con estos datos obtenemos para <strong>la</strong> Humedad los siguientes valores:Ganancia=0.068 bitsProporción <strong>de</strong> ganancia =0.068 bitsPara el caso <strong>de</strong>l atributo Viento obtenemos los siguientes valores:Ganancia=0.068 bitsProporción <strong>de</strong> ganancia =0.068 bitsEn este caso, vemos que <strong>la</strong> división <strong>de</strong>l conjunto <strong>de</strong> datos no ofrece ninguna mejora, por lo tanto,co<strong>la</strong>psamos el árbol a <strong>la</strong> hoja Si, que es <strong>la</strong> que mayor peso tiene. La cantidad <strong>de</strong> casos cubiertos por <strong>la</strong>hoja, es <strong>de</strong>cir, el N asociado a <strong>la</strong> misma, es 4.3. Y <strong>la</strong> cantidad <strong>de</strong> casos cubiertos incorrectamente, o el Easociado a <strong>la</strong> hoja, por <strong>la</strong> hoja son 0.3.La figura 4.4 muestra un esquema <strong>de</strong> todos los pasos para <strong>la</strong> construcción <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión en estecaso. A continuación se muestra el árbol obtenido.Estado = Nub<strong>la</strong>do: 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 <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEstado Humedad Viento JuegoTenis? Alta Leve NoSoleado Alta Fuerte NoNub<strong>la</strong>do Alta Leve SiLluvia Alta Leve SiLluvia Normal Leve SiLluvia Normal Fuerte NoNub<strong>la</strong>do Normal Fuerte SiSoleado Alta Leve NoSoleado Normal Leve SiLluvia Normal Leve SiSoleado Normal Fuerte SiNub<strong>la</strong>do Alta Fuerte SiNub<strong>la</strong>do Normal Leve SiLluvia Alta Fuerte SiESTADOganancia=0.180proporción <strong>de</strong> ganancia=0.0.098HUMEDADGanancia=0.075Proporción <strong>de</strong> ganancia =0.075VIENTOGanancia=0.006Proporción <strong>de</strong> ganancia =0.00609LluviaEstadoSoleadoEstado Humedad Viento Juego PesoTenis? Alta Leve No 5/13Lluvia Alta Leve Si 1Lluvia Normal Leve Si 1Lluvia Normal Fuerte No 1Lluvia Normal Leve Si 1Lluvia Alta Fuerte Si 1SIN=5.4E=1.4HUMEDADGanancia=0.029Proporción <strong>de</strong> ganancia =0.029VIENTOGanancia=0.130Proporción <strong>de</strong> ganancia =0.136SIN=4.3E=0.3Nub<strong>la</strong>doEstado Humedad Viento Juego PesoTenis? Alta Leve No 4/13Nub<strong>la</strong>do Alta Leve Si 1Nub<strong>la</strong>do Normal Fuerte Si 1Nub<strong>la</strong>do Alta Fuerte Si 1Nub<strong>la</strong>do Normal Leve Si 1HUMEDADGanancia=0.068Proporción <strong>de</strong> ganancia =0.068VIENTOGanancia=0.068Proporción <strong>de</strong> ganancia =0.068Estado Humedad Viento Juego PesoTenis? Alta Leve No 4/13Soleado Alta Fuerte No 1Soleado Alta Leve No 1Soleado Normal Leve Si 1Soleado Normal Fuerte Si 1HUMEDADGanancia=0.996Proporción <strong>de</strong> ganancia =1VIENTOGanancia=0.003Proporción <strong>de</strong> ganancia =0.00301AltaHumedadNormalSIN=2.3E=0SIN=2E=0Figura 4.4: Esquema <strong>de</strong> <strong>la</strong> construcción <strong>de</strong> un árbol <strong>de</strong> <strong>de</strong>cisión utilizando el C4.5Recor<strong>de</strong>mos que el C4.5 analiza los errores predichos en cada uno <strong>de</strong> los subárboles y ramas <strong>de</strong>l árbolgenerado para analizar si es conveniente simplificarlo. En este caso, el error total predicho para el árbolestará dado por:( 0.3,4.3) + 5.4 × U ( 1.4,5.4) + 2.3×U ( 0,2.3) + 2 ( 0,2)Error _ predicho(Arbol)= 4.3×U25%25%25%× U25%Ahora, calcu<strong>la</strong>mos el error total predicho <strong>de</strong> simplificar el árbol por <strong>la</strong> hoja “Si”:Error _ predicho(Arbol _ simplificado)= 14 × U%( 4,14) 5. 7625=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 <strong>la</strong> siguiente hoja:Solución Propuesta Magdalena Servente 75


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteSi (14.0/5.76)4.4.6. Generalización <strong>de</strong> reg<strong>la</strong>sSi reescribimos el árbol completamente en forma <strong>de</strong> un conjunto <strong>de</strong> reg<strong>la</strong>s, una por cada hoja <strong>de</strong>l árbol,no obtendremos una estructura más simple que el árbol en sí. Sin embargo, los antece<strong>de</strong>ntes <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>spue<strong>de</strong>n contener condiciones irrelevantes, con lo cual <strong>la</strong> reg<strong>la</strong> pue<strong>de</strong> ser generalizada eliminando dichascondiciones.Para <strong>de</strong>cidir cuándo una condición <strong>de</strong>be eliminarse, utilizaremos el siguiente método. Sea R una reg<strong>la</strong> <strong>de</strong><strong>la</strong> forma:si A entonces c<strong>la</strong>se CY sea una reg<strong>la</strong> más general R -si A - entonces c<strong>la</strong>se C,don<strong>de</strong> A - se obtiene borrando <strong>la</strong> condición X <strong>de</strong> <strong>la</strong>s condiciones <strong>de</strong> A. La evi<strong>de</strong>ncia para <strong>la</strong> importancia<strong>de</strong> X <strong>de</strong>be encontrarse en los casos <strong>de</strong> entrenamiento utilizados para <strong>la</strong> construcción <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión.Cada caso que satisface el antece<strong>de</strong>nte más corto A - pertenece o no a <strong>la</strong> c<strong>la</strong>se C, y satisface o no <strong>la</strong>condición X. Los números <strong>de</strong> casos en cada uno <strong>de</strong> estos cuatro grupos pue<strong>de</strong>n organizarse en una tab<strong>la</strong><strong>de</strong> contingencias <strong>de</strong> 2 x 2:C<strong>la</strong>se C Otras c<strong>la</strong>sesSatisface <strong>la</strong> condición X Y 1 E 1No satisface <strong>la</strong> condición X Y 2 E 2¿Qué significan los valores <strong>de</strong> <strong>la</strong> tab<strong>la</strong>?:• Y 1 +E 1 : casos que satisfacen A - y también X, por lo tanto, también están cubiertos por <strong>la</strong> reg<strong>la</strong> originalR, E 1 <strong>de</strong> ellos erróneamente ya que pertenecen a c<strong>la</strong>ses distintas a C.• Y 2 +E 2 : casos que satisfacen A - pero no X que serán cubiertos por <strong>la</strong> reg<strong>la</strong> generalizada R - pero no por<strong>la</strong> reg<strong>la</strong> original. E 2 <strong>de</strong> estos casos serán c<strong>la</strong>sificados erróneamente.• Y 1 +Y 2 + E 1 +E 2 : número total <strong>de</strong> casos cubiertos por R -76 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteDe acuerdo a varios experimentos <strong>de</strong>sarrol<strong>la</strong>dos por Quin<strong>la</strong>n [Quin<strong>la</strong>n, 1987] para medir <strong>la</strong> importancia<strong>de</strong> <strong>la</strong> tab<strong>la</strong> <strong>de</strong> contingencia al <strong>de</strong>cidir si una condición X <strong>de</strong>be ser eliminada o no, se encontró que seobtienen mejores resultados utilizando una estimación pesimista <strong>de</strong> <strong>la</strong> precisión <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s R y R - sobrenuevos casos. No es muy probable que una hoja que cubre N casos con E errores tenga una proporción <strong>de</strong>error tan baja como E/N al c<strong>la</strong>sificar nuevos casos. En lugar <strong>de</strong> utilizar el estimador E/N al estimar <strong>la</strong>proporción real <strong>de</strong> errores <strong>de</strong> una hoja como el límite superior U CF (E,N) <strong>de</strong>l intervalo <strong>de</strong> confianza paraalgún nivel <strong>de</strong> confianza CF. Si reemp<strong>la</strong>zamos estos valores por los <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s R y R - obtendremos lossiguientes estimadores pesimistas:• U CF (E 1, Y 1 + E 1 ) para <strong>la</strong> reg<strong>la</strong> R• U CF (E 1 + E 2, Y 1 + Y 2 + E 1 + E 2 ) para <strong>la</strong> reg<strong>la</strong> R -SiUCF( E1 + E2,Y1+ Y2+ E1+ E2) ≤ UCF( E1, Y1+ E1)(4.10)Entoncestiene sentido eliminar <strong>la</strong> condición X.Durante el proceso <strong>de</strong> generalización será necesario eliminar más <strong>de</strong> una condición. En lugar <strong>de</strong> analizartodos los subconjuntos posibles <strong>de</strong> condiciones que podrían eliminarse, el sistema <strong>de</strong> C4.5 realiza unaeliminación directa golosa (straightforward greedy elimination): De todas <strong>la</strong>s reg<strong>la</strong>s que pue<strong>de</strong>neliminarse por el método <strong>de</strong>scripto, se elimina aquel<strong>la</strong> que produce <strong>la</strong> menor proporción pesimista <strong>de</strong>error en <strong>la</strong> reg<strong>la</strong> generalizada. Como en todos <strong>la</strong>s búsquedas golosas el hecho <strong>de</strong> buscar el mínimo en cadapaso no nos asegura llegar al mínimo global.4.4.6.1. Conjuntos <strong>de</strong> Reg<strong>la</strong>sEl proceso <strong>de</strong> generalización <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s se repite para todos los caminos <strong>de</strong>l árbol. Con lo cual, <strong>la</strong>sreg<strong>la</strong>s <strong>de</strong>rivadas <strong>de</strong> algunos caminos pue<strong>de</strong>n tener una proporción <strong>de</strong> error inaceptable o pue<strong>de</strong>n so<strong>la</strong>parsecon otras <strong>de</strong>rivadas <strong>de</strong> distintos caminos. Por lo tanto, po<strong>de</strong>mos afirmar que el proceso <strong>de</strong> generalizaciónproduce menos reg<strong>la</strong>s que el número <strong>de</strong> hojas <strong>de</strong>l árbol, y a<strong>de</strong>más <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong>jan <strong>de</strong> ser mutuamenteexcluyentes y exhaustivas. Un caso pue<strong>de</strong> satisfacer los antece<strong>de</strong>ntes <strong>de</strong> más <strong>de</strong> una reg<strong>la</strong> o, si se<strong>de</strong>scartan reg<strong>la</strong>s por tener una alta proporción <strong>de</strong> errores, <strong>de</strong> ninguna reg<strong>la</strong>. En este último caso <strong>de</strong>beexistir una condición por <strong>de</strong>fecto que indique cómo proseguir. Para resolver estos conflictos el C4.5Solución Propuesta Magdalena Servente 77


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentep<strong>la</strong>ntea una solución simple: or<strong>de</strong>nar <strong>la</strong>s reg<strong>la</strong>s y <strong>la</strong> primera reg<strong>la</strong> que cubre el caso se toma como <strong>la</strong> reg<strong>la</strong>operativa. Es necesario, entonces, establecer priorida<strong>de</strong>s para el or<strong>de</strong>namiento <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s y <strong>de</strong>cidir <strong>la</strong>c<strong>la</strong>sificación por <strong>de</strong>fecto a utilizar.Para establecer <strong>la</strong>s priorida<strong>de</strong>s se siguió un método propuesto por Michie que <strong>de</strong>termina que todas <strong>la</strong>sreg<strong>la</strong>s <strong>de</strong> una misma c<strong>la</strong>se <strong>de</strong>ben aparecer juntas y estos subconjuntos <strong>de</strong> c<strong>la</strong>ses son los que estánor<strong>de</strong>nados en lugar <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s en sí. Este agrupamiento hace que <strong>la</strong>s reg<strong>la</strong>s sean más entendibles y tiene<strong>la</strong> ventaja que el or<strong>de</strong>namiento <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s en particu<strong>la</strong>r no es importante.Supongamos que <strong>de</strong>l conjunto <strong>de</strong> reg<strong>la</strong>s elegimos un subconjunto S <strong>de</strong> reg<strong>la</strong>s que cubren <strong>la</strong> c<strong>la</strong>se C. Laperformance <strong>de</strong> este subconjunto pue<strong>de</strong> medirse mediante el número <strong>de</strong> casos <strong>de</strong> entrenamiento cubiertospor S que no pertenecen a <strong>la</strong> c<strong>la</strong>se C (falsos positivos) y el número <strong>de</strong> casos <strong>de</strong> entrenamiento <strong>de</strong> <strong>la</strong> c<strong>la</strong>seC que no son cubiertos por ninguna reg<strong>la</strong> <strong>de</strong> S (falsos negativos).El valor <strong>de</strong>l subconjunto S se mi<strong>de</strong>utilizando el Principio <strong>de</strong> Longitud <strong>de</strong> Descripción Mínima [Rissanen, 1983], explicado en <strong>la</strong> sección2.4.1.4. Recor<strong>de</strong>mos que este principio pue<strong>de</strong> expresarse <strong>de</strong> <strong>la</strong> siguiente manera: Un Emisor y unReceptor cuentan con copias idénticas <strong>de</strong> un conjunto <strong>de</strong> casos <strong>de</strong> entrenamiento, pero los casos <strong>de</strong>lEmisor también especifican <strong>la</strong> c<strong>la</strong>se <strong>de</strong> cada caso, mientras que los casos <strong>de</strong>l Receptor no tieneninformación <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses. El Emisor <strong>de</strong>be comunicar esta información faltante al Receptor mediante <strong>la</strong>transmisión <strong>de</strong> una teoría <strong>de</strong> c<strong>la</strong>sificación junto con <strong>la</strong>s excepciones a <strong>la</strong> misma. El Emisor pue<strong>de</strong> elegir <strong>la</strong>complejidad <strong>de</strong> <strong>la</strong> teoría que envía (una teoría re<strong>la</strong>tivamente simple con muchas excepciones, o una teoríamuy compleja con pocas excepciones). El Principio MDL afirma que <strong>la</strong> mejor teoría <strong>de</strong>rivable <strong>de</strong> losdatos <strong>de</strong> entrenamiento minimizará <strong>la</strong> cantidad <strong>de</strong> bits necesarios para codificar el mensaje completoconsistente <strong>de</strong> <strong>la</strong> teoría y sus excepciones.La información a transmitir es <strong>la</strong> i<strong>de</strong>ntidad en los casos <strong>de</strong> entrenamiento que pertenecen a <strong>la</strong> c<strong>la</strong>se C,utilizando un esquema <strong>de</strong> codificación para <strong>la</strong> teoría (subconjunto S <strong>de</strong> reg<strong>la</strong>s) y sus excepciones. Elesquema utilizado por el C4.5 es aproximado ya que en lugar <strong>de</strong> utilizar un método <strong>de</strong> codificación enparticu<strong>la</strong>r, trata <strong>de</strong> encontrar un límite inferior al número <strong>de</strong> bits. Po<strong>de</strong>mos resumirlo <strong>de</strong> <strong>la</strong> siguientemanera:1. Para codificar una reg<strong>la</strong>, <strong>de</strong>bemos especificar cada antece<strong>de</strong>nte. El consecuente no necesita sercodificado, porque todas <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong>l subconjunto pertenecen a <strong>la</strong> misma c<strong>la</strong>se C. Existe unapequeña complicación: <strong>la</strong>s condiciones <strong>de</strong>ben enviarse en algún or<strong>de</strong>n, pero el or<strong>de</strong>n no importaporque <strong>la</strong>s condiciones pertenecen a una conjunción. Si existen x condiciones en el antece<strong>de</strong>nte,existen x! or<strong>de</strong>namientos posibles que podrían enviarse, todos equivalentes <strong>de</strong>l punto <strong>de</strong> vista <strong>de</strong> <strong>la</strong>especificación <strong>de</strong> <strong>la</strong> reg<strong>la</strong>. Por lo tanto, <strong>la</strong> cantidad <strong>de</strong> bits requerida para enviar cualquieror<strong>de</strong>namiento en particu<strong>la</strong>r <strong>de</strong>be ser reducida en un “crédito” <strong>de</strong> log 2 (x!).78 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente2. La codificación <strong>de</strong> un conjunto <strong>de</strong> reg<strong>la</strong>s requiere <strong>la</strong> suma <strong>de</strong> los bits para codificar cada reg<strong>la</strong>, menosun crédito simi<strong>la</strong>r para el or<strong>de</strong>namiento <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s (ya que todos los or<strong>de</strong>namientos <strong>de</strong> reg<strong>la</strong>s parauna misma c<strong>la</strong>se son equivalentes)3. Las excepciones se codifican indicando cuáles <strong>de</strong> los casos cubiertos por <strong>la</strong>s reg<strong>la</strong>s S son falsospositivos y cuáles falsos negativos. Si <strong>la</strong>s reg<strong>la</strong>s cubren r <strong>de</strong> los n casos <strong>de</strong> entrenamiento, con fpfalsos positivos y fn falsos negativos, <strong>la</strong> cantidad <strong>de</strong> bits necesarios para codificar <strong>la</strong> excepción es⎛⎛r ⎞⎞⎛⎛n− r ⎞⎞log 2⎜ ⎟ + ⎜ ⎟⎜ ⎟log 2⎜ ⎟⎝⎝fp⎠⎠⎝⎝fn ⎠⎠(4.11)El primer término indica los bits necesarios para indicar los falsos positivos entre los casos cubiertos por<strong>la</strong>s reg<strong>la</strong>s y el segundo término indica los falsos negativos entre los casos no cubiertos por <strong>la</strong>s reg<strong>la</strong>s.El valor <strong>de</strong> un subconjunto S en particu<strong>la</strong>r se mi<strong>de</strong> con <strong>la</strong> suma <strong>de</strong> <strong>la</strong>s longitu<strong>de</strong>s <strong>de</strong> codificación para <strong>la</strong>sreg<strong>la</strong>s y excepciones, a menor suma, mejor teoría.En <strong>la</strong> práctica, los métodos <strong>de</strong> codificación tien<strong>de</strong>n a sobrestimar <strong>la</strong> cantidad <strong>de</strong> bits requeridos paracodificar una teoría re<strong>la</strong>tiva al conjunto <strong>de</strong> excepciones. Esto se explica por el hecho <strong>de</strong> que los conjuntos<strong>de</strong> atributos generalmente son redundantes, por lo que diferentes teorías pue<strong>de</strong>n ser funcionalmenteidénticas. Como <strong>la</strong> función <strong>de</strong> una teoría para una c<strong>la</strong>se es i<strong>de</strong>ntificar un subconjunto <strong>de</strong> casos <strong>de</strong>entrenamiento, diferentes reg<strong>la</strong>s que i<strong>de</strong>ntifiquen al mismo conjunto son intercambiables, aún cuandohayan sido codificadas <strong>de</strong> manera distinta. Para compensar este efecto, el sistema utiliza <strong>la</strong> sumapon<strong>de</strong>rada:Bits <strong>de</strong> excepción + W X bits <strong>de</strong> teoría (4.12)don<strong>de</strong> W < 1.El valor apropiado <strong>de</strong> W <strong>de</strong>pen<strong>de</strong>rá <strong>de</strong> <strong>la</strong> probabilidad <strong>de</strong> que dos teorías representen los mismos casos, locual <strong>de</strong>pen<strong>de</strong>rá <strong>de</strong>l grado <strong>de</strong> redundancia en los datos. C4.5 utiliza el valor 0.5 por <strong>de</strong>fecto para W, peropue<strong>de</strong> ajustarse a un valor menor si se encuentra un gran grado <strong>de</strong> redundancia en los datos. Sin embargo,no se ha encontrado que el resultado <strong>de</strong>l algoritmo <strong>de</strong>penda en gran medida <strong>de</strong>l valor <strong>de</strong> W.Entonces, para enviar <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong>be encontrarse un subconjunto S <strong>de</strong> reg<strong>la</strong>s para <strong>la</strong> c<strong>la</strong>se C que minimiceesta codificación total. Esto es simi<strong>la</strong>r a <strong>la</strong> generalización <strong>de</strong> reg<strong>la</strong>s <strong>de</strong>scripta anteriormente, pero en estecaso <strong>la</strong> eliminación golosa no parece ser efectiva. En cambio, el sistema analiza todos los subconjuntosposibles <strong>de</strong> reg<strong>la</strong>s para una c<strong>la</strong>se, si no son <strong>de</strong>masiados, y utiliza recocido simu<strong>la</strong>do (simu<strong>la</strong>ted annealing)en caso contrario. En este último caso, el sistema repetidamente elige una reg<strong>la</strong> al azar y consi<strong>de</strong>raincluir<strong>la</strong> en el subconjunto S (si aún no pertenece al mismo), o eliminar<strong>la</strong> <strong>de</strong> S (si ya pertenece). EstaSolución Propuesta Magdalena Servente 79


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteacción producirá un cambio ∆B en el total <strong>de</strong> bits necesario para codificar el subconjunto y <strong>la</strong>sexcepciones y, si el caso es beneficioso, entonces se lo acepta inmediatamente. Si <strong>la</strong> acción incrementa <strong>la</strong>longitud total <strong>de</strong> <strong>la</strong> codificación tal que ∆B es positivo, el cambio se acepta con una probabilidad <strong>de</strong> e -∆B/Kdon<strong>de</strong> K es una especia <strong>de</strong> temperatura sintética. Al reducir gradualmente el valor <strong>de</strong> K al ir explorandolos cambios, el sistema tien<strong>de</strong> a converger a un conjunto <strong>de</strong> reg<strong>la</strong>s con una codificación cerca <strong>de</strong>l mínimo(near-minimun encoding).4.4.6.2. Or<strong>de</strong>n <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses y elección <strong>de</strong> <strong>la</strong> c<strong>la</strong>se por <strong>de</strong>fectoUna vez que ya se ha encontrado un subconjunto <strong>de</strong> reg<strong>la</strong>s para representar cada c<strong>la</strong>se, queda <strong>de</strong>terminarel or<strong>de</strong>namiento para <strong>la</strong>s c<strong>la</strong>ses y seleccionar un valor por <strong>de</strong>fecto.Al <strong>de</strong>cidir el or<strong>de</strong>namiento <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses es importante tener en cuenta los falsos positivos ya queocasionarán c<strong>la</strong>sificaciones incorrectas. Entonces, a <strong>la</strong> hora <strong>de</strong> <strong>de</strong>cidir sobre el or<strong>de</strong>namiento, se eligeprimero a <strong>la</strong> c<strong>la</strong>se que tiene menos falsos positivos. Luego, los falsos positivos <strong>de</strong> los casos <strong>de</strong>entrenamiento que aún no han sido seleccionados se recomputan y se vuelve a elegir <strong>la</strong> c<strong>la</strong>se con menosfalsos positivos, y así sucesivamente.Como <strong>la</strong> c<strong>la</strong>se por <strong>de</strong>fecto será utilizada cuando un caso no sea cubierto por ninguna <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s, éstasreg<strong>la</strong>s <strong>de</strong>berían tenerse en cuenta para <strong>de</strong>terminar cuál será <strong>la</strong> c<strong>la</strong>se por <strong>de</strong>fecto. El C4.5 elige como c<strong>la</strong>sepor <strong>de</strong>fecto aquel<strong>la</strong> c<strong>la</strong>se que cubre <strong>la</strong> mayoría <strong>de</strong> los casos <strong>de</strong> entrenamiento no cubiertos por ningunareg<strong>la</strong>, resolviendo empates a favor <strong>de</strong> <strong>la</strong> c<strong>la</strong>se con <strong>la</strong> mayor frecuencia absoluta.Una vez que se ha <strong>de</strong>terminado el or<strong>de</strong>namiento y <strong>la</strong> c<strong>la</strong>se por <strong>de</strong>fecto, el conjunto <strong>de</strong> reg<strong>la</strong>s se examinapor última vez. Si existe alguna reg<strong>la</strong> cuya eliminación reduzca el número <strong>de</strong> errores <strong>de</strong> c<strong>la</strong>sificación, se<strong>la</strong> elimina y se recomputan los errores. El conjunto vuelve a chequearse. Este paso fue diseñado paraevaluar el conjunto <strong>de</strong> reg<strong>la</strong>s en <strong>la</strong> forma en que será utilizado.4.4.6.3. Generalización <strong>de</strong> un árbol <strong>de</strong> <strong>de</strong>cisión a reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión utilizando elC4.5Para ac<strong>la</strong>rar los métodos presentados en <strong>la</strong>s secciones anteriores se proce<strong>de</strong>rá a <strong>la</strong> resolución <strong>de</strong> unejemplo. Supongamos que <strong>de</strong>seamos obtener <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión para el conjunto <strong>de</strong> datos presentadoen <strong>la</strong> sección 4.4.5. Para generar <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión, el C4.5 parte <strong>de</strong>l árbol sin simplificar y construyeuna reg<strong>la</strong> <strong>de</strong> <strong>de</strong>cisión para cada hoja <strong>de</strong>l mismo. En este caso, <strong>la</strong>s reg<strong>la</strong>s generadas a partir <strong>de</strong>l árbol sinsimplificar serán:80 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReg<strong>la</strong> 1SI Estado = SoleadoY Humedad = AltaENTONCES JuegoTenis = NoReg<strong>la</strong> 2SI Estado = SoleadoY Humedad = NormalENTONCES JuegoTenis = SiReg<strong>la</strong> 3SI Estado = Nub<strong>la</strong>doENTONCES JuegoTenis = SiReg<strong>la</strong> 4SI Estado = LluviaENTONCES JuegoTenis = SiA continuación, el C4.5 generaliza cada una <strong>de</strong> estas reg<strong>la</strong>s, eliminando aquel<strong>la</strong>s condiciones que generanun estimador <strong>de</strong> error pesimístico mayor. Calcu<strong>la</strong>mos este estimador para cada una <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>spresentadas y para <strong>la</strong>s reg<strong>la</strong>s resultantes <strong>de</strong> eliminar cada una <strong>de</strong> sus condiciones.Para <strong>la</strong> reg<strong>la</strong> 1, tendremos:Errores Cant. <strong>de</strong> casos cubiertos Estimador pesimístico <strong>de</strong>l error Condición ausente0 2 50% 4 7 75.5% Estado=Soleado2 4 77.1% Humedad=AltaLas reg<strong>la</strong>s resultantes <strong>de</strong> eliminar cualquiera <strong>de</strong> <strong>la</strong>s dos condiciones <strong>de</strong>l antece<strong>de</strong>nte, tienen un estimadorpesimístico <strong>de</strong> error superior al <strong>de</strong> <strong>la</strong> reg<strong>la</strong> actual, con lo cual no es conveniente eliminar ninguna <strong>de</strong> <strong>la</strong>sdos condiciones. Mantenemos, entonces, <strong>la</strong> reg<strong>la</strong> tal como fue generada, agregándole <strong>la</strong> precisión <strong>de</strong> <strong>la</strong>misma.Reg<strong>la</strong> 1SI Estado = SoleadoY Humedad = AltaENTONCES JuegoTenis = No [50%]Repetimos estos cálculos para <strong>la</strong>s reg<strong>la</strong>s restantes. En el caso <strong>de</strong> <strong>la</strong> reg<strong>la</strong> 2 tendremos:Errores Cant. De casos cubiertos Estimador pesimístico <strong>de</strong>l error Condición ausente0 2 50% 1 7 33.8% Estado=Soleado2 4 77.1% Humedad=NormalEn este caso, <strong>la</strong> reg<strong>la</strong> resultante <strong>de</strong> eliminar <strong>la</strong> primera condición tiene un estimador pesimístico <strong>de</strong>l errormenor que el <strong>de</strong> <strong>la</strong> reg<strong>la</strong> actual, entonces, eliminamos esta condición y repetimos los cálculos,obteniendo:Solución Propuesta Magdalena Servente 81


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteErrores Cant. De casos cubiertos Estimador pesimístico <strong>de</strong>l error Condición ausente1 7 33.8% 4 14 41.3% Humedad=NormalReg<strong>la</strong> 2SI Estado = SoleadoY Humedad = NormalENTONCES JuegoTenis = Si [66.2%]En el caso <strong>de</strong> <strong>la</strong> reg<strong>la</strong> 3 tendremos:Errores Cant. De casos cubiertos Estimador pesimístico <strong>de</strong>l error Condición ausente0 4 29.3% 4 14 41.3% Estado=Nub<strong>la</strong>doReg<strong>la</strong> 3SI Estado = Nub<strong>la</strong>doENTONCES JuegoTenis = Si [70.7%]Finalmente, para <strong>la</strong> reg<strong>la</strong> 4 los cálculos son los siguientes:Errores Cant. De casos cubiertos Estimador pesimístico <strong>de</strong>l error Condición ausente1 5 45.4% 4 14 41.3% Estado=LluviaReg<strong>la</strong> 4SI Estado = LluviaENTONCES JuegoTenis = Si [54.6%]Una vez que todas <strong>la</strong>s reg<strong>la</strong>s han sido generalizadas, el C4.5 agrupa <strong>la</strong>s reg<strong>la</strong>s según <strong>la</strong> c<strong>la</strong>se <strong>de</strong> suconsecuente y busca los subconjuntos <strong>de</strong> reg<strong>la</strong>s que generan una codificación mínima para <strong>la</strong> c<strong>la</strong>se.Entonces, calcu<strong>la</strong> para cada subconjunto <strong>de</strong> reg<strong>la</strong>s <strong>la</strong> cantidad <strong>de</strong> bits necesarios para codificar <strong>la</strong>s reg<strong>la</strong>s,y utiliza el método <strong>de</strong>l recocido simu<strong>la</strong>do para <strong>de</strong>terminar cuáles reg<strong>la</strong>s son convenientes utilizar pararepresentar cada c<strong>la</strong>se. En este caso, <strong>la</strong>s reg<strong>la</strong>s escogidas son <strong>la</strong> reg<strong>la</strong> 1 para <strong>la</strong> c<strong>la</strong>se No y <strong>la</strong> reg<strong>la</strong> 3 para<strong>la</strong> c<strong>la</strong>se Si.Finalmente, el C4.5 or<strong>de</strong>na <strong>la</strong>s reg<strong>la</strong>s y escoge <strong>la</strong> c<strong>la</strong>se por <strong>de</strong>fecto. Para ello, primero <strong>de</strong>bemos computarlos falsos positivos <strong>de</strong> cada una <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s para escoger <strong>la</strong> <strong>de</strong> menor falsos positivos como primera. Eneste caso, los falsos positivos para ambas reg<strong>la</strong>s son nulos. Con lo cual, mantenemos el or<strong>de</strong>n en quefueron generadas.82 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligentePara <strong>la</strong> elección <strong>de</strong> <strong>la</strong> c<strong>la</strong>se por <strong>de</strong>fecto, computamos <strong>la</strong> cantidad <strong>de</strong> casos <strong>de</strong> cada c<strong>la</strong>se no cubiertos por<strong>la</strong>s reg<strong>la</strong>s escogidas. A continuación se presentan <strong>la</strong> cantidad <strong>de</strong> casos <strong>de</strong> cada c<strong>la</strong>se, especificándose <strong>la</strong>cantidad <strong>de</strong> casos <strong>de</strong> cada c<strong>la</strong>se no cubiertos por ninguna <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s escogidas.Casos No cubiertos C<strong>la</strong>se4 2 No10 6 SiComo <strong>la</strong> mayoría <strong>de</strong> los casos no cubiertos, pertenecen a <strong>la</strong> c<strong>la</strong>se Si, ésta es escogida como c<strong>la</strong>se por<strong>de</strong>fecto. Las reg<strong>la</strong>s finales para este ejemplo se presentan a continuación.Reg<strong>la</strong> 1SI Estado = SoleadoY Humedad = AltaENTONCES JuegoTenis = No [50.0%]Reg<strong>la</strong> 3SI Estado = Nub<strong>la</strong>doENTONCES JuegoTenis = Si [70.7%]Reg<strong>la</strong> 5C<strong>la</strong>se por <strong>de</strong>fecto = Si4.5. SISTEMA INTEGRADOR4.5.1. Descripción generalPara estudiar los algoritmos propuestos se <strong>de</strong>sarrolló un sistema que integra el ID3 y el C4.5. El sistemarecibe los datos <strong>de</strong> entrenamiento como entrada y permite que el usuario elija cuál algoritmo y con quécriterio <strong>de</strong> <strong>de</strong>cisión (ganancia o proporción <strong>de</strong> ganancia) <strong>de</strong>sea aplicar. Una vez generados el árbol y <strong>la</strong>sreg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión, el usuario pue<strong>de</strong> evaluar los resultados sobre los datos <strong>de</strong> prueba. En el caso <strong>de</strong>l ID3,esta evaluación se realiza a partir <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión cuya performance, como vimos en <strong>la</strong> sección4.3.1, es idéntica a <strong>la</strong> <strong>de</strong> los árboles. La evaluación <strong>de</strong> los resultados <strong>de</strong>l C4.5, en cambio, se realiza porseparado y se obtienen, por lo tanto, dos evaluaciones distintas, una para el árbol y otra para <strong>la</strong>s reg<strong>la</strong>s.Esto se <strong>de</strong>be a que, como se explicó en <strong>la</strong> sección 4.4.4, el mo<strong>de</strong>lo <strong>de</strong> c<strong>la</strong>sificación generado con el C4.5como árbol <strong>de</strong> <strong>de</strong>cisión es distinto al generado como reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión.La figura 4.5. presenta un esquema general <strong>de</strong>l funcionamiento <strong>de</strong>l sistema.Solución Propuesta Magdalena Servente 83


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteID3Generación <strong>de</strong>lárbol <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong><strong>de</strong>cisiónPoda <strong>de</strong>l árbol<strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong><strong>de</strong>cisiónpodadoTransformación areg<strong>la</strong>s <strong>de</strong><strong>de</strong>cisiónReg<strong>la</strong>s <strong>de</strong><strong>de</strong>cisiónEvaluación <strong>de</strong> losresultadosEvaluación <strong>de</strong>lmo<strong>de</strong>logeneradoDATOS DEENTRENAMIENTODATOS DEPRUEBAC4.5Generación <strong>de</strong>lárbol <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong><strong>de</strong>cisiónPoda <strong>de</strong>l árbol<strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong><strong>de</strong>cisiónpodadoTransformación areg<strong>la</strong>s <strong>de</strong><strong>de</strong>cisiónReg<strong>la</strong>s <strong>de</strong><strong>de</strong>cisiónEvaluación <strong>de</strong> losresultadosEvaluación <strong>de</strong>lmo<strong>de</strong>logeneradoFigura 4.5: Esquema general <strong>de</strong>l sistema integrador propuesto84 Magdalena Servente Solución Propuesta


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente4.5.2. Diseño <strong>de</strong>l sistema integradorA continuación se presenta el diseño <strong>de</strong>l sistema integrador <strong>de</strong>sarrol<strong>la</strong>do. Se explican, tanto para el ID3como para el C4.5 los procesos realizados y resultados generados.4.5.2.1. Diseño para el ID3La figura 4.6 presenta el DFD general para <strong>la</strong> sección <strong>de</strong>l ID3. Con una mirada rápida, vemos que el árboly <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión se generan a partir <strong>de</strong> los datos <strong>de</strong> entrenamiento. A su vez, los procesos que losgeneran graban el árbol, <strong>la</strong>s reg<strong>la</strong>s y <strong>la</strong>s sentencias SQL en sus correspondientes archivos. A<strong>de</strong>más, segenera un log <strong>de</strong>l proceso. Por otro <strong>la</strong>do, <strong>la</strong> evaluación <strong>de</strong> resultados se realiza a partir <strong>de</strong> <strong>la</strong>s sentenciasSQL y <strong>de</strong> los datos <strong>de</strong> prueba.DATOS DEENTRENAMIENTO1Generación <strong>de</strong>lárbol <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisión sin podarLOG DEL ID32Poda <strong>de</strong>l árbol<strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisión podadoÁrbol <strong>de</strong> <strong>de</strong>cisión podado3Impresión <strong>de</strong>lárbol <strong>de</strong> <strong>de</strong>cisiónen pantal<strong>la</strong>4Transformación areg<strong>la</strong>s <strong>de</strong><strong>de</strong>cisiónDATOSTRANSFORMACIONÁrbol <strong>de</strong> <strong>de</strong>cisión podado5Guardado <strong>de</strong>lárbol <strong>de</strong> <strong>de</strong>cisióna discoREGLAS DEDECISIÓNSENTENCIASSQLDATOS DEPRUEBA6Evaluación <strong>de</strong> losresultadosÁRBOL DEDECISIÓNMatriz <strong>de</strong> confusiónFigura 4.6: DFD general para <strong>la</strong> sección <strong>de</strong>l ID3Solución Propuesta Magdalena Servente 85


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteCada uno <strong>de</strong> los procesos mostrados en <strong>la</strong> figura 4.6 se <strong>de</strong>scribe en <strong>la</strong>s secciones siguientes.4.5.2.1.1. Generación <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisiónEste proceso genera el árbol <strong>de</strong> <strong>de</strong>cisión según el algoritmo explicado para el ID3 en <strong>la</strong> sección 4.3.1.1. Elárbol se construye a partir <strong>de</strong> los datos <strong>de</strong> entrenamiento en formato Paradox, seleccionados por elusuario.Durante este proceso se genera un archivo <strong>de</strong> log que guarda todos los cálculos <strong>de</strong> ganancia y <strong>de</strong>proporción <strong>de</strong> ganancia realizadas en cada paso; y el atributo escogido para realizar <strong>la</strong> división. El archivo<strong>de</strong> log se encuentra en el subdirectorio Log <strong>de</strong>ntro <strong>de</strong>l directorio don<strong>de</strong> está insta<strong>la</strong>do el programa, y sunombre está compuesto <strong>de</strong> <strong>la</strong> siguiente manera: MétodoDD-MM-AA HH_MM_SSNombreTab<strong>la</strong>.log. Estopermite i<strong>de</strong>ntificar fácilmente el log correspondiente a una corrida. El formato <strong>de</strong>l archivo <strong>de</strong> log seespecifica en <strong>la</strong> sección 4.5.2.1.8.4.5.2.1.2. Poda <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisiónEste proceso realiza <strong>la</strong> poda <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión según <strong>la</strong> metodología explicada en <strong>la</strong> sección 4.3.1.2.4.5.2.1.3. Impresión <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión en pantal<strong>la</strong>Una vez podado, el árbol <strong>de</strong> <strong>de</strong>cisión se muestra en pantal<strong>la</strong>, <strong>de</strong> forma tal que figure <strong>la</strong> prueba realizadaen cada nodo y el valor <strong>de</strong> <strong>la</strong> prueba en cada rama, como aparece en <strong>la</strong> figura 4.7.4.5.2.1.4. Transformación a reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónA partir <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión podado, se generan <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión <strong>de</strong> acuerdo con el métodoexplicado en <strong>la</strong> sección 4.3.1.3. Se guarda en disco un archivo <strong>de</strong> texto que contiene <strong>la</strong>s reg<strong>la</strong>s obtenidas,y un archivo <strong>de</strong> Paradox que contiene <strong>la</strong>s sentencias SQL equivalentes. También se genera otra tab<strong>la</strong> <strong>de</strong>Paradox, “<strong>Datos</strong> Transformación”, que contiene los datos <strong>de</strong> necesarios para i<strong>de</strong>ntificar <strong>la</strong> transformacióncorrespondiente a cada sentencia SQL.86 Magdalena Servente Solución Propuesta


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteFigura 4.7: Formato <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión impreso en pantal<strong>la</strong>4.5.2.1.4. Transformación a reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónA partir <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión podado, se generan <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión <strong>de</strong> acuerdo con el métodoexplicado en <strong>la</strong> sección 4.3.1.3. Se guarda en disco un archivo <strong>de</strong> texto que contiene <strong>la</strong>s reg<strong>la</strong>s obtenidas,y un archivo <strong>de</strong> Paradox que contiene <strong>la</strong>s sentencias SQL equivalentes. También se genera otra tab<strong>la</strong> <strong>de</strong>Paradox, “<strong>Datos</strong> Transformación”, que contiene los datos <strong>de</strong> necesarios para i<strong>de</strong>ntificar <strong>la</strong> transformacióncorrespondiente a cada sentencia SQL.4.5.2.1.5. Guardado <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión a discoUna vez presentado el árbol por pantal<strong>la</strong>, se le ofrece al usuario <strong>la</strong> posibilidad <strong>de</strong> guardarlo en el discorígido. Si acepta, <strong>de</strong>be elegir en qué directorio y con qué nombre <strong>de</strong>sea guardarlo. La extensión <strong>de</strong><strong>la</strong>rchivo resultante es “tree”.4.5.2.1.6. Evaluación <strong>de</strong> los resultadosA partir <strong>de</strong> una lista <strong>de</strong> corridas realizadas, el usuario elige cuál corrida <strong>de</strong>l ID3 <strong>de</strong>sea evaluar. Los datos<strong>de</strong> <strong>la</strong>s corridas previas están almacenados en <strong>la</strong> tab<strong>la</strong> <strong>de</strong> “<strong>Datos</strong> Transformación”. Una vez realizada <strong>la</strong>elección, se obtienen <strong>de</strong> <strong>la</strong> tab<strong>la</strong> <strong>de</strong> “Sentencias SQL” <strong>la</strong>s sentencias SQL generadas durante <strong>la</strong>transformación <strong>de</strong>l árbol a reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión (Sección 4.5.2.1.4). Estas sentencias se aplican al conjunto<strong>de</strong> datos <strong>de</strong> prueba <strong>de</strong>terminado por el usuario.Solución Propuesta Magdalena Servente 87


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteSe genera una matriz <strong>de</strong> confusión que indica para cada c<strong>la</strong>se <strong>la</strong> cantidad <strong>de</strong> casos correctamentec<strong>la</strong>sificados y los incorrectamente c<strong>la</strong>sificados. Se calcu<strong>la</strong> <strong>la</strong> probabilidad <strong>de</strong> que un caso sea c<strong>la</strong>sificadocorrectamente como perteneciente a esa c<strong>la</strong>se. Finalmente, se obtienen los totales generales. La matriz <strong>de</strong>confusión obtenida se muestra en pantal<strong>la</strong>. La Figura 4.8 muestra un ejemplo <strong>de</strong> dicha matriz <strong>de</strong>confusión.Figura 4.8: Matriz <strong>de</strong> confusión generada durante <strong>la</strong> evaluación <strong>de</strong> resultados4.5.2.1.7. Formato <strong>de</strong> los datos <strong>de</strong> entrenamiento y <strong>de</strong> pruebaLos datos <strong>de</strong> entrenamiento y prueba <strong>de</strong>ben estar en formato <strong>de</strong> Paradox 3 (.db o .dbf) para po<strong>de</strong>r serprocesados por el sistema. Se eligió este formato porque <strong>la</strong> mayoría <strong>de</strong> los programas <strong>de</strong> manejo <strong>de</strong> datospue<strong>de</strong>n exportar sus archivos y tab<strong>la</strong>s al formato <strong>de</strong> Paradox 3; lo cual permite analizar datosa<strong>la</strong>macenados en casi cualquier formato.4.5.2.1.8. Archivo <strong>de</strong> Log <strong>de</strong>l ID3Durante <strong>la</strong> generación <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión, se genera un archivo <strong>de</strong> log que almacena todos los cálculosrealizados. En cada paso, se almacenan:1. el “Nivel” en el que se está, entendiéndose por “Nivel” el numero <strong>de</strong> ciclo <strong>de</strong> procesamiento en elque se está2. Para cada <strong>de</strong>scriptor:• El nombre <strong>de</strong>l <strong>de</strong>scriptor• Una matriz con <strong>la</strong> cantidad <strong>de</strong> instancias pertenecientes a cada c<strong>la</strong>se para cada valor posible <strong>de</strong>l<strong>de</strong>scriptor.• El valor <strong>de</strong> <strong>la</strong> ganancia88 Magdalena Servente Solución Propuesta


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente• El valor <strong>de</strong> <strong>la</strong> proporción <strong>de</strong> ganancia3. La ganancia o <strong>la</strong> proporción <strong>de</strong> ganancia máxima (según el criterio <strong>de</strong> división con el que se estétrabajando).A continuación se presenta una entrada <strong>de</strong>l archivo <strong>de</strong> log.Nivel=0Descriptor=EstadoLluvia Nub<strong>la</strong>do SoleadoNo 1 0 3Si 4 4 25 4 5 14Gain=0.258521Gain Ratio=0.491042--------------------------------------Descriptor=HumedadAltaNormalNo 3 1Si 4 67 7 14Gain=0.0746702Gain Ratio=0.14934--------------------------------------Descriptor=VientoFuerteLeveNo 2 2Si 4 66 8 14Gain=0.00597769Gain Ratio=0.0122457--------------------------------------0.2585214.5.2.1.9. Archivo <strong>de</strong> Reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión <strong>de</strong>l ID3El archivo <strong>de</strong> reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión generado durante <strong>la</strong> transformación a reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión contiene <strong>la</strong>sreg<strong>la</strong>s para el árbol analizado. Por cada reg<strong>la</strong> guarda el número <strong>de</strong> reg<strong>la</strong> y <strong>la</strong> reg<strong>la</strong> en sí.4.5.2.1.10. Archivo <strong>de</strong>l Árbol <strong>de</strong> <strong>de</strong>cisión <strong>de</strong>l ID3Cuando el usuario elige guardar el árbol <strong>de</strong> <strong>de</strong>cisión a disco, este se almacena en un archivo p<strong>la</strong>no,tabulándose n veces cada renglón, siendo n el nivel <strong>de</strong>l nodo <strong>de</strong> <strong>de</strong>cisión. A continuación se muestra elcontenido <strong>de</strong> un archivo “.tree” a modo <strong>de</strong> ejemplo.Estado = LluviaViento = FuerteHumedad = AltaSiHumedad = NormalNoViento = LeveSolución Propuesta Magdalena Servente 89


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteSiEstado = Nub<strong>la</strong>doSiEstado = SoleadoHumedad = AltaNoHumedad = NormalSi4.5.2.2. Diseño para el C4.5DATOS DEENTRENAMIENTO1Generación <strong>de</strong>lárbol <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisión sin podarÁrbol <strong>de</strong> <strong>de</strong>cisión sin podarÁRBOL DEDECISIÓN YEVALUACIÓNDERESULTADOSÁrbol <strong>de</strong> <strong>de</strong>cisión podado2Poda <strong>de</strong>l árbol<strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisión podado3Evaluación <strong>de</strong>lárbol <strong>de</strong> <strong>de</strong>cisión5Transformación areg<strong>la</strong>s <strong>de</strong><strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisión podadoy Resultados <strong>de</strong> <strong>la</strong> evaluaciónDATOS DEPRUEBAReg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónREGLAS DEDECISIÓN YEVALUACIÓNDERESULTADOS4Impresión <strong>de</strong>lárbol <strong>de</strong> <strong>de</strong>cisiónen pantal<strong>la</strong>6Evaluación <strong>de</strong> <strong>la</strong>sreg<strong>la</strong>s <strong>de</strong><strong>de</strong>cisiónFigura 4.9: DFD general para <strong>la</strong> sección <strong>de</strong>l C4.5La figura 4.9 presenta el DFD general para <strong>la</strong> sección <strong>de</strong>l C4.5. A simple vista, vemos que el diseño <strong>de</strong>este proceso difiere ligeramente <strong>de</strong>l diseño <strong>de</strong>l ID3. Aunque los procesos principales (generación y poda<strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión, generación <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión, evaluación <strong>de</strong> los resultados) se mantienen,encontramos que hay dos evaluaciones <strong>de</strong> resultados, una para el árbol <strong>de</strong> <strong>de</strong>cisión y otra para <strong>la</strong>s reg<strong>la</strong>s.90 Magdalena Servente Solución Propuesta


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEsto se <strong>de</strong>be a que, a diferencia <strong>de</strong>l ID3, <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión y el árbol generados por el C4.5 no sonmo<strong>de</strong>los <strong>de</strong> c<strong>la</strong>sificación equivalentes. Por otro <strong>la</strong>do, encontramos que tanto el archivo <strong>de</strong>l árbol <strong>de</strong><strong>de</strong>cisión como el <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión se presentan junto a <strong>la</strong> evaluación <strong>de</strong> resultados. Recor<strong>de</strong>mosque, como se explicó en <strong>la</strong> sección 4.4, el C4.5 evalúa cada rama y cada reg<strong>la</strong> en particu<strong>la</strong>r. Por lo tanto,<strong>la</strong> evaluación no pue<strong>de</strong> separarse <strong>de</strong> los mo<strong>de</strong>los generados.Cada uno <strong>de</strong> los procesos mostrados en <strong>la</strong> figura 4.9 se <strong>de</strong>scribe en <strong>la</strong>s secciones siguientes.4.5.2.2.1. Generación <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisiónEste proceso genera el árbol <strong>de</strong> <strong>de</strong>cisión según el algoritmo explicado para el C4.5 en <strong>la</strong>s secciones 4.4.1y 4.4.2. El árbol se construye a partir <strong>de</strong> los datos <strong>de</strong> entrenamiento en formato Paradox, seleccionadospor el usuario.4.5.2.2.2. Poda <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisiónEste proceso realiza <strong>la</strong> poda <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión según <strong>la</strong> metodología explicada en <strong>la</strong> sección 4.4.3.4.5.2.2.3. Evaluación <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisiónEl árbol <strong>de</strong> <strong>de</strong>cisión se evalúa según el algoritmo explicado en <strong>la</strong> sección 4.4.4. Se le agrega una prueba<strong>de</strong> valor a cada rama y se genera una matriz <strong>de</strong> confusión a partir <strong>de</strong> <strong>la</strong> performance <strong>de</strong>l árbol sobre losdatos <strong>de</strong> prueba.4.5.2.2.4. Impresión <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión en pantal<strong>la</strong>El árbol <strong>de</strong> <strong>de</strong>cisión se muestra en pantal<strong>la</strong> para el usuario, <strong>de</strong> manera idéntica al árbol generado para elID3, explicado en <strong>la</strong> sección 4.5.2.1.3.Solución Propuesta Magdalena Servente 91


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente4.5.2.2.5. Transformación a reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónEl árbol <strong>de</strong> <strong>de</strong>cisión generado, se transforma a reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión según <strong>la</strong> metodología explicada en <strong>la</strong>sección 4.4.6. Las reg<strong>la</strong>s se almacenan en un archivo p<strong>la</strong>no cuyo formato se explica en <strong>la</strong> sección4.5.2.2.8.4.5.2.2.6. Evaluación <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónUna vez generadas <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión, el sistema <strong>la</strong>s evalúa contra los datos <strong>de</strong> prueba. Genera unaapreciación <strong>de</strong> exactitud para cada reg<strong>la</strong>, según lo explicado en <strong>la</strong> sección 4.4.6, y una matriz <strong>de</strong>confusión general. Almacena todos los resultados en un archivo p<strong>la</strong>no.4.5.2.2.7. Formato <strong>de</strong> los datos <strong>de</strong> entrenamiento y <strong>de</strong> pruebaAl igual que en el caso <strong>de</strong>l ID3, los datos <strong>de</strong> entrenamiento y prueba <strong>de</strong>ben estar en formato <strong>de</strong> Paradox 3(.db o .dbf) para po<strong>de</strong>r ser procesados por el sistema.4.5.2.2.8. Archivo <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión y evaluación <strong>de</strong> resultados <strong>de</strong>l C4.5Durante <strong>la</strong> generación <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión, su correspondiente poda y su posterior evaluación se generaun archivo <strong>de</strong> resultados obtenidos en cada paso. En este archivo se almacenan:1. el árbol <strong>de</strong> <strong>de</strong>cisión sin podar, don<strong>de</strong> cada rama tiene asociados dos números: N y E, cuyo sentido se<strong>de</strong>tal<strong>la</strong> a continuación:• N es <strong>la</strong> sumatoria <strong>de</strong> los casos <strong>de</strong> entrenamiento fraccionales que llegan a cada hoja• E es <strong>la</strong> cantidad <strong>de</strong> casos, cubiertos por <strong>la</strong> hoja, que no pertenecen a <strong>la</strong> c<strong>la</strong>se <strong>de</strong> <strong>la</strong> misma.2. el árbol <strong>de</strong> <strong>de</strong>cisión podado, también con dos números N y E asociados, don<strong>de</strong>:• N es <strong>la</strong> cantidad <strong>de</strong> casos <strong>de</strong> entrenamiento cubiertos por <strong>la</strong> hoja92 Magdalena Servente Solución Propuesta


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente• E es <strong>la</strong> cantidad <strong>de</strong> errores predichos, según <strong>la</strong> distribución binomial, para <strong>la</strong> hoja si una cantidadN <strong>de</strong> nuevos casos fuese evaluada por el árbol3. <strong>la</strong> evaluación sobre los datos <strong>de</strong> prueba con el siguiente formato:Don<strong>de</strong>:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores EstimaciónTamaño = cantidad <strong>de</strong> nodos + cantidad <strong>de</strong> hojasErrores = x (y%)Con:x = cantidad <strong>de</strong> casos c<strong>la</strong>sificados erróneamenteEstimacióndon<strong>de</strong>:y= cantidad <strong>de</strong> casos c<strong>la</strong>sificados erróneamente / cantidad total <strong>de</strong> casost∑i== 1NEit es <strong>la</strong> cantidad <strong>de</strong> hojas <strong>de</strong>l árbolE i es el E asociado a cada hojaN es <strong>la</strong> cantidad total <strong>de</strong> casos <strong>de</strong> entrenamiento4. una matriz <strong>de</strong> confusión que indica para cada c<strong>la</strong>se, <strong>la</strong> cantidad <strong>de</strong> casos c<strong>la</strong>sificados erróneamente y<strong>la</strong> cantidad <strong>de</strong> casos <strong>de</strong> <strong>la</strong> misma c<strong>la</strong>sificados como pertenencientes a otra c<strong>la</strong>se.A continuación se presenta un archivo <strong>de</strong> muestra.C4.5 Generador <strong>de</strong> árboles <strong>de</strong> <strong>de</strong>cisión Thu Sep 27 11:18:00 2001-------------------------------------Opciones:<strong>Datos</strong> Los árboles serán evaluados sobre los datos <strong>de</strong> pruebaSe utilizará el Gain criterionSolución Propuesta Magdalena Servente 93


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente95 casos (7 atributos) leídos <strong>de</strong> cardiolo.dataÁrbol <strong>de</strong> <strong>de</strong>cisión:Duración <strong>de</strong>l Angor = MENOS DE 30 MIN: NO (48.0/1.0)Duración <strong>de</strong>l Angor = MAS DE 30 MIN:| Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = TIPICO: SI (16.0/1.0)| Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = AUSENTE: NO (16.0)| Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = ATIPICO:| | Irradiación <strong>de</strong>l Angor = SI: SI (8.0)| | Irradiación <strong>de</strong>l Angor = NO:| | | Respuesta Vasodi<strong>la</strong>tadora = POSITIVO: SI (4.0/1.0)| | | Respuesta Vasodi<strong>la</strong>tadora = NEGATIVO: NO (3.0)El árbol ha sido guardadoEvaluación sobre los datos <strong>de</strong> prueba (95 ítems):Antes <strong>de</strong> podarDespués <strong>de</strong> Podar---------------- ---------------------------Tamaño Errores Tamaño Errores Estimación10 3( 3.2%) 10 3( 3.2%) (11.6%)


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente• Usada indica <strong>la</strong> cantidad <strong>de</strong> veces que se utilizo <strong>la</strong> reg<strong>la</strong> durante <strong>la</strong> evaluación• Errores indica <strong>la</strong> cantidad <strong>de</strong> errores cometidos durante <strong>la</strong> evaluación, y <strong>la</strong> proporción <strong>de</strong>error calcu<strong>la</strong>da como dicha cantidad sobre <strong>la</strong> cantidad <strong>de</strong> veces en que se utilizó <strong>la</strong> reg<strong>la</strong>.• La ventaja tiene el siguiente formato a(b|c), don<strong>de</strong>• b es <strong>la</strong> cantidad <strong>de</strong> casos que serían c<strong>la</strong>sificados erróneamente si dicha reg<strong>la</strong> seomitiese.• c es <strong>la</strong> cantidad <strong>de</strong> casos que serían c<strong>la</strong>sificados correctamente si dicha reg<strong>la</strong> seomitiese por <strong>la</strong>s reg<strong>la</strong>s siguientes.• a es <strong>la</strong> el beneficio neto <strong>de</strong> omitir <strong>la</strong> reg<strong>la</strong>, calcu<strong>la</strong>do como b-c.3. Matriz <strong>de</strong> confusión para los datos <strong>de</strong> entrenamiento, con el mismo formato que <strong>la</strong> presentada en <strong>la</strong>sección 4.5.2.2.8 para <strong>la</strong> evaluación <strong>de</strong> los resultados <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión.4. Evaluación <strong>de</strong> los datos <strong>de</strong> prueba con el mismo formato que <strong>la</strong> evaluación sobre los datos <strong>de</strong>entrenamiento.5. Matriz <strong>de</strong> confusión para los datos <strong>de</strong> prueba con el mismo formato que <strong>la</strong> matriz presentada para losdatos <strong>de</strong> entrenamiento.A continuación se muestra un ejemplo <strong>de</strong>l archivo en cuestión.C4.5 Generador <strong>de</strong> reg<strong>la</strong>s Thu Sep 27 11:21:54 2001------------------------Opciones:<strong>Datos</strong> Conjuntos <strong>de</strong> reg<strong>la</strong>s evaluados sobre casosnuevos95 casos (7 atributos) leídos <strong>de</strong> cardiolo------------------Procesando el árbol 0Reg<strong>la</strong>s finales <strong>de</strong>l árbol 0:Reg<strong>la</strong> 6:Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = AUSENTE-> c<strong>la</strong>se NO [95.8%]Reg<strong>la</strong> 1:Duración <strong>de</strong>l Angor = MENOS DE 30 MIN-> c<strong>la</strong>se NO [94.6%]Reg<strong>la</strong> 5:Solución Propuesta Magdalena Servente 95


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteDolor <strong>de</strong> Pecho <strong>de</strong> Angor = ATIPICOIrradiación <strong>de</strong>l Angor = NORespuesta Vasodi<strong>la</strong>tadora = NEGATIVO-> c<strong>la</strong>se NO [82.0%]Reg<strong>la</strong> 2:Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = TIPICODuración <strong>de</strong>l Angor = MAS DE 30 MIN-> c<strong>la</strong>se SI [84.3%]Reg<strong>la</strong> 3:Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = ATIPICOIrradiación <strong>de</strong>l Angor = SIDuración <strong>de</strong>l Angor = MAS DE 30 MIN-> c<strong>la</strong>se SI [84.1%]Reg<strong>la</strong> 4:Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = ATIPICODuración <strong>de</strong>l Angor = MAS DE 30 MINRespuesta Vasodi<strong>la</strong>tadora = POSITIVO-> c<strong>la</strong>se SI [70.0%]C<strong>la</strong>se por <strong>de</strong>fecto: NOEvaluación sobre los datos <strong>de</strong> entrenamiento (95 ítems):Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja----- ------ ----- ----- ------- -------6 1 4.2% 32 0 (0.0%) 0 (0|0) NO1 1 5.4% 32 1 (3.1%) 0 (0|0) NO5 3 18.0% 3 0 (0.0%) 0 (0|0) NO2 2 15.7% 16 1 (6.2%) 14 (15|1) SI3 3 15.9% 8 0 (0.0%) 4 (4|0) SI4 3 30.0% 4 1 (25.0%) 2 (3|1) SIProbadas 95, errores 3 (3.2%)


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteCAPÍTULO 5RESULTADOS OBTENIDOSEn este capítulo se presentan los resultados obtenidos. Primero, se explica <strong>la</strong> manera en que <strong>de</strong>berealizarse <strong>la</strong> interpretación <strong>de</strong> los mismos (Sección 5.1), se presentan los formatos <strong>de</strong> los árbolesy <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión tanto para el ID3 (Sección 5.1.1) como para el C4.5 (Sección 5.1.2).Luego, se <strong>de</strong>scriben los dominios <strong>de</strong> datos sobre los que se trabajó (Sección 5.2), y se analizanlos resultados obtenidos con el ID3 (Sección 5.3) y con el C4.5 (Sección 5.4). En cada caso sepresenta, el árbol y <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión obtenidos, y <strong>la</strong> evaluación <strong>de</strong> resultados sobre elconjunto <strong>de</strong> datos <strong>de</strong> prueba. En <strong>la</strong> sección 5.5 se comparan los resultados obtenidos con el ID3 ycon el C4.5 en los distintos dominios. Y en <strong>la</strong> sección 5.6 se realiza un análisis general <strong>de</strong> losresultados.5.1. INTERPRETACIÓN DE LOS RESULTADOSSe realizaron múltiples pruebas tanto con el sistema ID3 como con el C4.5. A continuación se presentanlos dominios <strong>de</strong> datos sobre los cuales se trabajó. Debe recordarse que, al no tener <strong>la</strong> limitación <strong>de</strong> datosúnicamente discretos, el C4.5 pudo aplicarse a más dominios que el ID3.Para cada dominio, se presentan dos conjuntos <strong>de</strong> resultados para cada uno <strong>de</strong> los sistemas: uno utilizando<strong>la</strong> ganancia como medida <strong>de</strong> <strong>la</strong> ganancia <strong>de</strong> información en cada iteración <strong>de</strong>l sistema, y otra utilizando <strong>la</strong>proporción <strong>de</strong> ganancia con el mismo propósito. Entonces, para cada combinación dominio - sistema –medidor <strong>de</strong> ganancia, se presentan el árbol y <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión obtenidas.5.1.1. Interpretación <strong>de</strong> resultados en el ID35.1.1.1. Árboles <strong>de</strong> <strong>de</strong>cisiónEn el caso <strong>de</strong>l ID3, el árbol <strong>de</strong> <strong>de</strong>cisión no presenta ninguna característica en especial; <strong>de</strong> cada nodo saleuna rama por valor <strong>de</strong>l atributo que se está siendo testeado, y, así sucesivamente, hasta llegar a <strong>la</strong>s hojasque indican <strong>la</strong> c<strong>la</strong>se. El árbol <strong>de</strong> <strong>de</strong>cisión presentado ha sido previamente podado, y es exhaustivo, <strong>de</strong>ramas mutuamente excluyentes.Resultados Magdalena Servente 97


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente5.1.1.2. Reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónLas reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión en el ID3 se obtienen directamente a partir <strong>de</strong>l árbol. Con lo cual, los antece<strong>de</strong>ntes<strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s son mutuamente excluyentes y exhaustivos. Por lo tanto, el or<strong>de</strong>n en que se presentan <strong>la</strong>sreg<strong>la</strong>s no tiene importancia para <strong>la</strong> c<strong>la</strong>sificación <strong>de</strong> un nuevo caso. Si se evalúa un nuevo conjunto <strong>de</strong>datos con <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión, se obtienen exactamente los mismos resultados que si se lo evalúa con elárbol <strong>de</strong> <strong>de</strong>cisión.Como estimación <strong>de</strong>l éxito <strong>de</strong>l mo<strong>de</strong>lo generado se presenta una tab<strong>la</strong> o matriz obtenida <strong>de</strong> <strong>la</strong> evaluación<strong>de</strong> los datos <strong>de</strong> prueba tanto con el árbol como con <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión. La tab<strong>la</strong> generada, presentadaen <strong>la</strong> sección 4.5.2.1.6, cuenta con <strong>la</strong>s siguientes columnas:• C<strong>la</strong>ses: C<strong>la</strong>ses existentes en los datos• Correctos: cantidad <strong>de</strong> casos <strong>de</strong> los datos <strong>de</strong> prueba c<strong>la</strong>sificados correctamente para cada c<strong>la</strong>se• Errores: cantidad <strong>de</strong> casos <strong>de</strong> los datos <strong>de</strong> prueba c<strong>la</strong>sificados erróneamente para cada c<strong>la</strong>se• Probabilidad: probabilidad <strong>de</strong> que un nuevo caso sea c<strong>la</strong>sificado correctamente, se obtiene como:correctoscorrectos + errores(5.1)5.1.2. Interpretación <strong>de</strong> resultados en el C4.55.1.2.1. Árboles <strong>de</strong> <strong>de</strong>cisiónEl árbol <strong>de</strong> <strong>de</strong>cisión en el C4.5 es distinto <strong>de</strong>l árbol generado en el ID3 en <strong>la</strong> medida en que cada una <strong>de</strong><strong>la</strong>s hojas <strong>de</strong>l mismo cubre una distribución <strong>de</strong> casos. Cada hoja tiene asociados entonces, dos números Ny E, como lo indica <strong>la</strong> figura 5.1. Cabe <strong>de</strong>stacar que si E es nulo, entonces, no se lo expresa en el árbol.Prueba 1 <strong>de</strong>l atributo X: c<strong>la</strong>se A (N/E)Prueba 2 <strong>de</strong>l atributo X:Prueba 1 <strong>de</strong>l atributo Y:Prueba 1 <strong>de</strong>l atributo Z: c<strong>la</strong>se A (N)Prueba 2 <strong>de</strong>l atributo Z: c<strong>la</strong>se B (N/E)Prueba 2 <strong>de</strong>l atributo Y: c<strong>la</strong>se A (N/E)Figura 5.2 Esquema general <strong>de</strong> un árbol obtenido con el C4.598 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteComo se explicó previamente, en <strong>la</strong> sección 4.5.2.2.8, en los árboles sin podar, N es <strong>la</strong> suma <strong>de</strong> los casosfraccionarios que llegan a cada hoja y E es <strong>la</strong> suma <strong>de</strong> los casos que pertenecen a una c<strong>la</strong>se distinta <strong>de</strong> <strong>la</strong>correspondiente a <strong>la</strong> hoja, los falsos positivos. Es <strong>de</strong>cir, que <strong>de</strong> los N casos cubiertos por <strong>la</strong> hoja, E casosson incorrectos. En los árboles podados, N es <strong>la</strong> cantidad <strong>de</strong> casos <strong>de</strong> entrenamiento cubiertos por <strong>la</strong> hoja,y E es <strong>la</strong> cantidad <strong>de</strong> errores predichos si una cantidad N <strong>de</strong> casos nuevos fuese c<strong>la</strong>sificada por el árbol,según <strong>la</strong> distribución binomial. Con lo cual, pue<strong>de</strong> obtenerse un rápido estimador <strong>de</strong> errores sobre datosnuevos <strong>de</strong> <strong>la</strong> siguiente manera:k∑i=1Don<strong>de</strong> k es <strong>la</strong> cantidad <strong>de</strong> nodos, Ei es el error en <strong>la</strong> hoja i, y N es <strong>la</strong> cantidad total <strong>de</strong> casos <strong>de</strong>entrenamiento.NEi(5.2)Para cada uno <strong>de</strong> los árboles se obtienen dos tab<strong>la</strong>s <strong>de</strong> evaluación <strong>de</strong> idéntico formato: una a partir <strong>de</strong> losdatos <strong>de</strong> entrenamiento y <strong>la</strong> otra a partir <strong>de</strong> los datos <strong>de</strong> prueba. Una tab<strong>la</strong> indica en cada caso:• Tamaño: tamaño <strong>de</strong>l árbol obtenido (cantidad <strong>de</strong> nodos + cantidad <strong>de</strong> hojas)• Errores (porcentaje <strong>de</strong> error %): los errores indican <strong>la</strong> cantidad <strong>de</strong> casos c<strong>la</strong>sificadoserróneamente; mientras que el porcentaje <strong>de</strong> error es dicha cantidad sobre <strong>la</strong> cantidad total <strong>de</strong> casos.• Estimación: es un estimador <strong>de</strong>l éxito <strong>de</strong>l árbol obtenido según <strong>la</strong> ecuación 5.1.A<strong>de</strong>más, para cada uno <strong>de</strong> los árboles se presenta <strong>la</strong> matriz <strong>de</strong> confusión <strong>de</strong>l tipo:C<strong>la</strong>sificado como C<strong>la</strong>sificado como ... C<strong>la</strong>sificado comoC<strong>la</strong>se 1C<strong>la</strong>se 2C<strong>la</strong>se NC<strong>la</strong>se 1 ...C<strong>la</strong>se 2 ...... ... ... ... ...C<strong>la</strong>se N ...Don<strong>de</strong> se indica para cada c<strong>la</strong>se, <strong>la</strong> cantidad <strong>de</strong> casos que fueron c<strong>la</strong>sificados correctamente y <strong>la</strong> cantidad<strong>de</strong> casos que no fueron c<strong>la</strong>sificados correctamente. Para estos últimos se indica en particu<strong>la</strong>r, <strong>de</strong> qué c<strong>la</strong>sefueron c<strong>la</strong>sificados.Resultados Magdalena Servente 99


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente5.1.2.2. Reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónEn el caso <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión producidas por el C4.5, cada reg<strong>la</strong> tiene asociado un estimador <strong>de</strong>léxito predicho durante su construcción. Recor<strong>de</strong>mos que dicho estimador se obtiene como el valor <strong>de</strong> <strong>la</strong>distribución binomial para un nivel <strong>de</strong> confianza especificado, a partir <strong>de</strong> <strong>la</strong> tab<strong>la</strong> <strong>de</strong> contingencia comofue explicado en <strong>la</strong> sección 4.4.5.A<strong>de</strong>más, a continuación <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s obtenidas, se presenta una tab<strong>la</strong> <strong>de</strong> performance <strong>de</strong> <strong>la</strong>s mismas sobrelos datos <strong>de</strong> prueba, con los siguientes datos, <strong>de</strong>scriptos en <strong>la</strong> sección 4.5.2.2.9:• Reg<strong>la</strong>: número <strong>de</strong> <strong>la</strong> reg<strong>la</strong>.• Tamaño: cantidad <strong>de</strong> conjunciones en el antece<strong>de</strong>nte.• Error: estimador <strong>de</strong>l error <strong>de</strong> <strong>la</strong> reg<strong>la</strong> (se obtiene restándole a 100 el estimador <strong>de</strong> éxito presente encada reg<strong>la</strong>)• Usada: cantidad <strong>de</strong> veces que <strong>la</strong> reg<strong>la</strong> fue utilizada• Error (porcentaje <strong>de</strong> error %): el error indica <strong>la</strong> cantidad <strong>de</strong> casos que fueron c<strong>la</strong>sificadoserróneamente, y el porcentaje <strong>de</strong> error es dicha cantidad sobre <strong>la</strong> cantidad <strong>de</strong> veces en que <strong>la</strong> reg<strong>la</strong> fueusada.• Ventaja: indica <strong>la</strong> performance <strong>de</strong>l conjunto <strong>de</strong> reg<strong>la</strong>s, si <strong>la</strong> reg<strong>la</strong> en cuestión fuese omitida. Seexpresa como: a(b|c), don<strong>de</strong> b es <strong>la</strong> cantidad <strong>de</strong> casos que serían c<strong>la</strong>sificados erróneamente, si estareg<strong>la</strong> no existiese; c es <strong>la</strong> cantidad <strong>de</strong> casos que serían c<strong>la</strong>sificados correctamente por <strong>la</strong>s reg<strong>la</strong>ssiguientes; y a=b-c es el beneficio neto <strong>de</strong> eliminar <strong>la</strong> reg<strong>la</strong>.5.2. DESCRIPCIÓN DE LOS DOMINIOSA continuación se presentan los dominios sobre los cuales se realizaron <strong>la</strong>s pruebas. Para cada dominio sepresenta:a) Una breve <strong>de</strong>scripciónb) Los atributos con sus correspondientes valores posibles100 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentec) Las c<strong>la</strong>ses con sus valoresd) La cantidad <strong>de</strong> instancias y <strong>la</strong> distribución <strong>de</strong> c<strong>la</strong>ses <strong>de</strong>l dominioLos datos <strong>de</strong> cada uno <strong>de</strong> los dominios se presentan en el Apéndice B. En todos los casos, se dividieronlos datos prec<strong>la</strong>sificados en dos subconjuntos: uno <strong>de</strong> entrenamiento y uno <strong>de</strong> prueba, según <strong>la</strong>sproporciones 2:3 y 1:3, respectivamente.5.2.1. Créditosa) DescripciónLos ejemplos p<strong>la</strong>nteados en esta base <strong>de</strong> datos fueron provistos por el Gerente <strong>de</strong>l Centro <strong>de</strong> Cómputos <strong>de</strong>Las Malvinas [Montalvetti, 1995] para el análisis <strong>de</strong> solicitu<strong>de</strong>s <strong>de</strong> créditos. Los campos <strong>de</strong> los ejemplosprovistos son los parámetros que se tienen en cuenta al analizar un riesgo crediticio.b) AtributosNombre <strong>de</strong>l campo Valores PosiblesIngreso ENTRE 451 Y 550, ENTRE 451 Y 550, MAS DE 551Composición Familiar SOLTERO, CASADO SIN HIJOS, CASADO Y UN HIJO, CASADO Y DOS HIJOSViviendaALQUILA, PROPIA O IPVUServiciosBASICOS, BASICOS Y TIC, BASICOS TIC Y TELOtros CréditosUN CREDITO, DOS CREDITOS, TRES CREDITOSc) C<strong>la</strong>ses:SI, NO.d) Cantidad <strong>de</strong> instancias y distribución <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses::SI NO TotalesEn el conjunto <strong>de</strong> entrenamiento 69 30 99En el conjunto <strong>de</strong> prueba 35 16 51Totales 104 46 150Resultados Magdalena Servente 101


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente5.2.2. Cardiologíaa) DescripciónLos ejemplos p<strong>la</strong>nteados en este caso correspon<strong>de</strong>n a <strong>la</strong> patología <strong>de</strong> Infarto Agudo <strong>de</strong> Miocardio,provistos por un cardiólogo [Montalvetti, 1995]. En este caso, todos los ejemplos respon<strong>de</strong>n a personas <strong>de</strong>sexo masculino, entre 40 y 50 años, fumadoras, con displi<strong>de</strong>mia e hipertensión arterial presente. Pue<strong>de</strong>nobtenerse dos diagnósticos <strong>de</strong> los ejemplos p<strong>la</strong>nteados: Si (Infarto Agudo <strong>de</strong> Miocardio) o No (no es unInfarto Agudo <strong>de</strong> Miocardio). Aunque en medicina es difícil realizar un diagnóstico con una cantidad <strong>de</strong>variables reducidas, se <strong>de</strong>terminó que <strong>la</strong>s variables p<strong>la</strong>nteadas en estos ejemplos alcanzan para realizar undiagnóstico preliminar <strong>de</strong> gran ayuda al expertob) AtributosNombre <strong>de</strong>l campoDolor <strong>de</strong> Pecho <strong>de</strong> AngorIrradiación <strong>de</strong>l AngorDuración <strong>de</strong>l AngorAngor en Re<strong>la</strong>ciónAntigüedad <strong>de</strong>l AngorRespuesta Vasodi<strong>la</strong>tadoraValores PosiblesTIPICO, ATIPICO, AUSENTESI, NOMENOS DE 30 MIN, MAS DE 30 MINCON ESFUERZO, EN REPOSORECIENTE, MAS DE 1 MESPOSITIVO, NEGATIVOc) C<strong>la</strong>ses:SI, NOd) Cantidad <strong>de</strong> instancias y distribución <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses:SI NO TotalesEn el conjunto <strong>de</strong> entrenamiento 18 46 64En el conjunto <strong>de</strong> prueba 9 22 31Totales 27 68 955.2.3. Votacionesa) DescripciónEstos datos fueron recolectados a partir <strong>de</strong>l Almanaque Trimestral <strong>de</strong>l Congreso, 2da sesión <strong>de</strong> 98ºCongreso, 1984, Volumen XL: Congressional Quarterly Inc, Washington, D.C., 1985. Los datos incluyenlos votos <strong>de</strong> cada congresista <strong>de</strong> <strong>la</strong> U.S. House of Representatives en 16 temas c<strong>la</strong>ves (CQA). Sei<strong>de</strong>ntificaron nueve tipos diferentes <strong>de</strong> 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 (agrupados102 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentecomo “en_contra”), voto en persona, voto en persona para evitar conflictos <strong>de</strong> intereses, y abstención <strong>de</strong>voto o no dio su voto a conocer (agrupados como “<strong>de</strong>sconocido”).b) AtributosNombre <strong>de</strong>l campoNiños_discapacitadosParticipación en el costo <strong>de</strong>l proyecto <strong>de</strong>l aguaAdopción <strong>de</strong> <strong>la</strong> resolución sobre el presupuestoconge<strong>la</strong>miento <strong>de</strong> los honorarios médicosayuda a El Salvadorgrupos religiosos en <strong>la</strong>s escue<strong>la</strong>sprohibición <strong>de</strong> <strong>la</strong>s pruebas anti satélitesayuda a los contras <strong>de</strong> Nicaraguamisil mxinmigraciónreducción a <strong>la</strong> corporación Synfuelspresupuesto <strong>de</strong> educación<strong>de</strong>recho a <strong>de</strong>mandar <strong>de</strong> <strong>la</strong> Superfundcrimenexportaciones sin impuestosacta sudafricana <strong>de</strong> administración <strong>de</strong> exportacionesValores PosiblesA_favor, en_contra, <strong>de</strong>sconocidoA_favor, en_contra, <strong>de</strong>sconocidoA_favor, en_contra, <strong>de</strong>sconocidoA_favor, en_contra, <strong>de</strong>sconocidoA_favor, en_contra, <strong>de</strong>sconocidoA_favor, en_contra, <strong>de</strong>sconocidoA_favor, en_contra, <strong>de</strong>sconocidoA_favor, en_contra, <strong>de</strong>sconocidoA_favor, en_contra, <strong>de</strong>sconocidoA_favor, en_contra, <strong>de</strong>sconocidoA_favor, en_contra, <strong>de</strong>sconocidoA_favor, en_contra, <strong>de</strong>sconocidoA_favor, en_contra, <strong>de</strong>sconocidoA_favor, en_contra, <strong>de</strong>sconocidoA_favor, en_contra, <strong>de</strong>sconocidoA_favor, en_contra, <strong>de</strong>sconocidoc) C<strong>la</strong>ses:<strong>de</strong>mócrata, republicanod) Cantidad <strong>de</strong> instancias y distribución <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses:Demócrata republicano TotalesEn el conjunto <strong>de</strong> entrenamiento 184 116 300En el conjunto <strong>de</strong> prueba 83 52 135Totales 267 168 4355.2.4. Estudio sobre hongosa) DescripciónEsta base <strong>de</strong> datos incluye <strong>la</strong>s <strong>de</strong>scripciones <strong>de</strong> muestras hipotéticas <strong>de</strong> 23 especies <strong>de</strong> hongos <strong>de</strong> <strong>la</strong>sfamilias Agaricus y Lepiota. Cada especie es i<strong>de</strong>ntificada como apta para ser ingerida, absolutamentevenenosa, o <strong>de</strong> ingestión dudosa y ciertamente no recomendable. Esta última c<strong>la</strong>se fue combinada con <strong>la</strong>venenosa. La Guía <strong>de</strong> don<strong>de</strong> se obtuvieron los datos explica que no existe una reg<strong>la</strong> simple para<strong>de</strong>terminar si un hongo es ingerible o no.Resultados Magdalena Servente 103


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteb) AtributosForma_sombreroacampanada, cónica, convexa, chata, abotonada, hundidaSuperficie_sombreroFibrosa, ranurada, escamosa, suaveColor_sombreromarrón, piel, cane<strong>la</strong>, gris, ver<strong>de</strong>, rosa, violeta, rojo, b<strong>la</strong>nco, amarilloMagul<strong>la</strong>durasSi, noOlorAlmendra, anís, creosota, pescado, hediondo, mohoso, ninguno,punzante, especiosoTipo_membranaAdherida, <strong>de</strong>scen<strong>de</strong>nte, libre, muescadaEspaciado_membranaCercano, pob<strong>la</strong>do, distanteTamaño_membranaAncha, finaColor_membranaNegro, marron, piel, choco<strong>la</strong>te, gris, ver<strong>de</strong>, naranja, rosa, violeta, rojo,b<strong>la</strong>nco, amarilloForma_troncoAbultada, cónicaRaiz_tronco bulbosa, agarrotada, copa, igual, rizomorfa, arraizada, ?Superfice_tronco_arriba_anillo Fibrosa, escamosa, sedosa, suaveSuperfice_tronco_<strong>de</strong>bajo_anillo Fibrosa, escamosa, sedosa, suaveColor_tronco_arriba_anillo Marron, piel, cane<strong>la</strong>, gris, naranja, rosa, rojo, b<strong>la</strong>nco, amarilloColor_tronco_<strong>de</strong>bajo_anillo Marron, piel, cane<strong>la</strong>, gris, naranja, rosa, rojo, b<strong>la</strong>nco, amarilloTipo_veloParcial, universalColor_veloMarrón, naranja, b<strong>la</strong>nco, amarilloCantidad_anillosNinguno, uno, dosTipo_anilloTejido, evanescente, resp<strong>la</strong>n<strong>de</strong>ciente, gran<strong>de</strong>, ninguno, pendiente,cubierto, zonalColor_esporasNegra, marrón, piel, choco<strong>la</strong>te, ver<strong>de</strong>, naranja, violeta, b<strong>la</strong>nco,amarilloPob<strong>la</strong>cionabundante, agrupada, numerosa, dispersa, varios, solitariaHabitatPastos, hojas, pra<strong>de</strong>ras, caminos, urbano, basura, bosquesCantidad <strong>de</strong> Atributos <strong>de</strong>sconocidos: 2480 (<strong>de</strong>notados por un "?"), todos para el primer atributoc) C<strong>la</strong>ses:Ingerible, Venenoso.d) Cantidad <strong>de</strong> instancias y distribución <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses:Ingerible Venenoso TotalesEn el conjunto <strong>de</strong> entrenamiento 2805 2611 5416En el conjunto <strong>de</strong> prueba 1403 1305 2708Totales 4208 3916 81245.2.5. Elita: Base <strong>de</strong> Asteroi<strong>de</strong>sa) DescripciónExisten muchas teorías físicas que c<strong>la</strong>sifican a los distintos asteroi<strong>de</strong>s en familias i<strong>de</strong>ntificadas por unelemento en particu<strong>la</strong>r. Esta base <strong>de</strong> datos, resultado <strong>de</strong> varias mediciones realizadas sobre múltiples104 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentevalores continuos, ayuda a c<strong>la</strong>sificar los asteroi<strong>de</strong>s en familias. Según <strong>la</strong> teoría <strong>de</strong> Hirayama, que examina<strong>la</strong> distribución <strong>de</strong> los asteroi<strong>de</strong>s con respecto a sus elementos orbitales, en particu<strong>la</strong>r su movimientoprincipal, <strong>la</strong> inclinación y <strong>la</strong> excentricidad, permite i<strong>de</strong>ntificar a <strong>la</strong>s familias KORONIS, EOS, THEMIS,FLORA, MARIA y PHOCAEA. Esta teoría ha sido comprobada por Arnoldb) AtributosNombre:SemiejeExcentricidadInclinaciónseno_inclinacionargumento_perihelioResonanciadistancia_martedistancia_jupiterC<strong>la</strong>ve PrimariaContinuoContinuoContinuoContinuoContinuoContinuoContinuoContinuoc) C<strong>la</strong>ses:Las c<strong>la</strong>ses representan <strong>la</strong>s familias <strong>de</strong> asteroi<strong>de</strong>s a <strong>la</strong>s cuales cada asteroi<strong>de</strong> pue<strong>de</strong> pertenecer.THEMIS, KORONIS, MARIA, EOS, PHOCAEA, FLORA.d) Cantidad <strong>de</strong> instancias y distribución <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses:EOS FLORA KORONIS MARIA PHOCAEA THEMIS TotalesEn el conjunto <strong>de</strong> entrenamiento 44 103 25 13 23 45 253En el conjunto <strong>de</strong> prueba 22 53 12 7 11 22 127Totales 66 156 37 20 34 67 3805.2.6. Hipotiroidismoa) DescripciónEstos datos fueron obtenidos <strong>de</strong> un estudio realizado sobre múltiples pacientes que presentaban síntomas<strong>de</strong> hipotiroidismo en el Garvan Institute.b) AtributosEdad:continuoSexo: M, F.Toma tiroxina: f, v.Duda sobre tiroxina: f, v.Toma medicación antitiroí<strong>de</strong>a: f, v.Enfermo: f, v.Resultados Magdalena Servente 105


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEmbarazada: f, v.Cirugía tiroí<strong>de</strong>a: f, v.Tratamiento I131: f, v.Es hipotiroi<strong>de</strong>: f, v.Es hipertiroi<strong>de</strong>: f, v.Litio: f, v.bocio: f, v.tumor: f, v.Hipopituitario: f, v.Psicológico: f, v.Medición TSH: f, v.TSH:continuoMedición T3: f, v.T3: ContinuoMedición TT4: f, v.TT4:Continuo.Medición T4U: f, v.T4U:Continuo.Medición FTI: f, v.FTI:Continuo.Medición TBG: f, v.TBG:Continuo.Fuente <strong>de</strong> referencia:WEST, STMW, SVHC, SVI, SVHD, otros.c) C<strong>la</strong>ses:hipertiroi<strong>de</strong>, hipotiroi<strong>de</strong> primario, hipotiroi<strong>de</strong> compensado, hipotiroi<strong>de</strong> secundario, negativod) Cantidad <strong>de</strong> instancias y distribución <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses:Hipertiroi<strong>de</strong> Hipotiroi<strong>de</strong> Hipotiroi<strong>de</strong> Hipotiroi<strong>de</strong> Negativo Totalesprimario compensado secundarioEn el conjunto <strong>de</strong> entrenamiento 0 64 129 1 2320 2514En el conjunto <strong>de</strong> prueba 0 31 65 1 1161 1258Totales 0 95 194 2 3481 37725.2.7. I<strong>de</strong>ntificación <strong>de</strong> vidriosa) DescripciónEsta base <strong>de</strong> datos sirve para c<strong>la</strong>sificar un vidrio como flotante o no. Dicha información es muyimportante para los investigadores criminológicos, ya que cualquier vidrio <strong>de</strong>jado en <strong>la</strong> escena <strong>de</strong>l crimensirve como evi<strong>de</strong>ncia, si está correctamente c<strong>la</strong>sificado. Los datos fueron obtenidos <strong>de</strong>l Central ResearchEstablishment, Home Office Forensic Science Service <strong>de</strong> Al<strong>de</strong>rmaston, Reading, Berkshire.106 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteb) AtributosIdIR (índice <strong>de</strong> refracción)Na (Sodio medido como el porcentaje <strong>de</strong>l peso <strong>de</strong>l óxidocorrespondiente, esto se aplica para los <strong>de</strong>más minerales)Mg (Magnesio)Al (Aluminio)Si (Silicio)K (Potasio)Ca (Calcio)Ba (Bario)Fe (Hierro)C<strong>la</strong>ve Primariacontinuocontinuocontinuocontinuocontinuocontinuocontinuocontinuocontinuoc) C<strong>la</strong>ses:vidrios_float_para_construcciones, vidrios_para_construcciones_no_float, vidrios_float_para_vehículos,vidrios_para_vehículos_no_float, contenedores, vajil<strong>la</strong>, <strong>la</strong>mparitasd) Cantidad <strong>de</strong> instancias y distribución <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses:En el conjunto<strong>de</strong>entrenamientoEn el conjunto<strong>de</strong> pruebaVidrios float para Vidrios para Vidrios float contenedo vajil<strong>la</strong> <strong>la</strong>mparitas Totalesconstrucciones construccionesno floatpara vehículos res47 51 11 9 6 19 14323 25 6 4 3 10 71Totales 70 76 17 13 9 29 2145.3. RESULTADOS OBTENIDOS CON EL ID3A continuación se presentan los resultados obtenidos con el ID3 en cada uno <strong>de</strong> los dominios analizados.Cada uno <strong>de</strong> los resultados consiste en un árbol <strong>de</strong> <strong>de</strong>cisión, un conjunto <strong>de</strong> reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión y unamatriz <strong>de</strong> resultados obtenida al aplicar los mo<strong>de</strong>los sobre los datos <strong>de</strong> prueba. Dicha matriz informa porcada c<strong>la</strong>se, <strong>la</strong> cantidad <strong>de</strong> instancias <strong>de</strong>l conjunto <strong>de</strong> prueba que fueron c<strong>la</strong>sificadas correctamente, <strong>la</strong>cantidad que fueron c<strong>la</strong>sificadas erróneamente y <strong>la</strong> probabilidad <strong>de</strong> que una nueva instancia seac<strong>la</strong>sificada correctamente.Resultados Magdalena Servente 107


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente5.3.1. Créditos5.3.1.1. ID3 utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisiónOtros_Creditos = DOS CREDITOSComposición_Familiar = CASADO SIN HIJOSSIComposición_Familiar = CASADO Y DOS HIJOSIngreso = ENTRE 451 Y 550Vivienda = ALQUILANOVivienda = PROPIA 0 IPVUServicios = BASICOS Y TICSIServicios = BASICOS, TIC Y TELNOIngreso = MAS DE 551SIComposición_Familiar = CASADO Y UN HIJOSIComposición_Familiar = SOLTEROVivienda = ALQUILAIngreso = ENTRE 451 Y 550SIIngreso = MAS DE 551NOVivienda = PROPIA 0 IPVUSIOtros_Creditos = TRES CREDITOSNOOtros_Creditos = UN CREDITOComposición_Familiar = CASADO SIN HIJOSSIComposición_Familiar = CASADO Y DOS HIJOSIngreso = ENTRE 451 Y 550Vivienda = ALQUILANOVivienda = PROPIA 0 IPVUSIIngreso = MAS DE 551SIComposición_Familiar = CASADO Y UN HIJOSIComposición_Familiar = SOLTEROSIReg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 0SI Otros_Creditos = DOS CREDITOSY Composición_Familiar = CASADO SIN HIJOSENTONCES Otorga_Creditos = SIReg<strong>la</strong> 1SI Otros_Creditos = DOS CREDITOSY Composición_Familiar = CASADO Y DOS HIJOSY Ingreso = ENTRE 451 Y 550Y Vivienda = ALQUILAENTONCES Otorga_Creditos = NOReg<strong>la</strong> 2SI Otros_Creditos = DOS CREDITOSY Composición_Familiar = CASADO Y DOS HIJOSY Ingreso = ENTRE 451 Y 550Y Vivienda = PROPIA 0 IPVUY Servicios = BASICOS Y TICENTONCES Otorga_Creditos = SI108 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReg<strong>la</strong> 3SI Otros_Creditos = DOS CREDITOSY Composición_Familiar = CASADO Y DOS HIJOSY Ingreso = ENTRE 451 Y 550Y Vivienda = PROPIA 0 IPVUY Servicios = BASICOS, TIC Y TELENTONCES Otorga_Creditos = NOReg<strong>la</strong> 4SI Otros_Creditos = DOS CREDITOSY Composición_Familiar = CASADO Y DOS HIJOSY Ingreso = MAS DE 551ENTONCES Otorga_Creditos = SIReg<strong>la</strong> 5SI Otros_Creditos = DOS CREDITOSY Composición_Familiar = CASADO Y UN HIJOENTONCES Otorga_Creditos = SIReg<strong>la</strong> 6SI Otros_Creditos = DOS CREDITOSY Composición_Familiar = SOLTEROY Vivienda = ALQUILAY Ingreso = ENTRE 451 Y 550ENTONCES Otorga_Creditos = SIReg<strong>la</strong> 7SI Otros_Creditos = DOS CREDITOSY Composición_Familiar = SOLTEROY Vivienda = ALQUILAY Ingreso = MAS DE 551ENTONCES Otorga_Creditos = NOReg<strong>la</strong> 8SI Otros_Creditos = DOS CREDITOSY Composición_Familiar = SOLTEROY Vivienda = PROPIA 0 IPVUENTONCES Otorga_Creditos = SIReg<strong>la</strong> 9SI Otros_Creditos = TRES CREDITOSENTONCES Otorga_Creditos = NOReg<strong>la</strong> 10SI Otros_Creditos = UN CREDITOY Composición_Familiar = CASADO SIN HIJOSENTONCES Otorga_Creditos = SIReg<strong>la</strong> 11SI Otros_Creditos = UN CREDITOY Composición_Familiar = CASADO Y DOS HIJOSY Ingreso = ENTRE 451 Y 550Y Vivienda = ALQUILAENTONCES Otorga_Creditos = NOReg<strong>la</strong> 12SI Otros_Creditos = UN CREDITOY Composición_Familiar = CASADO Y DOS HIJOSY Ingreso = ENTRE 451 Y 550Y Vivienda = PROPIA 0 IPVUENTONCES Otorga_Creditos = SIReg<strong>la</strong> 13SI Otros_Creditos = UN CREDITOY Composición_Familiar = CASADO Y DOS HIJOSY Ingreso = MAS DE 551ENTONCES Otorga_Creditos = SIReg<strong>la</strong> 14SI Otros_Creditos = UN CREDITOY Composición_Familiar = CASADO Y UN HIJOENTONCES Otorga_Creditos = SIReg<strong>la</strong> 15SI Otros_Creditos = UN CREDITOY Composición_Familiar = SOLTEROResultados Magdalena Servente 109


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteENTONCES Otorga_Creditos = SIEvaluación <strong>de</strong> los resultadosC<strong>la</strong>ses Correctos Errores ProbabilidadNO 16 0 1SI 17 18 0,485714Totales 33 18 0,6470585.3.1.2. ID3 utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisiónOtros_Creditos = DOS CREDITOSComposición_Familiar = CASADO SIN HIJOSSIComposición_Familiar = CASADO Y DOS HIJOSIngreso = ENTRE 451 Y 550Vivienda = ALQUILANOVivienda = PROPIA 0 IPVUServicios = BASICOS Y TICSIServicios = BASICOS, TIC Y TELNOIngreso = MAS DE 551SIComposición_Familiar = CASADO Y UN HIJOSIComposición_Familiar = SOLTEROVivienda = ALQUILAIngreso = ENTRE 451 Y 550SIIngreso = MAS DE 551NOVivienda = PROPIA 0 IPVUSIOtros_Creditos = TRES CREDITOSNOOtros_Creditos = UN CREDITOComposición_Familiar = CASADO SIN HIJOSSIComposición_Familiar = CASADO Y DOS HIJOSIngreso = ENTRE 451 Y 550Vivienda = ALQUILANOVivienda = PROPIA 0 IPVUSIIngreso = MAS DE 551SIComposición_Familiar = CASADO Y UN HIJOSIComposición_Familiar = SOLTEROSIReg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión110 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReg<strong>la</strong> 0SI Otros_Creditos = DOS CREDITOSY Composición_Familiar = CASADO SIN HIJOSENTONCES Otorga_Creditos = SIReg<strong>la</strong> 1SI Otros_Creditos = DOS CREDITOSY Composición_Familiar = CASADO Y DOS HIJOSY Ingreso = ENTRE 451 Y 550Y Vivienda = ALQUILAENTONCES Otorga_Creditos = NOReg<strong>la</strong> 2SI Otros_Creditos = DOS CREDITOSY Composición_Familiar = CASADO Y DOS HIJOSY Ingreso = ENTRE 451 Y 550Y Vivienda = PROPIA 0 IPVUY Servicios = BASICOS Y TICENTONCES Otorga_Creditos = SIReg<strong>la</strong> 3SI Otros_Creditos = DOS CREDITOSY Composición_Familiar = CASADO Y DOS HIJOSY Ingreso = ENTRE 451 Y 550Y Vivienda = PROPIA 0 IPVUY Servicios = BASICOS, TIC Y TELENTONCES Otorga_Creditos = NOReg<strong>la</strong> 4SI Otros_Creditos = DOS CREDITOSY Composición_Familiar = CASADO Y DOS HIJOSY Ingreso = MAS DE 551ENTONCES Otorga_Creditos = SIReg<strong>la</strong> 5SI Otros_Creditos = DOS CREDITOSY Composición_Familiar = CASADO Y UN HIJOENTONCES Otorga_Creditos = SIReg<strong>la</strong> 6SI Otros_Creditos = DOS CREDITOSY Composición_Familiar = SOLTEROY Vivienda = ALQUILAY Ingreso = ENTRE 451 Y 550ENTONCES Otorga_Creditos = SIReg<strong>la</strong> 7SI Otros_Creditos = DOS CREDITOSY Composición_Familiar = SOLTEROY Vivienda = ALQUILAY Ingreso = MAS DE 551ENTONCES Otorga_Creditos = NOReg<strong>la</strong> 8SI Otros_Creditos = DOS CREDITOSY Composición_Familiar = SOLTEROY Vivienda = PROPIA 0 IPVUENTONCES Otorga_Creditos = SIReg<strong>la</strong> 9SI Otros_Creditos = TRES CREDITOSENTONCES Otorga_Creditos = NOReg<strong>la</strong> 10SI Otros_Creditos = UN CREDITOY Composición_Familiar = CASADO SIN HIJOSENTONCES Otorga_Creditos = SIReg<strong>la</strong> 11SI Otros_Creditos = UN CREDITOY Composición_Familiar = CASADO Y DOS HIJOSY Ingreso = ENTRE 451 Y 550Y Vivienda = ALQUILAENTONCES Otorga_Creditos = NOReg<strong>la</strong> 12SI Otros_Creditos = UN CREDITOResultados Magdalena Servente 111


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteY Composición_Familiar = CASADO Y DOS HIJOSY Ingreso = ENTRE 451 Y 550Y Vivienda = PROPIA 0 IPVUENTONCES Otorga_Creditos = SIReg<strong>la</strong> 13SI Otros_Creditos = UN CREDITOY Composición_Familiar = CASADO Y DOS HIJOSY Ingreso = MAS DE 551ENTONCES Otorga_Creditos = SIReg<strong>la</strong> 14SI Otros_Creditos = UN CREDITOY Composición_Familiar = CASADO Y UN HIJOENTONCES Otorga_Creditos = SIReg<strong>la</strong> 15SI Otros_Creditos = UN CREDITOY Composición_Familiar = SOLTEROENTONCES Otorga_Creditos = SIEvaluación <strong>de</strong> los resultadosC<strong>la</strong>ses Correctos Errores ProbabilidadNO 16 0 1SI 17 18 0,485714Totales 33 18 0,6470585.3.1.3. ConclusionesEn este caso, tanto el árbol como <strong>la</strong>s reg<strong>la</strong>s obtenidas mediante el ID3 son idénticos para <strong>la</strong> ganancia ypara <strong>la</strong> proporción <strong>de</strong> ganancia. Si analizamos <strong>la</strong> tab<strong>la</strong> <strong>de</strong> evaluación <strong>de</strong> los resultados, vemos que elc<strong>la</strong>sificador 3 obtenido es excelente para c<strong>la</strong>sificar <strong>la</strong> c<strong>la</strong>se “NO”, pero sólo es exitoso en un 50% <strong>de</strong> loscasos <strong>de</strong> <strong>la</strong> c<strong>la</strong>se “SI”. Es <strong>de</strong>cir, que un nuevo caso <strong>de</strong> c<strong>la</strong>se “NO” tiene una probabilidad <strong>de</strong> 1 <strong>de</strong> serc<strong>la</strong>sificado correctamente. Mientras que un nuevo caso <strong>de</strong> c<strong>la</strong>se “SI”, tiene so<strong>la</strong>mente una probabilidad<strong>de</strong>l 0,49 <strong>de</strong> ser c<strong>la</strong>sificado como “SI”.Creemos que este fenómeno pue<strong>de</strong> <strong>de</strong>berse a una ma<strong>la</strong> elección <strong>de</strong> los datos <strong>de</strong> entrenamiento y prueba.Un c<strong>la</strong>sificador exitoso sobre los datos <strong>de</strong> entrenamiento, será exitoso sobre los <strong>de</strong>más conjuntos <strong>de</strong> datosen <strong>la</strong> medida en que los datos <strong>de</strong> entrenamiento sean representativos <strong>de</strong> los otros conjuntos. Supongamosque tenemos para un dominio hipotético, los siguientes datos <strong>de</strong> entrenamiento:Atributo A Atributo B C<strong>la</strong>se1 5 NO1 90 NO3 En el caso <strong>de</strong>l ID3, por c<strong>la</strong>sificador nos referiremos tanto al árbol como a <strong>la</strong>s reg<strong>la</strong>s obtenidas, ya es indistinto utilizar uno u otropara c<strong>la</strong>sificar nuevos casos.112 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente2 90 SIA partir <strong>de</strong> estos datos, el ID3 generaría <strong>la</strong>s siguientes reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión:1. SI Atributo A =1 ENTONCES C<strong>la</strong>se=”NO”2. SI Atributo A =2 ENTONCES C<strong>la</strong>se=”SI”Si aplicamos el c<strong>la</strong>sificador a <strong>la</strong> siguiente tup<strong>la</strong> <strong>de</strong> prueba: {2,3,”NO”}, el resultado será erróneo. Si todoslos casos <strong>de</strong> prueba <strong>de</strong> c<strong>la</strong>se “NO” tuviesen valores distintos <strong>de</strong> 1 para el atributo A, entonces <strong>la</strong>performance <strong>de</strong> los mo<strong>de</strong>los obtenidos sobre estos datos <strong>de</strong> prueba sería poco alentadora. El conjunto <strong>de</strong>entrenamiento en ese caso no sería representativo <strong>de</strong> los conjuntos en el cual se aplicó el c<strong>la</strong>sificador.Entonces, po<strong>de</strong>mos conjeturar que <strong>la</strong> performance <strong>de</strong> los c<strong>la</strong>sificadores generados por el ID3 para eldominio Créditos, pue<strong>de</strong> <strong>de</strong>berse a que los datos <strong>de</strong> entrenamiento no eran representativos <strong>de</strong> los datos <strong>de</strong>prueba. Po<strong>de</strong>mos extrapo<strong>la</strong>r, este problema <strong>de</strong> representatividad <strong>de</strong> los datos <strong>de</strong> aprendizaje a loshumanos: no po<strong>de</strong>mos enseñarle a un niño el concepto <strong>de</strong> pájaro mostrándole sólo distintas c<strong>la</strong>ses <strong>de</strong>pingüinos, ya que cuando vea cualquier otro pájaro como una golondrina, un gorrión o una paloma,pensará que no son pájaros; para él los pájaros no vue<strong>la</strong>n, son gordos, gran<strong>de</strong>s y caminan por el hielo.5.3.2. Cardiología5.3.2.1. ID3 utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisiónDURACION_DEL_ANGOR = MAS DE 30 MINDOLOR_DE_PECHO_DE_ANGOR = ATIPICOIRRADIACION_DEL_ANGOR = NORESPUESTA_VASODILATADORA = NEGATIVONORESPUESTA_VASODILATADORA = POSITIVOSIIRRADIACION_DEL_ANGOR = SISIDOLOR_DE_PECHO_DE_ANGOR = AUSENTENODOLOR_DE_PECHO_DE_ANGOR = TIPICOANGOR_EN_RELACION = CON ESFUERZORESPUESTA_VASODILATADORA = NEGATIVOSIRESPUESTA_VASODILATADORA = POSITIVOIRRADIACION_DEL_ANGOR = NONOIRRADIACION_DEL_ANGOR = SISIANGOR_EN_RELACION = EN REPOSOSIDURACION_DEL_ANGOR = MENOS DE 30 MINDOLOR_DE_PECHO_DE_ANGOR = ATIPICOResultados Magdalena Servente 113


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteNODOLOR_DE_PECHO_DE_ANGOR = AUSENTENODOLOR_DE_PECHO_DE_ANGOR = TIPICOIRRADIACION_DEL_ANGOR = NOANTIGÜEDAD_DEL_ANGOR = MAS DE 1 MESNOANTIGÜEDAD_DEL_ANGOR = RECIENTEANGOR_EN_RELACION = CON ESFUERZOSIANGOR_EN_RELACION = EN REPOSONOIRRADIACION_DEL_ANGOR = SINOReg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 0SI DURACION_DEL_ANGOR = MAS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = ATIPICOY IRRADIACION_DEL_ANGOR = NOY RESPUESTA_VASODILATADORA = NEGATIVOENTONCES DIAGNOSTICO = NOReg<strong>la</strong> 1SI DURACION_DEL_ANGOR = MAS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = ATIPICOY IRRADIACION_DEL_ANGOR = NOY RESPUESTA_VASODILATADORA = POSITIVOENTONCES DIAGNOSTICO = SIReg<strong>la</strong> 2SI DURACION_DEL_ANGOR = MAS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = ATIPICOY IRRADIACION_DEL_ANGOR = SIENTONCES DIAGNOSTICO = SIReg<strong>la</strong> 3SI DURACION_DEL_ANGOR = MAS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = AUSENTEENTONCES DIAGNOSTICO = NOReg<strong>la</strong> 4SI DURACION_DEL_ANGOR = MAS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = TIPICOY ANGOR_EN_RELACION = CON ESFUERZOY RESPUESTA_VASODILATADORA = NEGATIVOENTONCES DIAGNOSTICO = SIReg<strong>la</strong> 5SI DURACION_DEL_ANGOR = MAS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = TIPICOY ANGOR_EN_RELACION = CON ESFUERZOY RESPUESTA_VASODILATADORA = POSITIVOY IRRADIACION_DEL_ANGOR = NOENTONCES DIAGNOSTICO = NOReg<strong>la</strong> 6SI DURACION_DEL_ANGOR = MAS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = TIPICOY ANGOR_EN_RELACION = CON ESFUERZOY RESPUESTA_VASODILATADORA = POSITIVOY IRRADIACION_DEL_ANGOR = SIENTONCES DIAGNOSTICO = SIReg<strong>la</strong> 7SI DURACION_DEL_ANGOR = MAS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = TIPICOY ANGOR_EN_RELACION = EN REPOSOENTONCES DIAGNOSTICO = SI114 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReg<strong>la</strong> 8SI DURACION_DEL_ANGOR = MENOS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = ATIPICOENTONCES DIAGNOSTICO = NOReg<strong>la</strong> 9SI DURACION_DEL_ANGOR = MENOS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = AUSENTEENTONCES DIAGNOSTICO = NOReg<strong>la</strong> 10SI DURACION_DEL_ANGOR = MENOS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = TIPICOY IRRADIACION_DEL_ANGOR = NOY ANTIGÜEDAD_DEL_ANGOR = MAS DE 1 MESENTONCES DIAGNOSTICO = NOReg<strong>la</strong> 11SI DURACION_DEL_ANGOR = MENOS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = TIPICOY IRRADIACION_DEL_ANGOR = NOY ANTIGÜEDAD_DEL_ANGOR = RECIENTEY ANGOR_EN_RELACION = CON ESFUERZOENTONCES DIAGNOSTICO = SIReg<strong>la</strong> 12SI DURACION_DEL_ANGOR = MENOS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = TIPICOY IRRADIACION_DEL_ANGOR = NOY ANTIGÜEDAD_DEL_ANGOR = RECIENTEY ANGOR_EN_RELACION = EN REPOSOENTONCES DIAGNOSTICO = NOReg<strong>la</strong> 13SI DURACION_DEL_ANGOR = MENOS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = TIPICOY IRRADIACION_DEL_ANGOR = SIENTONCES DIAGNOSTICO = NOEvaluación <strong>de</strong> los resultadosC<strong>la</strong>ses Correctos Errores ProbabilidadNO 20 2 0,909090SI 9 0 1Totales 29 2 0,9354835.3.2.2. ID3 utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisiónDURACION_DEL_ANGOR = MAS DE 30 MINDOLOR_DE_PECHO_DE_ANGOR = ATIPICOIRRADIACION_DEL_ANGOR = NORESPUESTA_VASODILATADORA = NEGATIVONORESPUESTA_VASODILATADORA = POSITIVOSIIRRADIACION_DEL_ANGOR = SISIDOLOR_DE_PECHO_DE_ANGOR = AUSENTENODOLOR_DE_PECHO_DE_ANGOR = TIPICOANGOR_EN_RELACION = CON ESFUERZORESPUESTA_VASODILATADORA = NEGATIVOSIResultados Magdalena Servente 115


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteRESPUESTA_VASODILATADORA = POSITIVOIRRADIACION_DEL_ANGOR = NONOIRRADIACION_DEL_ANGOR = SISIANGOR_EN_RELACION = EN REPOSOSIDURACION_DEL_ANGOR = MENOS DE 30 MINDOLOR_DE_PECHO_DE_ANGOR = ATIPICONODOLOR_DE_PECHO_DE_ANGOR = AUSENTENODOLOR_DE_PECHO_DE_ANGOR = TIPICOIRRADIACION_DEL_ANGOR = NOANTIGÜEDAD_DEL_ANGOR = MAS DE 1 MESNOANTIGÜEDAD_DEL_ANGOR = RECIENTEANGOR_EN_RELACION = CON ESFUERZOSIANGOR_EN_RELACION = EN REPOSONOIRRADIACION_DEL_ANGOR = SINOReg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 0SI DURACION_DEL_ANGOR = MAS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = ATIPICOY IRRADIACION_DEL_ANGOR = NOY RESPUESTA_VASODILATADORA = NEGATIVOENTONCES DIAGNOSTICO = NOReg<strong>la</strong> 1SI DURACION_DEL_ANGOR = MAS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = ATIPICOY IRRADIACION_DEL_ANGOR = NOY RESPUESTA_VASODILATADORA = POSITIVOENTONCES DIAGNOSTICO = SIReg<strong>la</strong> 2SI DURACION_DEL_ANGOR = MAS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = ATIPICOY IRRADIACION_DEL_ANGOR = SIENTONCES DIAGNOSTICO = SIReg<strong>la</strong> 3SI DURACION_DEL_ANGOR = MAS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = AUSENTEENTONCES DIAGNOSTICO = NOReg<strong>la</strong> 4SI DURACION_DEL_ANGOR = MAS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = TIPICOY ANGOR_EN_RELACION = CON ESFUERZOY RESPUESTA_VASODILATADORA = NEGATIVOENTONCES DIAGNOSTICO = SIReg<strong>la</strong> 5SI DURACION_DEL_ANGOR = MAS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = TIPICOY ANGOR_EN_RELACION = CON ESFUERZOY RESPUESTA_VASODILATADORA = POSITIVOY IRRADIACION_DEL_ANGOR = NOENTONCES DIAGNOSTICO = NOReg<strong>la</strong> 6SI DURACION_DEL_ANGOR = MAS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = TIPICOY ANGOR_EN_RELACION = CON ESFUERZOY RESPUESTA_VASODILATADORA = POSITIVOY IRRADIACION_DEL_ANGOR = SI116 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteENTONCES DIAGNOSTICO = SIReg<strong>la</strong> 7SI DURACION_DEL_ANGOR = MAS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = TIPICOY ANGOR_EN_RELACION = EN REPOSOENTONCES DIAGNOSTICO = SIReg<strong>la</strong> 8SI DURACION_DEL_ANGOR = MENOS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = ATIPICOENTONCES DIAGNOSTICO = NOReg<strong>la</strong> 9SI DURACION_DEL_ANGOR = MENOS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = AUSENTEENTONCES DIAGNOSTICO = NOReg<strong>la</strong> 10SI DURACION_DEL_ANGOR = MENOS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = TIPICOY IRRADIACION_DEL_ANGOR = NOY ANTIGÜEDAD_DEL_ANGOR = MAS DE 1 MESENTONCES DIAGNOSTICO = NOReg<strong>la</strong> 11SI DURACION_DEL_ANGOR = MENOS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = TIPICOY IRRADIACION_DEL_ANGOR = NOY ANTIGÜEDAD_DEL_ANGOR = RECIENTEY ANGOR_EN_RELACION = CON ESFUERZOENTONCES DIAGNOSTICO = SIReg<strong>la</strong> 12SI DURACION_DEL_ANGOR = MENOS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = TIPICOY IRRADIACION_DEL_ANGOR = NOY ANTIGÜEDAD_DEL_ANGOR = RECIENTEY ANGOR_EN_RELACION = EN REPOSOENTONCES DIAGNOSTICO = NOReg<strong>la</strong> 13SI DURACION_DEL_ANGOR = MENOS DE 30 MINY DOLOR_DE_PECHO_DE_ANGOR = TIPICOY IRRADIACION_DEL_ANGOR = SIENTONCES DIAGNOSTICO = NOEvaluación <strong>de</strong> los resultadosC<strong>la</strong>ses Correctos Errores ProbabilidadNO 20 2 0,909090SI 9 0 1Totales 29 2 0,9354835.3.2.3. ConclusionesAl igual que en el caso anterior, vemos que tanto el árbol como <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión obtenidas soniguales para el criterio <strong>de</strong> ganancia como para el <strong>de</strong> proporción <strong>de</strong> ganancia. En este caso, no obstante, <strong>la</strong>performance <strong>de</strong>l c<strong>la</strong>sificador es notablemente mejor que en el caso anterior. El mo<strong>de</strong>lo generado tiene un93% <strong>de</strong> probabilidad <strong>de</strong> c<strong>la</strong>sificar correctamente un caso negativo, y un 100% <strong>de</strong> c<strong>la</strong>sificar correctamenteuno positivo.Resultados Magdalena Servente 117


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteCabe <strong>de</strong>stacar que <strong>la</strong> cantidad <strong>de</strong> casos <strong>de</strong> entrenamiento es menor a <strong>la</strong> <strong>de</strong>l caso anterior y no obstante <strong>la</strong>cantidad <strong>de</strong> reg<strong>la</strong>s obtenidas es 13, contra 15 obtenidas en el caso anterior. Entonces, podríamos concluir,grosso modo, que <strong>la</strong> cantidad <strong>de</strong> datos <strong>de</strong> entrada no es proporcional al tamaño <strong>de</strong>l árbol ni <strong>la</strong> cantidad <strong>de</strong>reg<strong>la</strong>s obtenidas.5.3.3. Votaciones5.3.4.1. ID3 utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisiónCong_honorarios_medicos = a_favorReduccion_corp_Synfuels = a_favorExport_sin_impuestos = a_favor<strong>de</strong>mocrataExport_sin_impuestos = <strong>de</strong>sconocidorepublicanoExport_sin_impuestos = en_contraPresupuesto_<strong>de</strong>_educacion = a_favorDer_<strong>de</strong>manda_Superfund = a_favorParticip_proy_agua = a_favorrepublicanoParticip_proy_agua = en_contraActa_sudaf_admin_export = a_favorrepublicanoActa_sudaf_admin_export = <strong>de</strong>sconocidorepublicanoActa_sudaf_admin_export = en_contraNiños discapacitados = a_favorrepublicanoNiños discapacitados = en_contra<strong>de</strong>mocrataDer_<strong>de</strong>manda_Superfund = en_contra<strong>de</strong>mocrataPresupuesto_<strong>de</strong>_educacion = <strong>de</strong>sconocido<strong>de</strong>mocrataPresupuesto_<strong>de</strong>_educacion = en_contraActa_sudaf_admin_export = a_favorAdop_resolucion_presup = a_favorrepublicanoAdop_resolucion_presup = en_contraAyuda_a_El_Salvador = a_favorrepublicanoAyuda_a_El_Salvador = en_contra<strong>de</strong>mocrataActa_sudaf_admin_export = <strong>de</strong>sconocido<strong>de</strong>mocrataActa_sudaf_admin_export = en_contra<strong>de</strong>mocrataReduccion_corp_Synfuels = <strong>de</strong>sconocidorepublicanoReduccion_corp_Synfuels = en_contraExport_sin_impuestos = a_favorInmigracion = a_favorrepublicanoInmigracion = en_contraActa_sudaf_admin_export = a_favor<strong>de</strong>mocrataActa_sudaf_admin_export = <strong>de</strong>sconocidoParticip_proy_agua = a_favorrepublicanoParticip_proy_agua = en_contra<strong>de</strong>mocrataActa_sudaf_admin_export = en_contrarepublicanoExport_sin_impuestos = <strong>de</strong>sconocidorepublicanoExport_sin_impuestos = en_contra118 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteAdop_resolucion_presup = a_favorActa_sudaf_admin_export = a_favorrepublicanoActa_sudaf_admin_export = <strong>de</strong>sconocidoNiños discapacitados = a_favorrepublicanoNiños discapacitados = en_contra<strong>de</strong>mocrataAdop_resolucion_presup = en_contrarepublicanoCong_honorarios_medicos = <strong>de</strong>sconocidoMisil_mx = a_favorProhib_pruebas_anti_satel = a_favor<strong>de</strong>mocrataProhib_pruebas_anti_satel = <strong>de</strong>sconocido<strong>de</strong>mocrataProhib_pruebas_anti_satel = en_contrarepublicanoMisil_mx = <strong>de</strong>sconocidorepublicanoMisil_mx = en_contra<strong>de</strong>mocrataCong_honorarios_medicos = en_contraPresupuesto_<strong>de</strong>_educacion = a_favor<strong>de</strong>mocrataPresupuesto_<strong>de</strong>_educacion = <strong>de</strong>sconocidoAdop_resolucion_presup = a_favor<strong>de</strong>mocrataAdop_resolucion_presup = en_contrarepublicanoPresupuesto_<strong>de</strong>_educacion = en_contra<strong>de</strong>mocrataReg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 0SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = a_favorENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 1SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = <strong>de</strong>sconocidoENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 2SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = a_favorY Der_<strong>de</strong>manda_Superfund = a_favorY Particip_proy_agua = a_favorENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 3SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = a_favorY Der_<strong>de</strong>manda_Superfund = a_favorY Particip_proy_agua = en_contraY Acta_sudaf_admin_export = a_favorENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 4SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = a_favorY Der_<strong>de</strong>manda_Superfund = a_favorResultados Magdalena Servente 119


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteY Particip_proy_agua = en_contraY Acta_sudaf_admin_export = <strong>de</strong>sconocidoENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 5SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = a_favorY Der_<strong>de</strong>manda_Superfund = a_favorY Particip_proy_agua = en_contraY Acta_sudaf_admin_export = en_contraY Niños discapacitados = a_favorENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 6SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = a_favorY Der_<strong>de</strong>manda_Superfund = a_favorY Particip_proy_agua = en_contraY Acta_sudaf_admin_export = en_contraY Niños discapacitados = en_contraENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 7SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = a_favorY Der_<strong>de</strong>manda_Superfund = en_contraENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 8SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = <strong>de</strong>sconocidoENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 9SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = en_contraY Acta_sudaf_admin_export = a_favorY Adop_resolucion_presup = a_favorENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 10SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = en_contraY Acta_sudaf_admin_export = a_favorY Adop_resolucion_presup = en_contraY Ayuda_a_El_Salvador = a_favorENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 11SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = en_contraY Acta_sudaf_admin_export = a_favorY Adop_resolucion_presup = en_contraY Ayuda_a_El_Salvador = en_contraENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 12SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = en_contraY Acta_sudaf_admin_export = <strong>de</strong>sconocidoENTONCES C<strong>la</strong>se = <strong>de</strong>mocrata120 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReg<strong>la</strong> 13SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = en_contraY Acta_sudaf_admin_export = en_contraENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 14SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = <strong>de</strong>sconocidoENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 15SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = a_favorY Inmigracion = a_favorENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 16SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = a_favorY Inmigracion = en_contraY Acta_sudaf_admin_export = a_favorENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 17SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = a_favorY Inmigracion = en_contraY Acta_sudaf_admin_export = <strong>de</strong>sconocidoY Particip_proy_agua = a_favorENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 18SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = a_favorY Inmigracion = en_contraY Acta_sudaf_admin_export = <strong>de</strong>sconocidoY Particip_proy_agua = en_contraENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 19SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = a_favorY Inmigracion = en_contraY Acta_sudaf_admin_export = en_contraENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 20SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = <strong>de</strong>sconocidoENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 21SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = en_contraY Adop_resolucion_presup = a_favorY Acta_sudaf_admin_export = a_favorENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 22SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = en_contraY Adop_resolucion_presup = a_favorY Acta_sudaf_admin_export = <strong>de</strong>sconocidoY Niños discapacitados = a_favorENTONCES C<strong>la</strong>se = republicanoResultados Magdalena Servente 121


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReg<strong>la</strong> 23SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = en_contraY Adop_resolucion_presup = a_favorY Acta_sudaf_admin_export = <strong>de</strong>sconocidoY Niños discapacitados = en_contraENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 24SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = en_contraY Adop_resolucion_presup = en_contraENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 25SI Cong_honorarios_medicos = <strong>de</strong>sconocidoY Misil_mx = a_favorY Prohib_pruebas_anti_satel = a_favorENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 26SI Cong_honorarios_medicos = <strong>de</strong>sconocidoY Misil_mx = a_favorY Prohib_pruebas_anti_satel = <strong>de</strong>sconocidoENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 27SI Cong_honorarios_medicos = <strong>de</strong>sconocidoY Misil_mx = a_favorY Prohib_pruebas_anti_satel = en_contraENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 28SI Cong_honorarios_medicos = <strong>de</strong>sconocidoY Misil_mx = <strong>de</strong>sconocidoENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 29SI Cong_honorarios_medicos = <strong>de</strong>sconocidoY Misil_mx = en_contraENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 30SI Cong_honorarios_medicos = en_contraY Presupuesto_<strong>de</strong>_educacion = a_favorENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 31SI Cong_honorarios_medicos = en_contraY Presupuesto_<strong>de</strong>_educacion = <strong>de</strong>sconocidoY Adop_resolucion_presup = a_favorENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 32SI Cong_honorarios_medicos = en_contraY Presupuesto_<strong>de</strong>_educacion = <strong>de</strong>sconocidoY Adop_resolucion_presup = en_contraENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 33SI Cong_honorarios_medicos = en_contraY Presupuesto_<strong>de</strong>_educacion = en_contraENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataEvaluación <strong>de</strong> los resultadosC<strong>la</strong>ses Correctos Errores Probabilidad122 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteDemócrata 81 2 0,9759036Republicano 47 5 0,903846Totales 128 7 0,9481485.3.4.2. ID3 utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisiónCong_honorarios_medicos = a_favorReduccion_corp_Synfuels = a_favorExport_sin_impuestos = a_favor<strong>de</strong>mocrataExport_sin_impuestos = <strong>de</strong>sconocidorepublicanoExport_sin_impuestos = en_contraPresupuesto_<strong>de</strong>_educacion = a_favorDer_<strong>de</strong>manda_Superfund = a_favorParticip_proy_agua = a_favorrepublicanoParticip_proy_agua = en_contraActa_sudaf_admin_export = a_favorrepublicanoActa_sudaf_admin_export = <strong>de</strong>sconocidorepublicanoActa_sudaf_admin_export = en_contraNiños discapacitados = a_favorrepublicanoNiños discapacitados = en_contra<strong>de</strong>mocrataDer_<strong>de</strong>manda_Superfund = en_contra<strong>de</strong>mocrataPresupuesto_<strong>de</strong>_educacion = <strong>de</strong>sconocido<strong>de</strong>mocrataPresupuesto_<strong>de</strong>_educacion = en_contraActa_sudaf_admin_export = a_favorAdop_resolucion_presup = a_favorrepublicanoAdop_resolucion_presup = en_contraAyuda_a_El_Salvador = a_favorrepublicanoAyuda_a_El_Salvador = en_contra<strong>de</strong>mocrataActa_sudaf_admin_export = <strong>de</strong>sconocido<strong>de</strong>mocrataActa_sudaf_admin_export = en_contra<strong>de</strong>mocrataReduccion_corp_Synfuels = <strong>de</strong>sconocidorepublicanoReduccion_corp_Synfuels = en_contraExport_sin_impuestos = a_favorInmigracion = a_favorrepublicanoInmigracion = en_contraActa_sudaf_admin_export = a_favor<strong>de</strong>mocrataActa_sudaf_admin_export = <strong>de</strong>sconocidoParticip_proy_agua = a_favorrepublicanoParticip_proy_agua = en_contra<strong>de</strong>mocrataActa_sudaf_admin_export = en_contrarepublicanoExport_sin_impuestos = <strong>de</strong>sconocidorepublicanoExport_sin_impuestos = en_contraAdop_resolucion_presup = a_favorActa_sudaf_admin_export = a_favorrepublicanoActa_sudaf_admin_export = <strong>de</strong>sconocidoNiños discapacitados = a_favorResultados Magdalena Servente 123


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenterepublicanoNiños discapacitados = en_contra<strong>de</strong>mocrataAdop_resolucion_presup = en_contrarepublicanoCong_honorarios_medicos = <strong>de</strong>sconocidoMisil_mx = a_favorProhib_pruebas_anti_satel = a_favor<strong>de</strong>mocrataProhib_pruebas_anti_satel = <strong>de</strong>sconocido<strong>de</strong>mocrataProhib_pruebas_anti_satel = en_contrarepublicanoMisil_mx = <strong>de</strong>sconocidorepublicanoMisil_mx = en_contra<strong>de</strong>mocrataCong_honorarios_medicos = en_contraAdop_resolucion_presup = a_favor<strong>de</strong>mocrataAdop_resolucion_presup = <strong>de</strong>sconocido<strong>de</strong>mocrataAdop_resolucion_presup = en_contraPresupuesto_<strong>de</strong>_educacion = a_favor<strong>de</strong>mocrataPresupuesto_<strong>de</strong>_educacion = <strong>de</strong>sconocidorepublicanoPresupuesto_<strong>de</strong>_educacion = en_contra<strong>de</strong>mocrataReg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 0SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = a_favorENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 1SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = <strong>de</strong>sconocidoENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 2SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = a_favorY Der_<strong>de</strong>manda_Superfund = a_favorY Particip_proy_agua = a_favorENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 3SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = a_favorY Der_<strong>de</strong>manda_Superfund = a_favorY Particip_proy_agua = en_contraY Acta_sudaf_admin_export = a_favorENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 4SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = a_favorY Der_<strong>de</strong>manda_Superfund = a_favorY Particip_proy_agua = en_contraY Acta_sudaf_admin_export = <strong>de</strong>sconocidoENTONCES C<strong>la</strong>se = republicano124 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReg<strong>la</strong> 5SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = a_favorY Der_<strong>de</strong>manda_Superfund = a_favorY Particip_proy_agua = en_contraY Acta_sudaf_admin_export = en_contraY Niños discapacitados = a_favorENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 6SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = a_favorY Der_<strong>de</strong>manda_Superfund = a_favorY Particip_proy_agua = en_contraY Acta_sudaf_admin_export = en_contraY Niños discapacitados = en_contraENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 7SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = a_favorY Der_<strong>de</strong>manda_Superfund = en_contraENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 8SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = <strong>de</strong>sconocidoENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 9SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = en_contraY Acta_sudaf_admin_export = a_favorY Adop_resolucion_presup = a_favorENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 10SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = en_contraY Acta_sudaf_admin_export = a_favorY Adop_resolucion_presup = en_contraY Ayuda_a_El_Salvador = a_favorENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 11SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = en_contraY Acta_sudaf_admin_export = a_favorY Adop_resolucion_presup = en_contraY Ayuda_a_El_Salvador = en_contraENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 12SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = en_contraY Acta_sudaf_admin_export = <strong>de</strong>sconocidoENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 13Resultados Magdalena Servente 125


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteSI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = a_favorY Export_sin_impuestos = en_contraY Presupuesto_<strong>de</strong>_educacion = en_contraY Acta_sudaf_admin_export = en_contraENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 14SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = <strong>de</strong>sconocidoENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 15SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = a_favorY Inmigracion = a_favorENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 16SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = a_favorY Inmigracion = en_contraY Acta_sudaf_admin_export = a_favorENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 17SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = a_favorY Inmigracion = en_contraY Acta_sudaf_admin_export = <strong>de</strong>sconocidoY Particip_proy_agua = a_favorENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 18SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = a_favorY Inmigracion = en_contraY Acta_sudaf_admin_export = <strong>de</strong>sconocidoY Particip_proy_agua = en_contraENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 19SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = a_favorY Inmigracion = en_contraY Acta_sudaf_admin_export = en_contraENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 20SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = <strong>de</strong>sconocidoENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 21SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = en_contraY Adop_resolucion_presup = a_favorY Acta_sudaf_admin_export = a_favorENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 22SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = en_contraY Adop_resolucion_presup = a_favorY Acta_sudaf_admin_export = <strong>de</strong>sconocidoY Niños discapacitados = a_favorENTONCES C<strong>la</strong>se = republicano126 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReg<strong>la</strong> 23SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = en_contraY Adop_resolucion_presup = a_favorY Acta_sudaf_admin_export = <strong>de</strong>sconocidoY Niños discapacitados = en_contraENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 24SI Cong_honorarios_medicos = a_favorY Reduccion_corp_Synfuels = en_contraY Export_sin_impuestos = en_contraY Adop_resolucion_presup = en_contraENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 25SI Cong_honorarios_medicos = <strong>de</strong>sconocidoY Misil_mx = a_favorY Prohib_pruebas_anti_satel = a_favorENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 26SI Cong_honorarios_medicos = <strong>de</strong>sconocidoY Misil_mx = a_favorY Prohib_pruebas_anti_satel = <strong>de</strong>sconocidoENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 27SI Cong_honorarios_medicos = <strong>de</strong>sconocidoY Misil_mx = a_favorY Prohib_pruebas_anti_satel = en_contraENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 28SI Cong_honorarios_medicos = <strong>de</strong>sconocidoY Misil_mx = <strong>de</strong>sconocidoENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 29SI Cong_honorarios_medicos = <strong>de</strong>sconocidoY Misil_mx = en_contraENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 30SI Cong_honorarios_medicos = en_contraY Adop_resolucion_presup = a_favorENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 31SI Cong_honorarios_medicos = en_contraY Adop_resolucion_presup = <strong>de</strong>sconocidoENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 32SI Cong_honorarios_medicos = en_contraY Adop_resolucion_presup = en_contraY Presupuesto_<strong>de</strong>_educacion = a_favorENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataReg<strong>la</strong> 33SI Cong_honorarios_medicos = en_contraY Adop_resolucion_presup = en_contraY Presupuesto_<strong>de</strong>_educacion = <strong>de</strong>sconocidoENTONCES C<strong>la</strong>se = republicanoReg<strong>la</strong> 34SI Cong_honorarios_medicos = en_contraY Adop_resolucion_presup = en_contraY Presupuesto_<strong>de</strong>_educacion = en_contraENTONCES C<strong>la</strong>se = <strong>de</strong>mocrataEvaluación <strong>de</strong> los resultadosResultados Magdalena Servente 127


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteC<strong>la</strong>ses Correctos Errores ProbabilidadDemócrata 81 2 0,9759036Republicano 47 5 0,903846Totales 128 7 0,9481485.3.4.3. ConclusionesEn comparación con los dominios anteriores, los mo<strong>de</strong>los obtenidos en este caso son <strong>de</strong> gran tamaño. Losárboles <strong>de</strong> <strong>de</strong>cisión tienen un tamaño <strong>de</strong> 57 y 58 para <strong>la</strong> ganancia y proporción <strong>de</strong> gananciarespectivamente, y se obtuvieron 34 reg<strong>la</strong>s con <strong>la</strong> ganancia y 35 con <strong>la</strong> proporción <strong>de</strong> ganancia. Losmo<strong>de</strong>los generados utilizando <strong>la</strong> ganancia y <strong>la</strong> proporción <strong>de</strong> ganancia son muy simi<strong>la</strong>res. Si analizamoslos árboles <strong>de</strong> <strong>de</strong>cisión, vemos que esta diferencia en tamaño se origina en <strong>la</strong> ramaCong_honorarios_medicos=a_favor, don<strong>de</strong> el atributo Presupuesto_<strong>de</strong>_educacion genera <strong>la</strong> mayorganancia, y el atributo Adop_resolucion_presup genera <strong>la</strong> mayor proporción <strong>de</strong> ganancia.Si miramos los tamaños <strong>de</strong> los mo<strong>de</strong>los obtenidos a <strong>la</strong> luz <strong>de</strong> los dominios analizados anteriormente,podríamos <strong>de</strong>cir que, en este caso, los mo<strong>de</strong>los obtenidos son <strong>de</strong> mayor tamaño porque el sistema analizóuna mayor cantidad <strong>de</strong> datos <strong>de</strong> entrenamiento. Con lo cual, nuestra hipótesis acerca <strong>de</strong> que <strong>la</strong> cantidad <strong>de</strong>datos <strong>de</strong> entrenamiento no afecta el tamaño <strong>de</strong> los mo<strong>de</strong>los generados se vería afectada. Podríamos hi<strong>la</strong>rmás fino, tomando <strong>la</strong> nueva hipótesis <strong>de</strong> que <strong>la</strong> cantidad <strong>de</strong> datos <strong>de</strong> entrenamiento influye en el tamaño<strong>de</strong> los mo<strong>de</strong>los generados, en <strong>la</strong> medida en que analizamos gran<strong>de</strong>s diferencias en <strong>la</strong> cantidad <strong>de</strong> datos <strong>de</strong>entrenamiento. En cambio, cuando estas diferencias son más pequeñas, <strong>la</strong> cantidad <strong>de</strong> datos <strong>de</strong>entrenamiento no influye. Es <strong>de</strong>cir, si construimos un mo<strong>de</strong>lo a partir <strong>de</strong> 400 datos <strong>de</strong> entrenamiento,obtenemos árboles <strong>de</strong> <strong>de</strong>cisión <strong>de</strong>l or<strong>de</strong>n <strong>de</strong> X; y si construimos un mo<strong>de</strong>lo a partir <strong>de</strong> 40 datos <strong>de</strong>entrenamiento, obtenemos árboles <strong>de</strong> <strong>de</strong>cisión <strong>de</strong>l or<strong>de</strong>n <strong>de</strong> Y, siendo Y menor que X. Sin embargo, siconstruimos un árbol <strong>de</strong> <strong>de</strong>cisión a partir <strong>de</strong> 450 datos <strong>de</strong> entrenamiento, probablemente el árbol tenga untamaño <strong>de</strong>l or<strong>de</strong>n <strong>de</strong> X; y si lo construimos a partir <strong>de</strong> 35 datos <strong>de</strong> entrenamiento, uno <strong>de</strong> or<strong>de</strong>n Y.En cuanto a <strong>la</strong> proporción <strong>de</strong> error sobre los datos <strong>de</strong> prueba, es <strong>de</strong> 5.19% en todos los casos. A<strong>de</strong>más, <strong>la</strong>probabilidad <strong>de</strong> c<strong>la</strong>sificar un caso <strong>de</strong> prueba correctamente es alta para ambas c<strong>la</strong>ses.128 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente5.3.4. Estudio sobre hongos5.3.4.1. ID3 utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisiónOlor = almendraingeribleOlor = anisingeribleOlor = creosotavenenosoOlor = especiosovenenosoOlor = hediondovenenosoOlor = mohosovenenosoOlor = ningunoColor_sombrero = amarillovenenosoColor_sombrero = b<strong>la</strong>ncoMagul<strong>la</strong>duras = noingeribleMagul<strong>la</strong>duras = sivenenosoColor_sombrero = cane<strong>la</strong>ingeribleColor_sombrero = grisingeribleColor_sombrero = marronSup_tronco_arriba_anillo = escamosaingeribleSup_tronco_arriba_anillo = fibrosaingeribleSup_tronco_arriba_anillo = sedosavenenosoSup_tronco_arriba_anillo = suaveingeribleColor_sombrero = pielForma_sombrero = abotonadaingeribleForma_sombrero = acampanadavenenosoForma_sombrero = chataingeribleForma_sombrero = convexaingeribleColor_sombrero = rojoingeribleColor_sombrero = rosaColor_esporas = b<strong>la</strong>ncaingeribleColor_esporas = ver<strong>de</strong>venenosoColor_sombrero = ver<strong>de</strong>ingeribleColor_sombrero = violetaingeribleOlor = pescadovenenosoOlor = punzanteVenenosoReg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 0SI Olor = almendraENTONCES Tipo_Hongo = ingeribleResultados Magdalena Servente 129


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReg<strong>la</strong> 1SI Olor = anisENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 2SI Olor = creosotaENTONCES Tipo_Hongo = venenosoReg<strong>la</strong> 3SI Olor = especiosoENTONCES Tipo_Hongo = venenosoReg<strong>la</strong> 4SI Olor = hediondoENTONCES Tipo_Hongo = venenosoReg<strong>la</strong> 5SI Olor = mohosoENTONCES Tipo_Hongo = venenosoReg<strong>la</strong> 6SI Olor = ningunoY Color_sombrero = amarilloENTONCES Tipo_Hongo = venenosoReg<strong>la</strong> 7SI Olor = ningunoY Color_sombrero = b<strong>la</strong>ncoY Magul<strong>la</strong>duras = noENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 8SI Olor = ningunoY Color_sombrero = b<strong>la</strong>ncoY Magul<strong>la</strong>duras = siENTONCES Tipo_Hongo = venenosoReg<strong>la</strong> 9SI Olor = ningunoY Color_sombrero = cane<strong>la</strong>ENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 10SI Olor = ningunoY Color_sombrero = grisENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 11SI Olor = ningunoY Color_sombrero = marronY Sup_tronco_arriba_anillo = escamosaENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 12SI Olor = ningunoY Color_sombrero = marronY Sup_tronco_arriba_anillo = fibrosaENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 13SI Olor = ningunoY Color_sombrero = marronY Sup_tronco_arriba_anillo = sedosaENTONCES Tipo_Hongo = venenosoReg<strong>la</strong> 14SI Olor = ningunoY Color_sombrero = marronY Sup_tronco_arriba_anillo = suaveENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 15SI Olor = ningunoY Color_sombrero = pielY Forma_sombrero = abotonadaENTONCES Tipo_Hongo = ingerible130 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReg<strong>la</strong> 16SI Olor = ningunoY Color_sombrero = pielY Forma_sombrero = acampanadaENTONCES Tipo_Hongo = venenosoReg<strong>la</strong> 17SI Olor = ningunoY Color_sombrero = pielY Forma_sombrero = chataENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 18SI Olor = ningunoY Color_sombrero = pielY Forma_sombrero = convexaENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 19SI Olor = ningunoY Color_sombrero = rojoENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 20SI Olor = ningunoY Color_sombrero = rosaY Color_esporas = b<strong>la</strong>ncaENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 21SI Olor = ningunoY Color_sombrero = rosaY Color_esporas = ver<strong>de</strong>ENTONCES Tipo_Hongo = venenosoReg<strong>la</strong> 22SI Olor = ningunoY Color_sombrero = ver<strong>de</strong>ENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 23SI Olor = ningunoY Color_sombrero = violetaENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 24SI Olor = pescadoENTONCES Tipo_Hongo = venenosoReg<strong>la</strong> 25SI Olor = punzanteENTONCES Tipo_Hongo = venenosoEvaluación <strong>de</strong> los resultadosC<strong>la</strong>ses Correctos Errores ProbabilidadIngerible 1403 0 1Venenoso 1293 12 0,990804Totales 2696 12 0,995568Resultados Magdalena Servente 131


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente5.3.4.2 ID3. utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisiónOlor = almendraingeribleOlor = anisingeribleOlor = creosotavenenosoOlor = especiosovenenosoOlor = hediondovenenosoOlor = mohosovenenosoOlor = ningunoColor_velo = amarillovenenosoColor_velo = b<strong>la</strong>ncoTamaño_membrana = anchaColor_esporas = b<strong>la</strong>ncaingeribleColor_esporas = marroningeribleColor_esporas = negroingeribleColor_esporas = ver<strong>de</strong>venenosoTamaño_membrana = finaMagul<strong>la</strong>duras = noSup_tronco_arriba_anillo = fibrosaingeribleSup_tronco_arriba_anillo = sedosavenenosoSup_tronco_arriba_anillo = suaveingeribleMagul<strong>la</strong>duras = sivenenosoColor_velo = marroningeribleColor_velo = naranjaingeribleOlor = pescadovenenosoOlor = punzantevenenosoReg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 0SI Olor = almendraENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 1SI Olor = anisENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 2SI Olor = creosotaENTONCES Tipo_Hongo = venenosoReg<strong>la</strong> 3SI Olor = especiosoENTONCES Tipo_Hongo = venenosoReg<strong>la</strong> 4SI Olor = hediondoENTONCES Tipo_Hongo = venenoso132 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReg<strong>la</strong> 5SI Olor = mohosoENTONCES Tipo_Hongo = venenosoReg<strong>la</strong> 6SI Olor = ningunoY Color_velo = amarilloENTONCES Tipo_Hongo = venenosoReg<strong>la</strong> 7SI Olor = ningunoY Color_velo = b<strong>la</strong>ncoY Tamaño_membrana = anchaY Color_esporas = b<strong>la</strong>ncaENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 8SI Olor = ningunoY Color_velo = b<strong>la</strong>ncoY Tamaño_membrana = anchaY Color_esporas = marronENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 9SI Olor = ningunoY Color_velo = b<strong>la</strong>ncoY Tamaño_membrana = anchaY Color_esporas = negroENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 10SI Olor = ningunoY Color_velo = b<strong>la</strong>ncoY Tamaño_membrana = anchaY Color_esporas = ver<strong>de</strong>ENTONCES Tipo_Hongo = venenosoReg<strong>la</strong> 11SI Olor = ningunoY Color_velo = b<strong>la</strong>ncoY Tamaño_membrana = finaY Magul<strong>la</strong>duras = noY Sup_tronco_arriba_anillo = fibrosaENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 12SI Olor = ningunoY Color_velo = b<strong>la</strong>ncoY Tamaño_membrana = finaY Magul<strong>la</strong>duras = noY Sup_tronco_arriba_anillo = sedosaENTONCES Tipo_Hongo = venenosoReg<strong>la</strong> 13SI Olor = ningunoY Color_velo = b<strong>la</strong>ncoY Tamaño_membrana = finaY Magul<strong>la</strong>duras = noY Sup_tronco_arriba_anillo = suaveENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 14SI Olor = ningunoY Color_velo = b<strong>la</strong>ncoY Tamaño_membrana = finaY Magul<strong>la</strong>duras = siENTONCES Tipo_Hongo = venenosoReg<strong>la</strong> 15SI Olor = ningunoY Color_velo = marronENTONCES Tipo_Hongo = ingeribleReg<strong>la</strong> 16SI Olor = ningunoY Color_velo = naranjaENTONCES Tipo_Hongo = ingeribleResultados Magdalena Servente 133


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReg<strong>la</strong> 17SI Olor = pescadoENTONCES Tipo_Hongo = venenosoReg<strong>la</strong> 18SI Olor = punzanteENTONCES Tipo_Hongo = venenosoEvaluación <strong>de</strong> los resultadosC<strong>la</strong>ses Correctos Errores ProbabilidadIngerible 1403 0 1Venenoso 1305 0 1Totales 2708 0 15.3.4.3. ConclusionesLos resultados obtenidos en este dominio son muy interesantes. Vemos que los árboles <strong>de</strong> <strong>de</strong>cisión y, araíz <strong>de</strong> ello <strong>la</strong>s reg<strong>la</strong>s, no son iguales para el caso <strong>de</strong> <strong>la</strong> ganancia y <strong>de</strong> <strong>la</strong> proporción <strong>de</strong> ganancia. Sianalizamos los árboles, vemos que en primer término, el atributo olor es el que más información brindatanto utilizando <strong>la</strong> ganancia como <strong>la</strong> proporción <strong>de</strong> ganancia como medidores <strong>de</strong> información. Pero unavez en el caso <strong>de</strong> los ejemplos que tienen olor=ninguno, <strong>la</strong> ganancia consi<strong>de</strong>ra que el atributocolor_sombrero es el que brinda más información, mientras que <strong>la</strong> proporción <strong>de</strong> ganancia consi<strong>de</strong>ra queel atributo color_velo brinda más información que los <strong>de</strong>más. Analizando el archivo <strong>de</strong> log generado porel programa (sección 4.5.2.1.8) para el caso <strong>de</strong> los ejemplos que tienen olor=ninguno, tenemos:División Según Ganancia Proporción <strong>de</strong> gananciaColor_sombrero 0,0370 0,079699Color_velo 0,02376 0,2295He aquí <strong>la</strong> diferencia en <strong>la</strong> elección <strong>de</strong> atributos <strong>de</strong> división para ambos medidores <strong>de</strong> información. Sianalizamos <strong>la</strong>s características <strong>de</strong> los datos, vemos que el atributo color_sombrero toma diez valoresdistintos, mientras que el atributo Color_velo toma cuatro valores distintos. Recor<strong>de</strong>mos que <strong>la</strong> gananciafavorece a los atributos con más valores y esa es <strong>la</strong> razón por <strong>la</strong> que se comenzó a utilizar <strong>la</strong> proporción<strong>de</strong> ganancia, que promedia o normaliza, el cálculo <strong>de</strong> <strong>la</strong> ganancia <strong>de</strong> información en un conjunto <strong>de</strong> datos.Este es un ejemplo c<strong>la</strong>ro <strong>de</strong>l porqué <strong>de</strong> esta ten<strong>de</strong>ncia.A pesar <strong>de</strong> esta diferencia entre los mo<strong>de</strong>los obtenidos en uno y otro caso, vemos que <strong>la</strong> proporción <strong>de</strong>error en ambos casos es baja. Con lo cual, aunque <strong>la</strong> ganancia favorezca a los atributos con mayorcantidad <strong>de</strong> valores posibles, no po<strong>de</strong>mos afirmar que esto influya en gran medida en el análisis sobre losdatos <strong>de</strong> prueba. Para el c<strong>la</strong>sificador obtenido mediante <strong>la</strong> proporción <strong>de</strong> ganancia no se realizaron erroresal c<strong>la</strong>sificar los casos <strong>de</strong> prueba.134 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente5.4. RESULTADOS OBTENIDOS CON EL C4.5A continuación, se presentan los resultados obtenidos con el sistema C4.5. Se realizaron pruebas sobre losmismos dominios que para el sistema ID3 y para otros dominios que presentan atributos continuos. Aligual que en el caso anterior, se presentan los resultados para el sistema utilizando <strong>la</strong> ganancia y <strong>la</strong>proporción <strong>de</strong> ganancia para medir <strong>la</strong> ganancia <strong>de</strong> información en cada paso <strong>de</strong>l algoritmo.5.4.1. Créditos5.4.1.1. Utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisiónOtros Creditos = TRES CREDITOS: NO (23.0)Otros Creditos = UN CREDITO:Composición Familiar = SOLTERO: SI (10.0)Composición Familiar = CASADO SIN HIJOS: SI (10.0)Composición Familiar = CASADO Y UN HIJO: SI (10.0)Composición 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:Composición Familiar = CASADO SIN HIJOS: SI (9.0)Composición Familiar = CASADO Y UN HIJO: SI (9.0)Composición 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)Composición 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)Árbol <strong>de</strong> <strong>de</strong>cisión simplificadoOtros 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)Evaluación <strong>de</strong> los resultados <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisiónEvaluación sobre los datos <strong>de</strong> entrenamiento:Resultados Magdalena Servente 135


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteAntes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación25 1 (1.0%) 4 7 (7.1%) (12.4%)Evaluación sobre los datos <strong>de</strong> prueba:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación25 19 (37.3%) 4 22 (43.1%) (12.4%)C<strong>la</strong>sificación general en los datos <strong>de</strong> prueba:C<strong>la</strong>sificado como SI C<strong>la</strong>sificado como NOC<strong>la</strong>se SI 17 18C<strong>la</strong>se NO 4 12Reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 12SI Otros Creditos = TRES CREDITOSENTONCES c<strong>la</strong>se=NO [94.2%]Reg<strong>la</strong> 2SI Ingreso = ENTRE 451 Y 550Y Composición Familiar = CASADO Y DOS HIJOSY Vivienda = ALQUILAENTONCES c<strong>la</strong>se=NO [79.4%]Reg<strong>la</strong> 6SI Ingreso = MAS DE 551Y Composición Familiar = SOLTEROY Vivienda = ALQUILAY Otros Creditos = DOS CREDITOSENTONCES c<strong>la</strong>se=NO [50.0%]Reg<strong>la</strong> 1SI Otros Creditos = UN CREDITOY c<strong>la</strong>se=SI [90.3%]Reg<strong>la</strong> 11SI Otros Creditos = DOS CREDITOSENTONCES c<strong>la</strong>se=SI [80.6%]Reg<strong>la</strong> 13C<strong>la</strong>se=SI136 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEvaluación <strong>de</strong> los resultados <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónEvaluación sobre los datos <strong>de</strong> entrenamiento:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se12 1 5.8% 23 0(0.0%) 21(21|0) NO2 3 20.6% 4 0(0.0%) 4(4|0) NO6 4 50.0% 2 0(0.0%) 2(2|0) NO1 1 9.7% 37 0(0.0%) 0(0|0) SI11 1 19.4% 33 1(3.0%) 0(0|0) SIProbadas 99, errores 1 (1.0%)Evaluación sobre los datos <strong>de</strong> prueba:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se12 1 5.8% 30 18(60.0%) -8(10|18) NO2 3 20.6% 2 0(0.0%) 2(2|0) NO6 4 50.0% 2 0(0.0%) 2(2|0) NO1 1 9.7% 8 0(0.0%) 0(0|0) SI11 1 19.4% 9 0(0.0%) 0(0|0) SIProbadas 51, errores 18 (35.3%)C<strong>la</strong>sificación general <strong>de</strong> los datos <strong>de</strong> prueba:C<strong>la</strong>sificado como SI C<strong>la</strong>sificado como NOC<strong>la</strong>se SI 17 18C<strong>la</strong>se NO 0 165.4.1.2. Utilizando <strong>la</strong> proporción <strong>de</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisiónOtros Creditos = TRES CREDITOS: NO (23.0)Otros Creditos = UN CREDITO:Composición Familiar = SOLTERO: SI (10.0)Composición Familiar = CASADO SIN HIJOS: SI (10.0)Composición Familiar = CASADO Y UN HIJO: SI (10.0)Composición 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:Composición Familiar = CASADO SIN HIJOS: SI (9.0)Composición Familiar = CASADO Y UN HIJO: SI (9.0)Composición 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 Magdalena Servente 137


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteComposición 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)Árbol <strong>de</strong> <strong>de</strong>cisión simplificadoOtros 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)Evaluación <strong>de</strong> los resultados <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisiónEvaluación sobre los datos <strong>de</strong> entrenamiento:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación25 1 (1.0%) 4 7 (7.1%) (12.4%)Evaluación sobre los datos <strong>de</strong> prueba:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación25 19 (37.3%) 4 22 (43.1%) (12.4%)C<strong>la</strong>sificación general <strong>de</strong> los datos <strong>de</strong> prueba:C<strong>la</strong>sificado como SI C<strong>la</strong>sificado como NOC<strong>la</strong>se SI 17 18C<strong>la</strong>se NO 4 12Reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 12SI Otros Creditos = TRES CREDITOSENTONCES c<strong>la</strong>se=NO [94.2%]Reg<strong>la</strong> 2SI Ingreso = ENTRE 451 Y 550Y Composición Familiar = CASADO Y DOS HIJOSY Vivienda = ALQUILAENTONCES c<strong>la</strong>se=NO [79.4%]Reg<strong>la</strong> 6SI Ingreso = MAS DE 551138 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteY Composición Familiar = SOLTEROY Vivienda = ALQUILAY Otros Creditos = DOS CREDITOSENTONCES c<strong>la</strong>se=NO [50.0%]Reg<strong>la</strong> 1SI Otros Creditos = UN CREDITOENTOCNES c<strong>la</strong>se=SI [90.3%]Reg<strong>la</strong> 11SI Otros Creditos = DOS CREDITOSENTONCES c<strong>la</strong>se=SI [80.6%]Reg<strong>la</strong> 13c<strong>la</strong>se=SIEvaluación <strong>de</strong> los resultados <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónEvaluación sobre los datos <strong>de</strong> entrenamiento:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se12 1 5.8% 23 0(0.0%) 21(21|0) NO2 3 20.6% 4 0(0.0%) 4(4|0) NO6 4 50.0% 2 0(0.0%) 2(2|0) NO1 1 9.7% 37 0(0.0%) 0(0|0) SI11 1 19.4% 33 1(3.0%) 0(0|0) SIProbadas 99, errores 1 (1.0%)Evaluación sobre los datos <strong>de</strong> prueba:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se12 1 5.8% 30 18(60.0%) -8(10|18) NO2 3 20.6% 2 0(0.0%) 2(2|0) NO6 4 50.0% 2 0(0.0%) 2(2|0) NO1 1 9.7% 8 0(0.0%) 0(0|0) SI11 1 19.4% 9 0(0.0%) 0(0|0) SIProbadas 51, errores 18 (35.3%)C<strong>la</strong>sificación general <strong>de</strong> los datos <strong>de</strong> prueba:C<strong>la</strong>sificado como SI C<strong>la</strong>sificado como NOC<strong>la</strong>se SI 17 18C<strong>la</strong>se NO 0 165.4.1.3. ConclusionesLos árboles <strong>de</strong> <strong>de</strong>cisión sin simplificar obtenidos utilizando <strong>la</strong> ganancia y <strong>la</strong> proporción <strong>de</strong> ganancia sediferencian so<strong>la</strong>mente en <strong>la</strong> rama <strong>de</strong> “Otros Créditos=UN CRÉDITO y Composición Familiar=CASADOY DOS HIJOS”. Al llegar a este punto, se encontró que <strong>la</strong> mayor ganancia se obtenía dividiendo a losResultados Magdalena Servente 139


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentedatos según el atributo Ingreso, mientras que <strong>la</strong> mayor proporción <strong>de</strong> ganancia se obtuvo con el atributoVivienda. A pesar <strong>de</strong> estas diferencias encontradas en los árboles sin simplificar, los árbolessimplificados son idénticos y tienen un único nodo, lo cual los hace muy fáciles <strong>de</strong> compren<strong>de</strong>r.En cuanto a <strong>la</strong>s reg<strong>la</strong>s obtenidas, son idénticas en ambos casos. Cabe <strong>de</strong>stacar que, como el árbol <strong>de</strong><strong>de</strong>cisión simplificado es tan simple, el mo<strong>de</strong>lo <strong>de</strong> c<strong>la</strong>sificación ofrecido en ese caso se entien<strong>de</strong> másrápidamente que el conjunto <strong>de</strong> reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión.Analicemos <strong>la</strong> columna ventaja <strong>de</strong> <strong>la</strong> tab<strong>la</strong> <strong>de</strong> resultados para <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión. Recor<strong>de</strong>mos que <strong>la</strong>ventaja se expresa <strong>de</strong> <strong>la</strong> forma a(b|c) don<strong>de</strong> b es <strong>la</strong> cantidad <strong>de</strong> casos que serían c<strong>la</strong>sificados erróneamentepor <strong>la</strong>s reg<strong>la</strong>s siguientes, <strong>de</strong> omitirse esa reg<strong>la</strong>; c es <strong>la</strong> cantidad <strong>de</strong> casos que serían c<strong>la</strong>sificadoscorrectamente; y a es el beneficio neto <strong>de</strong> omitir <strong>la</strong> reg<strong>la</strong>. En el caso <strong>de</strong> <strong>la</strong> reg<strong>la</strong> 12, tenemos un beneficioneto negativo, con lo cual, a pesar <strong>de</strong> que con los métodos utilizados por el C4.5 se consi<strong>de</strong>ró que no eraconveniente eliminar<strong>la</strong>, <strong>de</strong> utilizar este mo<strong>de</strong>lo para c<strong>la</strong>sificar nuevos casos, <strong>de</strong>bería analizarse <strong>la</strong>posibilidad <strong>de</strong> no tener esta reg<strong>la</strong> en cuenta y trabajar con un mo<strong>de</strong>lo más simple.En cuanto al valor E asociado, en el árbol original representa <strong>la</strong> cantidad <strong>de</strong> casos cubiertos por una hojaque pertenece a una c<strong>la</strong>se diferente <strong>de</strong> <strong>la</strong> indicada por <strong>la</strong> misma. Mientras que en el caso <strong>de</strong>l árbol podado,E es <strong>la</strong> cantidad <strong>de</strong> errores predichos, según <strong>la</strong> distribución binomial, en dicha hoja si un conjunto <strong>de</strong> Nnuevos casos fuesen evaluados por el árbol. Recor<strong>de</strong>mos que los valores E tienen especial importancia, yaque el estimador <strong>de</strong>l éxito <strong>de</strong>l mo<strong>de</strong>lo obtenido se calcu<strong>la</strong> realizando <strong>la</strong> sumatoria <strong>de</strong> todos los valores E ydividiéndo<strong>la</strong> por <strong>la</strong> cantidad <strong>de</strong> casos <strong>de</strong> entrenamiento. En este caso, <strong>la</strong> estimación <strong>de</strong>l éxito <strong>de</strong>l mo<strong>de</strong>loes <strong>de</strong> un 12.4%.5.4.2. Cardiología5.4.2.1. Utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisiónDuración <strong>de</strong>l Angor = MENOS DE 30 MIN: NO (33.0/1.0)Duración <strong>de</strong>l Angor = MAS DE 30 MIN:Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = TIPICO: SI (11.0/1.0)Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = AUSENTE: NO (11.0)Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = ATIPICO:Irradiación <strong>de</strong>l Angor = SI: SI (5.0)Irradiación <strong>de</strong>l Angor = NO:Respuesta Vasodi<strong>la</strong>tadora = POSITIVO: SI (2.0)Respuesta Vasodi<strong>la</strong>tadora = NEGATIVO: NO (2.0)Evaluación <strong>de</strong> los resultados <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión140 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEvaluación sobre los datos <strong>de</strong> entrenamiento:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación10 2 (3.1%) 10 2 (3.1%) (14.9%)Evaluación sobre los datos <strong>de</strong> prueba:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación10 2 (6.5%) 10 2 (6.5%) (14.9%)C<strong>la</strong>sificación general en los datos <strong>de</strong> prueba:C<strong>la</strong>sificado como SI C<strong>la</strong>sificado como NOC<strong>la</strong>se SI 8 1C<strong>la</strong>se NO 1 21Reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 2SI Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = TIPICOY Duración <strong>de</strong>l Angor = MAS DE 30 MINENTONCES c<strong>la</strong>se=SI [77.7%]Reg<strong>la</strong> 3SI Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = ATIPICOY Irradiación <strong>de</strong>l Angor = SIY Duración <strong>de</strong>l Angor = MAS DE 30 MINENTONCES c<strong>la</strong>se=SI [75.8%]Reg<strong>la</strong> 4SI Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = ATIPICOY Duración <strong>de</strong>l Angor = MAS DE 30 MINY Respuesta Vasodi<strong>la</strong>tadora = POSITIVOENTONCES c<strong>la</strong>se=SI [75.8%]Reg<strong>la</strong> 6SI Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = AUSENTEENTONCES c<strong>la</strong>se=NO [93.9%]Reg<strong>la</strong> 1SI Duración <strong>de</strong>l Angor = MENOS DE 30 MINENTONCES c<strong>la</strong>se=NO [92.2%]Reg<strong>la</strong> 5SI Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = ATIPICOY Irradiación <strong>de</strong>l Angor = NOY Respuesta Vasodi<strong>la</strong>tadora = NEGATIVOENTONCES c<strong>la</strong>se=NO [75.8%]Reg<strong>la</strong> 7C<strong>la</strong>se=NOResultados Magdalena Servente 141


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEvaluación <strong>de</strong> los resultados <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónEvaluación sobre los datos <strong>de</strong> entrenamiento:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se2 2 22.3% 11 1(9.1%) 9(10|1) SI3 3 24.2% 5 0(0.0%) 2(2|0) SI4 3 24.2% 2 0(0.0%) 2(2|0) SI6 1 6.1% 22 0(0.0%) 0(0|0) NO1 1 7.8% 22 1(4.5%) 0(0|0) NO5 3 24.2% 2 0(0.0%) 0(0|0) NOProbadas 64, errores 2 (3.1%)Evaluación sobre los datos <strong>de</strong> prueba:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se2 2 22.3% 3 0(0.0%) 3(3|0) SI3 3 24.2% 3 0(0.0%) 2(2|0) SI4 3 24.2% 3 1(33.3%) 1(2|1) SI6 1 6.1% 10 0(0.0%) 0(0|0) NO1 1 7.8% 11 1(9.1%) 0(0|0) NO5 3 24.2% 1 0(0.0%) 0(0|0) NOProbadas 31, errores 2 (6.5%)C<strong>la</strong>sificación general en los datos <strong>de</strong> prueba:C<strong>la</strong>sificado como SI C<strong>la</strong>sificado como NOC<strong>la</strong>se SI 8 1C<strong>la</strong>se NO 1 215.4.2.2. Utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisiónDuración <strong>de</strong>l Angor = MENOS DE 30 MIN: NO (33.0/1.0)Duración <strong>de</strong>l Angor = MAS DE 30 MIN:Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = TIPICO: SI (11.0/1.0)Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = AUSENTE: NO (11.0)Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = ATIPICO:Respuesta Vasodi<strong>la</strong>tadora = POSITIVO: SI (5.0)Respuesta Vasodi<strong>la</strong>tadora = NEGATIVO:Irradiación <strong>de</strong>l Angor = SI: SI (2.0)Irradiación <strong>de</strong>l Angor = NO: NO (2.0)Evaluación <strong>de</strong> los resultados <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión142 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEvaluación sobre los datos <strong>de</strong> entrenamiento:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación10 2 (3.1%) 10 2 (3.1%) (14.9%)Evaluación sobre los datos <strong>de</strong> prueba:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación10 2 (6.5%) 10 2 (6.5%) (14.9%)C<strong>la</strong>sificación general en los datos <strong>de</strong> prueba:C<strong>la</strong>sificado como SI C<strong>la</strong>sificado como NOC<strong>la</strong>se SI 8 1C<strong>la</strong>se NO 1 21Reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 2SI Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = TIPICOY Duración <strong>de</strong>l Angor = MAS DE 30 MINENTONCES c<strong>la</strong>se=SI [77.7%]Reg<strong>la</strong> 3SI Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = ATIPICOY Duración <strong>de</strong>l Angor = MAS DE 30 MINY Respuesta Vasodi<strong>la</strong>tadora = POSITIVOENTONCES c<strong>la</strong>se=SI [75.8%]Reg<strong>la</strong> 4SI Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = ATIPICOY Irradiación <strong>de</strong>l Angor = SIY Duración <strong>de</strong>l Angor = MAS DE 30 MINENTONCES c<strong>la</strong>se=SI [75.8%]Reg<strong>la</strong> 6SI Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = AUSENTEENTONCES c<strong>la</strong>se=NO [93.9%]Reg<strong>la</strong> 1SI Duración <strong>de</strong>l Angor = MENOS DE 30 MINENTONCES c<strong>la</strong>se=NO [92.2%]Reg<strong>la</strong> 5SI Dolor <strong>de</strong> Pecho <strong>de</strong> Angor = ATIPICOY Irradiación <strong>de</strong>l Angor = NOY Respuesta Vasodi<strong>la</strong>tadora = NEGATIVOENTONCES c<strong>la</strong>se=NO [75.8%]Reg<strong>la</strong> 7C<strong>la</strong>se= NOResultados Magdalena Servente 143


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEvaluación <strong>de</strong> los resultados <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónEvaluación sobre los datos <strong>de</strong> entrenamiento:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se2 2 22.3% 11 1(9.1%) 9(10|1) SI3 3 24.2% 5 0(0.0%) 2(2|0) SI4 3 24.2% 2 0(0.0%) 2(2|0) SI6 1 6.1% 22 0(0.0%) 0(0|0) NO1 1 7.8% 22 1(4.5%) 0(0|0) NO5 3 24.2% 2 0(0.0%) 0(0|0) NOProbadas 64, errores 2 (3.1%)Evaluación sobre los datos <strong>de</strong> prueba:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se2 2 22.3% 3 0(0.0%) 3(3|0) SI3 3 24.2% 4 1(25.0%) 1(2|1) SI4 3 24.2% 2 0(0.0%) 2(2|0) SI6 1 6.1% 10 0(0.0%) 0(0|0) NO1 1 7.8% 11 1(9.1%) 0(0|0) NO5 3 24.2% 1 0(0.0%) 0(0|0) NOProbadas 31, errores 2 (6.5%)C<strong>la</strong>sificación general en los datos <strong>de</strong> prueba:C<strong>la</strong>sificado como SI C<strong>la</strong>sificado como NOC<strong>la</strong>se SI 8 1C<strong>la</strong>se NO 1 215.4.2.3. ConclusionesEn este caso, tanto los árboles <strong>de</strong> <strong>de</strong>cisión como <strong>la</strong>s reg<strong>la</strong>s que <strong>de</strong>rivan <strong>de</strong> ellos, difieren entre <strong>la</strong> gananciay <strong>la</strong> proporción <strong>de</strong> ganancia. Esta diferencia surge <strong>de</strong>l hecho <strong>de</strong> que frente a una misma situación(Duración <strong>de</strong>l Angor=MAS DE 30 MIN Y Dolor <strong>de</strong> Pecho <strong>de</strong> Angor=Atipico), <strong>la</strong> ganancia y <strong>la</strong>proporción <strong>de</strong> ganancia son distintas. Se obtuvo mejor proporción <strong>de</strong> ganancia con el atributo RespuestaVasodi<strong>la</strong>tadora, y mejor ganancia con el atributo Irradiación <strong>de</strong> Pecho <strong>de</strong> Angor. No obstante, al igual queen el caso <strong>de</strong>l dominio <strong>de</strong> Estudio sobre Hongos utilizando el ID3, esta diferencia no influye en <strong>la</strong>sproporciones <strong>de</strong> error <strong>de</strong> los mo<strong>de</strong>los.Po<strong>de</strong>mos encontrar <strong>la</strong> misma diferencia en <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión. Y, al igual que en el caso anterior, noinfluye en gran medida en <strong>la</strong> performance <strong>de</strong> los c<strong>la</strong>sificadores sobre los datos <strong>de</strong> prueba144 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteNotemos que en este caso los árboles <strong>de</strong> <strong>de</strong>cisión no han sido podados. Dada su simplicidad, esto no fuenecesario.5.4.3. Votaciones5.4.3.1. Utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisióncong_honorarios_medicos = en_contra: <strong>de</strong>mocrata (168.0/1.0)cong_honorarios_medicos = a_favor:reduccion_corp_Synfuels = en_contra: republicano (97.0/3.0)reduccion_corp_Synfuels = <strong>de</strong>sconocido: republicano (4.0)reduccion_corp_Synfuels = a_favor:export_sin_impuestos = a_favor: <strong>de</strong>mocrata (2.0)export_sin_impuestos = <strong>de</strong>sconocido: republicano (1.0)export_sin_impuestos = en_contra:presupuesto_<strong>de</strong>_educación = a_favor: republicano (13.0/2.0)presupuesto_<strong>de</strong>_educación = en_contra: <strong>de</strong>mocrata (5.0/2.0)presupuesto_<strong>de</strong>_educación = <strong>de</strong>sconocido: <strong>de</strong>mocrata (1.0)cong_honorarios_medicos = <strong>de</strong>sconocido:misil_mx = a_favor: <strong>de</strong>mocrata (4.0/1.0)misil_mx = en_contra: <strong>de</strong>mocrata (3.0)misil_mx = <strong>de</strong>sconocido: republicano (2.0)Árbol <strong>de</strong> <strong>de</strong>cisión simplificadocong_honorarios_medicos = a_favor: republicano (123.0/13.9)cong_honorarios_medicos = en_contra: <strong>de</strong>mocrata (168.0/2.6)cong_honorarios_medicos = <strong>de</strong>sconocido:misil_mx = a_favor: <strong>de</strong>mocrata (4.0/2.2)misil_mx = en_contra: <strong>de</strong>mocrata (3.0/1.1)misil_mx = <strong>de</strong>sconocido: republicano (2.0/1.0)Evaluación <strong>de</strong> los resultados <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisiónEvaluación sobre los datos <strong>de</strong> entrenamiento:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación16 9 (3.0%) 7 13 (4.3%) (6.9%)Evaluación sobre los datos <strong>de</strong> prueba:Antes <strong>de</strong> podarDespués <strong>de</strong> podarResultados Magdalena Servente 145


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteTamaño Errores Tamaño Errores Estimación16 7 (5.2%) 7 4 (3.0%) (6.9%)C<strong>la</strong>sificación general en los datos <strong>de</strong> prueba:C<strong>la</strong>sificado como <strong>de</strong>mócrata C<strong>la</strong>sificado como republicanoC<strong>la</strong>se <strong>de</strong>mócrata 80 3C<strong>la</strong>se republicano 1 51Reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 7SI cong_honorarios_medicos = en_contraENTONCES c<strong>la</strong>se=<strong>de</strong>mocrata [98.4%]Reg<strong>la</strong> 3SI reduccion_corp_Synfuels = a_favorY presupuesto_<strong>de</strong>_educación = en_contraENTONCES c<strong>la</strong>se=<strong>de</strong>mocrata [94.3%]Reg<strong>la</strong> 9SI cong_honorarios_medicos = <strong>de</strong>sconocidoY misil_mx = en_contraENTONCES c<strong>la</strong>se=<strong>de</strong>mocrata [63.0%]Reg<strong>la</strong> 5SI cong_honorarios_medicos = a_favorENTONCES c<strong>la</strong>se=republicano [88.7%]Reg<strong>la</strong> 10SI cong_honorarios_medicos = <strong>de</strong>sconocidoY misil_mx = <strong>de</strong>sconocidoENTONCES c<strong>la</strong>se=republicano [50.0%]Reg<strong>la</strong> 11c<strong>la</strong>se=<strong>de</strong>mocrataEvaluación <strong>de</strong> los resultados <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónEvaluación sobre los datos <strong>de</strong> entrenamiento:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se7 1 1.6% 168 1(0.6%) 0(0|0) Demócrata3 2 5.7% 8 2(25.0%) 2(4|2) Demócrata9 2 37.0% 2 0(0.0%) 0(0|0) Demócrata5 1 11.3% 117 7(6.0%) 103(110|7) Republicano10 2 50.0% 2 0(0.0%) 2(2|0) RepublicanoProbadas 300, errores 11 (3.7%)Evaluación sobre los datos <strong>de</strong> prueba:146 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se7 1 1.6% 79 1(1.3%) 0(0|0) Demócrata3 2 5.7% 3 1(33.3%) -1(0|1) Demócrata5 1 11.3% 53 3(5.7%) 47(50|3) RepublicanoProbadas 135, errores 5 (3.7%)C<strong>la</strong>sificación general en los datos <strong>de</strong> prueba:C<strong>la</strong>sificado como <strong>de</strong>mócrata C<strong>la</strong>sificado como republicanoC<strong>la</strong>se <strong>de</strong>mócrata 80 3C<strong>la</strong>se republicano 2 505.4.3.2. Utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisióncong_honorarios_medicos = a_favor:reduccion_corp_Synfuels = en_contra: republicano (97.0/3.0)reduccion_corp_Synfuels = <strong>de</strong>sconocido: republicano (4.0)reduccion_corp_Synfuels = a_favor:export_sin_impuestos = a_favor: <strong>de</strong>mocrata (2.0)export_sin_impuestos = <strong>de</strong>sconocido: republicano (1.0)export_sin_impuestos = en_contra:presupuesto_<strong>de</strong>_educación = a_favor: republicano (13.0/2.0)presupuesto_<strong>de</strong>_educación = en_contra: <strong>de</strong>mocrata (5.0/2.0)presupuesto_<strong>de</strong>_educación = <strong>de</strong>sconocido: <strong>de</strong>mocrata (1.0)cong_honorarios_medicos = en_contra:adop_resolucion_presup = a_favor: <strong>de</strong>mocrata (151.0)adop_resolucion_presup = <strong>de</strong>sconocido: <strong>de</strong>mocrata (1.0)adop_resolucion_presup = en_contra:presupuesto_<strong>de</strong>_educación = a_favor: <strong>de</strong>mocrata (9.0)presupuesto_<strong>de</strong>_educación = en_contra: <strong>de</strong>mocrata (6.0)presupuesto_<strong>de</strong>_educación = <strong>de</strong>sconocido: republicano (1.0)cong_honorarios_medicos = <strong>de</strong>sconocido:particip_proy_agua = a_favor: <strong>de</strong>mocrata (4.0)particip_proy_agua = en_contra: <strong>de</strong>mocrata (0.0)particip_proy_agua = <strong>de</strong>sconocido:misil_mx = a_favor: <strong>de</strong>mocrata (3.0/1.0)misil_mx = en_contra: republicano (0.0)misil_mx = <strong>de</strong>sconocido: republicano (2.0)Árbol <strong>de</strong> <strong>de</strong>cisión simplificadocong_honorarios_medicos = a_favor: republicano (123.0/13.9)cong_honorarios_medicos = en_contra: <strong>de</strong>mocrata (168.0/2.6)cong_honorarios_medicos = <strong>de</strong>sconocido:misil_mx = a_favor: <strong>de</strong>mocrata (4.0/2.2)misil_mx = en_contra: <strong>de</strong>mocrata (3.0/1.1)misil_mx = <strong>de</strong>sconocido: republicano (2.0/1.0)Evaluación <strong>de</strong> los resultados <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisiónResultados Magdalena Servente 147


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEvaluación sobre los datos <strong>de</strong> entrenamiento:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación25 8 (2.7%) 7 13 (4.3%) (6.9%)Evaluación sobre los datos <strong>de</strong> prueba:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación25 7 (5.2%) 7 4 (3.0%) (6.9%)C<strong>la</strong>sificación general en los datos <strong>de</strong> prueba:C<strong>la</strong>sificado como <strong>de</strong>mócrata C<strong>la</strong>sificado como republicanoC<strong>la</strong>se <strong>de</strong>mócrata 80 3C<strong>la</strong>se republicano 1 51Reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 1SI reduccion_corp_Synfuels = a_favorY export_sin_impuestos = a_favorENTONCES c<strong>la</strong>se=<strong>de</strong>mocrata [97.5%]Reg<strong>la</strong> 11SI particip_proy_agua = a_favorY cong_honorarios_medicos = <strong>de</strong>sconocidoENTONCES c<strong>la</strong>se=<strong>de</strong>mocrata [70.7%]Reg<strong>la</strong> 6SI cong_honorarios_medicos = a_favorY reduccion_corp_Synfuels = en_contraENTONCES c<strong>la</strong>se=republicano [94.8%]Reg<strong>la</strong> 2SI cong_honorarios_medicos = a_favorY presupuesto_<strong>de</strong>_educación = a_favorY export_sin_impuestos = en_contraENTONCES c<strong>la</strong>se=republicano [94.0%]Reg<strong>la</strong> 10SI adop_resolucion_presup = en_contraY presupuesto_<strong>de</strong>_educación = <strong>de</strong>sconocidoENTONCES c<strong>la</strong>se=republicano [82.0%]Reg<strong>la</strong> 13SI cong_honorarios_medicos = <strong>de</strong>sconocidoY misil_mx = <strong>de</strong>sconocidoENTONCES c<strong>la</strong>se=republicano [50.0%]Reg<strong>la</strong> 14c<strong>la</strong>se=<strong>de</strong>mocrata148 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEvaluación <strong>de</strong> los resultados <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónEvaluación sobre los datos <strong>de</strong> entrenamiento:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se1 2 2.5% 54 0(0.0%) 0(0|0) Demócrata11 2 29.3% 3 0(0.0%) 0(0|0) Demócrata6 2 5.2% 97 3(3.1%) 21(23|2) Republicano2 3 6.0% 15 2(13.3%) 11(13|2) Republicano10 2 18.0% 3 0(0.0%) 3(3|0) Republicano13 2 50.0% 2 0(0.0%) 2(2|0) RepublicanoProbadas 300, errores 9 (3.0%)Evaluación sobre los datos <strong>de</strong> prueba:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se1 2 2.5% 24 2(8.3%) 0(0|0) Demócrata11 2 29.3% 1 0(0.0%) 0(0|0) Demócrata6 2 5.2% 41 0(0.0%) 6(6|0) Republicano2 3 6.0% 8 3(37.5%) 2(5|3) Republicano10 2 18.0% 2 0(0.0%) 2(2|0) RepublicanoProbadas 135, errores 7 (5.2%)C<strong>la</strong>sificación general en los datos <strong>de</strong> prueba:C<strong>la</strong>sificado como <strong>de</strong>mócrata C<strong>la</strong>sificado como republicanoC<strong>la</strong>se <strong>de</strong>mócrata 80 3C<strong>la</strong>se republicano 4 485.4.3.3. ConclusionesLos resultados obtenidos en este dominio con el C4.5 parecen satisfactorios a simple vista, ya que <strong>la</strong>proporción <strong>de</strong> error no supera el 6% en ninguno <strong>de</strong> los casos. En cuanto a los árboles <strong>de</strong> <strong>de</strong>cisiónsimplificados son iguales para <strong>la</strong> ganancia y para <strong>la</strong> proporción <strong>de</strong> ganancia. No obstante, en los árbolessin simplificar hay una diferencia <strong>de</strong> tamaño: el árbol obtenido con <strong>la</strong> ganancia es <strong>de</strong> tamaño menor que elobtenido con <strong>la</strong> proporción <strong>de</strong> ganancia. Esto se <strong>de</strong>be a que en <strong>la</strong> ramacong_honorarios_medicos=<strong>de</strong>sconocido en <strong>la</strong> ganancia se optó por dividir al conjunto según el atributomisil_mx, y en <strong>la</strong> proporción <strong>de</strong> ganancia se los dividió según particip_proy_agua y luego en uno <strong>de</strong> loscasos por misil_mx. Esta diferencia <strong>de</strong> tamaño no influye en <strong>la</strong> performance <strong>de</strong> los árboles. Es <strong>de</strong>cir, nosencontramos ante dos árboles <strong>de</strong> igual porcentaje <strong>de</strong> error, pero <strong>de</strong> distinto tamaño. Con lo cual, <strong>de</strong> tenerque optar entre ambos, eligiríamos el obtenido con <strong>la</strong> ganancia.Resultados Magdalena Servente 149


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEn cuanto a <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión, <strong>la</strong>s primeras, <strong>de</strong>rivadas utilizando <strong>la</strong> ganancia, tienen una proporción<strong>de</strong> error simi<strong>la</strong>r a <strong>la</strong> <strong>de</strong> los árboles y son menos que <strong>la</strong>s obtenidas con <strong>la</strong> proporción <strong>de</strong> ganancia. Estassegundas, tienen una mayor proporción <strong>de</strong> error. Nuevamente, en este caso, eligiríamos <strong>la</strong>s obtenidasutilizando <strong>la</strong> ganancia.5.4.4. Estudio sobre hongos5.4.4.1. Utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisiónOlor = 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 = cane<strong>la</strong>: ingerible (28.0)Color_sombrero = gris: ingerible (716.0)Color_sombrero = ver<strong>de</strong>: 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 = resp<strong>la</strong>n<strong>de</strong>scient: ingerible (0.0)Tipo_anillo = gran<strong>de</strong>: 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 = choco<strong>la</strong>te: ingerible (0.0)Color_esporas = ver<strong>de</strong>: venenoso (2.0)Color_esporas = naranja: ingerible (0.0)Color_esporas = violeta: ingerible (0.0)Color_esporas = b<strong>la</strong>nca: ingerible (49.0)Color_esporas = amarillo: ingerible (0.0)Color_sombrero = b<strong>la</strong>nco:Habitat = pastos: ingerible (259.0)Habitat = hojas: venenoso (1.0)Habitat = pra<strong>de</strong>ras: 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


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteÁrbol <strong>de</strong> <strong>de</strong>cisión 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 = cane<strong>la</strong>: ingerible (28.0/1.4)Color_sombrero = gris: ingerible (716.0/1.4)Color_sombrero = ver<strong>de</strong>: 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 = resp<strong>la</strong>n<strong>de</strong>scient: ingerible (0.0)Tipo_anillo = gran<strong>de</strong>: 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 = choco<strong>la</strong>te: ingerible (0.0)Color_esporas = ver<strong>de</strong>: venenoso (2.0/1.0)Color_esporas = naranja: ingerible (0.0)Color_esporas = violeta: ingerible (0.0)Color_esporas = b<strong>la</strong>nca: ingerible (49.0/1.4)Color_esporas = amarillo: ingerible (0.0)Color_sombrero = b<strong>la</strong>nco:Habitat = pastos: ingerible (259.0/1.4)Habitat = hojas: venenoso (1.0/0.8)Habitat = pra<strong>de</strong>ras: 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)Evaluación <strong>de</strong> los resultados <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisiónEvaluación sobre los datos <strong>de</strong> entrenamiento:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación48 0(0.0%) 44 3 (0.1%) (0.6%)Evaluación sobre los datos <strong>de</strong> prueba:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación48 12 (0.4%) 44 25 (0.9%) (0.6%)Resultados Magdalena Servente 151


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEvaluación general sobre los datos <strong>de</strong> prueba:C<strong>la</strong>sificado como ingerible C<strong>la</strong>sificado como venenosoC<strong>la</strong>se ingerible 1403 0C<strong>la</strong>se venenoso 25 1280Reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 5SI Olor = hediondoENTONCES Tipo_hongo = venenoso [99.9%]Reg<strong>la</strong> 23SI Olor = especiosoENTONCES Tipo_hongo = venenoso [99.7%]Reg<strong>la</strong> 4SI Olor = pescadoENTONCES Tipo_hongo = venenoso [99.7%]Reg<strong>la</strong> 9SI Color_sombrero = marronY Sup_tronco_arriba_anillo = sedosaENTONCES Tipo_hongo = venenoso [99.6%]Reg<strong>la</strong> 22SI Olor = punzanteENTONCES Tipo_hongo = venenoso [99.2%]Reg<strong>la</strong> 3SI Olor = creosotaENTONCES Tipo_hongo = venenoso [96.3%]Reg<strong>la</strong> 6SI Olor = mohosoENTONCES Tipo_hongo = venenoso [96.2%]Reg<strong>la</strong> 21SI Color_sombrero = amarilloY Olor = ningunoENTONCES Tipo_hongo = venenoso [87.1%]Reg<strong>la</strong> 14SI Color_esporas = ver<strong>de</strong>ENTONCES Tipo_hongo = venenoso [82.0%]Reg<strong>la</strong> 2SI Olor = anisENTONCES Tipo_hongo = ingerible [99.2%]Reg<strong>la</strong> 1SI Olor = almendraENTONCES Tipo_hongo = ingerible [99.2%]Reg<strong>la</strong> 11SI Olor = ningunoENTONCES Tipo_hongo = ingerible [99.0%]Reg<strong>la</strong> 24Tipo_hongo = ingerible152 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEvaluación <strong>de</strong> los resultadosEvaluación sobre los datos <strong>de</strong> entrenamiento:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se5 1 0.10% 1348 0(0.00%) 1228(1228|0) venenoso23 1 0.30% 516 0(0.00%) 400(400|0) venenoso4 1 0.30% 489 0(0.00%) 372(372|0) venenoso9 2 0.40% 15 0(0.00%) 3(3|0) venenoso22 1 0.80% 164 0(0.00%) 164(164|0) venenoso3 1 3.70% 37 0(0.00%) 37(37|0) venenoso6 1 3.80% 24 0(0.00%) 24(24|0) venenoso21 2 12.90% 10 0(0.00%) 10(10|0) venenoso14 1 18.00% 7 0(0.00%) 7(7|0) venenoso2 1 0.80% 178 0(0.00%) 0(0|0) ingerible1 1 0.80% 168 0(0.00%) 0(0|0) ingerible11 1 1.00% 2460 1(0.00%) 0(0|0) ingeribleProbadas 5416, errores 1 (0.00%)Evaluación sobre los datos <strong>de</strong> prueba:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se5 1 0.10% 812 0(0.00%) 788(788|0) venenoso23 1 0.30% 60 0(0.00%) 32(32|0) venenoso4 1 0.30% 87 0(0.00%) 60(60|0) venenoso9 2 0.40% 13 0(0.00%) 13(13|0) venenoso22 1 0.80% 92 0(0.00%) 92(92|0) venenoso3 1 3.70% 155 0(0.00%) 155(155|0) venenoso21 2 12.90% 14 0(0.00%) 14(14|0) venenoso14 1 18.00% 65 0(0.00%) 65(65|0) venenoso2 1 0.80% 222 0(0.00%) 0(0|0) ingerible1 1 0.80% 232 0(0.00%) 0(0|0) ingerible11 1 1.00% 956 7(0.70%) 0(0|0) ingeribleProbadas 2708, errores 7 (0.30%)C<strong>la</strong>sificación general en los datos <strong>de</strong> prueba:C<strong>la</strong>sificado como ingerible C<strong>la</strong>sificado como venenosoC<strong>la</strong>se ingerible 1403 0C<strong>la</strong>se venenoso 7 12985.4.4.2. Utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisiónOlor = almendra: ingerible (168.0)Resultados Magdalena Servente 153


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteOlor = 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:Tamaño_membrana = ancha:Color_esporas = negro: ingerible (847.0)Color_esporas = marron: ingerible (921.0)Color_esporas = piel: ingerible (45.0)Color_esporas = choco<strong>la</strong>te: ingerible (0.0)Color_esporas = ver<strong>de</strong>: venenoso (7.0)Color_esporas = naranja: ingerible (40.0)Color_esporas = violeta: ingerible (0.0)Color_esporas = b<strong>la</strong>nca: ingerible (439.0)Color_esporas = amarillo: ingerible (43.0)Tamaño_membrana = fina:ColorTronco_arriba_anillo = marron: ingerible (0.0)ColorTronco_arriba_anillo = piel: ingerible (0.0)ColorTronco_arriba_anillo = cane<strong>la</strong>: 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 = b<strong>la</strong>nco: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:Pob<strong>la</strong>cion = abundante: ingerible (0.0)Pob<strong>la</strong>cion = agrupada: venenoso (1.0)Pob<strong>la</strong>cion = numerosa: ingerible (0.0)Pob<strong>la</strong>cion = dispersa: ingerible (0.0)Pob<strong>la</strong>cion = varios: ingerible (63.0)Pob<strong>la</strong>cion = solitaria: ingerible (40.0)Árbol <strong>de</strong> <strong>de</strong>cisión simplificadoOlor = 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:Tamaño_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 = choco<strong>la</strong>te: ingerible (0.0)Color_esporas = ver<strong>de</strong>: venenoso (7.0/1.3)Color_esporas = naranja: ingerible (40.0/1.4)Color_esporas = violeta: ingerible (0.0)Color_esporas = b<strong>la</strong>nca: ingerible (439.0/1.4)Color_esporas = amarillo: ingerible (43.0/1.4)Tamaño_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


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEvaluación <strong>de</strong> los resultados <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisiónEvaluación sobre los datos <strong>de</strong> entrenamiento:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación40 0(0.0%) 25 1 (0.0%) (0.5%)Evaluación sobre los datos <strong>de</strong> prueba:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación40 0 (0.0%) 25 7 (0.3%) (0.5%)Evaluación general sobre los datos <strong>de</strong> prueba:C<strong>la</strong>sificado como ingerible C<strong>la</strong>sificado como venenosoC<strong>la</strong>se ingerible 1403 0C<strong>la</strong>se venenoso 7 1298Reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 5SI Olor = hediondoENTONCES Tipo_Hongo = venenoso [99.9%]Reg<strong>la</strong> 13SI Tamaño_membrana = finaY Sup_tronco_arriba_anillo = sedosaENTONCES Tipo_Hongo = venenoso [99.8%]Reg<strong>la</strong> 19SI Olor = especiosoENTONCES Tipo_Hongo = venenoso [99.7%]Reg<strong>la</strong> 4SI Olor = pescadoENTONCES Tipo_Hongo = venenoso [99.7%]Reg<strong>la</strong> 18SI Olor = punzanteENTONCES Tipo_Hongo = venenoso [99.2%]Reg<strong>la</strong> 3SI Olor = creosotaENTONCES Tipo_Hongo = venenoso [96.3%]Reg<strong>la</strong> 6SI Olor = mohosoENTONCES Tipo_Hongo = venenoso [96.2%]Reg<strong>la</strong> 17SI ColorTronco_arriba_anillo = amarilloENTONCES Tipo_Hongo = venenoso [84.1%]Resultados Magdalena Servente 155


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReg<strong>la</strong> 10SI Color_esporas = ver<strong>de</strong>ENTONCES Tipo_Hongo = venenoso [82.0%]Reg<strong>la</strong> 9SI Olor = ningunoY Tamaño_membrana = anchaENTONCES Tipo_Hongo = ingerible [99.6%]Reg<strong>la</strong> 15SI Olor = ningunoY Sup_tronco_arriba_anillo = suaveENTONCES Tipo_Hongo = ingerible [99.5%]Reg<strong>la</strong> 12SI Olor = ningunoY Sup_tronco_arriba_anillo = fibrosaENTONCES Tipo_Hongo = ingerible [99.4%]Reg<strong>la</strong> 2SI Olor = anisENTONCES Tipo_Hongo = ingerible [99.2%]Reg<strong>la</strong> 1SI Olor = almendraENTONCES Tipo_Hongo = ingerible [99.2%]Reg<strong>la</strong> 20Tipo_Hongo = ingeribleEvaluación <strong>de</strong> los resultados <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónEvaluación sobre los datos <strong>de</strong> entrenamiento:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se5 1 0.10% 1348 0(0.00%) 1088(1088|0) venenoso13 2 0.20% 497 0(0.00%) 5(5|0) venenoso19 1 0.30% 261 0(0.00%) 261(261|0) venenoso4 1 0.30% 252 0(0.00%) 252(252|0) venenoso18 1 0.80% 164 0(0.00%) 164(164|0) venenoso3 1 3.70% 37 0(0.00%) 37(37|0) venenoso6 1 3.80% 36 0(0.00%) 36(36|0) venenoso17 1 15.90% 8 0(0.00%) 8(8|0) venenoso10 1 18.00% 7 0(0.00%) 7(7|0) venenoso9 2 0.40% 2335 0(0.00%) 0(0|0) ingerible15 2 0.50% 104 1(1.00%) 0(0|0) ingerible12 2 0.60% 21 0(0.00%) 0(0|0) ingerible2 1 0.80% 178 0(0.00%) 0(0|0) ingerible1 1 0.80% 168 0(0.00%) 0(0|0) ingeribleProbadas 5416, errores 1 (0.00%)Evaluación sobre los datos <strong>de</strong> prueba:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se5 1 0.10% 812 0(0.00%) 784(784|0) venenoso13 2 0.20% 111 0(0.00%) 27(27|0) venenoso156 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente19 1 0.30% 27 0(0.00%) 27(27|0) venenoso4 1 0.30% 36 0(0.00%) 36(36|0) venenoso18 1 0.80% 92 0(0.00%) 92(92|0) venenoso3 1 3.70% 155 0(0.00%) 155(155|0) venenoso10 1 18.00% 65 0(0.00%) 65(65|0) venenoso9 2 0.40% 881 0(0.00%) 0(0|0) ingerible15 2 0.50% 72 7(9.70%) 0(0|0) ingerible12 2 0.60% 3 0(0.00%) 0(0|0) ingerible2 1 0.80% 222 0(0.00%) 0(0|0) ingerible1 1 0.80% 232 0(0.00%) 0(0|0) ingeribleProbadas 2708, errores 7 (0.30%)C<strong>la</strong>sificación general en los datos <strong>de</strong> prueba:C<strong>la</strong>sificado como ingerible C<strong>la</strong>sificado como venenosoC<strong>la</strong>se ingerible 1403 0C<strong>la</strong>se venenoso 7 12985.4.4.3. ConclusionesEl árbol <strong>de</strong> <strong>de</strong>cisión obtenido utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisión es <strong>de</strong> mayor tamaño que elobtenido utilizando <strong>la</strong> proporción <strong>de</strong> ganancia. Esta diferencia se origina por <strong>la</strong> preferencia <strong>de</strong> <strong>la</strong> gananciapor atributos con más cantidad <strong>de</strong> valores. Veamos que en <strong>la</strong> rama Olor=ninguno, el método que utilizó <strong>la</strong>ganancia dividió los datos según el atributo color_sombrero que toma diez valores distintos, mientras queel método que utilizó <strong>la</strong> proporción <strong>de</strong> ganancia, dividió los datos según el atributo Tamaño_membranaque tiene dos valores posibles. En este caso, el hecho <strong>de</strong> que un árbol sea <strong>de</strong> mayor tamaño no favorece <strong>la</strong>performance <strong>de</strong>l mismo: el segundo árbol, más pequeño, tuvo una mejor performance en los casos <strong>de</strong>prueba, ya que c<strong>la</strong>sificó solo 7 <strong>de</strong> ellos erróneamente, mientras que el árbol generado con <strong>la</strong> gananciac<strong>la</strong>sificó 25 erróneamente. A pesar <strong>de</strong> esta diferencia, <strong>la</strong> estimación <strong>de</strong>l error sobre futuros casos es muybuena para los dos árboles: <strong>de</strong>l 0.6% para el generado utilizando <strong>la</strong> ganancia y <strong>de</strong>l 0.5% para el generadoutilizando <strong>la</strong> proporción <strong>de</strong> ganancia.Cabe <strong>de</strong>stacar que en el árbol <strong>de</strong> <strong>de</strong>cisión generado utilizando <strong>la</strong> proporción <strong>de</strong> ganancia, el subárbololor=ninguno y tamaño_membrana=fina se simplificó por una rama hija, que no contiene al atributo porel cual se realizó <strong>la</strong> primera división. Es <strong>de</strong>cir, en el árbol sin simplificar <strong>la</strong> división en el nodo encuestión se realizó según el atributo ColorTronco_arriba_anillo; este atributo no aparece en el árbolsimplificado.En cuanto a <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión, a pesar <strong>de</strong> que <strong>la</strong>s primeras fueron obtenidas a partir <strong>de</strong> un árbol <strong>de</strong>mayor tamaño, son menos que <strong>la</strong> cantidad <strong>de</strong> reg<strong>la</strong>s obtenidas a partir <strong>de</strong>l segundo árbol. Sin embargo, <strong>la</strong>performance sobre los datos <strong>de</strong> prueba fue igual en ambos casos.Resultados Magdalena Servente 157


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente5.4.5. Elita5.4.5.1. Utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisióndistancia_jupiter 5.42 : EOS (45.0/1.0)resonancia 0.2 :resonancia 11.51 :distancia_jupiter 0.24 : PHOCAEA (23.0)Evaluación <strong>de</strong> los resultados <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisiónEvaluación sobre los datos <strong>de</strong> entrenamiento:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación11 2(0.8%) 11 2(0.8%) (4.2%)Evaluación sobre los datos <strong>de</strong> prueba:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación11 0 (0%) 11 0(0%) (4.2%)Evaluación general:C<strong>la</strong>sificadocomo EOSC<strong>la</strong>sificadocomoFLORAC<strong>la</strong>sificadocomoKORONISC<strong>la</strong>sificadocomoMARIAC<strong>la</strong>sificadocomoPHOCAEAC<strong>la</strong>se EOS 22 0 0 0 0 0C<strong>la</strong>se FLORA 0 12 0 0 0 0C<strong>la</strong>se KORONIS 0 0 7 0 0 0C<strong>la</strong>se MARIA 0 0 0 22 0 0C<strong>la</strong>se PHOCAEA 0 0 0 0 11 0C<strong>la</strong>se THEMIS 0 0 0 0 0 53C<strong>la</strong>sificadocomoTHEMIS158 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 1SI resonancia 0.24ENTONCES Familia = PHOCAEA [94.2%]Reg<strong>la</strong> 3SI resonancia > 5.42Y distancia_jupiter


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteProbadas 127, errores 1 (0.80%)C<strong>la</strong>sificación general sobre los datos <strong>de</strong> prueba:C<strong>la</strong>sificadocomo EOSC<strong>la</strong>sificadocomoFLORAC<strong>la</strong>sificadocomoKORONISC<strong>la</strong>sificadocomoMARIAC<strong>la</strong>sificadocomoPHOCAEAC<strong>la</strong>se EOS 22 0 0 0 0 0C<strong>la</strong>se FLORA 0 12 0 0 0 1C<strong>la</strong>se KORONIS 0 0 7 0 0 0C<strong>la</strong>se MARIA 0 0 1 21 0 0C<strong>la</strong>se PHOCAEA 0 0 0 0 11 0C<strong>la</strong>se THEMIS 0 0 0 1 0 53C<strong>la</strong>sificado comoTHEMIS5.4.3.2. Utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisióndistancia_jupiter 5.42 : EOS (45.0/1.0)resonancia 0.2 :resonancia 11.51 :distancia_jupiter 0.24 : PHOCAEA (23.0)Evaluación <strong>de</strong> los resultados <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisiónEvaluación sobre los datos <strong>de</strong> entrenamiento:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación11 2(0.8%) 11 2(0.8%) (4.2%)Evaluación sobre los datos <strong>de</strong> prueba:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación11 0 (0%) 11 0(0%) (4.2%)160 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEvaluación general:C<strong>la</strong>sificad C<strong>la</strong>sificado C<strong>la</strong>sificado C<strong>la</strong>sificado C<strong>la</strong>sificado C<strong>la</strong>sificado como como FLORA como como como o comoEOSKORONIS MARIA PHOCAEA THEMISC<strong>la</strong>se EOS 22 0 0 0 0 0C<strong>la</strong>se FLORA 0 12 0 0 0 0C<strong>la</strong>se KORONIS 0 0 7 0 0 0C<strong>la</strong>se MARIA 0 0 0 22 0 0C<strong>la</strong>se PHOCAEA 0 0 0 0 11 0C<strong>la</strong>se THEMIS 0 0 0 0 0 53Reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 1SI resonancia 0.24ENTONCES Familia = PHOCAEA [94.2%]Reg<strong>la</strong> 3SI resonancia > 5.42Y distancia_jupiter


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente3 2 5.70% 45 1(2.20%) 43(44|1) EOS4 2 2.50% 103 1(1.00%) 0(0|0) FLORAProbadas 253, errores 2 (0.80%)Evaluación sobre los datos <strong>de</strong> prueba:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se1 2 3.00% 22 0(0.00%) 22(22|0) THEMIS2 2 5.60% 12 0(0.00%) 12(12|0) KORONIS5 2 10.10% 8 1(12.50%) 6(7|1) MARIA6 2 5.80% 11 0(0.00%) 11(11|0) PHOCAEA3 2 5.70% 21 0(0.00%) 21(21|0) EOS4 2 2.50% 53 0(0.00%) 0(0|0) FLORAProbadas 127, errores 1 (0.80%)C<strong>la</strong>sificación general sobre los datos <strong>de</strong> prueba:C<strong>la</strong>sificadocomo EOSC<strong>la</strong>sificadocomoFLORAC<strong>la</strong>sificadocomoKORONISC<strong>la</strong>sificadocomoMARIAC<strong>la</strong>sificadocomoPHOCAEAC<strong>la</strong>se EOS 22 0 0 0 0 0C<strong>la</strong>se FLORA 0 12 0 0 0 1C<strong>la</strong>se KORONIS 0 0 7 0 0 0C<strong>la</strong>se MARIA 0 0 1 21 0 0C<strong>la</strong>se PHOCAEA 0 0 0 0 11 0C<strong>la</strong>se THEMIS 0 0 0 1 0 53C<strong>la</strong>sificado comoTHEMIS5.4.5.3. ConclusionesEn este caso, tanto los árboles como <strong>la</strong>s reg<strong>la</strong>s obtenidas son iguales si se utiliza <strong>la</strong> ganancia o <strong>la</strong>proporción <strong>de</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisión. Los árboles son pequeños y poco frondosos, lo cualfacilita su comprensión. A<strong>de</strong>más, no c<strong>la</strong>sifican ningún ejemplo erróneamente en los datos <strong>de</strong> prueba.Las reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión generadas, también son pocas, lo cual hace que su lectura sea más comprensible. Yc<strong>la</strong>sifican sólo un caso erróneamente sobre los datos <strong>de</strong> entrenamiento. Por lo tanto, po<strong>de</strong>mos <strong>de</strong>cir quetanto los árboles como <strong>la</strong>s reg<strong>la</strong>s obtenidas en este dominio constituyen un buen c<strong>la</strong>sificador.Analicemos <strong>la</strong> diferencia entre trabajar con atributos discretos y con atributos continuos. Cuandotrabajamos con atributos discretos y elegimos un atributo para dividir el conjunto en <strong>la</strong> raíz, este atributono participa en <strong>la</strong>s divisiones posteriores. Es <strong>de</strong>cir, como hay una rama <strong>de</strong>scendiente <strong>de</strong> ese nodo paracada uno <strong>de</strong> los valores <strong>de</strong>l atributo, todos los subconjuntos posteriores tienen un único valor para eseatriburo, con lo cual, nunca ofrecerá una mayor ganancia o proporción <strong>de</strong> ganancia que los <strong>de</strong>másatributos. Por lo tanto, no existirá otro nodo, <strong>de</strong>scendiente <strong>de</strong>l anterior, que utilice a dicho atributo comoprueba <strong>de</strong> valor. En cambio, cuando un atributo continuo se utiliza como prueba <strong>de</strong> valor en un nodo, el162 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteC4.5 divi<strong>de</strong> a los datos <strong>de</strong> acuerdo al resultado <strong>de</strong> <strong>la</strong> mejor binarización, con lo cual, <strong>la</strong> prueba <strong>de</strong> valorrealizada en el nodo es una pregunta acerca <strong>de</strong> si el valor <strong>de</strong>l atributo supera o no un <strong>de</strong>terminado umbral.Pue<strong>de</strong> utilizarse, no obstante, el mismo atributo para dividir los datos en un nodo hijo, variará el valorumbral por el que se realiza <strong>la</strong> binarización. Lo mismo ocurre con los antece<strong>de</strong>ntes en <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong><strong>de</strong>cisión. Observemos que este fenómeno se presenta tanto en los árboles como en <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónobtenidos en este caso, ya que <strong>la</strong> prueba <strong>de</strong> valor distancia_jupiter se repite en nodos padres e hijos, y estápresente en más <strong>de</strong> un antece<strong>de</strong>nte en <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión.5.4.6. Hipotiroidismo5.4.6.1. Utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisiónTSH 6 :FTI 64 :Toma tiroxina = v: negativo (35.2)Toma tiroxina = f:Medición TSH = f: negativo (21.2)Medición TSH = v:TT4 > 150 : negativo (6.1/0.1)TT4


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteÁrbol simplificado:TSH 6 :FTI 64 :Toma tiroxina = v: negativo (35.2/1.4)Toma tiroxina = f:Medición TSH = f: negativo (21.2/1.3)Medición TSH = v:TT4 > 150 : negativo (6.1/1.4)TT4


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 12SI Toma tiroxina = fY Cirugía tiroí<strong>de</strong>a = fY TSH > 6Y TT4 64ENTONCES c<strong>la</strong>se = hipotiroi<strong>de</strong> compensado [98.9%]Reg<strong>la</strong> 1SI TSH 64ENTONCES c<strong>la</strong>se = negativo [99.5%]Reg<strong>la</strong> 9SI Medición TSH = fENTONCES c<strong>la</strong>se = negativo [99.5%]Reg<strong>la</strong> 14SI TT4 > 150ENTONCES c<strong>la</strong>se = negativo [99.4%]Reg<strong>la</strong> 8SI Cirugía tiroí<strong>de</strong>a = vENTONCES c<strong>la</strong>se = negativo [92.7%]Reg<strong>la</strong> 4SI Cirugía tiroí<strong>de</strong>a = fY TSH > 6Y FTI 6ENTONCES c<strong>la</strong>se = hipotiroi<strong>de</strong> primario [35.2%]Reg<strong>la</strong> 16C<strong>la</strong>se = hipotiroi<strong>de</strong> compensadoEvaluación <strong>de</strong> los resultados <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónEvaluación sobre los datos <strong>de</strong> entrenamiento:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se12 5 1.10% 120 0(0.00%) 0(0|0) hipotiroi<strong>de</strong> compensado1 1 0.10% 2018 1(0.00%) 1620(1620|0) negativo15 2 0.50% 41 0(0.00%) 28(28|0) negativo9 1 0.50% 247 0(0.00%) 232(232|0) negativo14 1 0.60% 6 0(0.00%) 6(6|0) negativo8 1 7.30% 7 1(14.30%) 6(6|0) negativo4 3 4.40% 59 1(1.70%) 58(58|0) hipotiroi<strong>de</strong> primario11 3 64.80% 5 2(40.00%) 1(3|2) hipotiroi<strong>de</strong> primarioProbadas 2514, errores 9 (0.4%)Resultados Magdalena Servente 165


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEvaluación sobre los datos <strong>de</strong> prueba:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se12 5 1.10% 59 2(3.40%) 0(0|0) hipotiroi<strong>de</strong> compensado1 1 0.10% 1019 1(0.10%) 816(816|0) negativo15 2 0.50% 22 0(0.00%) 20(20|0) negativo9 1 0.50% 111 0(0.00%) 106(106|0) negativo14 1 0.60% 3 0(0.00%) 3(3|0) negativo8 1 7.30% 5 1(20.00%) 3(3|0) negativo4 3 4.40% 29 1(3.40%) 28(28|0) hipotiroi<strong>de</strong> primario11 3 64.80% 3 1(33.33%) 1(2|1) hipotiroi<strong>de</strong> primarioProbadas 1258, errores 6 (0.5%)C<strong>la</strong>sificación general sobre los datos <strong>de</strong> prueba:C<strong>la</strong>sificadocomohipertiroi<strong>de</strong>C<strong>la</strong>sificado comohipotiroi<strong>de</strong>primarioC<strong>la</strong>sificado comohipotiroi<strong>de</strong>compensadoC<strong>la</strong>sificadocomohipotiroi<strong>de</strong>secundarioC<strong>la</strong>sificadocomonegativoC<strong>la</strong>se0 0 0 0 0hipertiroi<strong>de</strong>C<strong>la</strong>se hipotiroi<strong>de</strong> 0 30 0 0 1primarioC<strong>la</strong>se hipotiroi<strong>de</strong> 0 1 64 0 0compensadoC<strong>la</strong>se hipotiroi<strong>de</strong> 0 0 0 0 1secundarioC<strong>la</strong>se negativo 0 1 2 0 11585.4.6.2. Utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisiónTSH 6 :FTI 64 :Toma tiroxina = v: negativo (35.2)Toma tiroxina = f:Medición TSH = f: negativo (21.2)Medición TSH = v:Cirugía tiroí<strong>de</strong>a = v: negativo (3.7)Cirugía tiroí<strong>de</strong>a = f:TT4 > 150 : negativo (6.1/0.1)TT4


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEvaluación <strong>de</strong> los resultados <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisiónEvaluación sobre los datos <strong>de</strong> entrenamiento:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación21 6 (0.2%) 21 6(0.2%) (0.9%)Evaluación sobre los datos <strong>de</strong> prueba:Antes <strong>de</strong> podar Después <strong>de</strong> podarTamaño Errores Tamaño Errores Estimación21 8 (0.6%) 21 8(0.6%) (0.9%)Evaluación general:C<strong>la</strong>sificadocomohipertiroi<strong>de</strong>C<strong>la</strong>sificado comohipotiroi<strong>de</strong>primarioC<strong>la</strong>sificado comohipotiroi<strong>de</strong>compensadoC<strong>la</strong>sificadocomohipotiroi<strong>de</strong>secundarioC<strong>la</strong>sificadocomonegativoC<strong>la</strong>se0 0 0 0 0hipertiroi<strong>de</strong>C<strong>la</strong>se hipotiroi<strong>de</strong> 0 28 2 0 1primarioC<strong>la</strong>se hipotiroi<strong>de</strong> 0 1 64 0 0compensadoC<strong>la</strong>se hipotiroi<strong>de</strong> 0 0 0 0 1secundarioC<strong>la</strong>se negativo 0 1 2 0 1158Reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 7SI Toma tiroxina = fY Cirugía tiroí<strong>de</strong>a = fY TSH > 6Y TT4 64ENTONCES c<strong>la</strong>se = hipotiroi<strong>de</strong> compensado [98.9%]Reg<strong>la</strong> 4SI Cirugía tiroí<strong>de</strong>a = fY TSH > 6Y FTI 6ENTONCES c<strong>la</strong>se = hipotiroi<strong>de</strong> primario [45.3%]Resultados Magdalena Servente 167


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReg<strong>la</strong> 1SI TSH 64ENTONCES c<strong>la</strong>se = negativo [99.5%]Reg<strong>la</strong> 2SI Medición TSH = fY ENTONCES c<strong>la</strong>se = negativo [99.5%]Reg<strong>la</strong> 8SI TT4 > 150ENTONCES c<strong>la</strong>se = negativo [99.4%]Reg<strong>la</strong> 5SI Cirugía tiroí<strong>de</strong>a = vENTONCES c<strong>la</strong>se = negativo [92.7%]Reg<strong>la</strong> 11C<strong>la</strong>se = hipotiroi<strong>de</strong> compensadoEvaluación <strong>de</strong> los resultados <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónEvaluación sobre los datos <strong>de</strong> prueba:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se7 5 1.10% 120 0(0.00%) 0(0|0) hipotiroi<strong>de</strong> compensado4 3 4.40% 59 1(1.70%) 58(58|0) hipotiroi<strong>de</strong> primario6 3 54.70% 4 1(25.00%) 2(3|1) hipotiroi<strong>de</strong> primario1 1 0.10% 2018 1(0.00%) 1620(1620|0) negativo10 2 0.50% 41 0(0.00%) 28(28|0) negativo2 1 0.50% 247 0(0.00%) 232(232|0) negativo8 1 0.60% 6 0(0.00%) 6(6|0) negativo5 1 7.30% 7 1(14.30%) 6(6|0) negativoProbadas 2514, errores 8 (0.3%)Evaluación sobre los datos <strong>de</strong> entrenamiento:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se7 5 1.10% 59 2(3.40%) 0(0|0) hipotiroi<strong>de</strong> compensado4 3 4.40% 29 1(3.40%) 28(28|0) hipotiroi<strong>de</strong> primario6 3 54.70% 1 1(100.00%) -1(0|1) hipotiroi<strong>de</strong> primario1 1 0.10% 1019 1(0.10%) 816(816|0) negativo10 2 0.50% 22 0(0.00%) 20(20|0) negativo2 1 0.50% 111 0(0.00%) 106(106|0) negativo8 1 0.60% 3 0(0.00%) 3(3|0) negativo5 1 7.30% 5 1(20.00%) 4(4|0) negativoProbadas 1258, errores 8 (0.6%)168 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteC<strong>la</strong>sificación general <strong>de</strong> los datos <strong>de</strong> prueba:C<strong>la</strong>sificadocomohipertiroi<strong>de</strong>C<strong>la</strong>sificado comohipotiroi<strong>de</strong>primarioC<strong>la</strong>sificado comohipotiroi<strong>de</strong>compensadoC<strong>la</strong>sificadocomohipotiroi<strong>de</strong>secundarioC<strong>la</strong>sificadocomonegativoC<strong>la</strong>se0 0 0 0 0hipertiroi<strong>de</strong>C<strong>la</strong>se hipotiroi<strong>de</strong> 0 28 2 0 1primarioC<strong>la</strong>se hipotiroi<strong>de</strong> 0 1 64 0 0compensadoC<strong>la</strong>se hipotiroi<strong>de</strong> 0 0 0 0 1secundarioC<strong>la</strong>se negativo 0 1 2 0 11585.4.6.3. ConclusionesEl árbol <strong>de</strong> <strong>de</strong>cisión obtenido utilizando <strong>la</strong> ganancia sin simplificar tiene mayor tamaño que el obtenidoutilizando <strong>la</strong> proporción <strong>de</strong> ganancia. No obstante, al simplificar el primer árbol se obtiene un árbol máspequeño que ambos. En cuanto a <strong>la</strong> proporción <strong>de</strong> error, es igual para el árbol generado utilizando <strong>la</strong>ganancia y el generado utilizando <strong>la</strong> proporción <strong>de</strong> ganancia. Por lo tanto, podríamos afirmar que eltamaño no parece estar re<strong>la</strong>cionado con <strong>la</strong> performance.En cuanto a <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión, en ambos casos se obtuvieron nueve reg<strong>la</strong>s. La proporción <strong>de</strong> errorobservada en <strong>la</strong>s reg<strong>la</strong>s generadas utilizando <strong>la</strong> ganancia, es <strong>la</strong> menor <strong>de</strong> todas <strong>la</strong>s observadas para estedominio.5.4.7. I<strong>de</strong>ntificación <strong>de</strong> vidrios5.4.7.1. Utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisiónMg 1 :Ca


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteCa > 6 : vidrios_para_construcciones_no_float (13.0/1.0)Ca > 7 :Mg 2 :Si > 72 : vidrios_float_para_construcciones (21.0/6.0)Si 7 : vidrios_float_para_construcciones (91.0/48.8)Ca


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEvaluación general:C<strong>la</strong>sevidrios_float_para_construccionesC<strong>la</strong>sevidrios_para_construcciones_no_floatC<strong>la</strong>sevidrios_float_para_vehiculosC<strong>la</strong>sevidrios_para_vehículos_no_floatC<strong>la</strong>sificadoscomovidrios_float_para_construccionesC<strong>la</strong>sificadoscomovidrios_para_construcciones_no_floatC<strong>la</strong>sificadoscomovidrios_float_para_vehiculosC<strong>la</strong>sificadoscomovidrios_para_vehículos_no_floatC<strong>la</strong>sificadoscomocontenedoresC<strong>la</strong>sificadoscomovajil<strong>la</strong>22 1 0 0 0 0 019 6 0 0 0 0 06 0 0 0 0 0 00 0 0 0 0 0 0C<strong>la</strong>se contenedores 0 3 0 0 1 0 0C<strong>la</strong>se vajil<strong>la</strong> 2 1 0 0 0 0 0C<strong>la</strong>se <strong>la</strong>mparitas 0 1 0 0 1 0 8C<strong>la</strong>sificadoscomo<strong>la</strong>mparitasReg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 8SI Al > 0Y Si > 72Y Ca > 9ENTONCES c<strong>la</strong>se = contenedores [70.7%]Reg<strong>la</strong> 5SI Al > 2ENTONCES c<strong>la</strong>se = contenedores [63.0%]Reg<strong>la</strong> 2SI Na > 13Y Mg


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReg<strong>la</strong> 10SI Mg > 1Y Ca > 6Y Ca 7ENTONCES c<strong>la</strong>se = vidrios_float_para_construcciones [48.0%]Reg<strong>la</strong> 15C<strong>la</strong>se = vidrios_para_construcciones_no_floatEvaluación <strong>de</strong> los resultados <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónEvaluación sobre los datos <strong>de</strong> entrenamiento:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se8 3 29.30% 4 0(0.00%) 4(4|0) contenedores5 1 37.00% 3 0(0.00%) 3(3|0) contenedores2 5 37.00% 3 0(0.00%) 3(3|0) vajil<strong>la</strong>3 3 15.90% 8 0(0.00%) 5(5|0) <strong>la</strong>mparitas4 4 20.60% 9 1(11.10%) 8(8|0) <strong>la</strong>mparitas1 4 50.00% 2 0(0.00%) 2(2|0) <strong>la</strong>mparitas10 3 19.10% 13 1(7.70%) 0(0|0) vidrios_para_construcciones_no_float7 3 33.80% 7 1(14.30%) 0(0|0) vidrios_para_construcciones_no_float14 2 52.00% 82 39(47.60%) 16(43|27) vidrios_float_para_construccionesProbadas 143, errores 48 (33.6%)Evaluación sobre los datos <strong>de</strong> prueba:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se8 3 29.30% 1 0(0.00%) 1(1|0) contenedores3 3 15.90% 6 0(0.00%) 5(5|0) <strong>la</strong>mparitas4 4 20.60% 3 0(0.00%) 3(3|0) <strong>la</strong>mparitas10 3 19.10% 4 1(25.00%) 0(0|0) vidrios_para_construcciones_no_float7 3 33.80% 6 4(66.67%) 0(0|0) vidrios_para_construcciones_no_float14 2 52.00% 42 21(50.00%) 6(21|15) vidrios_float_para_construccionesProbadas 71, errores 30 (42.3%)172 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteC<strong>la</strong>sificación general en los datos <strong>de</strong> prueba:C<strong>la</strong>sevidrios_float_para_construccionesC<strong>la</strong>sevidrios_para_construcciones_no_floatC<strong>la</strong>sevidrios_float_para_vehiculosC<strong>la</strong>sevidrios_para_vehículos_no_floatC<strong>la</strong>sificadoscomovidrios_float_para_construccionesC<strong>la</strong>sificadoscomovidrios_para_construcciones_no_floatC<strong>la</strong>sificadoscomovidrios_float_para_vehiculosC<strong>la</strong>sificadoscomovidrios_para_vehículos_no_floatC<strong>la</strong>sificadoscomocontenedoresC<strong>la</strong>sificados comovajil<strong>la</strong>21 2 0 0 0 0 015 10 0 0 0 0 06 0 0 0 0 0 00 0 0 0 0 0 0C<strong>la</strong>se contenedores 0 3 0 0 1 0 0C<strong>la</strong>se vajil<strong>la</strong> 0 3 0 0 0 0 0C<strong>la</strong>se <strong>la</strong>mparitas 0 1 0 0 0 0 9C<strong>la</strong>sificadoscomo<strong>la</strong>mparitas5.4.7.2. Utilizando <strong>la</strong> proporción ganancia como criterio <strong>de</strong> <strong>de</strong>cisiónÁrbol <strong>de</strong> <strong>de</strong>cisiónMg 1 :Ba > 0 : contenedores (2.0/1.0)Ba 13 : vidrios_float_para_construcciones (6.0/3.0)Na 72 : vidrios_float_para_construcciones (21.0/6.0)Si


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteÁrbol simplificadoMg 1 :Ba > 0 : contenedores (2.0/1.8)Ba


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteC<strong>la</strong>se0 0 0 0 0 0 0vidrios_para_vehículos_no_floatC<strong>la</strong>se contenedores 0 3 0 0 1 0 0C<strong>la</strong>se vajil<strong>la</strong> 2 1 0 0 0 0 0C<strong>la</strong>se <strong>la</strong>mparitas 0 1 0 0 1 0 8Reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónReg<strong>la</strong> 8SI Al > 0Y Si > 72Y Ca > 9ENTONCES c<strong>la</strong>se = contenedores [70.7%]Reg<strong>la</strong> 5SI Al > 2ENTONCES c<strong>la</strong>se = contenedores [63.0%]Reg<strong>la</strong> 2SI Na > 13Y Mg


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReg<strong>la</strong> 16C<strong>la</strong>se = vidrios_para_construcciones_no_floatEvaluación <strong>de</strong> los resultados <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónEvaluación sobre los datos <strong>de</strong> entrenamiento:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se8 3 29.30% 4 0(0.00%) 4(4|0) contenedores5 1 37.00% 3 0(0.00%) 3(3|0) contenedores2 5 37.00% 3 0(0.00%) 3(3|0) vajil<strong>la</strong>3 3 15.90% 8 0(0.00%) 5(5|0) <strong>la</strong>mparitas4 4 20.60% 9 1(11.10%) 8(8|0) <strong>la</strong>mparitas1 4 50.00% 2 0(0.00%) 2(2|0) <strong>la</strong>mparitas11 3 19.10% 13 1(7.70%) 0(0|0) vidrios_para_construcciones_no_float7 3 33.80% 7 1(14.30%) 0(0|0) vidrios_para_construcciones_no_float15 3 38.30% 21 6(28.60%) 9(15|6) vidrios_float_para_construcciones10 2 48.50% 23 9(39.10%) 10(14|4) vidrios_float_para_construccionesProbadas 143, errores 45 (31.5%)Evaluación sobre los datos <strong>de</strong> prueba:Reg<strong>la</strong> Tamaño Error Usada Errores Ventaja C<strong>la</strong>se8 3 29.30% 1 0(0.00%) 1(1|0) contenedores3 3 15.90% 6 0(0.00%) 5(5|0) <strong>la</strong>mparitas4 4 20.60% 3 0(0.00%) 3(3|0) <strong>la</strong>mparitas11 3 19.10% 4 1(25.00%) 0(0|0) vidrios_para_construcciones_no_float7 3 33.80% 6 4(66.67%) 0(0|0) vidrios_para_construcciones_no_float15 3 38.30% 9 5(55.60%) 1(4|3) vidrios_float_para_construcciones10 2 48.50% 14 6(42.90%) 5(8|3) vidrios_float_para_construccionesProbadas 71, errores 30 (42.3%)176 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteC<strong>la</strong>sificación general en los datos <strong>de</strong> prueba:C<strong>la</strong>sevidrios_float_para_construccionesC<strong>la</strong>sevidrios_para_construcciones_no_floatC<strong>la</strong>sevidrios_float_para_vehiculosC<strong>la</strong>sevidrios_para_vehículos_no_floatC<strong>la</strong>sificadoscomovidrios_float_para_construccionesC<strong>la</strong>sificadoscomovidrios_para_construcciones_no_floatC<strong>la</strong>sificadoscomovidrios_float_para_vehiculosC<strong>la</strong>sificadoscomovidrios_para_vehículos_no_floatC<strong>la</strong>sificadoscomocontenedoresC<strong>la</strong>sificados comovajil<strong>la</strong>12 11 0 0 0 0 06 19 0 0 0 0 02 4 0 0 0 0 00 0 0 0 0 0 0C<strong>la</strong>se contenedores 0 3 0 0 1 0 0C<strong>la</strong>se vajil<strong>la</strong> 2 1 0 0 0 0 0C<strong>la</strong>se <strong>la</strong>mparitas 1 0 0 0 0 0 9C<strong>la</strong>sificadoscomo<strong>la</strong>mparitas5.4.7.3. ConclusionesEn este caso los mo<strong>de</strong>los obtenidos utilizando <strong>la</strong> ganancia y <strong>la</strong> proporción <strong>de</strong> ganancia son distintos,aunque el tamaño <strong>de</strong> los árboles <strong>de</strong> <strong>de</strong>cisión sea el mismo, y <strong>la</strong> diferencia en <strong>la</strong> cantidad <strong>de</strong> reg<strong>la</strong>sobtenidas sea <strong>de</strong> una reg<strong>la</strong>. Para ambos árboles <strong>de</strong> <strong>de</strong>cisión el porcentaje <strong>de</strong> error sobre los datos <strong>de</strong>prueba es <strong>de</strong>l 47.9%. Mientras que para los conjuntos <strong>de</strong> reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión es <strong>de</strong>l 42.3%. Aunque en estesegundo caso <strong>la</strong> performance sea mejor, no po<strong>de</strong>mos afirmar que un c<strong>la</strong>sificador con el 42% <strong>de</strong> error seaconfiable.5.5. COMPARACIÓN DE LOS RESULTADOS OBTENIDOS CON ELID3 Y CON EL C4.55.5.1. CréditosAnalizando <strong>la</strong> figura 5.1 vemos que para los árboles obtenidos con el C4.5 se obtuvo una proporción <strong>de</strong>error <strong>de</strong>l 43%, mientras que para el resto <strong>de</strong> los casos, se obtuvo una proporción <strong>de</strong> error <strong>de</strong>l 35%. Noobstante, en los árboles generados con el C4.5 <strong>la</strong> estimación <strong>de</strong>l error sobre casos futuros es <strong>de</strong>l 12.4%.Resultados Magdalena Servente 177


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente50.00%45.00%43.10%43.10%40.00%35.00%35.25% 35.25% 35.25% 35.25%35.29%35.29%30.00%25.00%20.00%15.00%10.00%5.00%0.00%Figura 5.1: Porcentajes <strong>de</strong> error obtenidos en el dominio CréditosID3-ÁrbolgananciaID3-Reg<strong>la</strong>sgananciaID3-Árbolproporción<strong>de</strong> gananciaID3-Reg<strong>la</strong>sproporción<strong>de</strong> gananciaC4.5-ÁrbolgananciaC4.5-Reg<strong>la</strong>sgananciaC4.5-ÁrbolproporciónReg<strong>la</strong>s-C4.5-<strong>de</strong> ganancia proporción<strong>de</strong> gananciaLos árboles generados con el ID3 son simi<strong>la</strong>res a los generados con el C4.5 sin simplificar. La únicadiferencia <strong>de</strong>stacable es que <strong>la</strong> rama expresada en el ID3 como:Otros_Creditos = DOS CREDITOSComposición_Familiar = CASADO Y DOS HIJOSIngreso = ENTRE 451 Y 550Vivienda = ALQUILANOVivienda = PROPIA 0 IPVUServicios = BASICOS Y TICSIServicios = BASICOS, TIC Y TELNOSe simplificó en el C4.5 a:Otros Creditos = DOS CREDITOS:Composición Familiar = CASADO Y DOS HIJOS:Ingreso = ENTRE 451 Y 550: NO (4.0/1.0)Notemos que <strong>de</strong> los cuatro casos c<strong>la</strong>sificados en el C4.5 por esta rama, sólo uno se c<strong>la</strong>sificaerróneamente, y el árbol es más c<strong>la</strong>ro.En este caso, el mo<strong>de</strong>lo más simple es el presentado por los árboles <strong>de</strong> <strong>de</strong>cisión simplificados generadospor el C4.5: representan en un árbol <strong>de</strong> <strong>de</strong>cisión que tiene únicamente una raíz y tres hojas aquello que losárboles generados por el ID3 representan en un árbol <strong>de</strong> tamaño 26 y con una mayor proporción <strong>de</strong> error.El mo<strong>de</strong>lo más simple, ayuda a <strong>de</strong>stacar los atributos importantes <strong>de</strong>l problema, y, por lo tanto, a178 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteenten<strong>de</strong>rlo más profundamente. No obstante, es el que mayor proporción <strong>de</strong> error tuvo en <strong>la</strong> práctica.Entonces, antes <strong>de</strong> <strong>de</strong>cidirnos por un mo<strong>de</strong>lo, <strong>de</strong>bemos analizar <strong>la</strong> re<strong>la</strong>ción simplicidad - proporción <strong>de</strong>error.Analicemos los tamaños <strong>de</strong> los mo<strong>de</strong>los obtenidos. La figura 5.2 compara los tamaños <strong>de</strong> los árboles <strong>de</strong><strong>de</strong>cisión obtenidos para el dominio Créditos. La figura 5.3 compara <strong>la</strong> cantidad <strong>de</strong> reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónobtenidas con cada algoritmo.302520151050ID3-Árbol-gananciaC4.5-ÁrbolgananciaID3-Árbolproporción<strong>de</strong>gananciaC4.5-Árbolproporción<strong>de</strong>gananciaFigura 5.2: Tamaño <strong>de</strong> los árboles obtenidos en el dominio CréditosDel análisis <strong>de</strong> estos dos gráficos anteriores vemos que los mo<strong>de</strong>los generados para este dominio por elC4.5 fueron más pequeños y, por lo tanto, más comprensibles que los generados por el ID3. Si tuviéramosque elegir un mo<strong>de</strong>lo entre estos cuatro para representar al dominio, eligiríamos <strong>la</strong>s reg<strong>la</strong>s generadas porel C4.5, ya que son más simples que <strong>la</strong>s generadas por el ID3 y tienen una proporción <strong>de</strong> error simi<strong>la</strong>r.181614121086420ID3-Reg<strong>la</strong>sgananciaC4.5-Reg<strong>la</strong>sgananciaID3-Reg<strong>la</strong>sproporción<strong>de</strong>gananciaC4.5-Reg<strong>la</strong>sproporción<strong>de</strong>gananciaFigura 5.3: Cantidad <strong>de</strong> reg<strong>la</strong>s obtenidas en el dominio CréditosResultados Magdalena Servente 179


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente5.5.2. CardiologíaLa figura 5.4 muestra los porcentajes <strong>de</strong> error obtenidos con cada uno <strong>de</strong> los métodos para el dominioCardiología. Vemos que todos los porcentajes se encuentran entre el 6.45% y el 6.50%. Con lo cual, nohay ningún mo<strong>de</strong>lo que sea c<strong>la</strong>ramente superior que otro en este aspecto.7.00%6.45% 6.45% 6.45% 6.45% 6.50% 6.50% 6.50% 6.50%6.00%5.00%4.00%3.00%2.00%1.00%0.00%ID3-Árbol-gananciaID3-Reg<strong>la</strong>s-gananciaID3-Árbol-proporción <strong>de</strong> gananciaID3-Reg<strong>la</strong>s-proporción <strong>de</strong> gananciaC4.5-Árbol-gananciaC4.5-Reg<strong>la</strong>s-gananciaC4.5-Árbol-proporción <strong>de</strong> gananciaC4.5-Reg<strong>la</strong>s-proporción <strong>de</strong> gananciaFigura 5.4: Porcentajes <strong>de</strong> error obtenidas en el dominio CardiologíaLas figuras 5.5 y 5.6 comparan los tamaños <strong>de</strong> los mo<strong>de</strong>los obtenidos. Vemos que <strong>la</strong> cantidad <strong>de</strong> reg<strong>la</strong>sobtenidas con el ID3 es el doble <strong>de</strong> <strong>la</strong> cantidad <strong>de</strong> reg<strong>la</strong>s obtenidas con el C4.5. En el caso <strong>de</strong> los árboles<strong>de</strong> <strong>de</strong>cisión, el tamaño <strong>de</strong> los árboles obtenidos con el C4.5 es menor que <strong>la</strong> mitad <strong>de</strong>l tamaño <strong>de</strong> losárboles obtenidos con el ID3.302520151050251025ID3-ÁrbolgananciaC4.5-ÁrbolgananciaID3-Árbolproporción<strong>de</strong> ganancia10C4.5-Árbolproporción<strong>de</strong> gananciaFigura 5.5: Tamaños <strong>de</strong> los árboles <strong>de</strong> <strong>de</strong>cisión180 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente30252015105014714ID3-Reg<strong>la</strong>sgananciaC4.5-Reg<strong>la</strong>sgananciaID3-Reg<strong>la</strong>sproporción<strong>de</strong> ganancia7C4.5-Reg<strong>la</strong>sproporción<strong>de</strong> gananciaFigura 5.6: Cantidad <strong>de</strong> reg<strong>la</strong>s obtenidas en el dominio CardiologíaAnalizando los árboles <strong>de</strong> <strong>de</strong>cisión obtenidos para este dominio, po<strong>de</strong>mos <strong>de</strong>ducir que esta diferencia entamaños se <strong>de</strong>be a que el ID3 ajusta el árbol <strong>de</strong> <strong>de</strong>cisión para cubrir todos y cada uno <strong>de</strong> los datos <strong>de</strong>entrada, mientras que cada hoja <strong>de</strong> un árbol generado con el C4.5 cubre una distribución <strong>de</strong> casos y pue<strong>de</strong>contener errores. Veamos, por ejemplo, los árboles obtenidos utilizando <strong>la</strong> ganancia con ambosalgoritmos. En el caso <strong>de</strong> DURACION_DEL_ANGOR = MENOS DE 30 MIN, en el árbol obtenido conel C4.5 nos encontramos con una hoja, que cubre 33 casos, 1 sólo incorrectamente. Mientras que en elárbol obtenido con el ID3, nos encontramos con un subárbol <strong>de</strong> tamaño 10, este subárbol también cubre33 casos, ninguno incorrectamente. Ambos árboles tienen proporciones <strong>de</strong> errores simi<strong>la</strong>res. Cabeentonces preguntarnos si no es más conveniente tener hoja con un 3.03% <strong>de</strong> error en lugar <strong>de</strong> un subárbolque cubra todos los casos, sin ningún error. Recor<strong>de</strong>mos que <strong>la</strong> performance general <strong>de</strong> ambos árbolesfrente a los datos <strong>de</strong> prueba fue muy simi<strong>la</strong>r.5.5.3. VotacionesLa figura 5.7 presenta los porcentajes <strong>de</strong> error obtenidos para el dominio <strong>de</strong> Votaciones. Vemos que conel ID3 el porcentaje <strong>de</strong> error ronda el 5.20%, mientras que con el C4.5, el porcentaje <strong>de</strong> error es más bajoen el caso <strong>de</strong> ambos árboles <strong>de</strong> <strong>de</strong>cisión y <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s utilizando <strong>la</strong> ganancia. Esto es <strong>de</strong>stacable ya que sianalizamos <strong>la</strong>s figuras 5.8 y 5.9, que presentan el tamaño <strong>de</strong> los mo<strong>de</strong>los obtenidos, vemos que losmo<strong>de</strong>los obtenidos con el C4.5 son mucho menores que los obtenidos con el ID3. Si a esto le agregamosel hecho <strong>de</strong> que el porcentaje <strong>de</strong> error en tres <strong>de</strong> los mo<strong>de</strong>los es menor, po<strong>de</strong>mos concluir que en este caso<strong>la</strong> performance <strong>de</strong>l C4.5 es mejor que <strong>la</strong> <strong>de</strong>l ID3.Po<strong>de</strong>mos preguntarnos a qué se <strong>de</strong>be <strong>la</strong> diferencia en los tamaños <strong>de</strong> los mo<strong>de</strong>los generados con el ID3 ycon el C4.5. Tomemos, por ejemplo, los árboles <strong>de</strong> <strong>de</strong>cisión. En el caso <strong>de</strong> los árboles generadosutilizando <strong>la</strong> ganancia, los atributos elegidos por el ID3 y por el C4.5 para realizar <strong>la</strong> partición <strong>de</strong> losdatos son los mismos. Sin embargo, recor<strong>de</strong>mos que cada hoja <strong>de</strong>l C4.5 cubre una distribución <strong>de</strong> casos(aún en los árboles sin simplificar), entonces el árbol resultante es más simple.Resultados Magdalena Servente 181


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente6.00%5.00%5.19% 5.19% 5.19% 5.19%5.20%4.00%3.00%3.00%3.70%3.00%2.00%1.00%0.00%ID3-Árbol-gananciaID3-Reg<strong>la</strong>s-gananciaID3-Árbol-proporción <strong>de</strong> gananciaID3-Reg<strong>la</strong>s-proporción <strong>de</strong> gananciaC4.5-Árbol-gananciaC4.5-Reg<strong>la</strong>s-gananciaC4.5-Árbol-proporción <strong>de</strong> gananciaC4.5-Reg<strong>la</strong>s-proporción <strong>de</strong> gananciaFigura 5.7: Porcentajes <strong>de</strong> error obtenidas en el dominio Votaciones403435302010670ID3-Reg<strong>la</strong>sgananciaC4.5-Reg<strong>la</strong>sgananciaID3-Reg<strong>la</strong>sproporción<strong>de</strong> gananciaC4.5-Reg<strong>la</strong>sproporción<strong>de</strong> gananciaFigura 5.8: Tamaño <strong>de</strong> los árboles <strong>de</strong> <strong>de</strong>cisión obtenidos en el dominio Votaciones70605040302010057758ID3-ÁrbolgananciaC4.5-ÁrbolgananciaID3-Árbolproporción<strong>de</strong>ganancia7C4.5-Árbolproporción<strong>de</strong>gananciaFigura 5.9: Cantidad <strong>de</strong> reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión obtenidas en el dominio VotacionesA continuación, en <strong>la</strong>s figuras 5.10 y 5.11 se presentan ambos árboles <strong>de</strong> <strong>de</strong>cisión y se pue<strong>de</strong>n apreciar <strong>la</strong>ssimplificaciones realizadas por el C4.5.182 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteCong_honorarios_medicos = a_favorReduccion_corp_Synfuels = a_favorExport_sin_impuestos = a_favor<strong>de</strong>mocrataExport_sin_impuestos = <strong>de</strong>sconocidorepublicanoExport_sin_impuestos = en_contraPresupuesto_<strong>de</strong>_educacion = a_favorDer_<strong>de</strong>manda_Superfund = a_favorParticip_proy_agua = a_favorrepublicanoParticip_proy_agua = en_contraActa_sudaf_admin_export = a_favorrepublicanoActa_sudaf_admin_export = <strong>de</strong>sconocidorepublicanoActa_sudaf_admin_export = en_contraNiños discapacitados = a_favorrepublicanoNiños discapacitados = en_contra<strong>de</strong>mocrataDer_<strong>de</strong>manda_Superfund = en_contraDemocrata (1)Presupuesto_<strong>de</strong>_educacion = <strong>de</strong>sconocido<strong>de</strong>mocrataPresupuesto_<strong>de</strong>_educacion = en_contraActa_sudaf_admin_export = a_favorAdop_resolucion_presup = a_favorrepublicanoAdop_resolucion_presup = en_contraAyuda_a_El_Salvador = a_favorrepublicanoAyuda_a_El_Salvador = en_contra<strong>de</strong>mocrataActa_sudaf_admin_export = <strong>de</strong>sconocido<strong>de</strong>mocrataActa_sudaf_admin_export = en_contraDemocrata (2)Reduccion_corp_Synfuels = <strong>de</strong>sconocidorepublicanoReduccion_corp_Synfuels = en_contraExport_sin_impuestos = a_favorInmigracion = a_favorrepublicanoInmigracion = en_contraActa_sudaf_admin_export = a_favor<strong>de</strong>mocrataActa_sudaf_admin_export = <strong>de</strong>sconocidoParticip_proy_agua = a_favorrepublicanoParticip_proy_agua = en_contra<strong>de</strong>mocrataActa_sudaf_admin_export = en_contrarepublicanoExport_sin_impuestos = <strong>de</strong>sconocidorepublicanoExport_sin_impuestos = en_contraAdop_resolucion_presup = a_favorActa_sudaf_admin_export = a_favorrepublicanoActa_sudaf_admin_export = <strong>de</strong>sconocidoNiños discapacitados = a_favorrepublicanoNiños discapacitados = en_contra<strong>de</strong>mocrataAdop_resolucion_presup = en_contraRepublicano (3)Cong_honorarios_medicos = <strong>de</strong>sconocidoMisil_mx = a_favorProhib_pruebas_anti_satel = a_favor<strong>de</strong>mocrataProhib_pruebas_anti_satel = <strong>de</strong>sconocido<strong>de</strong>mocrataProhib_pruebas_anti_satel = en_contraRepublicano (4)Misil_mx = <strong>de</strong>sconocidorepublicanoResultados Magdalena Servente 183


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteMisil_mx = en_contra<strong>de</strong>mocrataCong_honorarios_medicos = en_contraPresupuesto_<strong>de</strong>_educacion = a_favor<strong>de</strong>mocrataPresupuesto_<strong>de</strong>_educacion = <strong>de</strong>sconocidoAdop_resolucion_presup = a_favor<strong>de</strong>mocrataAdop_resolucion_presup = en_contrarepublicanoPresupuesto_<strong>de</strong>_educacion = en_contraDemocrata (5)Figura 5.10: Árbol generado por el ID3 para el dominio Votaciones utilizando <strong>la</strong> gananciacong_honorarios_medicos = en_contra: <strong>de</strong>mocrata (168.0/1.0) (5)cong_honorarios_medicos = a_favor:reduccion_corp_Synfuels = en_contra: republicano (97.0/3.0) (3)reduccion_corp_Synfuels = <strong>de</strong>sconocido: republicano (4.0)reduccion_corp_Synfuels = a_favor:export_sin_impuestos = a_favor: <strong>de</strong>mocrata (2.0)export_sin_impuestos = <strong>de</strong>sconocido: republicano (1.0)export_sin_impuestos = en_contra:presupuesto_<strong>de</strong>_educación = a_favor: republicano (13.0/2.0) (1)presupuesto_<strong>de</strong>_educación = en_contra: <strong>de</strong>mocrata (5.0/2.0) (2)presupuesto_<strong>de</strong>_educación = <strong>de</strong>sconocido: <strong>de</strong>mocrata (1.0)cong_honorarios_medicos = <strong>de</strong>sconocido:misil_mx = a_favor: <strong>de</strong>mocrata (4.0/1.0) (4)misil_mx = en_contra: <strong>de</strong>mocrata (3.0)misil_mx = <strong>de</strong>sconocido: republicano (2.0)Figura 5.11: Árbol generado por el C4.5 para el dominio Votaciones utilizando <strong>la</strong> gananciaEn el caso (1), po<strong>de</strong>mos observar que el subárbol <strong>de</strong> tamaño 10 generado por el ID3, se representó en elC4.5 con una hoja que cubre 13 casos, dos incorrectamente. En el caso (2), el C4.5 presenta una hoja quecubre 5 casos, dos <strong>de</strong> ellos erróneamente, mientras que el ID3 presenta un subárbol <strong>de</strong> tamaño 8. En elcaso (3), el subárbol presentado por el ID3 es <strong>de</strong> tamaño 17 y <strong>la</strong> hoja presentada en el mismo caso por elC4.5 c<strong>la</strong>sifica 3 casos errróneamente <strong>de</strong> 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 <strong>de</strong> <strong>de</strong>cisión contres hojas hijas. Finalmente, en el caso (5), el C4.5 se equivoca una so<strong>la</strong> vez en los 168 casos que cubre <strong>la</strong>hoja, mientras que el ID3 los c<strong>la</strong>sifica a todos correctamente con un subárbol <strong>de</strong> tamaño 6.El ID3 no generaliza los resultados <strong>de</strong> una hoja, es <strong>de</strong>cir, no permite que una hoja cubra casos <strong>de</strong> unac<strong>la</strong>se distinta a <strong>la</strong> expresada. Por lo tanto, cubre exhaustivamente todos los casos <strong>de</strong> entrenamiento.Mientras que <strong>la</strong> generalización realizada por el C4.5 permite obtener árboles más pequeños a un precioque parece ser no tan alto. Pensemos que, muchas veces es preferible tener una hoja con performance <strong>de</strong>l96.9%, como en el caso (3), que un árbol <strong>de</strong> tamaño 17. Este fenómeno que ocurre en los árbolesgenerados por el ID3 y, como consecuencia lógica, también en <strong>la</strong>s reg<strong>la</strong>s generadas por el mismo sistema,se conoce como sobreajuste. Como su nombre lo indica, se origina en que el ID3 cubre absolutamentetodos los casos <strong>de</strong> entrenamiento correctamente, ajusta el mo<strong>de</strong>lo a todos los casos <strong>de</strong> entrenamiento.184 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteExisten muchas maneras <strong>de</strong> solucionar el sobreajuste. Podríamos, por ejemplo, realizar una poda <strong>de</strong>l árbolcuando un subárbol tenga una performance mayor a una cota pre<strong>de</strong>finida, es <strong>de</strong>cir, cuando (E*100)/N seasuperior a una cota mínima <strong>de</strong> performance. Otra opción sería realizar esta simplificación y adjuntarle alárbol <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión con <strong>la</strong>s excepciones.5.5.4. Estudio sobre hongos1.00%0.90%0.80%0.70%0.60%0.50%0.40%0.30%0.20%0.10%0.00%ID3-Árbol-ganancia0.00% 0.00% 0.00% 0.00%ID3-Reg<strong>la</strong>s-gananciaID3-Árbol-proporción <strong>de</strong> gananciaID3-Reg<strong>la</strong>s-proporción <strong>de</strong> gananciaC4.5-Árbol-ganancia0.90%C4.5-Reg<strong>la</strong>s-ganancia0.30% 0.30% 0.30%C4.5-Árbol-proporción <strong>de</strong> gananciaC4.5-Reg<strong>la</strong>s-proporción <strong>de</strong> gananciaFigura 5.12: Porcentajes <strong>de</strong> error obtenidas en el dominio Estudio sobre hongosEn el caso <strong>de</strong> este dominio el porcentaje <strong>de</strong> error registrado con todos los c<strong>la</strong>sificadores no supera el 1%,como lo muestra <strong>la</strong> figura 5.12. El mayor porcentaje <strong>de</strong> error se obtuvo con el árbol <strong>de</strong> <strong>de</strong>cisión generadopor el C4.5 utilizando <strong>la</strong> ganancia, y el menor, y más <strong>de</strong>stacable, se obtuvo utilizando el ID3 con <strong>la</strong>proporción <strong>de</strong> ganancia. En este caso, todos los datos <strong>de</strong> entrenamiento fueron c<strong>la</strong>sificados correctamente.En caso <strong>de</strong> tener que optar entre alguno <strong>de</strong> los c<strong>la</strong>sificadores generados, optaríamos por los generados conel ID3 utilizando <strong>la</strong> proporción <strong>de</strong> ganancia, ya que a<strong>de</strong>más <strong>de</strong> no presentar errores, el tamaño <strong>de</strong>l árbol esaceptable, como lo muestra <strong>la</strong> figura 5.13. Mientras que <strong>la</strong> cantidad <strong>de</strong> reg<strong>la</strong>s generadas en el mismo casoes superior a <strong>la</strong>s generadas con el C4.5 utilizando <strong>la</strong> ganancia (figura 5.14), que tienen un porcentaje <strong>de</strong>error bajo.Como se <strong>de</strong>stacó en <strong>la</strong>s conclusiones particu<strong>la</strong>res <strong>de</strong> este dominio para el ID3 (Sección 5.3.4.3) y para elC4.5 (Sección 5.4.4.3), vimos que <strong>la</strong> ganancia favoreció a atributos con muchos valores diferentes frentea otros atributos que generaban una mayor ganancia neta <strong>de</strong> información pero que tenían menos valores.Resultados Magdalena Servente 185


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEste es un problema general <strong>de</strong> <strong>la</strong> ganancia y es una <strong>de</strong> <strong>la</strong>s razones por <strong>la</strong>s que se comenzó a utilizar <strong>la</strong>proporción <strong>de</strong> ganancia.50454035302520151050324425 25ID3-ÁrbolgananciaC4.5-ÁrbolgananciaID3-Árbolproporción<strong>de</strong>gananciaC4.5-Árbolproporción<strong>de</strong>gananciaFigura 5.13: Tamaño <strong>de</strong> los árboles <strong>de</strong> <strong>de</strong>cisión obtenidos en el dominio Estudio sobre hongos30252015261319151050ID3-Reg<strong>la</strong>sgananciaC4.5-Reg<strong>la</strong>sgananciaID3-Reg<strong>la</strong>sproporción<strong>de</strong>gananciaC4.5-Reg<strong>la</strong>sproporción<strong>de</strong>gananciaFigura 5.14: Cantidad <strong>de</strong> reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión obtenidas en el dominio Estudio sobre hongosSi comparamos los árboles obtenidos en cada caso, veremos que en los árboles generados con el C4.5existen muchas ramas en <strong>la</strong>s que N=E=0. Es <strong>de</strong>cir, ramas que no cubren ningún caso, pero que existenporque el C4.5 toma <strong>la</strong> información <strong>de</strong> dominio y tiene en cuenta esos posibles valores al analizar <strong>la</strong>ganancia y <strong>la</strong> proporción <strong>de</strong> ganancia en todos los casos. El ID3, en cambio, no tiene en cuentainformación <strong>de</strong> dominio, entonces, trabaja con <strong>la</strong> hipótesis <strong>de</strong> que los únicos valores válidos para losatributos son aquellos que ocurren en los datos.186 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente5.6. ANÁLISIS GENERAL DE LOS RESULTADOS OBTENIDOS5.6.1. Porcentaje <strong>de</strong> errorLa figura 5.15 muestra el porcentaje <strong>de</strong> error obtenido con cada uno <strong>de</strong> los métodos, para cada dominio. Asimple vista nos damos cuenta que en los dominios <strong>de</strong> Créditos y Análisis <strong>de</strong> Vidrios los porcentajes <strong>de</strong>error son altos para todos los métodos.60.00%50.00%40.00%30.00%20.00%CréditosCardiologíaVotacionesHongosElitaHipotiroidismoVidrios10.00%0.00%ID3-árbolesgananciaID3-reg<strong>la</strong>sgananciaID3-árbolesproporción<strong>de</strong> gananciaID3-reg<strong>la</strong>sproporción<strong>de</strong> gananciaC4.5-árbolesgananciaC4.5-reg<strong>la</strong>sgananciaC4.5-árbolespropoción<strong>de</strong> gananciaC4.5-reg<strong>la</strong>sproporción<strong>de</strong> gananciaFigura 5.15: Porcentaje <strong>de</strong> error obtenido para cada uno <strong>de</strong> los métodos en cada dominio <strong>de</strong> datosEn <strong>la</strong> figura 5.16 se han eliminado estos dos dominios para po<strong>de</strong>r analizar más c<strong>la</strong>ramente el porcentaje<strong>de</strong> error en el resto <strong>de</strong> los dominios. A partir <strong>de</strong> estos dos gráficos, podríamos <strong>de</strong>cir que no hay unmétodo 4 que genere un mo<strong>de</strong>lo c<strong>la</strong>ramente superior al resto para todos los dominios. Al contrario,podríamos <strong>de</strong>cir que el porcentaje <strong>de</strong> error en todos los casos no parece <strong>de</strong>pen<strong>de</strong>r <strong>de</strong>l método utilizadosino <strong>de</strong>l dominio analizado. Es <strong>de</strong>cir, el rango <strong>de</strong> porcentajes <strong>de</strong> error <strong>de</strong>ntro <strong>de</strong> cada uno <strong>de</strong> los dominiosparecería estar acotado.4 En este caso, por método nos referimos a <strong>la</strong> combinación <strong>de</strong> un algoritmo (ID3 o C4.5) utilizando ganancia o proporción <strong>de</strong>ganancia y generando un árbol o reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión (combinación algoritmo – criterio <strong>de</strong> <strong>de</strong>cisión – tipo <strong>de</strong> resultado).Resultados Magdalena Servente 187


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente7.00%6.00%5.00%4.00%3.00%CardiologíaVotacionesHongosElitaHipotiroidismo2.00%1.00%0.00%ID3-árbolesgananciaID3-reg<strong>la</strong>sgananciaID3-árbolesproporción<strong>de</strong> gananciaID3-reg<strong>la</strong>sproporción<strong>de</strong> gananciaC4.5-árbolesgananciaC4.5-reg<strong>la</strong>sgananciaC4.5-árbolespropoción<strong>de</strong> gananciaC4.5-reg<strong>la</strong>sproporción<strong>de</strong> gananciaFigura 5.16: Porcentaje <strong>de</strong> error obtenido para cada uno <strong>de</strong> los métodos en distintos dominios <strong>de</strong> datos5.6.2. Cantidad <strong>de</strong> datos <strong>de</strong> entrenamientoEn <strong>la</strong> figura 5.15 se presenta el porcentaje <strong>de</strong> error en función <strong>de</strong> <strong>la</strong> cantidad <strong>de</strong> datos <strong>de</strong> entrenamiento,con una línea <strong>de</strong> ten<strong>de</strong>ncia logarítmica para cada uno <strong>de</strong> los métodos. A partir <strong>de</strong> este gráfico podríamos<strong>de</strong>cir que el porcentaje <strong>de</strong> error disminuye a medida que aumenta <strong>la</strong> cantidad <strong>de</strong> datos <strong>de</strong> entrenamiento.Esto pareciera ser una conclusión lógica e intuitiva, y es simi<strong>la</strong>r a <strong>la</strong> forma en que apren<strong>de</strong>mos loshumanos: cuando nos encontramos ante una situación a <strong>la</strong> que nos hemos enfrentado múltiples veces,generalmente ya hemos aprendido cómo reaccionar.A pesar <strong>de</strong> lo que muestra el gráfico no po<strong>de</strong>mos afirmar que <strong>la</strong> re<strong>la</strong>ción “menor porcentaje <strong>de</strong> error amayor cantidad <strong>de</strong> datos <strong>de</strong> entrenamiento” sea una reg<strong>la</strong> absoluta que se cumple siempre. Para ello,habría que hacer una cantidad <strong>de</strong> pruebas que exce<strong>de</strong> los alcances <strong>de</strong> este trabajo.188 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente60.00%C4.5-árboles-ganancia50.00%C4.5-reg<strong>la</strong>s-gananciaPorcentaje <strong>de</strong> error40.00%30.00%20.00%10.00%0.00%0 1000 2000 3000 4000 5000 6000C4.5-árboles-propoción <strong>de</strong> gananciaC4.5-reg<strong>la</strong>s-proporción <strong>de</strong> gananciaID3-árboles-gananciaID3-reg<strong>la</strong>s-gananciaID3-árboles-proporción <strong>de</strong> ganancia-10.00%Cantidad <strong>de</strong> datos <strong>de</strong> entrenamientoID3-reg<strong>la</strong>s-proporción <strong>de</strong> gananciaFigura 5.15: Porcentaje <strong>de</strong> error en función <strong>de</strong> <strong>la</strong> cantidad <strong>de</strong> datos <strong>de</strong> entrenamiento. Se haagregado una línea <strong>de</strong> ten<strong>de</strong>ncia logarítmica para cada uno <strong>de</strong> los métodos.Resultados Magdalena Servente 189


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente190 Magdalena Servente Resultados


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteCAPÍTULO 6CONCLUSIONESEn este capítulo se presentan <strong>la</strong>s conclusiones <strong>de</strong>l trabajo realizado. Primero se <strong>de</strong>stacan losconceptos más importantes a tener en cuenta a <strong>la</strong> hora <strong>de</strong> aplicar algún método como el ID3 y elC4.5 (Sección 6.1.1). Luego, se analiza <strong>la</strong> búsqueda que realizan estos dos métodos en el espacio<strong>de</strong> hipótesis (Sección 6.1.2). Se extraen conclusiones a partir <strong>de</strong> los resultados obtenidos(Sección 6.2) y se analiza <strong>la</strong> solución propuesta (Sección 6.3). Finalmente, se p<strong>la</strong>ntean mejoras ytemas a tener en cuenta para continuar con el <strong>de</strong>sarrollo <strong>de</strong> este tipo <strong>de</strong> algoritmos <strong>de</strong> aprendizaje<strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> (Sección 6.4).6.1. CONCLUSIONES GENERALES6.1.1. Conceptos <strong>de</strong>stacablesA partir <strong>de</strong>l estudio realizado sobre <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> y el Aprendizaje Automático en general, y <strong>de</strong> losmétodos <strong>de</strong> <strong>la</strong> familia <strong>TDIDT</strong> en particu<strong>la</strong>r, po<strong>de</strong>mos concluir que hay varios puntos c<strong>la</strong>ves a tener encuenta al realizar Minería <strong>de</strong> <strong>Datos</strong> con algoritmos inteligentes. Entre ellos, po<strong>de</strong>mos <strong>de</strong>stacar:• El Aprendizaje <strong>de</strong> Conceptos pue<strong>de</strong> verse como una búsqueda en un gran espacio <strong>de</strong> hipótesispre<strong>de</strong>finidas [Mitchell, 1997]. En el caso <strong>de</strong> <strong>la</strong> familia <strong>TDIDT</strong> este espacio <strong>de</strong> hipótesis, estáconstituido por todos los árboles <strong>de</strong> <strong>de</strong>cisión posibles para los datos que se están analizando.• Los datos ruidosos y faltantes pue<strong>de</strong>n influir en <strong>la</strong> performance <strong>de</strong>l algoritmo, y <strong>de</strong>pen<strong>de</strong> <strong>de</strong> cadamétodo en particu<strong>la</strong>r ser robusto o no ante estas situaciones.• Los algoritmos <strong>de</strong> aprendizaje son capaces <strong>de</strong> c<strong>la</strong>sificar nuevos casos, nunca vistos para ellos, porquetienen un sesgo inductivo implícito, es <strong>de</strong>cir, realizan alguna suposición que les permite construir elmo<strong>de</strong>lo. En el caso <strong>de</strong> los algoritmos <strong>de</strong> <strong>la</strong> familia <strong>TDIDT</strong>, esta suposición implícita se divi<strong>de</strong> en dos:1. Los datos sobre los que se construye el problema son representativos <strong>de</strong>l dominio sobre el que seaplicará el mo<strong>de</strong>lo obtenido.2. Las hipótesis (árboles <strong>de</strong> <strong>de</strong>cisión en este caso) más simples se prefieren sobre <strong>la</strong>s hipótesis máscomplejas, es <strong>de</strong>cir, se aplica <strong>la</strong> Afeitadora <strong>de</strong> Occam.Conclusiones Magdalena Servente 191


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteSi el espacio <strong>de</strong> hipótesis se extendiera hasta cubrir todos los casos posibles, se eliminaría este sesgoinductivo. Sin embargo, trabajar con todos los árboles <strong>de</strong> <strong>de</strong>cisión posibles para un conjunto <strong>de</strong> datos,no permitiría realizar <strong>la</strong> c<strong>la</strong>sificación <strong>de</strong> un caso no presente en los datos <strong>de</strong> entrenamiento, ya que nosería c<strong>la</strong>sificado por ningún árbol. Es <strong>de</strong>cir, un mo<strong>de</strong>lo totalmente insesgado, no podría c<strong>la</strong>sificarnuevos casos [Mitchell, 1997].Recor<strong>de</strong>mos que no cualquier problema <strong>de</strong> Minería <strong>de</strong> <strong>Datos</strong> es apto para ser analizado mediante losalgoritmos <strong>de</strong> <strong>la</strong> familia <strong>TDIDT</strong>. Debe cumplirse que <strong>la</strong>s instancias estén constituidas por pares atributovalor,y que los resultados <strong>de</strong> <strong>la</strong> función <strong>de</strong> c<strong>la</strong>sificación sean discretos. A<strong>de</strong>más, es conveniente que losalgoritmos sean capaces <strong>de</strong> trabajar con atributos ruidosos y con atributos faltantes.6.1.2. Espacio <strong>de</strong> hipótesisComo se <strong>de</strong>stacó en <strong>la</strong> sección anterior, tanto el ID3 como el C4.5 realizan una búsqueda en un espacio <strong>de</strong>hipótesis constituido por los árboles <strong>de</strong> <strong>de</strong>cisión posibles. El espacio <strong>de</strong> hipótesis para estos algoritmos esun espacio completo según los atributos disponibles. Como cualquier función <strong>de</strong> prueba <strong>de</strong> valor <strong>de</strong>atributos pue<strong>de</strong> representarse como un árbol <strong>de</strong> <strong>de</strong>cisión, estos métodos evitan uno <strong>de</strong> los mayores riesgos<strong>de</strong> los métodos inductivos que trabajan con un espacio <strong>de</strong> hipótesis reducido: que <strong>la</strong> función resultado, ennuestro caso el árbol <strong>de</strong> <strong>de</strong>cisión, no se encuentre en el espacio <strong>de</strong> hipótesis analizado.A medida que exploran el espacio <strong>de</strong> hipótesis, los algoritmos analizados mantienen una so<strong>la</strong> hipótesisactual y no todas aquel<strong>la</strong>s consistentes con los datos analizados. Esto ocasiona que estos métodos no seancapaces <strong>de</strong> representar todos los árboles consistentes con los datos <strong>de</strong> entrada.Por otro <strong>la</strong>do, recor<strong>de</strong>mos que estos métodos no tienen vuelta atrás. Es <strong>de</strong>cir, una vez que se seleccionóun atributo como nodo <strong>de</strong>l árbol, éste nunca se cambiará; los algoritmos no vuelven atrás parareconsi<strong>de</strong>rar sus elecciones. Esto ocasiona que los algoritmos sean susceptibles <strong>de</strong> caer en un máximolocal y que converjan a una solución que no es globalmente óptima [Mitchell, 1997]. El C4.5 agrega uncierto grado <strong>de</strong> reconsi<strong>de</strong>ración <strong>de</strong> sus elecciones en <strong>la</strong> postpoda que realiza.Por último, cabe <strong>de</strong>stacar que el ID3 y el C4.5 utilizan todos los datos <strong>de</strong> entrenamiento en cada paso paraelegir el “mejor” atributo; esta elección se realiza estadísticamente. Esto es favorable frente a otrosmétodos <strong>de</strong> aprendizaje automático que analizan los datos <strong>de</strong> entrada en forma incremental. El hecho <strong>de</strong>tener en cuenta todos los datos disponibles en cada paso, resulta en una búsqueda mucho menos sensible aerrores en casos individuales.192 Magdalena Servente Conclusiones


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente6.2. ANÁLISIS DE LOS RESULTADOS OBTENIDOSDel análisis <strong>de</strong> los resultados obtenidos podríamos concluir que no hay ningún método que seapredominante frente a los otros. Es <strong>de</strong>cir, no po<strong>de</strong>mos <strong>de</strong>cir, por ejemplo, que el C4.5 que utiliza <strong>la</strong>ganancia es c<strong>la</strong>ramente superior en todos los dominios. Sin embargo, po<strong>de</strong>mos afirmar que los resultadosmuestran que <strong>la</strong> proporción <strong>de</strong> error parecería ser función <strong>de</strong>l dominio. En cada dominio, <strong>la</strong> proporción <strong>de</strong>error para los cuatro métodos analizados es simi<strong>la</strong>r: si <strong>la</strong> proporción <strong>de</strong> error es gran<strong>de</strong> para alguno <strong>de</strong> losmétodos en un dominio, seguramente lo sea también para el resto <strong>de</strong> los métodos. Si <strong>la</strong> proporción <strong>de</strong>error para alguno <strong>de</strong> los cuatro métodos en un dominio es pequeña, probablemente también sea pequeñacon los otros tres métodos.Como línea futura <strong>de</strong> trabajo, se propone analizar los datos <strong>de</strong> entrada con los cuatro métodos (ID3utilizando ganancia, ID3 utilizando proporción <strong>de</strong> ganancia, C4.5 utilizando ganancia y C4.5 utilizandoproporción <strong>de</strong> ganancia) y elegir para el nuevo dominio, el mo<strong>de</strong>lo que presenta <strong>la</strong> menor proporción <strong>de</strong>error. Teniendo en cuenta que si con el primer método <strong>la</strong> proporción <strong>de</strong> error es inaceptable,probablemente también sea inaceptable para el resto <strong>de</strong> los métodos. En cuyo caso, convendría analizar elproblema con otros métodos <strong>de</strong> aprendizaje que enfoquen <strong>la</strong> resolución <strong>de</strong>l mismo <strong>de</strong>s<strong>de</strong> otro ángulo.La cantidad <strong>de</strong> datos presentada como entrada <strong>de</strong> los algoritmos <strong>de</strong>be ser <strong>la</strong> mayor posible, ya que loscasos analizados parecen mostrar que proporción <strong>de</strong> error disminuye a medida que <strong>la</strong> cantidad <strong>de</strong> datos <strong>de</strong>entrenamiento aumenta.6.3. ANÁLISIS DE LA SOLUCIÓN PROPUESTAA partir <strong>de</strong> <strong>la</strong> solución propuesta y <strong>de</strong> los resultados analizados, po<strong>de</strong>mos respon<strong>de</strong>r a <strong>la</strong>s cuestionesp<strong>la</strong>nteadas en el Capítulo 3:Cuestión 1:¿Qué tipos <strong>de</strong> sistemas generan como resultado árboles <strong>de</strong> <strong>de</strong>cisión? La familia <strong>de</strong> los Top DownInduction Trees (<strong>TDIDT</strong>) analiza datos previamente c<strong>la</strong>sificados y genera árboles <strong>de</strong> inducción paralos mismos. Nuestro análisis se enfocó en dos algoritmos <strong>de</strong> dicha familia, el ID3 creado por Quin<strong>la</strong>na mediados <strong>de</strong> los años 80 [Quin<strong>la</strong>n, 1986] y el C4.5 creado por Quin<strong>la</strong>n unos años más tar<strong>de</strong>[Quin<strong>la</strong>n, 1993d]. Estos algoritmos generan como resultado árboles <strong>de</strong> <strong>de</strong>cisión que pue<strong>de</strong>n aplicarsetanto por un operador humano como por una máquina para c<strong>la</strong>sificar nuevos casos.Conclusiones Magdalena Servente 193


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteCuestión 2:¿Qué condiciones <strong>de</strong>ben cumplir los datos para que su análisis con el ID3 o el C4.5 sea útil yválido? Como expresamos con anterioridad, no todos los datos son aptos para ser analizados con elID3 y el C4.5. En líneas generales, estos algoritmos trabajan con problemas <strong>de</strong> c<strong>la</strong>sificación, es <strong>de</strong>cir,problemas don<strong>de</strong> <strong>la</strong>s instancias pertenecen o no a una c<strong>la</strong>se. De esta manera, el árbol <strong>de</strong> <strong>de</strong>cisióngenerado contiene en <strong>la</strong>s hojas <strong>la</strong>s distintas c<strong>la</strong>ses a <strong>la</strong>s que pue<strong>de</strong>n pertenecer los datos.Cuestión 3:¿Qué tan fácil es para un humano trabajar con estos algoritmos? Se p<strong>la</strong>nteó el <strong>de</strong>sarrollo <strong>de</strong> unambiente integrado, en el que un usuario pue<strong>de</strong> fácilmente aplicar estos dos algoritmos a bases <strong>de</strong>datos existentes. El usuario <strong>de</strong>be lidiar con una interface gráfica mucho más amigable <strong>de</strong> por sí que <strong>la</strong>línea <strong>de</strong> comandos, en don<strong>de</strong>, con una simple marca pue<strong>de</strong> aplicar el ID3 o el C4.5 a <strong>la</strong> base <strong>de</strong> datosque seleccionó previamente.Cuestión 4:¿Cuáles son los resultados <strong>de</strong>l sistema? A<strong>de</strong>más, <strong>de</strong> producir los árboles <strong>de</strong> <strong>de</strong>cisión, el sistemagenera un conjunto <strong>de</strong> reg<strong>la</strong>s <strong>de</strong> producción que pue<strong>de</strong>n aplicarse para c<strong>la</strong>sificar nuevos casos. Lainterpretación <strong>de</strong> este conjunto <strong>de</strong> reg<strong>la</strong>s <strong>de</strong>be hacerse en or<strong>de</strong>n: se leen hasta que el antece<strong>de</strong>nte <strong>de</strong>alguna <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s satisfaga el caso en cuestión, entonces se lee el consecuente para obtener <strong>la</strong> c<strong>la</strong>se.El sistema también presenta como resultado, <strong>la</strong> evaluación <strong>de</strong> los mo<strong>de</strong>los generados sobre un nuevoconjunto <strong>de</strong> datos <strong>de</strong> prueba.Cuestión 5:¿Cómo po<strong>de</strong>mos medir <strong>la</strong> calidad <strong>de</strong> los resultados obtenidos? Una vez generado el mo<strong>de</strong>lo <strong>de</strong><strong>de</strong>cisión, el usuario pue<strong>de</strong> elegir <strong>la</strong> opción <strong>de</strong> evaluarlo contra un conjunto <strong>de</strong> datos <strong>de</strong> prueba,inéditos para el sistema. Básicamente, el sistema c<strong>la</strong>sifica estos datos <strong>de</strong> prueba y compara <strong>la</strong>s c<strong>la</strong>sesobtenidas contra <strong>la</strong>s que <strong>de</strong>bería haber obtenido, generando una matriz <strong>de</strong> c<strong>la</strong>sificación. De estamanera, se obtiene una medida <strong>de</strong> <strong>la</strong> calidad <strong>de</strong>l sistema <strong>de</strong> información generado, bajo el supuestoque tanto los datos <strong>de</strong> entrenamiento como los <strong>de</strong> prueba sean representativos <strong>de</strong> <strong>la</strong> realidad a <strong>la</strong> cualel mo<strong>de</strong>lo <strong>de</strong> c<strong>la</strong>sificación generado se verá enfrentado una vez que entre en funcionamiento.194 Magdalena Servente Conclusiones


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente6.4. UNA MIRADA AL FUTUROLos algoritmos analizados no c<strong>la</strong>sifican perfectamente a todos los nuevos casos, a pesar <strong>de</strong> que losmo<strong>de</strong>los <strong>de</strong> c<strong>la</strong>sificación presentados son entendibles y aceptables. Quedan cuestiones sin resolver,posibles mejoras y futuras líneas <strong>de</strong> trabajo que se p<strong>la</strong>ntean a continuación6.4.1. Atributos multivaluados en el ID3 y el C4.5Cuando alguno <strong>de</strong> los algoritmos realiza <strong>la</strong> partición <strong>de</strong> los casos <strong>de</strong> entrenamiento según los valores <strong>de</strong>los atributos siguiendo el método <strong>de</strong> divi<strong>de</strong> y reinarás, los resultados son útiles en <strong>la</strong> medida en que losvalores <strong>de</strong>l atributo según el cual se particiona no sean <strong>de</strong>masiados. Si existen <strong>de</strong>masiados valores para e<strong>la</strong>tributo se presentan básicamente dos inconvenientes:1. Una <strong>de</strong> <strong>la</strong>s consecuencias <strong>de</strong> particionar un conjunto <strong>de</strong> entrenamiento en numerosos subconjuntos esque cada subconjunto es pequeño. Por lo tanto, aquellos patrones útiles <strong>de</strong>l subconjunto pue<strong>de</strong>ntornarse in<strong>de</strong>tectables por insuficiencia <strong>de</strong> datos.2. Si los atributos discretos varían en forma notable en sus valores, ¿po<strong>de</strong>mos estar seguros <strong>de</strong> que uncriterio como <strong>la</strong> proporción <strong>de</strong> ganancia los está evaluando <strong>de</strong> <strong>la</strong> mejor manera? La proporción <strong>de</strong>ganancia mi<strong>de</strong> <strong>la</strong> proporción <strong>de</strong> información relevante a <strong>la</strong> c<strong>la</strong>sificación, que provee <strong>la</strong> división sobre<strong>la</strong> información producida por <strong>la</strong> división en sí. El <strong>de</strong>nominador crece rápidamente a medida que <strong>la</strong>cantidad <strong>de</strong> subconjuntos se incrementa, por lo cual, el estimador <strong>de</strong>ja <strong>de</strong> ser efectivo al existirmuchos valores para un atributo. Recor<strong>de</strong>mos el ejemplo <strong>de</strong>l cálculo <strong>de</strong> <strong>la</strong> información <strong>de</strong> <strong>la</strong> divisiónsobre <strong>la</strong> c<strong>la</strong>ve primaria <strong>de</strong> un conjunto <strong>de</strong> datos (Sección 4.2.1.1.2)Si <strong>de</strong>seamos reducir el número <strong>de</strong> resultados <strong>de</strong> un atributo multivaluado, <strong>de</strong>bemos asociar uno o más <strong>de</strong>sus valores en una colección <strong>de</strong> valores <strong>de</strong> atributos o grupo <strong>de</strong> valores. En los primeros trabajos sobre eltema [Hunt et al., 1966] <strong>la</strong> única forma <strong>de</strong> agrupar valores era mediante <strong>la</strong> división binaria o binarización,como <strong>la</strong> realizada por el C4.5.En lugar <strong>de</strong> realizar este tipo <strong>de</strong> división, los algoritmos podrían asociar cada grupo <strong>de</strong> valores con una <strong>de</strong><strong>la</strong>s ramas en cantidad variable. En algunos dominios, <strong>la</strong> agrupación <strong>de</strong> valores podría <strong>de</strong>terminarse <strong>de</strong>acuerdo a los conocimientos sobre el dominio. De esta manera, a<strong>de</strong>más <strong>de</strong> mejorar el manejo <strong>de</strong> atributosmultivaluados, estaríamos incorporando información previa al sistema. De no existir agrupaciones<strong>de</strong>terminables <strong>de</strong> acuerdo al dominio, <strong>de</strong>bería seguirse otro método. Si un atributo tiene n valores, existen2 n-1 -1 divisiones binarias no triviales <strong>de</strong> estos valores, entonces para un valor <strong>de</strong> n gran<strong>de</strong> se haceimposible explorar todas estas combinaciones.Conclusiones Magdalena Servente 195


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEn cuanto al ID3, que no maneja atributos continuos, podría incorporársele <strong>la</strong> binarización utilizada por elC4.5, o un método simi<strong>la</strong>r, para que pueda trabajar con atributos <strong>de</strong> este tipo. El ID3 tal como fuepresentado, no pue<strong>de</strong> aplicarse a todos los dominios, a<strong>de</strong>más <strong>de</strong> <strong>de</strong>scartarse los dominios con c<strong>la</strong>sescontinuas, como en el C4.5, se <strong>de</strong>scartan los dominios con cualquier atributo continuo. El agregado <strong>de</strong>una mejora <strong>de</strong> este tipo lo liberaría <strong>de</strong> esta restricción y no es <strong>de</strong>masiado cara.6.4.2. El futuro <strong>de</strong> <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente¿En qué medida po<strong>de</strong>mos afirmar que <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente es efectiva? Más aún, ¿cómopo<strong>de</strong>mos estar seguros <strong>de</strong> que es útil realizar Minería <strong>de</strong> <strong>Datos</strong> Inteligente frente a cualquier problema <strong>de</strong>Minería <strong>de</strong> <strong>Datos</strong>? ¿Po<strong>de</strong>mos afirmar que siempre será efectivo aplicar, por ejemplo, <strong>la</strong> familia <strong>TDIDT</strong>cuando se busca obtener un mo<strong>de</strong>lo a partir <strong>de</strong> una gran cantidad <strong>de</strong> datos?La Ley <strong>de</strong> Conservación sostiene que ningún algoritmo pue<strong>de</strong> superar a otro cuando <strong>la</strong> medida <strong>de</strong>performance es <strong>la</strong> precisión <strong>de</strong> generalización esperada, sobre <strong>la</strong> suposición <strong>de</strong> que todos los resultadosposibles son igualmente probables. El hecho <strong>de</strong> promediar <strong>la</strong> performance <strong>de</strong> un algoritmo sobre todos loscasos posibles, asumiendo que todos son igualmente probables, sería como evaluar <strong>la</strong> performance <strong>de</strong> unauto en todos los terrenos posibles, asumiendo que todos son igualmente probables. Esta afirmación esfalsa para <strong>la</strong> práctica, ya que en un dominio en particu<strong>la</strong>r, es c<strong>la</strong>ro que no todos los casos son igualmenteprobables.Quin<strong>la</strong>n, quien ha i<strong>de</strong>ntificado familias <strong>de</strong> dominios paralelos y secuenciales, sostiene que <strong>la</strong>s re<strong>de</strong>sneuronales son más eficientes en los dominios paralelos, mientras que los algoritmos que construyenárboles <strong>de</strong> <strong>de</strong>cisión obtienen mejores resultados en los dominios secuenciales. Por lo tanto, aunque unúnico algoritmo <strong>de</strong> inducción pue<strong>de</strong> no ser óptimo en todas <strong>la</strong>s situaciones posibles, <strong>de</strong>be analizarse elmejor algoritmo para cada situación en particu<strong>la</strong>r.El campo <strong>de</strong> <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> es un campo en pleno <strong>de</strong>sarrollo, don<strong>de</strong> <strong>la</strong> mayoría <strong>de</strong> <strong>la</strong>s herramientasutilizadas provienen <strong>de</strong> otros campos re<strong>la</strong>cionados como el reconocimiento <strong>de</strong> patrones, <strong>la</strong> Estadística o <strong>la</strong>teoría <strong>de</strong> complejidad. Dada <strong>la</strong> novedad <strong>de</strong> <strong>la</strong>s investigaciones en esta área quedan todavía variosproblemas por afrontar, como ser el tamaño <strong>de</strong> los datos y el ruido en los mismos.En los últimos años se han <strong>de</strong>sarrol<strong>la</strong>do muchos sistemas <strong>de</strong> Minería <strong>de</strong> <strong>Datos</strong> y se espera que este<strong>de</strong>sarrollo continúe floreciendo dada <strong>la</strong> enorme cantidad <strong>de</strong> datos que son almacenados día a día, querequiere algún tipo <strong>de</strong> análisis, entendimiento o c<strong>la</strong>sificación. La diversidad <strong>de</strong> los datos, y <strong>de</strong> <strong>la</strong>s técnicasy enfoques <strong>de</strong> <strong>la</strong> minería <strong>de</strong> datos, son un <strong>de</strong>safío para el crecimiento <strong>de</strong> este área <strong>de</strong> <strong>la</strong> tecnología.196 Magdalena Servente Conclusiones


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteANEXO AMANUAL DEL USUARIOEn este Anexo se <strong>de</strong>scriben <strong>la</strong>s características generales <strong>de</strong>l sistema (Sección A.1) y <strong>la</strong>sfunciones <strong>de</strong> cada uno <strong>de</strong> los menúes (Sección A.2), <strong>de</strong>tal<strong>la</strong>ndo <strong>la</strong>s acciones que pue<strong>de</strong>nrealizarse con cada una <strong>de</strong> <strong>la</strong>s opciones disponibles.A.1. CARACTERÍSTICAS GENERALESEl objetivo <strong>de</strong>l sistema <strong>de</strong>sarrol<strong>la</strong>do es permitir que el usuario realice una minería <strong>de</strong> datos sobre <strong>la</strong>stab<strong>la</strong>s <strong>de</strong> su elección. La minería se lleva a cabo mediante dos algoritmos inteligentes <strong>de</strong> <strong>la</strong> familia <strong>de</strong> losárboles inductivos construidos <strong>de</strong> raíz hacia <strong>la</strong>s hojas (Top Down Induction Trees – <strong>TDIDT</strong>): el ID3 y, susucesor, el C4.5.Cuando el usuario ingresa al sistema <strong>de</strong>be seleccionar <strong>la</strong> tab<strong>la</strong> sobre <strong>la</strong> cual <strong>de</strong>sea trabajar y <strong>la</strong> columna <strong>de</strong><strong>la</strong> tab<strong>la</strong> que servirá como c<strong>la</strong>sificador. Dicha tab<strong>la</strong> <strong>de</strong>be estar en formato <strong>de</strong> Paradox 4. Una vezseleccionada <strong>la</strong> tab<strong>la</strong> <strong>de</strong> trabajo, el usuario podrá elegir el método con el cual <strong>de</strong>sea realizar <strong>la</strong> minería.Los métodos disponibles son el ID3 utilizando <strong>la</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisión, el ID3 utilizando <strong>la</strong>proporción <strong>de</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisión, el C4.5 utilizando <strong>la</strong> ganancia como criterio <strong>de</strong><strong>de</strong>cisión y el C4.5 utilizando <strong>la</strong> proporción <strong>de</strong> ganancia con el mismo propósito.Una vez finalizada <strong>la</strong> minería, el sistema mostrará en pantal<strong>la</strong> el árbol <strong>de</strong> <strong>de</strong>cisión generado. El usuariotendrá <strong>la</strong> opción <strong>de</strong> guardar dicho árbol en disco. A<strong>de</strong>más, el sistema genera un conjunto <strong>de</strong> reg<strong>la</strong>s <strong>de</strong><strong>de</strong>cisión. El formato <strong>de</strong> estas reg<strong>la</strong>s es lo suficientemente general como para que puedan aplicarse yutilizarse a posteriori para c<strong>la</strong>sificar datos cuya c<strong>la</strong>se no se conoce. Es <strong>de</strong>cir, tanto el árbol como <strong>la</strong>s reg<strong>la</strong>snos sirven para compren<strong>de</strong>r el mo<strong>de</strong>lo <strong>de</strong> c<strong>la</strong>sificación presente en los datos, y <strong>la</strong>s reg<strong>la</strong>s nos sirven parac<strong>la</strong>sificar nuevos datos <strong>de</strong> <strong>la</strong> misma base <strong>de</strong> datos que no fueron utilizados por el sistema.Manual <strong>de</strong>l usuario Magdalena Servente 197


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteA.2. FUNCIONALIDADA.2.1. Pantal<strong>la</strong> principalCuando el usuario ingresa al sistema se encontrará con <strong>la</strong> pantal<strong>la</strong> mostrada en <strong>la</strong> Figura A.1, don<strong>de</strong> podráver un menú <strong>de</strong> acceso rápido que <strong>de</strong>tal<strong>la</strong> <strong>la</strong> tab<strong>la</strong> que el usuario eligió como pre<strong>de</strong>terminada paratrabajar, y el atributo c<strong>la</strong>sificador <strong>de</strong> <strong>la</strong> misma. Si el usuario <strong>de</strong>sea realizar una minería según susopciones por <strong>de</strong>fecto pue<strong>de</strong> hacerlo rápidamente, presionando los botones <strong>de</strong> ID3 o <strong>de</strong> C4.5, <strong>de</strong>pendiendoen el tipo <strong>de</strong> método que <strong>de</strong>see utilizar.Figura A.1: Pantal<strong>la</strong> principal <strong>de</strong>l sistemaA.2.2. Descripción <strong>de</strong>l menúA continuación se <strong>de</strong>tal<strong>la</strong> cada una <strong>de</strong> <strong>la</strong>s funciones que se pue<strong>de</strong>n realizar mediante <strong>la</strong>s opciones <strong>de</strong>lmenú <strong>de</strong>l sistema.198 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteA.2.2.1. Menú ResoluciónA.2.2.1.1. ID3Con <strong>la</strong> opción ID3 <strong>de</strong>l menú Resolución, se aplica el ID3 a <strong>la</strong> tab<strong>la</strong> elegida en <strong>la</strong> pantal<strong>la</strong> <strong>de</strong> Cambio <strong>de</strong>Tab<strong>la</strong> (Menú Opciones/Cambio <strong>de</strong> Tab<strong>la</strong>). El ID3 pue<strong>de</strong> aplicarse utilizando <strong>la</strong> ganancia o <strong>la</strong> proporción<strong>de</strong> ganancia como criterio <strong>de</strong> <strong>de</strong>cisión, el criterio <strong>de</strong> <strong>de</strong>cisión se escoge según <strong>la</strong> subopción <strong>de</strong>l menú queel usuario elija.A.2.2.1.2. C4.5Al igual que con <strong>la</strong> opción anterior, con <strong>la</strong> opción C4.5 <strong>de</strong>l menú Resolución, se aplica el C4.5 a <strong>la</strong> tab<strong>la</strong>elegida en <strong>la</strong> sección <strong>de</strong> Cambio <strong>de</strong> Tab<strong>la</strong> (Menú Opciones/Cambio <strong>de</strong> Tab<strong>la</strong>). Nuevamente, se utilizará <strong>la</strong>ganancia o <strong>la</strong> proporción <strong>de</strong> ganancia <strong>de</strong> acuerdo a <strong>la</strong> opción <strong>de</strong>l menú <strong>de</strong>splegable en que el usuario hayamarcado.A.2.2.1.3. SalirLa opción Salir <strong>de</strong>l menú Resolución, cierra el programa.A.2.2.2. Menú EvaluaciónA.2.2.2.1. ID3Cuando el usuario elige esta opción se encuentra con <strong>la</strong> pantal<strong>la</strong> <strong>de</strong> <strong>la</strong> figura A.2 don<strong>de</strong> pue<strong>de</strong> elegir unatab<strong>la</strong> y una corrida sobre <strong>la</strong> cual <strong>de</strong>sea obtener una evaluación <strong>de</strong> los resultados obtenidos. Por corrida, seentien<strong>de</strong>, una fecha y hora <strong>de</strong>terminadas en <strong>la</strong>s cuales se aplicó el ID3 sobre <strong>la</strong> tab<strong>la</strong>. De esta manera,cuando el usuario hace clic sobre el botón “Aceptar” <strong>de</strong> esta pantal<strong>la</strong>, se realiza una evaluación sobre losdatos <strong>de</strong> <strong>la</strong> tab<strong>la</strong> <strong>de</strong> prueba pre<strong>de</strong>finida por el usuario y se muestran <strong>la</strong> cantidad <strong>de</strong> casos c<strong>la</strong>sificadoscorrecta e incorrectamente para cada una <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses <strong>de</strong> <strong>la</strong> tab<strong>la</strong>.A.2.2.2.1. C4.5Al hacer clic sobre esta opción <strong>de</strong> menú, el usuario podrá evaluar <strong>de</strong> manera simi<strong>la</strong>r a <strong>la</strong> explicada en <strong>la</strong>sección anterior, <strong>la</strong>s corridas realizadas con el C4.5.Manual <strong>de</strong>l usuario Magdalena Servente 199


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteFigura A.2: Elección <strong>de</strong> <strong>la</strong> tab<strong>la</strong> y <strong>la</strong> corrida que se <strong>de</strong>sean evaluarA.2.2.3. Menú OpcionesA.2.2.3.1. Ver Tab<strong>la</strong>Esta función muestra los datos <strong>de</strong> <strong>la</strong> tab<strong>la</strong> sobre <strong>la</strong> que se está trabajando.A.2.2.3.2. Cambiar Tab<strong>la</strong>Esta opción <strong>de</strong>spliega <strong>la</strong> pantal<strong>la</strong> mostrada en <strong>la</strong> figura A.3 don<strong>de</strong> el usuario pue<strong>de</strong> cambiar <strong>la</strong> tab<strong>la</strong> <strong>de</strong>trabajo y <strong>la</strong> columna <strong>de</strong>l c<strong>la</strong>sificador (c<strong>la</strong>se) <strong>de</strong> <strong>la</strong> misma. Si el usuario hace clic en “Aceptar” esta tab<strong>la</strong> seutilizará para todas <strong>la</strong>s corridas hasta que se cierre el sistema. Si el usuario hace clic en “Aplicar” estatab<strong>la</strong> quedará pre<strong>de</strong>terminada, con lo cual se utilizará para todas <strong>la</strong>s corridas posteriores y para <strong>la</strong>scorridas realizadas cuando se utilice el sistema por próxima vez; queda <strong>de</strong>terminada como tab<strong>la</strong> por<strong>de</strong>fecto.A.2.2.3.3. Parámetros <strong>de</strong>l sistemaEsta pantal<strong>la</strong>, permite cambiar los parámetros generales <strong>de</strong> trabajo que utiliza el sistema por <strong>de</strong>fecto. Losparámetros que se pue<strong>de</strong>n cambiar son el sistema <strong>de</strong> minería por <strong>de</strong>fecto: ID3 o C4.5; el criterio <strong>de</strong><strong>de</strong>cisión por <strong>de</strong>fecto: ganancia o proporción <strong>de</strong> ganancia; y si se realiza o no <strong>la</strong> poda <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisiónobtenido.200 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteFigura A.3: Pantal<strong>la</strong> <strong>de</strong> cambio <strong>de</strong> tab<strong>la</strong> y elección <strong>de</strong> <strong>la</strong> c<strong>la</strong>seA.2.2.4. Menú AyudaEste menú <strong>de</strong>spliega una ayuda para el usuario <strong>de</strong>l sistema.Manual <strong>de</strong>l usuario Magdalena Servente 201


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente202 Magdalena Servente Manual <strong>de</strong>l usuario


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteANEXO BCONJUNTOS DE DATOSEn este Anexo se <strong>de</strong>tal<strong>la</strong>n los conjuntos <strong>de</strong> datos utilizados para realizar <strong>la</strong>s pruebas <strong>de</strong>scriptas enel Capítulo 5. Para cada uno <strong>de</strong> los dominios, se muestran los conjuntos <strong>de</strong> datos <strong>de</strong>entrenamiento y prueba. Los datos presentados correspon<strong>de</strong>n a los siguientes dominios: Créditos(Sección B.1), Cardiología (Sección B.2), Votaciones (Sección B.3), Estudio sobre hongos(Sección B.4), Elita: Base <strong>de</strong> Asteroi<strong>de</strong>s (Sección B.5), Hipotiroidismo (Sección B.6),I<strong>de</strong>ntificación <strong>de</strong> vidrios (Sección B.7).Los datos <strong>de</strong>l anexo B se encuentran en el CD que acompaña este trabajo. Están divididos en archivossegún los dominios a los que pertenecen:• Créditos: AnexoB-Creditos.doc• Cardiología: AnexoB-Cardiologia.doc• Votaciones: AnexoB-Votaciones.doc• Estudio sobre hongos: AnexoB-Hongos.doc• Elita: Base <strong>de</strong> Asteroi<strong>de</strong>s: AnexoB-Asteroi<strong>de</strong>s.doc• Hipotiroidismo: AnexoB-Hipotiroidismo.doc• I<strong>de</strong>ntificación <strong>de</strong> vidrios: AnexoB-Vidrios.doc.Conjuntos <strong>de</strong> datos Magdalena Servente 203


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente204 Magdalena Servente Conjuntos <strong>de</strong> datos


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteANEXO CDOCUMENTACIÓN DEL SISTEMAEste anexo es un complemento a <strong>la</strong> explicación <strong>de</strong> <strong>la</strong> funcionalidad <strong>de</strong>l sistema <strong>de</strong> <strong>la</strong> Sección 4.5.En <strong>la</strong> sección C.1 se <strong>de</strong>tal<strong>la</strong> <strong>la</strong> interacción entre los módulos <strong>de</strong>l sistema. Las principalesfunciones <strong>de</strong> cada uno <strong>de</strong> estos módulos se presentan en <strong>la</strong> sección C.2. En <strong>la</strong> sección C.3 se<strong>de</strong>tal<strong>la</strong>n <strong>la</strong>s principales estructuras <strong>de</strong> datos utilizadas por el sistema.C.1. INTERACCIÓN DE LOS MÓDULOSEl sistema está compuesto básicamente por diez módulos o formu<strong>la</strong>rios (archivos <strong>de</strong> extensión cpp),complementados por cuatro archivos <strong>de</strong> <strong>de</strong>finiciones <strong>de</strong> tipos (archivos <strong>de</strong> extensión h y cpp) y un archivo<strong>de</strong> arranque <strong>de</strong>l sistema (Archivo <strong>de</strong> extensión cpp). Este último es el primero que corre al iniciar elprograma y es quien inicializa los <strong>de</strong>más módulos.Existe un módulo principal, el Uprincipal, <strong>de</strong>s<strong>de</strong> don<strong>de</strong> se realizan los l<strong>la</strong>mados a los <strong>de</strong>más módulos.Este módulo es el formu<strong>la</strong>rio principal con el cual interactúa el usuario. El corazón <strong>de</strong>l sistema resi<strong>de</strong> enlos módulos UDMID3 y UDMC45, quienes aplican el ID3 y el C4.5 respectivamente.La figura C.1 <strong>de</strong>tal<strong>la</strong> <strong>la</strong> interacción entre los módulos <strong>de</strong>l sistema. Las flechas representan los mensajesentre ellos. Hemos divididos los módulos en cuatro grupos: módulos <strong>de</strong> pantal<strong>la</strong>s principales, módulos <strong>de</strong>opciones generales, módulos <strong>de</strong> Minería <strong>de</strong> <strong>Datos</strong> y módulos <strong>de</strong> c<strong>la</strong>ses <strong>de</strong> datos. Los módulos <strong>de</strong> pantal<strong>la</strong>sprincipales son aquellos que representan <strong>la</strong> pantal<strong>la</strong> principal y el menú <strong>de</strong> acceso rápido. Su objetivo esl<strong>la</strong>mar a los otros módulos para llevar a cabo <strong>la</strong>s acciones que el usuario indica en los menúes. Losmódulos <strong>de</strong> opciones generales son aquellos módulos que realizan todas <strong>la</strong>s operaciones comunes al ID3y al C4.5, como el cambio <strong>de</strong> <strong>la</strong> tab<strong>la</strong> <strong>de</strong> datos, el cambio <strong>de</strong>l criterio <strong>de</strong> <strong>de</strong>cisión utilizado por <strong>de</strong>fecto, o<strong>la</strong> elección <strong>de</strong> <strong>la</strong> tab<strong>la</strong> sobre <strong>la</strong> cual se <strong>de</strong>sea evaluar el rendimiento, entre otros. Por otro <strong>la</strong>do, losmódulos <strong>de</strong> Minería <strong>de</strong> <strong>Datos</strong> son aquellos que construyen los árboles y <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión a partir <strong>de</strong><strong>la</strong>s tab<strong>la</strong>s, para ello utilizan <strong>la</strong>s estructuras <strong>de</strong> datos <strong>de</strong>finidas en los módulos <strong>de</strong> c<strong>la</strong>ses <strong>de</strong> datos.El módulo <strong>TDIDT</strong> no pertenece a ninguno <strong>de</strong> estos grupos ya es el módulo <strong>de</strong> inicio <strong>de</strong>l programa.Las funciones principales <strong>de</strong> cada uno <strong>de</strong> estos módulos se <strong>de</strong>tal<strong>la</strong>n en <strong>la</strong> Sección C.2.Documentación <strong>de</strong>l sistema Magdalena Servente 205


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteMódulos <strong>de</strong> c<strong>la</strong>ses <strong>de</strong> datosUTipos<strong>de</strong>fns.h Rulex.h Types.h<strong>TDIDT</strong>.cppInicializarUtilizaciónUtilizaciónInicializarMódulos <strong>de</strong> Minería <strong>de</strong> <strong>Datos</strong>Módulos <strong>de</strong> pantal<strong>la</strong>s principalesInicializarAplicarmétodoUInfoGralUDMID3UDMC45Aplicar ID3 Aplicar C4.5UPrincipalEvaluarEvaluarRendimientoMostrar árbolRendimiento MostrarMostrar Mostrar ÁrbolrendimientorendimientoMostrar Tab<strong>la</strong>Cambiar Tab<strong>la</strong>Determinar EvaluarPreferencias RendimientoUBDUCambioTab<strong>la</strong>frmOpcionesSistUElegirRendimientoURendimientoUArbolMódulos <strong>de</strong> Opciones GeneralesFigura C.1:Esquema <strong>de</strong> <strong>la</strong> interacción <strong>de</strong> los módulos <strong>de</strong>l sistemaC.2. DESCRIPCIÓN DE LOS ARCHIVOS FUENTEC.2.1. <strong>TDIDT</strong>.cppEs el módulo inicial <strong>de</strong>l sistema. Inicializa <strong>la</strong>s variables <strong>de</strong> entorno Windows, <strong>la</strong>s librerías estándar y elmódulo <strong>de</strong> <strong>la</strong> Uprincipal, el módulo UinfoGral y el módulo DMID3.206 Magdalena Servente Documentación <strong>de</strong>l sistema


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteC.2.2. Módulos <strong>de</strong> pantal<strong>la</strong>s principalesC.2.2.1. UPrincipalEste módulo administra el menú <strong>de</strong>l sistema y transforma los clics <strong>de</strong>l usuario en l<strong>la</strong>mados a losprocedimientos correspondientes.C.2.2.2. UInfoGralEste es un menú <strong>de</strong> acceso rápido que aparece apenas se inicia el programa. El usuario pue<strong>de</strong> elegiraplicar el ID3 o el C4.5 en <strong>la</strong>s opciones previamente elegidas por <strong>de</strong>fecto.C.2.3. Módulos <strong>de</strong> opciones generalesC.2.3.1. UBDLista por pantal<strong>la</strong> todos los casos <strong>de</strong> <strong>la</strong> tab<strong>la</strong> sobre <strong>la</strong> cual se está trabajando. Es un módulo <strong>de</strong> consultapara el usuario.C.2.3.2. UCambioTab<strong>la</strong>Lista todos los datos <strong>de</strong> <strong>la</strong> tab<strong>la</strong> sobre <strong>la</strong> cual se está trabajando por pantal<strong>la</strong>. Permite que el usuarioseleccione otra tab<strong>la</strong> sobre <strong>la</strong> cual trabajar, y permite <strong>de</strong>terminar <strong>la</strong> c<strong>la</strong>se <strong>de</strong> los datos, es <strong>de</strong>cir, el campo<strong>de</strong> tab<strong>la</strong> que cumple <strong>la</strong> función <strong>de</strong> c<strong>la</strong>sificador.Si el usuario aplica los cambios, <strong>la</strong> elección <strong>de</strong> <strong>la</strong> tab<strong>la</strong> y <strong>de</strong>l campo c<strong>la</strong>sificador serán guardadas comoelecciones por <strong>de</strong>fecto. En cambio, si el usuario acepta los cambios, <strong>la</strong> tab<strong>la</strong> y el campo escogidos seránutilizados hasta que se cierre el programa o hasta que el usuario modifique su elección.C.2.3.3. frmOpcionesSistEn esta pantal<strong>la</strong> el usuario pue<strong>de</strong> modificar <strong>la</strong>s opciones por <strong>de</strong>fecto <strong>de</strong>l sistema. Estas opciones son elmétodo (ID3 o C4.5) aplicado con mayor preferencia, el criterio <strong>de</strong> <strong>de</strong>cisión (ganancia o proporción <strong>de</strong>Documentación <strong>de</strong>l sistema Magdalena Servente 207


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteganancia) utilizado y <strong>la</strong> poda o no por <strong>de</strong>fecto. Estas opciones se utilizan cuando el usuario realiza <strong>la</strong>Minería <strong>de</strong> <strong>Datos</strong> a través <strong>de</strong>l menú <strong>de</strong> acceso rápido <strong>de</strong>tal<strong>la</strong>do en <strong>la</strong> Sección C.2.2.2.C.2.3.4. UElegirRendimientoCuando el usuario <strong>de</strong>sea evaluar el rendimiento <strong>de</strong> alguno <strong>de</strong> los mo<strong>de</strong>los generados con el sistema,<strong>de</strong>berá entrar en este módulo para elegir <strong>la</strong> tab<strong>la</strong> sobre <strong>la</strong> que <strong>de</strong>sea trabajar y <strong>la</strong> fecha y hora en que segeneró el mo<strong>de</strong>lo que está tratando <strong>de</strong> evaluar. Una vez que el usuario ha <strong>de</strong>terminado todos estos datos,se realiza <strong>la</strong> evaluación <strong>de</strong>l rendimiento <strong>de</strong>l mo<strong>de</strong>lo escogido.C.2.3.5. URendimientoMuestra por pantal<strong>la</strong> <strong>la</strong> matriz <strong>de</strong> evaluación <strong>de</strong>l rendimiento <strong>de</strong>l mo<strong>de</strong>lo escogido por el usuario en <strong>la</strong>pantal<strong>la</strong> <strong>de</strong>scripta en <strong>la</strong> sección C.2.3.4. La matriz <strong>de</strong> evaluación muestra, para cada c<strong>la</strong>se, <strong>la</strong> cantidad <strong>de</strong>casos que fueron evaluados correctamente y <strong>la</strong> cantidad <strong>de</strong> casos que fueron evaluados incorrectamente,según lo <strong>de</strong>scripto en el Capítulo 5.C.2.3.6. UArbolEste módulo muestra el árbol obtenido por pantal<strong>la</strong>. El usuario pue<strong>de</strong> guardar este árbol en el archivo <strong>de</strong>texto <strong>de</strong> su preferencia.C.2.4. Módulos <strong>de</strong> minería <strong>de</strong> datosC.2.4.1. UDMID3Este módulo agrupa todas <strong>la</strong>s funciones necesarias para aplicar el ID3 a una tab<strong>la</strong>. Se utiliza tanto paragenerar el árbol <strong>de</strong> <strong>de</strong>cisión como para construir <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión y evaluar los mo<strong>de</strong>los obtenidos.208 Magdalena Servente Documentación <strong>de</strong>l sistema


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteC.2.4.2. UDMC45Al igual que el módulo anterior, este módulo agrupa todas <strong>la</strong>s funciones necesarias para aplicar el C4.5 auna tab<strong>la</strong>. Genera el árbol y <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión, y evalúa los mo<strong>de</strong>los generados.C.2.5. Módulos <strong>de</strong> c<strong>la</strong>ses <strong>de</strong> datosC.2.5.1. UTiposEn este modulo se <strong>de</strong>finen todos los tipos <strong>de</strong> datos propios <strong>de</strong>l sistema, principalmente aquellos utilizadospor el ID3.C.2.5.2. Types.hEn este modulo se <strong>de</strong>finen todos los principales tipos <strong>de</strong> datos utilizados en el C4.5.C.2.5.3. Defns.hEste módulo complementa al anterior, y <strong>de</strong>fine aún más tipos <strong>de</strong> datos utilizados por el C4.5.C.2.5.4. Rulex.hEn este modulo se <strong>de</strong>finen los tipos <strong>de</strong> datos necesarios para aplicar el C4.5C.3. ESTRUCTURAS DE DATOSC.3.1. Estructuras <strong>de</strong> datos generalesLa c<strong>la</strong>se Tparams es una c<strong>la</strong>se general que guarda todos los parámetros necesarios para aplicar el C4.5 yel ID3. Su estructura se <strong>de</strong>tal<strong>la</strong> a continuación:Documentación <strong>de</strong>l sistema Magdalena Servente 209


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentec<strong>la</strong>ss TParametros {public:AnsiString ArchivoIni;AnsiString NombreBD;AnsiString Tab<strong>la</strong>BD;AnsiString Tab<strong>la</strong>Reg<strong>la</strong>s;AnsiString ColC<strong>la</strong>sificador;AnsiString ExtensionFileReg<strong>la</strong>s;TStringList *LC<strong>la</strong>sificadores;int iFormatoReg<strong>la</strong>s; /* 0: Insight2+1: KappaPC2: ambos3: ninguno*/int iSistema; /* 0: ID31: C4.5 */int iCriterio; /* 0: Ganancia1: Proporción <strong>de</strong> ganancia */int iPoda;/* 0: Si1: No */int iConjuntos; /* indica si <strong>la</strong>s pruebas en el C4.5 serealizan sobre grupos <strong>de</strong> atributos discretos0: Si1: No */int iMinObjs; /* Cantidad mínima <strong>de</strong> objetos que <strong>de</strong>be teneruna rama en el C4.5 */int iCF;/* Nivel <strong>de</strong> confianza para <strong>la</strong> poda en elC4.5 */TParametros(AnsiString ArchIni); //constructor//Toma los parámetros <strong>de</strong>l archivo .ini~TParametros(); //<strong>de</strong>structor//Refresca los parámetros a partir <strong>de</strong>l archivo .ini/*Devuelve 0 si no hubo problemas,-1 en caso contrario*/int RefrescarParams();//Guardar los parámetros en el .ini/*Devuelve 0 si no hubo problemas,-1 en caso contrario*/int GrabarParams();};C.3.2. Estructuras <strong>de</strong> datos <strong>de</strong>l ID3La estructura principal utilizada por el ID3 es el árbol <strong>de</strong> <strong>de</strong>cisión, implementado mediante el uso <strong>de</strong>punteros. Cada nodo <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión contiene un indicador para <strong>de</strong>terminar si es una hoja o un nodo,indica el <strong>de</strong>scriptor que está evaluando, con sus valores válidos, y tiene un vector <strong>de</strong> punteros a sus nodoshijos. La <strong>de</strong>c<strong>la</strong>ración <strong>de</strong> este tipo <strong>de</strong> datos se muestra a continuación.type<strong>de</strong>f struct tree_no<strong>de</strong> *tree_ptr;struct tree_no<strong>de</strong> {short int f<strong>la</strong>g_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 mixtos3 si no es hoja*/int <strong>de</strong>sc;tree_ptr pHijos[MAX_HIJOS]; //hijo <strong>de</strong>rechoshort int D[MAX_CANT_DESCRIPTORES];/*Descriptores válidos para el nodo*/};type<strong>de</strong>f tree_ptr DECISION_TREE;210 Magdalena Servente Documentación <strong>de</strong>l sistema


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteC.3.4. Estructuras <strong>de</strong> datos <strong>de</strong>l C4.5La estructura <strong>de</strong>l árbol utilizada en el C4.5 es simi<strong>la</strong>r a <strong>la</strong> <strong>de</strong>tal<strong>la</strong>da para el ID3 aunque tiene una mayorcantidad <strong>de</strong> objetos, necesarios para trabajar con atributos continuos. La <strong>de</strong>finición <strong>de</strong> esta estructura <strong>de</strong>datos se encuentra a continuación.type<strong>de</strong>f struct tree_record *Tree;struct tree_record{short No<strong>de</strong>Type; /* 0=hoja 1=rama 2=corte 3=subconj */C<strong>la</strong>ssNo Leaf; /* c<strong>la</strong>se más frecuente <strong>de</strong>l nodo */ItemCount Items, /* nro <strong>de</strong> items en el nodo */*C<strong>la</strong>ssDist, /* distrib <strong>de</strong> c<strong>la</strong>se <strong>de</strong> los items */Errors; /* nro <strong>de</strong> errores en el nodo */Attribute Tested; /* atribute referenciado en <strong>la</strong> prueba */short Forks; /* nro <strong>de</strong> ramas en el nodo */float Cut, /* límite para los atrib continuos */Lower, /* límite inferior <strong>de</strong>l valor límite */Upper; /* límite superior <strong>de</strong>l valor límite */Conjunto *Subset; /* subconj <strong>de</strong> valores discretos */Tree *Branch; /* Branch[x] = (sub)árbol para el resultado x */};type<strong>de</strong>f Tree DECISION_TREE_C45;Documentación <strong>de</strong>l sistema Magdalena Servente 211


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente212 Magdalena Servente Documentación <strong>de</strong>l sistema


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteANEXO DCÓDIGO FUENTEEn este anexo se presenta el código fuente <strong>de</strong>l sistema <strong>de</strong>sarrol<strong>la</strong>do. En <strong>la</strong> sección D.1 sepresenta el código fuente <strong>de</strong>l archivo <strong>TDIDT</strong>.cpp que es el archivo inicial <strong>de</strong>l proyecto y es quieninicializa al resto <strong>de</strong> los formu<strong>la</strong>rios requeridos. En <strong>la</strong> sección D.2 se presenta el código fuente <strong>de</strong><strong>la</strong>s pantal<strong>la</strong>s principales. A continuación, se <strong>de</strong>tal<strong>la</strong>n los códigos fuentes <strong>de</strong> los módulos <strong>de</strong>opciones generales (Sección D:3), <strong>de</strong> los módulos <strong>de</strong> minería <strong>de</strong> datos (Sección D.4) y <strong>de</strong> losmódulos <strong>de</strong> c<strong>la</strong>ses o estructuras <strong>de</strong> datos (Sección D.5)D.1. <strong>TDIDT</strong>.CPP//---------------------------------------------------------------------------#inclu<strong>de</strong> #pragma hdrstopUSERES("<strong>TDIDT</strong>.res");USEFORM("UPrincipal.cpp", FormPrincipal);USEFORM("UArbol.cpp", frm_Arbol);USEFORM("UDMID3.cpp", DMID3); /* TDataModule: DesignC<strong>la</strong>ss */USEUNIT("UTipos.cpp");USEFORM("UBD.cpp", frmBD);USEFORM("frmOpcionesSist.cpp", frmOpciones);USEFORM("UInfoGral.cpp", frmInfoGral);USEFORM("URendimiento.cpp", FrmRendimiento);USEFORM("UElegirRendimiento.cpp", frmElegirRendimiento);USEFORM("UCambioTab<strong>la</strong>.cpp", frmCambioTab<strong>la</strong>);USEFILE("C45\<strong>de</strong>fns.h");USEFILE("C45\TYPES.h");USEFORM("C45\UDMC45.cpp", DMC45); /* TDataModule: DesignC<strong>la</strong>ss */USEFILE("C45\Rulex.h");//---------------------------------------------------------------------------WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){try{Application->Initialize();Application->CreateForm(__c<strong>la</strong>ssid(TDMID3), &DMID3);Application->CreateForm(__c<strong>la</strong>ssid(TFormPrincipal), &FormPrincipal);Application->CreateForm(__c<strong>la</strong>ssid(TfrmInfoGral), &frmInfoGral);Application->Run();}catch (Exception &exception){Application->ShowException(&exception);}return 0;}Código Fuente Magdalena Servente 213


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteD.2. MÓDULOS DE PANTALLAS PRINCIPALESD.2.1. UPrincipalD.2.1.1. UPrincipal.h//---------------------------------------------------------------------------#ifn<strong>de</strong>f UPrincipalH#<strong>de</strong>fine UPrincipalH//---------------------------------------------------------------------------#inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> "frmOpcionesSist.h"#inclu<strong>de</strong> "UDMID3.h"#inclu<strong>de</strong> "UArbol.h"#inclu<strong>de</strong> "UBD.h"#inclu<strong>de</strong> "UInfoGral.h"#inclu<strong>de</strong> "UElegirRendimiento.h"#inclu<strong>de</strong> "URendimiento.h"#inclu<strong>de</strong> "UCambioTab<strong>la</strong>.h"#inclu<strong>de</strong> "UDMC45.h"//---------------------------------------------------------------------------c<strong>la</strong>ss TFormPrincipal : public TForm{__published: // IDE-managed ComponentsTMainMenu *MenuPpal;TMenuItem *mnuGral;TMenuItem *mnuSep;TMenuItem *mnu_Salir;TMenuItem *mnuID3;TMenuItem *mnuC45;TMenuItem *mnuID3G;TMenuItem *mnuID3GR;TMenuItem *mnuC45G;TMenuItem *mnuC45GR;TMenuItem *mnuAyuda;TMenuItem *mnuHelpIn<strong>de</strong>x;TMenuItem *mnuSep3;TMenuItem *mnuAcercaDe;TMenuItem *mnuEvaluacion;TMenuItem *mnuEvalID3;TMenuItem *mnuEvalC45;TMenuItem *mnuOpciones;TMenuItem *mnuTab<strong>la</strong>;TMenuItem *mnuCambiarTab<strong>la</strong>;TMenuItem *mnuParametros;void __fastcall FormCreate(TObject *Sen<strong>de</strong>r);void __fastcall FormClose(TObject *Sen<strong>de</strong>r, TCloseAction &Action);void __fastcall FormCloseQuery(TObject *Sen<strong>de</strong>r, bool &CanClose);void __fastcall mnu_ID3GainClick(TObject *Sen<strong>de</strong>r);void __fastcall mnu_ID3GainRatioClick(TObject *Sen<strong>de</strong>r);void __fastcall mnu_SalirClick(TObject *Sen<strong>de</strong>r);void __fastcall mnuID3GClick(TObject *Sen<strong>de</strong>r);void __fastcall mnuID3GRClick(TObject *Sen<strong>de</strong>r);void __fastcall FormShow(TObject *Sen<strong>de</strong>r);void __fastcall mnuEvalID3Click(TObject *Sen<strong>de</strong>r);void __fastcall mnuTab<strong>la</strong>Click(TObject *Sen<strong>de</strong>r);void __fastcall mnuParametrosClick(TObject *Sen<strong>de</strong>r);void __fastcall mnuCambiarTab<strong>la</strong>Click(TObject *Sen<strong>de</strong>r);void __fastcall mnuEvalC45Click(TObject *Sen<strong>de</strong>r);void __fastcall mnuC45GClick(TObject *Sen<strong>de</strong>r);void __fastcall mnuC45GRClick(TObject *Sen<strong>de</strong>r);private:TParametros *Params;public:__fastcall TFormPrincipal(TComponent* Owner);// void ActualizarParametros(TStringList *ListaParam);/* Esta función actualiza los parámetros <strong>de</strong>l formu<strong>la</strong>rioLa lista <strong>de</strong> parámetros <strong>de</strong>be tener el siguiente or<strong>de</strong>n:ExtensionArchivoReg<strong>la</strong>s; AliasBD; Tab<strong>la</strong>BDColC<strong>la</strong>sificador; Lista <strong>de</strong> C<strong>la</strong>sificadores*/214 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentevoid ID3(short int MedidorGanancia); //l<strong>la</strong>ma al algoritmo ID3 sobre <strong>la</strong> tab<strong>la</strong>actualint EvalRendimiento; //indica si el usuario <strong>de</strong>sea evaluar el rendimiento <strong>de</strong> unacorrida o no};//---------------------------------------------------------------------------extern PACKAGE TFormPrincipal *FormPrincipal;//---------------------------------------------------------------------------#endifD.2.1.1. UPrincipal.cpp//---------------------------------------------------------------------------#pragma hdrstop#inclu<strong>de</strong> "UPrincipal.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TFormPrincipal *FormPrincipal;Tfrm_Arbol *frm_Arbol;TfrmOpciones *frmOpciones;TfrmElegirRendimiento *frmElegirRendimiento;TFrmRendimiento *FrmRendimiento;TfrmBD *frmBD;TfrmCambioTab<strong>la</strong> *frmCambioTab<strong>la</strong>;//-----------------------------------------------------------------------------//-----------------------------------------------------------------------------// IMPLEMENTACION//-----------------------------------------------------------------------------//-----------------------------------------------------------------------------__fastcall TFormPrincipal::TFormPrincipal(TComponent* Owner): TForm(Owner){Params=new TParametros("Gap.ini");}//---------------------------------------------------------------------------void __fastcall TFormPrincipal::FormCreate(TObject *Sen<strong>de</strong>r){DMID3->RecibirParametros(Params);}//---------------------------------------------------------------------------void __fastcall TFormPrincipal::FormClose(TObject *Sen<strong>de</strong>r,TCloseAction &Action){<strong>de</strong>lete Params;}//---------------------------------------------------------------------------void __fastcall TFormPrincipal::FormCloseQuery(TObject *Sen<strong>de</strong>r,bool &CanClose){int rta;rta=MessageBox(FormPrincipal->Handle, "¿Está seguro <strong>de</strong> que <strong>de</strong>sea salir <strong>de</strong> <strong>la</strong>aplicación?", "Tesis", MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON1|MB_SYSTEMMODAL);if (rta==IDNO) //el usuario no <strong>de</strong>sea salir <strong>de</strong> <strong>la</strong> aplicaciónCanClose=false;}//---------------------------------------------------------------------------void __fastcall TFormPrincipal::mnu_ID3GainClick(TObject *Sen<strong>de</strong>r){ID3(0);}Código Fuente Magdalena Servente 215


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente//---------------------------------------------------------------------------void __fastcall TFormPrincipal::mnu_ID3GainRatioClick(TObject *Sen<strong>de</strong>r){ID3(1);}//---------------------------------------------------------------------------void TFormPrincipal::ID3(short int MedidorGanancia){tree_ptr pRoot;TVecValores VecVal, VecDesc;int i;Cursor=crHourG<strong>la</strong>ss;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=crHourG<strong>la</strong>ss;frm_Arbol->RecibirParametros(Params->LC<strong>la</strong>sificadores,VecVal,VecDesc);frm_Arbol->PrintTree(pRoot);DMID3->ArmarReg<strong>la</strong>s(pRoot);DMID3->EliminarTree(pRoot);free(pRoot);frm_Arbol->Cursor=crArrow;FormPrincipal->Cursor=crArrow;}for (i=0;iClose();}//---------------------------------------------------------------------------void __fastcall TFormPrincipal::mnuID3GClick(TObject *Sen<strong>de</strong>r){ID3(0);}//---------------------------------------------------------------------------void __fastcall TFormPrincipal::mnuID3GRClick(TObject *Sen<strong>de</strong>r){ID3(1);}void __fastcall TFormPrincipal::FormShow(TObject *Sen<strong>de</strong>r){frmInfoGral->RecibirParametros(Params->Tab<strong>la</strong>BD,Params->ColC<strong>la</strong>sificador,Params->iCriterio);}//---------------------------------------------------------------------------void __fastcall TFormPrincipal::mnuEvalID3Click(TObject *Sen<strong>de</strong>r){EvalRendimiento=0;frmElegirRendimiento= new TfrmElegirRendimiento(this);frmElegirRendimiento->Actualizar<strong>Datos</strong>(0,Params->NombreBD);frmElegirRendimiento->ShowModal();if (EvalRendimiento==0){FrmRendimiento= new TFrmRendimiento(this);FrmRendimiento->Cursor=crHourG<strong>la</strong>ss;216 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteDMID3->EvaluarReg<strong>la</strong>s(frmElegirRendimiento->CodigoReg<strong>la</strong>s);FrmRendimiento->Cursor=crArrow;}}//---------------------------------------------------------------------------void __fastcall TFormPrincipal::mnuTab<strong>la</strong>Click(TObject *Sen<strong>de</strong>r){frmBD=new TfrmBD(this);frmBD->RecibirParametros(Params);}//---------------------------------------------------------------------------void __fastcall TFormPrincipal::mnuParametrosClick(TObject *Sen<strong>de</strong>r){frmOpciones=new TfrmOpciones(this);frmOpciones->RecibirParametros(Params);frmOpciones->Show();}//---------------------------------------------------------------------------void __fastcall TFormPrincipal::mnuCambiarTab<strong>la</strong>Click(TObject *Sen<strong>de</strong>r){frmCambioTab<strong>la</strong>=new TfrmCambioTab<strong>la</strong>(this);frmCambioTab<strong>la</strong>->RecibirParametros(Params);frmCambioTab<strong>la</strong>->Show();}//---------------------------------------------------------------------------void __fastcall TFormPrincipal::mnuEvalC45Click(TObject *Sen<strong>de</strong>r){EvalRendimiento=0;frmElegirRendimiento= new TfrmElegirRendimiento(this);frmElegirRendimiento->Actualizar<strong>Datos</strong>(0,Params->NombreBD);frmElegirRendimiento->ShowModal();if (EvalRendimiento==0){FrmRendimiento= new TFrmRendimiento(this);FrmRendimiento->Cursor=crHourG<strong>la</strong>ss;DMC45->EvaluacionRendimiento();FrmRendimiento->Cursor=crArrow;}}//---------------------------------------------------------------------------void __fastcall TFormPrincipal::mnuC45GClick(TObject *Sen<strong>de</strong>r){Params->iCriterio=0;DMC45->RecibirParametros(Params);DMC45->C45();}//---------------------------------------------------------------------------void __fastcall TFormPrincipal::mnuC45GRClick(TObject *Sen<strong>de</strong>r){Params->iCriterio=1;DMC45->RecibirParametros(Params);DMC45->C45();}//---------------------------------------------------------------------------D.2.2. UInfoGralD.2.2.1. UInfoGral.h//---------------------------------------------------------------------------#ifn<strong>de</strong>f UInfoGralH#<strong>de</strong>fine UInfoGralHCódigo Fuente Magdalena Servente 217


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente//---------------------------------------------------------------------------#inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> "UPrincipal.h"//---------------------------------------------------------------------------c<strong>la</strong>ss TfrmInfoGral : public TForm{__published: // IDE-managed ComponentsTLabel *lblTab<strong>la</strong>;TLabel *lblC<strong>la</strong>se;TEdit *txtC<strong>la</strong>se;TEdit *txtTab<strong>la</strong>;TBitBtn *BtnC45;TBitBtn *BtnID3;void __fastcall FormClose(TObject *Sen<strong>de</strong>r, TCloseAction &Action);void __fastcall BtnID3Click(TObject *Sen<strong>de</strong>r);private:short MedidorGanancia;public:__fastcall TfrmInfoGral(TComponent* Owner);void RecibirParametros(AnsiString tab<strong>la</strong>, AnsiString c<strong>la</strong>se, short Ganancia);};//---------------------------------------------------------------------------extern PACKAGE TfrmInfoGral *frmInfoGral;//---------------------------------------------------------------------------#endifD.2.2.2. UInfoGral.cpp//---------------------------------------------------------------------------#pragma hdrstop#inclu<strong>de</strong> "UInfoGral.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TfrmInfoGral *frmInfoGral;//---------------------------------------------------------------------------__fastcall TfrmInfoGral::TfrmInfoGral(TComponent* Owner): TForm(Owner){}//---------------------------------------------------------------------------void __fastcall TfrmInfoGral::FormClose(TObject *Sen<strong>de</strong>r,TCloseAction &Action){Action = caFree;}//---------------------------------------------------------------------------void TfrmInfoGral::RecibirParametros(AnsiString tab<strong>la</strong>, AnsiString c<strong>la</strong>se, short Ganancia){txtTab<strong>la</strong>->Text=tab<strong>la</strong>;txtC<strong>la</strong>se->Text=c<strong>la</strong>se;MedidorGanancia=Ganancia;}void __fastcall TfrmInfoGral::BtnID3Click(TObject *Sen<strong>de</strong>r){ TFormPrincipal *pForm;pForm=FormPrincipal;pForm->Cursor=crHourG<strong>la</strong>ss;pForm->ID3(MedidorGanancia);pForm->Cursor=crArrow;}//---------------------------------------------------------------------------218 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteD.3. MÓDULOS DE OPCIONES GENERALESD.3.1. UBDD.3.1.1. UBD.h//---------------------------------------------------------------------------#ifn<strong>de</strong>f UBDH#<strong>de</strong>fine UBDH//---------------------------------------------------------------------------#inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> "UDMID3.h"//---------------------------------------------------------------------------c<strong>la</strong>ss TfrmBD : public TForm{__published: // IDE-managed ComponentsTDBGrid *DBGrid;TDataSource *DSTab<strong>la</strong>;TTable *Tab<strong>la</strong>;void __fastcall FormClose(TObject *Sen<strong>de</strong>r, TCloseAction &Action);private:/*Parámetros <strong>de</strong> <strong>la</strong> base sobre <strong>la</strong> que trabajaremos*/TParametros *Params;public:__fastcall TfrmBD(TComponent* Owner);void RecibirParametros(TParametros *Parametros);};//---------------------------------------------------------------------------extern PACKAGE TfrmBD *frmBD;//---------------------------------------------------------------------------#endifD.3.1.2. UBD.cpp//---------------------------------------------------------------------------#pragma hdrstop#inclu<strong>de</strong> "UBD.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TfrmBD *frmBD;//---------------------------------------------------------------------------__fastcall TfrmBD::TfrmBD(TComponent* Owner): TForm(Owner){}//---------------------------------------------------------------------------void __fastcall TfrmBD::FormClose(TObject *Sen<strong>de</strong>r, TCloseAction &Action){Action = caFree;}//---------------------------------------------------------------------------void TfrmBD::RecibirParametros(TParametros *Parametros){Params=Parametros;}Tab<strong>la</strong>->DatabaseName=Params->NombreBD;Tab<strong>la</strong>->TableName=Params->Tab<strong>la</strong>BD;Tab<strong>la</strong>->Active=true;Código Fuente Magdalena Servente 219


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteD.3.2. UCambioTab<strong>la</strong>D.3.2.1. UCambioTab<strong>la</strong>.h//---------------------------------------------------------------------------#ifn<strong>de</strong>f UCambioTab<strong>la</strong>H#<strong>de</strong>fine UCambioTab<strong>la</strong>H//---------------------------------------------------------------------------#inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> "UTipos.h"#inclu<strong>de</strong> "UDMID3.h"#inclu<strong>de</strong> "UInfoGral.h"//---------------------------------------------------------------------------c<strong>la</strong>ss TfrmCambioTab<strong>la</strong> : public TForm{__published: // IDE-managed ComponentsTDBGrid *DBGrid;TDataSource *DSTab<strong>la</strong>;TTable *Tab<strong>la</strong>;TEdit *txt_Tab<strong>la</strong>;TBitBtn *Btn_fod;TOpenDialog *fod_Tab<strong>la</strong>BD;TLabel *lbl_Tab<strong>la</strong>BD;TLabel *lbl_nbeColC<strong>la</strong>sif;TComboBox *cbo_ColC<strong>la</strong>sif;TBitBtn *btn_Aceptar;TBitBtn *btn_Cance<strong>la</strong>r;TBitBtn *btn_Aplicar;void __fastcall FormClose(TObject *Sen<strong>de</strong>r, TCloseAction &Action);void __fastcall Btn_fodClick(TObject *Sen<strong>de</strong>r);void __fastcall btn_Cance<strong>la</strong>rClick(TObject *Sen<strong>de</strong>r);void __fastcall btn_AceptarClick(TObject *Sen<strong>de</strong>r);void __fastcall btn_AplicarClick(TObject *Sen<strong>de</strong>r);void __fastcall txt_Tab<strong>la</strong>Change(TObject *Sen<strong>de</strong>r);void __fastcall cbo_ColC<strong>la</strong>sifChange(TObject *Sen<strong>de</strong>r);private:/*Parámetros <strong>de</strong> <strong>la</strong> base sobre <strong>la</strong> que trabajaremos*/TParametros *Params;void CargarCombo();int ActualizarCambios(); /*Devuelve:0: si los cambios fueron exitosos1: si hubo problemas*/public:__fastcall TfrmCambioTab<strong>la</strong>(TComponent* Owner);void RecibirParametros(TParametros *Parametros);};//---------------------------------------------------------------------------extern PACKAGE TfrmCambioTab<strong>la</strong> *frmCambioTab<strong>la</strong>;//---------------------------------------------------------------------------#endifD.3.2.2. UCambioTab<strong>la</strong>.cpp//---------------------------------------------------------------------------#pragma hdrstop#inclu<strong>de</strong> "UCambioTab<strong>la</strong>.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"220 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteTfrmCambioTab<strong>la</strong> *frmCambioTab<strong>la</strong>;//---------------------------------------------------------------------------__fastcall TfrmCambioTab<strong>la</strong>::TfrmCambioTab<strong>la</strong>(TComponent* Owner): TForm(Owner){}//---------------------------------------------------------------------------void __fastcall TfrmCambioTab<strong>la</strong>::FormClose(TObject *Sen<strong>de</strong>r,TCloseAction &Action){Action = caFree;}//---------------------------------------------------------------------------void TfrmCambioTab<strong>la</strong>::RecibirParametros(TParametros *Parametros){Params=Parametros;}//Cargamos los datos re<strong>la</strong>cionados con <strong>la</strong> Base <strong>de</strong> <strong>Datos</strong>fod_Tab<strong>la</strong>BD->FileName=Params->Tab<strong>la</strong>BD;txt_Tab<strong>la</strong>->Text=Params->Tab<strong>la</strong>BD;Tab<strong>la</strong>->TableName=Params->Tab<strong>la</strong>BD;Tab<strong>la</strong>->DatabaseName=Params->NombreBD;Tab<strong>la</strong>->Active=true;CargarCombo();btn_Aplicar->Enabled=false;//---------------------------------------------------------------------------void __fastcall TfrmCambioTab<strong>la</strong>::Btn_fodClick(TObject *Sen<strong>de</strong>r){bool res;int in<strong>de</strong>x;AnsiString Tab<strong>la</strong>BD;res=fod_Tab<strong>la</strong>BD->Execute();if (res){Tab<strong>la</strong>BD=fod_Tab<strong>la</strong>BD->FileName;in<strong>de</strong>x=Tab<strong>la</strong>BD.LastDelimiter("\\");Tab<strong>la</strong>BD=Tab<strong>la</strong>BD.SubString(in<strong>de</strong>x+1,Tab<strong>la</strong>BD.Length()-in<strong>de</strong>x);txt_Tab<strong>la</strong>->Text=Tab<strong>la</strong>BD;Tab<strong>la</strong>->Active=false;Tab<strong>la</strong>->TableName=Tab<strong>la</strong>BD;Tab<strong>la</strong>->Active=true;cbo_ColC<strong>la</strong>sif->Clear();CargarCombo();}Tab<strong>la</strong>BD.~AnsiString();}//---------------------------------------------------------------------------void __fastcall TfrmCambioTab<strong>la</strong>::btn_Cance<strong>la</strong>rClick(TObject *Sen<strong>de</strong>r){Close();}//---------------------------------------------------------------------------void __fastcall TfrmCambioTab<strong>la</strong>::btn_AceptarClick(TObject *Sen<strong>de</strong>r){if (ActualizarCambios()==0)Close();}//---------------------------------------------------------------------------void TfrmCambioTab<strong>la</strong>::CargarCombo(){TStringList *listaCpos = new TStringList();int i;bool fin;Tab<strong>la</strong>->GetFieldNames(listaCpos);cbo_ColC<strong>la</strong>sif->Items->AddStrings(listaCpos);i=0;while (iItems->Count){if (AnsiCompareText(cbo_ColC<strong>la</strong>sif->Items->Strings[i].Trim(),"NIVEL")==0)cbo_ColC<strong>la</strong>sif->Items->Delete(i);elseCódigo Fuente Magdalena Servente 221


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}i++;fin=false;i=0;while (iItems->Count && !fin){if (AnsiCompareText(cbo_ColC<strong>la</strong>sif->Items->Strings[i].Trim(),Params->ColC<strong>la</strong>sificador.Trim())==0){cbo_ColC<strong>la</strong>sif->ItemIn<strong>de</strong>x=i;fin=true;}i++;}<strong>de</strong>lete(listaCpos);}//---------------------------------------------------------------------------int TfrmCambioTab<strong>la</strong>::ActualizarCambios() /*Devuelve:0: si los cambios fueron exitosos1: si hubo problemas*/{AnsiString Tab<strong>la</strong>Anterior;AnsiString sqlstring;TQuery *QValoresC<strong>la</strong>sif=new TQuery(frmCambioTab<strong>la</strong>);int res;try{res=0;if (Params->Tab<strong>la</strong>BD!=txt_Tab<strong>la</strong>->Text) //actualizamos los datos <strong>de</strong> <strong>la</strong> tab<strong>la</strong>{Params->Tab<strong>la</strong>BD=txt_Tab<strong>la</strong>->Text;Tab<strong>la</strong>Anterior=DMID3->TTennis->TableName;DMID3->TTennis->Active=false;DMID3->TTennis->DatabaseName=Params->NombreBD;DMID3->TTennis->TableName=Params->Tab<strong>la</strong>BD;DMID3->TTennis->Active=true;//Inicializamos los queries que harán sus consultas sobre <strong>la</strong> base//especificadaDMID3->QGral->DatabaseName=Params->NombreBD;//Inicializamos el campo Nivel en <strong>la</strong> Tab<strong>la</strong>sqlstring="Update ";AppendStr(sqlstring, Params->Tab<strong>la</strong>BD);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->ColC<strong>la</strong>sificador!=cbo_ColC<strong>la</strong>sif->Text)//Cambiamos <strong>la</strong> columna <strong>de</strong>l c<strong>la</strong>sificador{if (cbo_ColC<strong>la</strong>sif->Text.Trim()==""){ShowMessage("El nombre <strong>de</strong> <strong>la</strong> Columna <strong>de</strong>l C<strong>la</strong>sificador no pue<strong>de</strong>quedar en b<strong>la</strong>nco");cbo_ColC<strong>la</strong>sif->SetFocus();res=1;}else{Params->ColC<strong>la</strong>sificador=cbo_ColC<strong>la</strong>sif->Text;//Actualizamos <strong>la</strong> lista <strong>de</strong> C<strong>la</strong>sificadoressqlstring="SELECT DISTINCT(" + Params->ColC<strong>la</strong>sificador + ") asC<strong>la</strong>sif FROM " + Params->Tab<strong>la</strong>BD;QValoresC<strong>la</strong>sif->DatabaseName=Params->NombreBD;QValoresC<strong>la</strong>sif->SQL->Clear();QValoresC<strong>la</strong>sif->SQL->Add(sqlstring);QValoresC<strong>la</strong>sif->Open();222 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteQValoresC<strong>la</strong>sif->Last();QValoresC<strong>la</strong>sif->First();Params->LC<strong>la</strong>sificadores->Clear();while (!QValoresC<strong>la</strong>sif->Eof){Params->LC<strong>la</strong>sificadores->Add(QValoresC<strong>la</strong>sif->FieldByName("C<strong>la</strong>sif")->AsString);QValoresC<strong>la</strong>sif->Next();}res=0;}}frmInfoGral->RecibirParametros(Params->Tab<strong>la</strong>BD,Params->ColC<strong>la</strong>sificador,Params->iCriterio);}catch(...){ShowMessage("Problemas con <strong>la</strong> Base <strong>de</strong> <strong>Datos</strong>, no podrá cambiar <strong>de</strong> tab<strong>la</strong>");//Restauramos los valores anterioresDMID3->TTennis->Active=false;DMID3->TTennis->DatabaseName=Params->NombreBD;Params->Tab<strong>la</strong>BD=Tab<strong>la</strong>Anterior;DMID3->TTennis->TableName=Params->Tab<strong>la</strong>BD;DMID3->TTennis->Active=true;//Inicializamos los queries que harán sus consultas sobre <strong>la</strong> base//especificadaDMID3->QGral->DatabaseName=Params->NombreBD;}cbo_ColC<strong>la</strong>sif->Clear();CargarCombo();res=1;}sqlstring.~AnsiString();Tab<strong>la</strong>Anterior.~AnsiString();<strong>de</strong>lete(QValoresC<strong>la</strong>sif);return(res);//---------------------------------------------------------------------------void __fastcall TfrmCambioTab<strong>la</strong>::btn_AplicarClick(TObject *Sen<strong>de</strong>r){ActualizarCambios();Params->GrabarParams();btn_Aplicar->Enabled=false;}void __fastcall TfrmCambioTab<strong>la</strong>::txt_Tab<strong>la</strong>Change(TObject *Sen<strong>de</strong>r){btn_Aplicar->Enabled=true;}//---------------------------------------------------------------------------void __fastcall TfrmCambioTab<strong>la</strong>::cbo_ColC<strong>la</strong>sifChange(TObject *Sen<strong>de</strong>r){btn_Aplicar->Enabled=true;}//---------------------------------------------------------------------------D.3.3. frmOpcionesSistD.3.3.1. frmOpcionesSist.h//---------------------------------------------------------------------------#ifn<strong>de</strong>f frmOpcionesSistH#<strong>de</strong>fine frmOpcionesSistH//---------------------------------------------------------------------------#inclu<strong>de</strong> #inclu<strong>de</strong> Código Fuente Magdalena Servente 223


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente#inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> "UPrincipal.h"#inclu<strong>de</strong> "UTipos.h"//--------------------------------------------------------------------------c<strong>la</strong>ss TfrmOpciones : public TForm{__published: // IDE-managed ComponentsTRadioGroup *rgSistema;TRadioGroup *rgCriterio;TRadioGroup *rgPoda;TBitBtn *btn_Aplicar;TBitBtn *btn_Cance<strong>la</strong>r;TBitBtn *btn_Aceptar;void __fastcall FormClose(TObject *Sen<strong>de</strong>r, TCloseAction &Action);void __fastcall btn_Cance<strong>la</strong>rClick(TObject *Sen<strong>de</strong>r);void __fastcall btn_AceptarClick(TObject *Sen<strong>de</strong>r);void __fastcall btn_AplicarClick(TObject *Sen<strong>de</strong>r);private: // User <strong>de</strong>c<strong>la</strong>rationspublic:TParametros *Params;// User <strong>de</strong>c<strong>la</strong>rations__fastcall TfrmOpciones(TComponent* Owner);void RecibirParametros(TParametros *Parametros);};//---------------------------------------------------------------------------extern PACKAGE TfrmOpciones *frmOpciones;//---------------------------------------------------------------------------#endifD.3.3.2. frmOpcionesSist.cpp//---------------------------------------------------------------------------#pragma hdrstop#inclu<strong>de</strong> "frmOpcionesSist.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TfrmOpciones *frmOpciones;//---------------------------------------------------------------------------__fastcall TfrmOpciones::TfrmOpciones(TComponent* Owner): TForm(Owner){}//---------------------------------------------------------------------------void __fastcall TfrmOpciones::FormClose(TObject *Sen<strong>de</strong>r,TCloseAction &Action){Action = caFree;}//---------------------------------------------------------------------------void TfrmOpciones::RecibirParametros(TParametros *Parametros){Params=Parametros;}//Cargamos los datos <strong>de</strong>l sistemargSistema->ItemIn<strong>de</strong>x=Params->iSistema;//Cargamos los datos <strong>de</strong>l Criterio <strong>de</strong> EvaluaciónrgCriterio->ItemIn<strong>de</strong>x=Params->iCriterio;//Cargamos los datos <strong>de</strong> <strong>la</strong> podargPoda->ItemIn<strong>de</strong>x=Params->iPoda;void __fastcall TfrmOpciones::btn_Cance<strong>la</strong>rClick(TObject *Sen<strong>de</strong>r){224 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteClose();}//---------------------------------------------------------------------------void __fastcall TfrmOpciones::btn_AceptarClick(TObject *Sen<strong>de</strong>r){ int cerrar;int rta;cerrar=0;Params->iSistema=rgSistema->ItemIn<strong>de</strong>x;Params->iCriterio=rgCriterio->ItemIn<strong>de</strong>x;Params->iPoda=rgPoda->ItemIn<strong>de</strong>x;Params->iFormatoReg<strong>la</strong>s=1;if (cerrar==0)Close();}//---------------------------------------------------------------------------void __fastcall TfrmOpciones::btn_AplicarClick(TObject *Sen<strong>de</strong>r){Params->iSistema=rgSistema->ItemIn<strong>de</strong>x;Params->iCriterio=rgCriterio->ItemIn<strong>de</strong>x;Params->iPoda=rgPoda->ItemIn<strong>de</strong>x;Params->iFormatoReg<strong>la</strong>s=1;Params->GrabarParams();}//---------------------------------------------------------------------------D.3.4. UElegirRendimientoD.3.4.1. UElegirRendimiento.h//---------------------------------------------------------------------------#ifn<strong>de</strong>f UElegirRendimientoH#<strong>de</strong>fine UElegirRendimientoH//---------------------------------------------------------------------------#inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> "UPrincipal.h"//---------------------------------------------------------------------------c<strong>la</strong>ss TfrmElegirRendimiento : public TForm{__published: // IDE-managed ComponentsTRadioGroup *rgCorrida;TGroupBox *gbSeleccionar;TLabel *lblTab<strong>la</strong>;TLabel *lblFecha;TComboBox *cbTab<strong>la</strong>;TComboBox *cbFecha;TBitBtn *btn_Cance<strong>la</strong>r;TBitBtn *btn_Aceptar;void __fastcall FormClose(TObject *Sen<strong>de</strong>r, TCloseAction &Action);void __fastcall btn_Cance<strong>la</strong>rClick(TObject *Sen<strong>de</strong>r);void __fastcall rgCorridaClick(TObject *Sen<strong>de</strong>r);void __fastcall btn_AceptarClick(TObject *Sen<strong>de</strong>r);void __fastcall cbTab<strong>la</strong>Change(TObject *Sen<strong>de</strong>r);private:AnsiString Base;int Tipo;void CargarCboFechora();public:int CodigoReg<strong>la</strong>s;__fastcall TfrmElegirRendimiento(TComponent* Owner);Código Fuente Magdalena Servente 225


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentevoid Actualizar<strong>Datos</strong>(int iTipo, AnsiString NombreBD);/* iTipo 0: ID3 1:C4.5*/};//---------------------------------------------------------------------------extern PACKAGE TfrmElegirRendimiento *frmElegirRendimiento;//---------------------------------------------------------------------------#endifD.3.4.2. UElegirRendmiento.cpp//---------------------------------------------------------------------------#pragma hdrstop#inclu<strong>de</strong> "UElegirRendimiento.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TfrmElegirRendimiento *frmElegirRendimiento;//---------------------------------------------------------------------------__fastcall TfrmElegirRendimiento::TfrmElegirRendimiento(TComponent* Owner): TForm(Owner){}//---------------------------------------------------------------------------void __fastcall TfrmElegirRendimiento::FormClose(TObject *Sen<strong>de</strong>r,TCloseAction &Action){Action = caFree;}//---------------------------------------------------------------------------void __fastcall TfrmElegirRendimiento::btn_Cance<strong>la</strong>rClick(TObject *Sen<strong>de</strong>r){FormPrincipal->EvalRendimiento=1;Close();}//---------------------------------------------------------------------------void __fastcall TfrmElegirRendimiento::rgCorridaClick(TObject *Sen<strong>de</strong>r){if (rgCorrida->ItemIn<strong>de</strong>x==1)gbSeleccionar->Enabled=true;elsegbSeleccionar->Enabled=false;}//---------------------------------------------------------------------------void TfrmElegirRendimiento::Actualizar<strong>Datos</strong>(int iTipo, AnsiString NombreBD){TQuery *QTab<strong>la</strong>=new TQuery(frmElegirRendimiento);AnsiString sqlstring;try {Base=NombreBD;Tipo=iTipo;QTab<strong>la</strong>->DatabaseName=NombreBD;sqlstring="SELECT distinct(Nombre_Tab<strong>la</strong>) FROM UpdatesHea<strong>de</strong>r.db WHERE Metodo='";if (iTipo==0)AppendStr(sqlstring,"ID3'");elseAppendStr(sqlstring,"C45'");AppendStr(sqlstring,"ORDER BY Nombre_Tab<strong>la</strong>");QTab<strong>la</strong>->SQL->Clear();QTab<strong>la</strong>->SQL->Add(sqlstring);QTab<strong>la</strong>->Open();QTab<strong>la</strong>->First();while (!QTab<strong>la</strong>->Eof){cbTab<strong>la</strong>->Items->Add(QTab<strong>la</strong>->FieldByName("Nombre_Tab<strong>la</strong>")->AsString);226 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteQTab<strong>la</strong>->Next();}cbTab<strong>la</strong>->ItemIn<strong>de</strong>x=0;CargarCboFechora();sqlstring.~AnsiString();<strong>de</strong>lete(QTab<strong>la</strong>);}catch(...){ShowMessage("No se pudieron obtener los datos <strong>de</strong> <strong>la</strong> tab<strong>la</strong> <strong>de</strong> evaluación");sqlstring.~AnsiString();<strong>de</strong>lete(QTab<strong>la</strong>);}}//---------------------------------------------------------------------------void __fastcall TfrmElegirRendimiento::btn_AceptarClick(TObject *Sen<strong>de</strong>r){TQuery *QTab<strong>la</strong>=new TQuery(frmElegirRendimiento);AnsiString sqlstring;try {QTab<strong>la</strong>->DatabaseName=Base;if (rgCorrida->ItemIn<strong>de</strong>x==0){/* sqlstring="SELECT Max(Codigo)as Codigo FROM UpdatesHea<strong>de</strong>r.db WHERENombre_Tab<strong>la</strong>='" +cbTab<strong>la</strong>->Text +"' AND Metodo='";*/ sqlstring="SELECT Max(Codigo) as Codigo FROM UpdatesHea<strong>de</strong>r.db WHEREMetodo='";}else{if (Tipo==0)AppendStr(sqlstring,"ID3'");elseAppendStr(sqlstring,"C45'");sqlstring="SELECT Codigo FROM UpdatesHea<strong>de</strong>r.db WHERE Nombre_Tab<strong>la</strong>='" +cbTab<strong>la</strong>->Text +"' AND Metodo='";if (Tipo==0)AppendStr(sqlstring,"ID3'");elseAppendStr(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,"'");}QTab<strong>la</strong>->SQL->Clear();QTab<strong>la</strong>->SQL->Add(sqlstring);QTab<strong>la</strong>->Open();CodigoReg<strong>la</strong>s=QTab<strong>la</strong>->FieldByName("Codigo")->AsInteger;QTab<strong>la</strong>->First();sqlstring.~AnsiString();<strong>de</strong>lete(QTab<strong>la</strong>);}catch(...){ShowMessage("Problemas con <strong>la</strong> Base <strong>de</strong> <strong>Datos</strong>, no se pudo recuperar <strong>la</strong> tab<strong>la</strong> aprocesar.");sqlstring.~AnsiString();<strong>de</strong>lete(QTab<strong>la</strong>);}}//---------------------------------------------------------------------------void __fastcall TfrmElegirRendimiento::cbTab<strong>la</strong>Change(TObject *Sen<strong>de</strong>r){CargarCboFechora();}void TfrmElegirRendimiento::CargarCboFechora(){TQuery *QTab<strong>la</strong>=new TQuery(frmElegirRendimiento);AnsiString sqlstring;Código Fuente Magdalena Servente 227


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteif (cbTab<strong>la</strong>->Text!=""){try {QTab<strong>la</strong>->DatabaseName=Base;sqlstring="SELECT Fecha, Hora FROM UpdatesHea<strong>de</strong>r.db WHERE Metodo='";if (Tipo==0)AppendStr(sqlstring,"ID3'");elseAppendStr(sqlstring,"C45'");AppendStr(sqlstring, " AND Nombre_Tab<strong>la</strong>='");AppendStr(sqlstring,cbTab<strong>la</strong>->Text);AppendStr(sqlstring,"' ORDER BY Fecha DESC");QTab<strong>la</strong>->SQL->Clear();QTab<strong>la</strong>->SQL->Add(sqlstring);QTab<strong>la</strong>->Open();QTab<strong>la</strong>->First();cbFecha->Clear();while (!QTab<strong>la</strong>->Eof){sqlstring=QTab<strong>la</strong>->FieldByName("Fecha")->AsString + " " + QTab<strong>la</strong>->FieldByName("Hora")->AsString;cbFecha->Items->Add(sqlstring);QTab<strong>la</strong>->Next();}cbFecha->ItemIn<strong>de</strong>x=0;}catch(...){ShowMessage("No se pudieron obtener los datos <strong>de</strong> <strong>la</strong> tab<strong>la</strong> <strong>de</strong> evaluación");}}sqlstring.~AnsiString();<strong>de</strong>lete(QTab<strong>la</strong>);}//---------------------------------------------------------------------------D.3.5. URendimientoD.3.5.1. URendimiento.h//---------------------------------------------------------------------------#ifn<strong>de</strong>f URendimientoH#<strong>de</strong>fine URendimientoH#inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> //---------------------------------------------------------------------------c<strong>la</strong>ss TFrmRendimiento : public TForm{__published: // IDE-managed ComponentsTStringGrid *GridResultados;void __fastcall FormClose(TObject *Sen<strong>de</strong>r, TCloseAction &Action);private:public:// User <strong>de</strong>c<strong>la</strong>rations// User <strong>de</strong>c<strong>la</strong>rations__fastcall TFrmRendimiento(TComponent* Owner);};//---------------------------------------------------------------------------extern PACKAGE TFrmRendimiento *FrmRendimiento;//---------------------------------------------------------------------------#endifD.3.5.2. URendmiento.cpp//---------------------------------------------------------------------------#pragma hdrstop228 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente#inclu<strong>de</strong> "URendimiento.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TFrmRendimiento *FrmRendimiento;//---------------------------------------------------------------------------__fastcall TFrmRendimiento::TFrmRendimiento(TComponent* Owner): TForm(Owner){}//---------------------------------------------------------------------------void __fastcall TFrmRendimiento::FormClose(TObject *Sen<strong>de</strong>r,TCloseAction &Action){Action = caFree;}//---------------------------------------------------------------------------D.3.6. UarbolD.3.6.1. UArbol.h//---------------------------------------------------------------------------#ifn<strong>de</strong>f UArbolH#<strong>de</strong>fine UArbolH//---------------------------------------------------------------------------#inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> "UPrincipal.h"#inclu<strong>de</strong> "UTipos.h"//--------------------------------------------------------------------------c<strong>la</strong>ss Tfrm_Arbol : public TForm{__published: // IDE-managed ComponentsTTreeView *ArbolRes;TOpenDialog *fod_Archivo;void __fastcall FormClose(TObject *Sen<strong>de</strong>r, TCloseAction &Action);void __fastcall FormCloseQuery(TObject *Sen<strong>de</strong>r, bool &CanClose);private:/*String que tendrá los valores posibles para el c<strong>la</strong>sificador*/TStringList *LC<strong>la</strong>sificadores;TVecValores VecValores;TVecValores VecDescriptores;public:void PrintSubtree(tree_ptr Tree, int nivel);int ObtenerNuevoValor(); /*numeración <strong>de</strong> valores <strong>de</strong>l VecValores para<strong>la</strong> impresión <strong>de</strong>l árbol*/__fastcall Tfrm_Arbol(TComponent* Owner);void PrintTree(tree_ptr Tree);void RecibirParametros(TStringList *LC<strong>la</strong>sif,TVecValores VecVal,TVecValores VecDescrip);};//---------------------------------------------------------------------------extern PACKAGE Tfrm_Arbol *frm_Arbol;//---------------------------------------------------------------------------#endifD.3.6.2. UArbol.cpp//---------------------------------------------------------------------------#pragma hdrstopCódigo Fuente Magdalena Servente 229


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente#inclu<strong>de</strong> "UArbol.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"Tfrm_Arbol *frm_Arbol;TTreeNo<strong>de</strong> *pNivel[MAX_CANT_DESCRIPTORES]; //para <strong>la</strong> visualización//---------------------------------------------------------------------------__fastcall Tfrm_Arbol::Tfrm_Arbol(TComponent* Owner): TForm(Owner){}//---------------------------------------------------------------------------void __fastcall Tfrm_Arbol::FormClose(TObject *Sen<strong>de</strong>r,TCloseAction &Action){int i;for (i=0;iExecute();if (res)ArbolRes->SaveToFile(fod_Archivo->FileName);}}//---------------------------------------------------------------------------int Tfrm_Arbol::ObtenerNuevoValor() /*numeración <strong>de</strong> valores <strong>de</strong>l VecValores para<strong>la</strong> impresión <strong>de</strong>l árbol*/{static int i=0;i++;return(i);}//---------------------------------------------------------------------------//-------------------- IMPRESIÓN DEL ÁRBOL EN PANTALLA ----------------------//---------------------------------------------------------------------------/************************************************************************************************************************************************************/void Tfrm_Arbol::PrintTree(tree_ptr Tree){int nivel;TTreeNo<strong>de</strong> *pNivel[MAX_CANT_DESCRIPTORES]; //para <strong>la</strong> visualizaciónnivel=0;//nivel <strong>de</strong> <strong>la</strong> raízpNivel[nivel]= new TTreeNo<strong>de</strong>(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();230 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteArbolRes->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->f<strong>la</strong>g_hoja!=3) //es hojaArbolRes->Items->AddChild(pNivel[nivel], LC<strong>la</strong>sificadores->Strings[Tree->f<strong>la</strong>g_hoja]);else //no es hoja{i=0;nivel++;while ((Tree->pHijos[i]!=NULL)&&(ipHijos[i],nivel);i++;}}//end elsenodo.~AnsiString();return;}//---------------------------------------------------------------------------//---------------------------------------------------------------------------//---------------------------------------------------------------------------//---------------------------------------------------------------------------void Tfrm_Arbol::RecibirParametros(TStringList *LC<strong>la</strong>sif,TVecValores VecVal,TVecValores VecDescrip){int i;LC<strong>la</strong>sificadores=LC<strong>la</strong>sif;for (i=0;i


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente//---------------------------------------------------------------------------c<strong>la</strong>ss TDMID3 : public TDataModule{__published: // IDE-managed ComponentsTTable *TTennis;TDataSource *DSTTennis;TQuery *QGral;TQuery *QUpdates;void __fastcall DMID3Destroy(TObject *Sen<strong>de</strong>r);private:TParametros *Params;short int EvaluarResultados(AnsiString NombreTab<strong>la</strong>);public:__fastcall TDMID3(TComponent* Owner);//----------------------------------------------------------------------------//--------------------DECLARACION DE FUNCIONES--------------------------------//----------------------------------------------------------------------------tree_ptr Principal ( short int MedidorGanancia); /*Módulo principal*/void RecibirParametros(TParametros *Parametros);short int EsUniforme(int nivelArbol); /*verifica si estamos en una hoja*/int ObtenerCantDescr();/*Obtiene <strong>la</strong> cantidad <strong>de</strong> <strong>de</strong>scriptores <strong>de</strong> <strong>la</strong> tab<strong>la</strong>*/int BuscarPK(short int ValidDs[]); /*Busca c<strong>la</strong>ves promarias en <strong>la</strong> tab<strong>la</strong>*/tree_ptr BuildTree(int nivel, short int *pD);/*Función que construye el árbol <strong>de</strong> <strong>de</strong>cisión según el ID3*/int ObtenerNuevoNivel(); /*numeración <strong>de</strong> niveles para el árbol*/int ObtenerNuevoValor(); /*numeración <strong>de</strong> subíndices <strong>de</strong>l VecValores para <strong>la</strong>impresión <strong>de</strong>l árbol*/int ArmarTab<strong>la</strong>(TTab<strong>la</strong>Correl& Tab<strong>la</strong>, int Nivel, int <strong>de</strong>sc,TStringList *valores);/*arma <strong>la</strong> tab<strong>la</strong> <strong>de</strong> corre<strong>la</strong>ción para el nro <strong>de</strong> <strong>de</strong>scriptor indicado en el nivel<strong>de</strong>l árbol indicadoSi <strong>la</strong> función <strong>de</strong>vuelve un 0 significa que no hubo problemasHubo problemas en todo otro caso*/int Particionar(int <strong>de</strong>sc, int nivel, tree_ptr pNo<strong>de</strong>, TStringList *valores);/*realiza <strong>la</strong> partición <strong>de</strong>l conjunto <strong>de</strong> datosSi <strong>la</strong> función <strong>de</strong>vuelve un 0 significa que no hubo problemasHubo problemas en todo otro caso*/short int PruneTree(tree_ptr Tree);/*realiza el "pruning" <strong>de</strong>l árbol obtenidoDevuelve 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 ArmarReg<strong>la</strong>s(tree_ptr Tree);/*Arma <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión generadas a partir <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión "Tree"*/void ObtenerReg<strong>la</strong>s(tree_ptr Tree, TVecInt VecReg<strong>la</strong>s, int nroReg<strong>la</strong>, int codigo);short int ObtenerNroReg<strong>la</strong>();/*numeración <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión*/short int ObtenerSubReg<strong>la</strong>s();short int ObtenerNroUpdate();void AplicarReg<strong>la</strong>s(AnsiString Tab<strong>la</strong>, int codigoReg<strong>la</strong>s);/*Aplica a Tab<strong>la</strong> <strong>la</strong>sreg<strong>la</strong>s obtenidas*/short int EvaluarReg<strong>la</strong>s(int codigoReg<strong>la</strong>s);/*Evalua <strong>la</strong>s reg<strong>la</strong>s obtenidas sobrelos datosespecificados*/tab<strong>la</strong>);tab<strong>la</strong>);tab<strong>la</strong>);//----FUNCIONES UTILIZADAS PARA EL CÁLCULO DE LA ENTROPÍAfloat InfoTermino(int cant, int total); /*información brindada por un término*/float Ianterior(int cant_c<strong>la</strong>sificadores, int cant_<strong>de</strong>scriptores, TTab<strong>la</strong>Correl/*Esta función <strong>de</strong>vuelve <strong>la</strong> información <strong>de</strong> un conjunto antes <strong>de</strong> realizar <strong>la</strong>partición*/float Iposterior(int cant_c<strong>la</strong>sificadores, int cant_<strong>de</strong>scriptores, TTab<strong>la</strong>Correl/*Esta función <strong>de</strong>vuelve <strong>la</strong> información <strong>de</strong> un conjunto <strong>de</strong>spués <strong>de</strong> realizar<strong>la</strong> partición según el atributo por el que se armó <strong>la</strong> tab<strong>la</strong>*/float Gain(float Ianterior, float Iposterior);/*Ganancia <strong>de</strong>bida a <strong>la</strong> partición <strong>de</strong>l conjunto según el atributo encuestión*/float SplitInfo(int cant_c<strong>la</strong>sificadores, int cant_<strong>de</strong>scriptores, TTab<strong>la</strong>Correl/*Información <strong>de</strong>bida a <strong>la</strong> partición realizada*/float GainRatio(float Ganancia, float SplitInformation);232 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente/*Proporción <strong>de</strong> ganancia <strong>de</strong>bida a <strong>la</strong> partición <strong>de</strong>l conjunto según e<strong>la</strong>tributo en cuestión*/float GananciaEntropia(int cant_c<strong>la</strong>sificadores, int cant_<strong>de</strong>scriptores,TTab<strong>la</strong>Correl tab<strong>la</strong>);/*Utiliza todas <strong>la</strong>s funciones anteriores para obtener el Gain Ratio <strong>de</strong><strong>la</strong> tab<strong>la</strong> recibida como parámetro*/tree_ptr InicializarTree(); /*inicializa el árbol, <strong>de</strong>volviendo un ptr a<strong>la</strong> raíz */void EliminarTree(tree_ptr Tree); /*elimina todos los elementos <strong>de</strong>l árbol,liberando <strong>la</strong> memoria*/void InformarValores(TVecValores VecVal);/*Recibe los valores <strong>de</strong>l arbol generado*/void InformarDescrip(TVecValores VecDesc);/*Recibe <strong>la</strong>s <strong>de</strong>scripciones <strong>de</strong>l arbol generado*/};//---------------------------------------------------------------------------extern PACKAGE TDMID3 *DMID3;//---------------------------------------------------------------------------#endifD.4.1.2. UDMID3.cpp//---------------------------------------------------------------------------#pragma hdrstop#inclu<strong>de</strong> "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 c<strong>la</strong>sificador*/TVecValores VecValores;TVecValores VecDescriptores;fstream FReg<strong>la</strong>s; //guarda <strong>la</strong>s reg<strong>la</strong>s generadas en formato <strong>de</strong> Insight 2+fstream FVitacora; //guarda <strong>la</strong>s tab<strong>la</strong>s generadas en cada paso <strong>de</strong>l ID3int UsoGain; //vale 0 si uso gain, 1 si uso gain ratio//---------------------------------------------------------------------------//-----------------------IMPLEMENTACIÓN--------------------------------------//---------------------------------------------------------------------------/******************************************************************************Función principal que comienza con el armado <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión según e<strong>la</strong>lgoritmo ID3******************************************************************************/tree_ptr TDMID3::Principal ( short int MedidorGanancia){int cant_<strong>de</strong>scr;short int ValidDs[MAX_CANT_DESCRIPTORES];short int *pValidDs = ValidDs;int i, error;char outFile[50]="Log\\ID3";tree_ptr pRoot;UsoGain=MedidorGanancia;Código Fuente Magdalena Servente 233


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente//Obtener cantidad <strong>de</strong> <strong>de</strong>scriptorescant_<strong>de</strong>scr=ObtenerCantDescr();for (i=0;iTab<strong>la</strong>BD.c_str());strcat(outFile, ".log");}elseFVitacora.open(outFile, ios::out);pRoot=BuildTree(ObtenerNuevoNivel(), pValidDs);FVitacora.close();return(pRoot);}{pRoot=NULL;return(pRoot);}void TDMID3::RecibirParametros(TParametros *Parametros){int i;AnsiString sqlstring;Params=Parametros;TTennis->DatabaseName=Params->NombreBD;TTennis->TableName=Params->Tab<strong>la</strong>BD;TTennis->Active=true;//Inicializamos los queries que harán sus consultas sobre <strong>la</strong> base//especificadaQGral->DatabaseName=Params->NombreBD;for (i=0; iTab<strong>la</strong>BD);AppendStr(sqlstring," SET Nivel = 0 ");QGral->SQL->Clear();QGral->SQL->Add(sqlstring);QGral->ExecSQL();QGral->SQL->Clear();TTennis->Close();TTennis->Open();sqlstring.~AnsiString();}/******************************************************************************Verifica <strong>la</strong> uniformidad <strong>de</strong> un conjunto <strong>de</strong> fi<strong>la</strong>s, por uniformidad nos referimosal hecho que todos los valores <strong>de</strong>l c<strong>la</strong>sificador para dicho conjunto sean igualesDevuelve:0 si todos los valores son "Yes"1 si todos los valores son "No"3 si los valores no son uniformes4 si hubo un error******************************************************************************/short int TDMID3::EsUniforme(int nivelArbol){//begin EsUniforme234 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteshort int aux;AnsiString sqlstring;try //intentamos abrir el QUniforme{sqlstring="Select Count(Distinct ";AppendStr(sqlstring, Params->ColC<strong>la</strong>sificador);AppendStr(sqlstring,") AS diferentes FROM ");AppendStr(sqlstring,Params->Tab<strong>la</strong>BD);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 uniformesreturn(3);else{QGral->Close();sqlstring="Select ";AppendStr(sqlstring, Params->ColC<strong>la</strong>sificador);AppendStr(sqlstring," AS valor FROM ");AppendStr(sqlstring,Params->Tab<strong>la</strong>BD);AppendStr(sqlstring," WHERE Nivel= ");AppendStr(sqlstring,nivelArbol);QGral->SQL->Clear();QGral->SQL->Add(sqlstring);QGral->Open();if (QGral->FieldByName("valor")->AsString == Params->LC<strong>la</strong>sificadores->Strings[0])aux=0;elseaux=1;QGral->Close();return(aux);}}catch(...){sqlstring.~AnsiString();ShowMessage("No se pudo abrir el Query");return(4);}}//fin EsUniforme/******************************************************************************Obtiene <strong>la</strong> cantidad <strong>de</strong> <strong>de</strong>scriptores presentes en <strong>la</strong> tab<strong>la</strong>que será <strong>la</strong> cantidad <strong>de</strong> atributos menos 2: el c<strong>la</strong>sificador y el atributo nivel******************************************************************************/int TDMID3::ObtenerCantDescr(){int cant_<strong>de</strong>scr;TTennis->Open();cant_<strong>de</strong>scr=TTennis->FieldCount;cant_<strong>de</strong>scr-=2;return(cant_<strong>de</strong>scr);}/******************************************************************************/*Busca c<strong>la</strong>ves primarias en <strong>la</strong> tab<strong>la</strong>, para no trabajar sobre esos campos porno ofrecer ninguna ganancia <strong>de</strong> informaciónDevuelve:0 si no hubo problemas1 si hubo algún error/******************************************************************************/int TDMID3::BuscarPK(short int ValidDs[]){AnsiString sqlstring;int i, cantCampos, cantReg;cantCampos=TTennis->FieldCount;cantReg=TTennis->RecordCount;Código Fuente Magdalena Servente 235


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentetry{for (i=0; iFields->Fields[i]->FieldName);AppendStr(sqlstring," ) as Cant FROM ");AppendStr(sqlstring, Params->Tab<strong>la</strong>BD);QGral->SQL->Clear();QGral->SQL->Add(sqlstring);sqlstring.~AnsiString();QGral->Open();if (QGral->FieldByName("Cant")->AsInteger==cantReg)ValidDs[i]=0; //no es un <strong>de</strong>sc válido por ser PKQGral->Close();}return(0);}catch(...){sqlstring.~AnsiString();ShowMessage("No se pudo abrir el Query");return(1);}}//---------------------------------------------------------------------------/******************************************************************************Función recursiva que arma el árbol <strong>de</strong> <strong>de</strong>cisión según e<strong>la</strong>lgoritmo ID3******************************************************************************/tree_ptr TDMID3::BuildTree(int nivel, short int *pD){float max_ganancia=-1000;short int <strong>de</strong>sc_max_ganancia=-1; /*<strong>de</strong>scriptor con <strong>la</strong> mayor ganancia*/float ganancia;short int unif;tree_ptr pNewNo<strong>de</strong>;short int i;int cant_c<strong>la</strong>s, cant_valores_<strong>de</strong>scr;int exito;TTab<strong>la</strong>Correl Tab<strong>la</strong>;TStringList *valores = new TStringList();TStringList *MaxValores = new TStringList();cant_c<strong>la</strong>s=Params->LC<strong>la</strong>sificadores->Count;/* Inicializar Nodo*/pNewNo<strong>de</strong>=(DECISION_TREE)malloc(sizeof(struct tree_no<strong>de</strong>));if (pNewNo<strong>de</strong>==0){ShowMessage("No hay suficiente espacio en memoria para <strong>la</strong> operación");}else{for (i=0; ipHijos[i]=0;pNewNo<strong>de</strong>-><strong>de</strong>sc=-1;for (i=0; iD[i]=*(pD+i);FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente<strong>de</strong>lete valores;<strong>de</strong>lete MaxValores;return pNewNo<strong>de</strong>;}else /*no es hoja*/{pNewNo<strong>de</strong>->f<strong>la</strong>g_hoja=3;son "Yes", y 1 si todos son "No"*/Tab<strong>la</strong>);/*Si no es hoja, calcu<strong>la</strong>r <strong>la</strong> entropía para cada <strong>de</strong>scriptrorválido en el nivel que estamos analizando.Obtenemos el <strong>de</strong>scriptor <strong>de</strong> mayor ganancia*/for (i=0; iD[i]==1) /*es un <strong>de</strong>scriptor válido*/{valores->Clear();exito=ArmarTab<strong>la</strong>(Tab<strong>la</strong>,nivel,i, valores);if (exito==0){cant_valores_<strong>de</strong>scr=valores->Count;ganancia=GananciaEntropia(cant_c<strong>la</strong>s, cant_valores_<strong>de</strong>scr,if (ganancia>max_ganancia){max_ganancia=ganancia;<strong>de</strong>sc_max_ganancia=i;MaxValores->Clear();MaxValores->AddStrings(valores);}}}<strong>de</strong>lete valores;/*Partir el conjunto según el <strong>de</strong>sciptor que ofrezca mayor entropía*/if (<strong>de</strong>sc_max_ganancia>=0) //es un <strong>de</strong>scriptor válido{pNewNo<strong>de</strong>-><strong>de</strong>sc=<strong>de</strong>sc_max_ganancia; /*<strong>de</strong>scriptor utilizadopara realizar <strong>la</strong> partición*/pNewNo<strong>de</strong>->D[<strong>de</strong>sc_max_ganancia]=0;FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente//------------------------------------------------------------------------------/******************************************************************************Esta función <strong>de</strong>vuelve <strong>la</strong> información brindada por un términocant: cantidad <strong>de</strong> ocurrencias <strong>de</strong> ese elementototal: total <strong>de</strong> elementos en el conjuntoInfoTermino=-(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;else}if (temp==0)temp=0;elsetemp*=Log2(temp);temp=-temp;return(temp);}return(0);/******************************************************************************Esta función <strong>de</strong>vuelve <strong>la</strong> información <strong>de</strong> un conjunto antes <strong>de</strong> realizar <strong>la</strong> particióncant_c<strong>la</strong>sificadores: cantidad <strong>de</strong> valores posibles para los c<strong>la</strong>sificadores, es<strong>de</strong>cir, <strong>la</strong> cantidad <strong>de</strong> fi<strong>la</strong>s <strong>de</strong> <strong>la</strong> tab<strong>la</strong> <strong>de</strong> corre<strong>la</strong>cióncant_<strong>de</strong>scriptores: cantidad <strong>de</strong> <strong>de</strong>scriptores válidos para el nivel <strong>de</strong>l árbol quese está analizando, es <strong>de</strong>cir, <strong>la</strong> cantidad <strong>de</strong> columnas<strong>de</strong> <strong>la</strong> tab<strong>la</strong> <strong>de</strong> corre<strong>la</strong>ciónIanterior(T)=Sum(i=1, i


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentefloat TDMID3::Iposterior(int cant_c<strong>la</strong>sificadores, int cant_<strong>de</strong>scriptores, TTab<strong>la</strong>Correltab<strong>la</strong>){float Iaux, Itemp;int i,j;Iaux=0;for (i=0; i


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente{float anterior, posterior, gano;float splitI, auxGE;anterior=Ianterior(cant_c<strong>la</strong>sificadores, cant_<strong>de</strong>scriptores, tab<strong>la</strong>);posterior=Iposterior(cant_c<strong>la</strong>sificadores, cant_<strong>de</strong>scriptores, tab<strong>la</strong>);gano=Gain(anterior, posterior);splitI=SplitInfo(cant_c<strong>la</strong>sificadores, cant_<strong>de</strong>scriptores, tab<strong>la</strong>);auxGE=GainRatio(gano,splitI);FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentemaxd=d-1;QGral->Close();}catch(...) //De <strong>la</strong> apertura <strong>de</strong>l Query{ShowMessage("No se pudo abrir el Query para obtener todos los valores <strong>de</strong> un<strong>de</strong>scriptor");<strong>de</strong>lete lista;sqlstring1.~AnsiString();sqlstring2.~AnsiString();return(1);}//======================================================================//=================== MANEJO DEL QUERY =============================//===========CARGAMOS LOS VALORES INDIVIDUALES DE Tab<strong>la</strong>[c][d]===========//==========================(NO LOS TOTALES)============================//======================================================================try //Intentamos abrir el QGral{d=0;while (dAdd(sqlstring2);QGral->Open();sqlstring2.~AnsiString();Tab<strong>la</strong>[c][d]=QGral->FieldByName("Cant")->AsInteger;FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente/*Obtenemos los totales <strong>de</strong> <strong>la</strong> tab<strong>la</strong> <strong>de</strong> corre<strong>la</strong>ción*//* TOTALES POR FILA */for (c=0; c


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteVecValores[nuevoNivel]=valores->Strings[i];TTennis->Close();TTennis->Open();pNo<strong>de</strong>->pHijos[i]=BuildTree(nuevoNivel, pDesc);}sqlstring.~AnsiString();particion.~AnsiString();<strong>de</strong>lete lista;return(0);}catch(...){ShowMessage("No se pudo realizar <strong>la</strong> actualización");sqlstring.~AnsiString();particion.~AnsiString();<strong>de</strong>lete lista;return(1);}}//---------------------------------------------------------------------------/******************************************************************************/*realiza el "pruning" <strong>de</strong>l árbol obtenidoDevuelve0 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->f<strong>la</strong>g_hoja!=3) //es hojareturn(Tree->f<strong>la</strong>g_hoja);else{i=0;iguales=3;while ((Tree->pHijos[i]!=NULL)&&(ipHijos[i]);if (iguales==3)iguales=hijo;else{if (iguales!=hijo)iguales=-1;}i++;}if (iguales!=-1) //se pue<strong>de</strong> "podar" <strong>la</strong> rama{Tree->f<strong>la</strong>g_hoja=iguales;i=0;while ((Tree->pHijos[i]!=NULL)&&(ipHijos[i]);i++;}}return(iguales);}//end else}//end PruneTree//---------------------------------------------------------------------------/********************************************************************************Arma <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión generadas a partir <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión "Tree"*********************************************************************************/void TDMID3::ArmarReg<strong>la</strong>s(tree_ptr Tree){TVecInt VecReg<strong>la</strong>s;Código Fuente Magdalena Servente 243


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentechar outFile[50]="Reg<strong>la</strong>s\\";int nroReg<strong>la</strong>;int i;nroReg<strong>la</strong>=0;char* tab<strong>la</strong>="";char* <strong>de</strong>limitador=".";AnsiString sqlstring;int cod;//Iniciliazamos el vector <strong>de</strong> reg<strong>la</strong>sfor (i=0; iDatabaseName=Params->NombreBD;sqlstring="SELECT * FROM UpdatesHea<strong>de</strong>r.db";QUpdates->SQL->Clear();QUpdates->SQL->Add(sqlstring);QUpdates->Open();QUpdates->Last();cod=QUpdates->RecordCount;cod++;QUpdates->SQL->Clear();//Insertamos el Hea<strong>de</strong>r <strong>de</strong> <strong>la</strong>s ConsultasDateSeparator='/';TimeSeparator=':';sqlstring="INSERT INTO UpdatesHea<strong>de</strong>r.db (CODIGO,HORA) VALUES (";AppendStr(sqlstring,cod);AppendStr(sqlstring,", '");AppendStr(sqlstring, Params->Tab<strong>la</strong>BD);AppendStr(sqlstring,"', 'ID3', '");AppendStr(sqlstring, Date());AppendStr(sqlstring,"', '");AppendStr(sqlstring, Time());AppendStr(sqlstring,"')");QUpdates->SQL->Add(sqlstring);QUpdates->ExecSQL();QUpdates->SQL->Clear();NOMBRE_TABLA, METODO, FECHA,//Concatenamos fecha y hora en los archivosDateSeparator='-';TimeSeparator='_';strcat(outFile, DateTimeToStr(Now()).c_str());//Eliminamos <strong>la</strong> extensión <strong>de</strong> <strong>la</strong> tab<strong>la</strong> <strong>de</strong> <strong>la</strong> base <strong>de</strong> datostab<strong>la</strong>=strtok(Params->Tab<strong>la</strong>BD.c_str(),<strong>de</strong>limitador);strcat(outFile, tab<strong>la</strong>);//Les agregamos <strong>la</strong> extensiónstrcat(outFile, Params->ExtensionFileReg<strong>la</strong>s.c_str());FReg<strong>la</strong>s.open(outFile, ios::out);//Obtenemos <strong>la</strong>s reg<strong>la</strong>sObtenerReg<strong>la</strong>s(Tree, VecReg<strong>la</strong>s, nroReg<strong>la</strong>,cod);}//Cerramos el archivoFReg<strong>la</strong>s.close();sqlstring.~AnsiString();void TDMID3::ObtenerReg<strong>la</strong>s(tree_ptr Tree, TVecInt VecReg<strong>la</strong>s, int nroReg<strong>la</strong>, int codigo){char hea<strong>de</strong>r[15]="Reg<strong>la</strong> ";char then[]=" ENTONCES ";char si[]=" SI ";char is[]=" = ";char es[]=" = ";char and[]=" Y ";AnsiString sqlstring;AnsiString sqlstring2;AnsiString tab<strong>la</strong>;int i,j;244 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteTRule rule="";if (nroReg<strong>la</strong>!=0){/*Agregamos el el vector <strong>de</strong> reg<strong>la</strong>s el subindice <strong>de</strong>l par"<strong>de</strong>scriptor - valor" utilizado para armar a reg<strong>la</strong>, es <strong>de</strong>cir,utilizado para recorrer <strong>la</strong> rama <strong>de</strong>l arbol */j=0;while (VecReg<strong>la</strong>s[j]!=-1){j++;}VecReg<strong>la</strong>s[j]=ObtenerSubReg<strong>la</strong>s();}if (Tree->f<strong>la</strong>g_hoja!=3) //es hoja{//Agregamos el nro <strong>de</strong> reg<strong>la</strong> "RULE N°"FReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteQUpdates->SQL->Clear();QUpdates->SQL->Add(sqlstring2);QUpdates->ExecSQL();}else //no es hoja{i=0;nroReg<strong>la</strong>++;while ((Tree->pHijos[i]!=NULL)&&(ipHijos[i], VecReg<strong>la</strong>s, nroReg<strong>la</strong>,codigo);/*Eliminamos el valor <strong>de</strong> <strong>la</strong> ultima rama recorrida porqueestamos cambiando <strong>de</strong> rama*/j=0;while (VecReg<strong>la</strong>s[j]!=-1){j++;}VecReg<strong>la</strong>s[j-1]=-1;i++;}}//end elsetab<strong>la</strong>.~AnsiString();sqlstring.~AnsiString();sqlstring2.~AnsiString();return;}/********************************************************************************Numeración única para <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisión generadas****************************************************************************************************/short int TDMID3::ObtenerNroReg<strong>la</strong>(){static short int nroReg<strong>la</strong>=-1;nroReg<strong>la</strong>++;return(nroReg<strong>la</strong>);}short int TDMID3::ObtenerSubReg<strong>la</strong>s(){static short int subReg<strong>la</strong>=0;subReg<strong>la</strong>++;return(subReg<strong>la</strong>);}short int TDMID3::ObtenerNroUpdate(){static short int nroReg<strong>la</strong>=-1;nroReg<strong>la</strong>++;return(nroReg<strong>la</strong>);}//---------------------------------------------------------------------------/********************************************************************************Inicializa el árbol, creando un ptr a <strong>la</strong> raíz <strong>de</strong>l mismo****************************************************************************************************/tree_ptr TDMID3::InicializarTree(){tree_ptr pNewNo<strong>de</strong>;pNewNo<strong>de</strong>=(DECISION_TREE)malloc(sizeof(struct tree_no<strong>de</strong>));if (pNewNo<strong>de</strong>==0){ShowMessage("No hay suficiente espacio en memoria para <strong>la</strong> operación");return(NULL);}else{pNewNo<strong>de</strong>->pHijos[0]=0;return(pNewNo<strong>de</strong>);}}/******************************************************************************246 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente**Elimina todos los elementos <strong>de</strong>l árbol, liberando <strong>la</strong> memoria************************************************************************************************/void TDMID3::EliminarTree(tree_ptr Tree){int i;i=0;while ((Tree->pHijos[i]!=NULL)&&(ipHijos[i]);free(Tree->pHijos[i]);i++;}return;}void TDMID3::InformarValores(TVecValores VecVal)/*Recibe los valores <strong>de</strong>l arbol generado*/{int i;for (i=0;iNombreBD;QAplicar->DatabaseName=Params->NombreBD;sqlstring="SELECT * FROM Updates.db where codigo=";AppendStr(sqlstring, codigoReg<strong>la</strong>s);QReg<strong>la</strong>s->SQL->Clear();QReg<strong>la</strong>s->SQL->Add(sqlstring);QReg<strong>la</strong>s->Open();QReg<strong>la</strong>s->Last();QReg<strong>la</strong>s->First();while (!QReg<strong>la</strong>s->Eof){sqlstring=QReg<strong>la</strong>s->FieldByName("Modificacion")->AsString;sqlstring.Insert(Tab<strong>la</strong>,0);sqlstring.Insert("UPDATE ",0);QAplicar->SQL->Clear();QAplicar->SQL->Add(sqlstring);QAplicar->ExecSQL();QReg<strong>la</strong>s->Next();}}<strong>de</strong>lete(QReg<strong>la</strong>s);<strong>de</strong>lete(QAplicar);sqlstring.~AnsiString();//Evalua los resultados <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s aplicadas sobre <strong>la</strong> tab<strong>la</strong> <strong>de</strong> NombreTab<strong>la</strong>short int TDMID3::EvaluarResultados(AnsiString NombreTab<strong>la</strong>)/*Arma una tab<strong>la</strong> <strong>de</strong> resultados <strong>de</strong> <strong>la</strong> forma:{TTab<strong>la</strong>Correl Tab<strong>la</strong>Res;int i, correctos,erroneos;CorrectoC<strong>la</strong>se1 x y tC<strong>la</strong>se2 m n l.... ... ... ...C<strong>la</strong>seN z w vTotales totC totE totProb */Errores Probabilidad <strong>de</strong> aciertoCódigo Fuente Magdalena Servente 247


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteTQuery *QC<strong>la</strong>ses=new TQuery(DMID3);TQuery *QRes=new TQuery(DMID3);AnsiString sqlstring;TFrmRendimiento *pForm;try{pForm=FrmRendimiento;//Inicializamos los nombres <strong>de</strong> <strong>la</strong>s columnaspForm->GridResultados->Cells[0][0]="C<strong>la</strong>ses";pForm->GridResultados->Cells[1][0]="Correctos";pForm->GridResultados->Cells[2][0]="Errores";pForm->GridResultados->Cells[3][0]="Probabilidad <strong>de</strong> Aciertos";QC<strong>la</strong>ses->DatabaseName=Params->NombreBD;QRes->DatabaseName=Params->NombreBD;//Obtenemos los nombres <strong>de</strong> todas <strong>la</strong>s c<strong>la</strong>sessqlstring="SELECT DISTINCT(C<strong>la</strong>seReal) as C<strong>la</strong>se FROM ";AppendStr(sqlstring,NombreTab<strong>la</strong>);QC<strong>la</strong>ses->SQL->Clear();QC<strong>la</strong>ses->SQL->Add(sqlstring);QC<strong>la</strong>ses->Open();QC<strong>la</strong>ses->First();i=0;while(!QC<strong>la</strong>ses->Eof){pForm->GridResultados->Cells[0][i+1]=QC<strong>la</strong>ses->FieldByName("C<strong>la</strong>se")->AsString;//Correctossqlstring=QC<strong>la</strong>ses->FieldByName("C<strong>la</strong>se")->AsString;sqlstring.Insert(" WHERE C<strong>la</strong>seReal='",0);sqlstring.Insert(NombreTab<strong>la</strong>,0);sqlstring.Insert("SELECT Count(*) as Correctos FROM ",0);AppendStr(sqlstring,"' AND C<strong>la</strong>seReal=");AppendStr(sqlstring,Params->ColC<strong>la</strong>sificador);QRes->SQL->Clear();QRes->SQL->Add(sqlstring);QRes->Open();QRes->First();Tab<strong>la</strong>Res[i][0]=(double)QRes->FieldByName("Correctos")->AsInteger;pForm->GridResultados->Cells[1][i+1]=Tab<strong>la</strong>Res[i][0];//Erroressqlstring=QC<strong>la</strong>ses->FieldByName("C<strong>la</strong>se")->AsString;sqlstring.Insert(" WHERE C<strong>la</strong>seReal='",0);sqlstring.Insert(NombreTab<strong>la</strong>,0);sqlstring.Insert("SELECT Count(*) as Erroneos FROM ",0);AppendStr(sqlstring,"' AND C<strong>la</strong>seReal");AppendStr(sqlstring,Params->ColC<strong>la</strong>sificador);QRes->SQL->Clear();QRes->SQL->Add(sqlstring);QRes->Open();QRes->First();Tab<strong>la</strong>Res[i][1]=QRes->FieldByName("Erroneos")->AsInteger;pForm->GridResultados->Cells[2][i+1]=Tab<strong>la</strong>Res[i][1];}QC<strong>la</strong>ses->Next();pForm->GridResultados->RowCount++;i++;QC<strong>la</strong>ses->First();i=0;correctos=0;erroneos=0;while(!QC<strong>la</strong>ses->Eof){/*Calcu<strong>la</strong>mos <strong>la</strong> probabilidad con que un ejemplo c<strong>la</strong>sificadocomo <strong>de</strong> c<strong>la</strong>se i pertenece a dicha c<strong>la</strong>se*/Tab<strong>la</strong>Res[i][2]=Tab<strong>la</strong>Res[i][0]/(Tab<strong>la</strong>Res[i][0]+Tab<strong>la</strong>Res[i][1]);pForm->GridResultados->Cells[3][i+1]=Tab<strong>la</strong>Res[i][2];correctos+=Tab<strong>la</strong>Res[i][0];erroneos+=Tab<strong>la</strong>Res[i][1];QC<strong>la</strong>ses->Next();248 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentei++;}//Resultados generalesTab<strong>la</strong>Res[i][0]=correctos;Tab<strong>la</strong>Res[i][1]=erroneos;Tab<strong>la</strong>Res[i][2]=Tab<strong>la</strong>Res[i][0]/(Tab<strong>la</strong>Res[i][0]+Tab<strong>la</strong>Res[i][1]);pForm->GridResultados->Cells[0][i+1]="Totales";pForm->GridResultados->Cells[1][i+1]=Tab<strong>la</strong>Res[i][0];pForm->GridResultados->Cells[2][i+1]=Tab<strong>la</strong>Res[i][1];pForm->GridResultados->Cells[3][i+1]=Tab<strong>la</strong>Res[i][2];}QC<strong>la</strong>ses->Close();QRes->Close();<strong>de</strong>lete(QC<strong>la</strong>ses);<strong>de</strong>lete(QRes);sqlstring.~AnsiString();return(0);}catch(...){<strong>de</strong>lete(QC<strong>la</strong>ses);<strong>de</strong>lete(QRes);sqlstring.~AnsiString();return(-1);}short int TDMID3::EvaluarReg<strong>la</strong>s(int codigoReg<strong>la</strong>s)/*Devuelve:0: no hubo problemas-1: problema general-2: problema en <strong>la</strong> creación <strong>de</strong> <strong>la</strong> tab<strong>la</strong> <strong>de</strong> evaluación-3: problema en <strong>la</strong> inicialización <strong>de</strong> <strong>la</strong> tab<strong>la</strong> <strong>de</strong> evaluación */{boolean CrearTab<strong>la</strong>;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="C<strong>la</strong>seReal";i=0;while ((TTennis->FieldDefs->Items[i]->Name!=Params->ColC<strong>la</strong>sificador) &&(iFieldDefs->Count-1))i++;if (iFieldDefs->Count-1)NewField->Size=TTennis->FieldDefs->Items[i]->Size;elseNewField->Size=255;for (i=0; iFieldDefs->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;}CrearTab<strong>la</strong>=false;if(TEval->Exists){if (Application->MessageBox((AnsiString("Sobreescribimos <strong>la</strong> tab<strong>la</strong>") +TEval->TableName + AnsiString("?")).c_str(),"Tab<strong>la</strong> Existente", MB_YESNO) == IDYES)Código Fuente Magdalena Servente 249


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteCrearTab<strong>la</strong>=true;}elseCrearTab<strong>la</strong>=true;if (CrearTab<strong>la</strong>)TEval->CreateTable();TEval->Active=true;errorNo=0;}catch(...){errorNo=-2;}if (errorNo==0) //no hubo problemas{ //Inicializamos <strong>la</strong> tab<strong>la</strong> <strong>de</strong> evaluacióntry {QIni->DatabaseName=Params->NombreBD;//Obtenemos los nombres <strong>de</strong> <strong>la</strong>s columnasTEval->GetFieldNames(listaCampos);//Copiamos los datos <strong>de</strong> <strong>la</strong> tab<strong>la</strong> originalconsulta="INSERT INTO Eval.db (";AppendStr(consulta,listaCampos->Strings[0]);for (i=1;iCount;i++){AppendStr(consulta,", ");AppendStr(consulta,listaCampos->Strings[i]);}AppendStr(consulta,") select trim(");AppendStr(consulta,Params->ColC<strong>la</strong>sificador);AppendStr(consulta,") ");for (i=1;iCount;i++){AppendStr(consulta,", ");AppendStr(consulta,listaCampos->Strings[i]);}AppendStr(consulta," from ");AppendStr(consulta,Params->Tab<strong>la</strong>BD);QIni->SQL->Clear();QIni->SQL->Add(consulta);QIni->ExecSQL();}errorNo=0;}catch(...){errorNo=-3;}if (errorNo==0) //no hubo problemas{AplicarReg<strong>la</strong>s(TEval->TableName ,codigoReg<strong>la</strong>s);errorNo=EvaluarResultados(TEval->TableName);}}TEval->Close();TEval->DeleteTable();<strong>de</strong>lete(listaCampos);<strong>de</strong>lete(TEval);<strong>de</strong>lete(QIni);consulta.~AnsiString();return(errorNo);void __fastcall TDMID3::DMID3Destroy(TObject *Sen<strong>de</strong>r){int i;for (i=0;i


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteD.4.2. UDMC45D.4.2.1. UDMC45.h//---------------------------------------------------------------------------#ifn<strong>de</strong>f UDMC45H#<strong>de</strong>fine UDMC45H//---------------------------------------------------------------------------#inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> #inclu<strong>de</strong> "UTipos.h"#inclu<strong>de</strong> "<strong>de</strong>fns.h"#inclu<strong>de</strong> "types.h"#inclu<strong>de</strong> "Rulex.h"#<strong>de</strong>fine Inc 2048#<strong>de</strong>fine LocalVerbosity(x) if (Sh >= 0 && VERBOSITY >= x)#<strong>de</strong>fine Intab(x) In<strong>de</strong>nt(x, "| ")#<strong>de</strong>fine Tab "| "#<strong>de</strong>fine TabSize 4#<strong>de</strong>fine Width 80 /* ancho máx aproximado <strong>de</strong> un árbol en pantal<strong>la</strong> *///---------------------------------------------------------------------------c<strong>la</strong>ss TDMC45 : public TDataModule{__published: // IDE-managed ComponentsTDataSource *DSTTennis;TTable *TTennis;void __fastcall DMC45Destroy(TObject *Sen<strong>de</strong>r);private:TParametros *Params;/* <strong>Datos</strong> externos <strong>de</strong>scriptos en extern.i */short MaxAtt, MaxC<strong>la</strong>ss, MaxDiscrVal;DiscrValue MaxAttVal[MAX_CANT_DESCRIPTORES];TStringList *C<strong>la</strong>ssName,*AttName;TTab<strong>la</strong>Valores AttValName;TVecValores SpecialStatus;String FileName;ItemNo MaxItem;Description *Item;shortVERBOSITY,TRIALS;BooleanGAINRATIO,SUBSET,UNSEENS;ItemNo MINOBJS;floatCF;Tree*Pruned;BooleanAllKnown;ItemCount*Weight, /* Weight[i] = fracción actual <strong>de</strong>l item i */**Freq, /* Freq[x][c] = nro <strong>de</strong> items <strong>de</strong> c<strong>la</strong>se c con resultado x */*ValFreq, /* ValFreq[x] = nro.<strong>de</strong> items con resultado x */*C<strong>la</strong>ssFreq; /* C<strong>la</strong>ssFreq[c] = nro.<strong>de</strong> items <strong>de</strong> c<strong>la</strong>se c */float*Gain, /* Gain[a] = info gain al dividir según el atrib a */*Info, /* Info[a] = info potencial <strong>de</strong> div sobre el atrib a */*Bar, /* Bar[a] = mejor valor límite para el atrib a */*UnknownRate; /* UnknownRate[a] = proporción <strong>de</strong>sconocida actualpara el atrib a */char *Tested; /* Tested[a] seteado si el atrib a ya ha sido testeado */bool MultiVal; /* true cuando todos los atribs tienen muchos valores */float*SplitGain,/* SplitGain[i] = gain con el valor <strong>de</strong>l atrib <strong>de</strong>l item icomo límite */Código Fuente Magdalena Servente 251


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente*SplitInfo; /* SplitInfo[i] = split info potencial */ItemCount*Slice1, /* Slice1[c] = valores <strong>de</strong> Freq[x][c] en subconj.c */*Slice2; /* Slice2[c] = valores <strong>de</strong> Freq[y][c] */Conjunto **Subset; /* Subset[a][s] = subconj s para atrib a */short *Subsets; /* Subsets[a] = nro. subconj para atrib a */short Subtree; /* tamaño máx <strong>de</strong> subárbol impreso */Tree Sub<strong>de</strong>f[100]; /* punteros a los subárboles */FILE *TRf; /* archivo para i/o <strong>de</strong>l árbol */char Fn[500]; /* nombre <strong>de</strong>l archivo *///----------------------------------------------------------------------void GetNames();/* Lee los nombres <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses, atributos y valores legales <strong>de</strong> *//* atributos. */void GetData(); //Lee los datos <strong>de</strong> <strong>la</strong> tab<strong>la</strong>Description GetDescription();int VerificarPK(AnsiString Atrib);/* Verifica si el atributo Atrib es c<strong>la</strong>ve primaria <strong>de</strong> <strong>la</strong> tab<strong>la</strong>Devuelve:0 si es PK1 en caso contrario-1 si hubo error*/int PosicionValor(AnsiString Valor,int nro_atrib, int pri, int ult);/* Busca <strong>la</strong> posición <strong>de</strong>l Valor para el atributo especificado por elnro_atrib en el Tab<strong>la</strong> <strong>de</strong> Valores <strong>de</strong> atributos y <strong>la</strong> <strong>de</strong>vuelve */int PosicionC<strong>la</strong>se(AnsiString Valor);/* Busca <strong>la</strong> posición <strong>de</strong>l Valor en el vector <strong>de</strong> <strong>la</strong> c<strong>la</strong>se */void OneTree();/* Construye y poda un árbol a partir <strong>de</strong> todos los datos */void Evaluate(bool CMInfo,short Saved);/* Imprime los errores para cada una <strong>de</strong> <strong>la</strong>s pruebas */void InitialiseTreeData();/* Reserva espacio para <strong>la</strong>s tab<strong>la</strong>s <strong>de</strong> construcción */void InitialiseWeights();/* Inicializa el peso <strong>de</strong> cada item */Tree FormTree(ItemNo Fp, ItemNo Lp);/* Construye un árbol <strong>de</strong> <strong>de</strong>cisión para los casos Fp hasta Lp */ItemNo Group(DiscrValue V, ItemNo Fp, ItemNo Lp,Tree TestNo<strong>de</strong>);/* Agrupa los ítems correspondiente a <strong>la</strong> rama V <strong>de</strong> una prueba yy <strong>de</strong>vuelve el índice <strong>de</strong>l ú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 <strong>de</strong> los items <strong>de</strong>s<strong>de</strong> Fp hasta Lp *//*************************************************************************//* *//* Calculo <strong>de</strong> <strong>la</strong> información, ganancia <strong>de</strong> información e *//* impresión <strong>de</strong> distribuciones *//* *//*************************************************************************/float Worth(float ThisInfo, float ThisGain, float MinGain);/* Determina el valor <strong>de</strong> una división particu<strong>la</strong>r según el criterio elegido */void ResetFreq(DiscrValue MaxVal);/* Resetea <strong>la</strong>s tab<strong>la</strong>s <strong>de</strong> frecuencia Freq[][] y ValFreq[] */float ComputeGain(float BaseInfo,float UnknFrac, DiscrValue MaxVal,ItemCountTotalItems);/* Dadas <strong>la</strong>s tab<strong>la</strong>s Freq[][] y ValFreq[], computa <strong>la</strong> ganancia <strong>de</strong> información */float TotalInfo(ItemCount V[], DiscrValue MinVal, DiscrValue MaxVal);/* Computa <strong>la</strong> información total en V[ MinVal..MaxVal ] */void PrintDistribution(Attribute Att,DiscrValue MaxVal,bool ShowNames);/* Imprime <strong>la</strong> tab<strong>la</strong> <strong>de</strong> distribución para un atributo <strong>de</strong>terminado *//*************************************************************************//* *//* Rutinas <strong>de</strong> manejo <strong>de</strong> los árboles <strong>de</strong> <strong>de</strong>cisión *//* *//*************************************************************************/252 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteTree Leaf(ItemCount *C<strong>la</strong>ssFreq, C<strong>la</strong>ssNo No<strong>de</strong>C<strong>la</strong>ss,ItemCount Cases,ItemCountErrors);/* Construye una hoja en un <strong>de</strong>terminado nodo */void Sprout(Tree No<strong>de</strong>, DiscrValue Branches);/* Inserta ramas en un nodo */Tree PrintTree(Tree T);/*Imprime el árbol <strong>de</strong> <strong>de</strong>cisión 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 <strong>de</strong> rama v */short MaxLine(Tree St);/* Encuentra el tamaño máx <strong>de</strong> una línea nodo para el subárbol St */void In<strong>de</strong>nt(short Sh,char *Mark);/* In<strong>de</strong>nta Sh columnas */void SaveTree(Tree T,AnsiString Extension);/*Guarda el árbol T en el archivo con <strong>la</strong> extension especificada */void OutTree(Tree T);/*Guarda el árbol T como caracteres */Tree GetTree(AnsiString Extension);/*Obtiene el árbol T <strong>de</strong>l archivo <strong>de</strong> <strong>la</strong> extensión especificada */Tree InTree();/*Recupera el árbol a partir <strong>de</strong> los caracteres guardados */void StreamOut(AnsiString s,int n);void StreamIn(AnsiString s,int n);/* Stream caracteres <strong>de</strong>/hacia el archivo TRf <strong>de</strong>s<strong>de</strong>/hacia una dir */void ReleaseTree(Tree No<strong>de</strong>);/* Libera el espacio ocupado por No<strong>de</strong> */int TreeSize(Tree No<strong>de</strong>);/*Cuenta los nodos <strong>de</strong> un árbol */Tree CopyTree(Tree T);/* Devuelve una copia <strong>de</strong> tree T */void SaveDiscreteNames();/* Guarda los valores <strong>de</strong> los atributos leídos con "discrete N" */void RecoverDiscreteNames();/* Recupera los valores <strong>de</strong> los atributos leídos con "discrete N" *//*************************************************************************//* *//* Evaluación <strong>de</strong>l armado <strong>de</strong> subconjuntos sobre los atrib discretos *//* *//*************************************************************************/void EvalSubset(Attribute Att, ItemNo Fp, ItemNo Lp,ItemCount Items);/* Evaluación <strong>de</strong>l armado <strong>de</strong> subconjuntos sobre un atrib discreto. */void Combine(DiscrValue x,DiscrValue y,DiscrValue Last);/* Combina los valores <strong>de</strong> <strong>la</strong> distribución <strong>de</strong> 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 <strong>de</strong>l atributo Att que estan en el subconjunto Ss */void SubsetTest(Tree No<strong>de</strong>,Attribute Att);/* Construye una prueba <strong>de</strong> nodo sobre un subconjunto <strong>de</strong> valores */void EvalDiscreteAtt(Attribute Att,ItemNo Fp,ItemNo Lp,ItemCount Items);/* Setea Info[] and Gain[] para <strong>la</strong> partición discreta <strong>de</strong> items Fp hasta Lp */void ComputeFrequencies(Attribute Att,ItemNo Fp,ItemNo Lp);/* Computa <strong>la</strong>s tab<strong>la</strong>s <strong>de</strong> frecuencia Freq[][] y ValFreq[] para Att */float DiscrKnownBaseInfo(DiscrValue KnownItems,ItemCount MaxVal);/* Devuelve <strong>la</strong> información base <strong>de</strong> los items con valores conocidos<strong>de</strong> un atributo discreto, utilizando <strong>la</strong> tab<strong>la</strong> <strong>de</strong> frecuencias Freq[][] */void DiscreteTest(Tree No<strong>de</strong>,Attribute Att);/* Construye y <strong>de</strong>vuelve un nodo para una prueba sobre un atributo discreto *//*************************************************************************//* *//* Evaluación <strong>de</strong> una prueba sobre un atributo continuo *//* *//*************************************************************************/void EvalContinuousAtt(Attribute Att,ItemNo Fp,ItemNo Lp);void ContinTest(Tree No<strong>de</strong>,Attribute Att);/* Transforma una hoja en una prueba sobre un atributo continuo */float GreatestValueBelow(Attribute Att,float t);/* Devuelve el mayor valor <strong>de</strong>l atributo Att por <strong>de</strong>bajo <strong>de</strong>l límite t */void Quicksort(ItemNo Fp,ItemNo Lp,Attribute Att);//, void (*Exchange)());/* Or<strong>de</strong>namiento */Código Fuente Magdalena Servente 253


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente/*************************************************************************//* *//* Poda un árbol <strong>de</strong> <strong>de</strong>cisión y predice su proporción <strong>de</strong> error *//* *//*************************************************************************/Conjunto *PossibleValues;//=Nil;bool Changed;bool Prune(Tree T);/*Poda el árbol T y <strong>de</strong>vuelve true si el árbol fue modificado */float EstimateErrors(Tree T, ItemNo Fp,ItemNo Lp,short Sh,bool UpdateTree);/*Estima los errores en un <strong>de</strong>terminado subárbol */void CheckPossibleValues(Tree T);/* Elimina pruebas <strong>de</strong> subconjuntos innecesarias sobre valores faltantes *//* Computa los errores adicionales */float Val[],Dev[];float AddErrs(ItemCount N,ItemCount e);/*************************************************************************//* *//* Determina <strong>la</strong> c<strong>la</strong>se <strong>de</strong> un caso a partir <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión *//* *//*************************************************************************/float *C<strong>la</strong>ssSum; /* C<strong>la</strong>ssSum[c]= peso total <strong>de</strong> <strong>la</strong> c<strong>la</strong>se c */C<strong>la</strong>ssNo Category(Description CaseDesc,Tree DecisionTree);/* Categoriza <strong>la</strong> <strong>de</strong>scripción <strong>de</strong> un caso utilizando el árbol <strong>de</strong> <strong>de</strong>cisión */void C<strong>la</strong>ssify(Description CaseDesc,Tree T,float Weight);/* C<strong>la</strong>sifica un caso utilizando el subárbol dado, ajustando el valor<strong>de</strong> C<strong>la</strong>ssSum para cada c<strong>la</strong>se */Tree*Raw;void PrintConfusionMatrix(ItemNo *ConfusionMat);/*Imprime matrices <strong>de</strong> confusión *//*************************************************************************//* *//* REGLAS DE DECISIÓN *//* *//*************************************************************************//* Variables usadas en <strong>la</strong> generación <strong>de</strong> reg<strong>la</strong>s */bool SIGTEST, /* uso <strong>de</strong> <strong>la</strong> prueba <strong>de</strong> significado en<strong>la</strong> poda <strong>de</strong> reg<strong>la</strong>s */SIMANNEAL; /* uso <strong>de</strong> simu<strong>la</strong>ted annealing */floatSIGTHRESH,REDUNDANCY;/* factor que estima <strong>la</strong> cantidad <strong>de</strong><strong>de</strong> redundancia e irrelevanciaen los atributos */PR *Rule; /* reg<strong>la</strong>s actuales */RuleNo NRules, /* nro <strong>de</strong> reg<strong>la</strong>s actuales */*RuleIn<strong>de</strong>x; /* índice <strong>de</strong> reg<strong>la</strong>s */short RuleSpace; /* espacio reservado para <strong>la</strong>s reg<strong>la</strong>s */C<strong>la</strong>ssNo DefaultC<strong>la</strong>ss; /* c<strong>la</strong>se por <strong>de</strong>fecto */RuleSet *PRSet; /* conjuntos <strong>de</strong> reg<strong>la</strong>s */float AttTestBits, /* bits para codificar el atribtesteado */*BranchBits; /* i<strong>de</strong>m para el valor <strong>de</strong>l atrib */fstream FReg<strong>la</strong>s; //guarda los datos generados durante <strong>la</strong> generación <strong>de</strong> <strong>la</strong>sreg<strong>la</strong>s con el C4.5float *LogItemNo;double *LogFact;ItemNo *TargetC<strong>la</strong>ssFreq, /* [Boolean] */*Errors, /* [Condición] */*Total; /* [Condición] */float *Pessimistic, /* [Condición] */*Actual, /* [Condición] */*CondSigLevel; /* [Condición] */bool **CondSatisfiedBy, /* [Condición][NroItem] */*Deleted; /* [Condición] */DiscrValue *SingleValue; /* [Atributo] */Condition *Stack;short MaxDisjuncts,MaxDepth;ItemNo *Covered, /* Covered[i] = nro.<strong>de</strong> reg<strong>la</strong>s que cubren el item i */*FalsePos,/* FalsePos[c] = nro.<strong>de</strong> falsos positivos <strong>de</strong> <strong>la</strong>sreg<strong>la</strong>s seleccionadas para <strong>la</strong> calse c */254 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente*NoRule, /* NoRule[c] = nro.<strong>de</strong> items cubiertos porninguna <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s selecciondas */*Right, /* Right[r] = nro. <strong>de</strong> aciertos */*Wrong; /* Wrong[r] = nro. <strong>de</strong> fal<strong>la</strong>s */float *Value, /* Value[r] = ventaja atribuíble a <strong>la</strong> reg<strong>la</strong> r orealizable si <strong>la</strong> reg<strong>la</strong> r es incluída */SubsetValue, /* valor <strong>de</strong> <strong>la</strong> mejor c<strong>la</strong>se <strong>de</strong>l subconjunto */Co<strong>de</strong>Weight; /* factor <strong>de</strong> multiplicación para <strong>la</strong> codificación <strong>de</strong> <strong>la</strong>sreg<strong>la</strong>s */bool *RuleIn, /* RuleIn[r] = true si <strong>la</strong> reg<strong>la</strong> r está incluída */**Match; /* Match[r][i] = true si el item i cumple <strong>la</strong>s cond<strong>de</strong> <strong>la</strong> reg<strong>la</strong> r */RuleNo *C<strong>la</strong>ssRules; /* lista <strong>de</strong> todas <strong>la</strong>s reg<strong>la</strong>s para <strong>la</strong> c<strong>la</strong>se actual */C<strong>la</strong>ssNoFocusC<strong>la</strong>ss;Test *TestVec;short NTests;float Confi<strong>de</strong>nce; /* factor <strong>de</strong> certeza <strong>de</strong> <strong>la</strong> reg<strong>la</strong> aplicada(<strong>de</strong>terminado por BestRuleIn<strong>de</strong>x) */void GenerateLogs();// Creación <strong>de</strong>l vector LogItemNovoid GenerateRules();/* Generación <strong>de</strong> todos los conjuntos <strong>de</strong> reg<strong>la</strong>s apartir <strong>de</strong> los árboles <strong>de</strong> <strong>de</strong>cisión */void FindTestCo<strong>de</strong>s(); /*Determina <strong>la</strong>s longitu<strong>de</strong>s <strong>de</strong> los codigospara los atributos y <strong>la</strong>s ramas */void SwapUnweighted(ItemNo a,ItemNo b);/*Intercambio <strong>de</strong> los items en a y b. */void CompositeRuleset();/*Creación <strong>de</strong> un conjunto compuesto <strong>de</strong> reg<strong>la</strong>s <strong>de</strong> todas<strong>la</strong>s pruebas */void FormRules(Tree t);/*Creación <strong>de</strong> un conjunto <strong>de</strong> reg<strong>la</strong>s <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisiónt */void TreeParameters(Tree t,short d);/* Calcu<strong>la</strong> <strong>la</strong> profundidadmáx y el nro <strong>de</strong> hojas en el arbol t conprofundidad inicial d*/void Scan(Tree t,short d);/* Extrae los disjuntos <strong>de</strong>l arbol t en <strong>la</strong>profundidad d y los procesa */void ConstructRuleset();/* Construcción <strong>de</strong> un subconjunto or<strong>de</strong>nado(in<strong>de</strong>xado por el RuleIn<strong>de</strong>x)a partir <strong>de</strong>l actualconjunto <strong>de</strong> reg<strong>la</strong>s*/void InitialiseTables();/*Inicialización <strong>de</strong> tab<strong>la</strong>s*/void CoverC<strong>la</strong>ss();/*Seleccionamos un subconjunto <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>spara <strong>la</strong> FocusC<strong>la</strong>ss */void AllCombinations(RuleNo NR); /* Probamos todas <strong>la</strong>s combinaciones <strong>de</strong>reg<strong>la</strong>s para encontrar <strong>la</strong> mejor */void SimAnneal(RuleNo RuleCount);/*Búsqueda <strong>de</strong> un buen subconjuntomediante simu<strong>la</strong>ted annealing */void SpotSearch(RuleNo RuleCount);/* Busca un buen subconjunto medianteuna búsqueda golosa reiterativa*/void HillClimb(RuleNo RuleCount);/* Mejora un subconjunto <strong>de</strong> reg<strong>la</strong>sagregando o eliminando reg<strong>la</strong>s */void Calcu<strong>la</strong>teValue();/* Calcu<strong>la</strong>mos los aciertos y errores para <strong>la</strong>sreg<strong>la</strong>s <strong>de</strong> <strong>la</strong> FocusC<strong>la</strong>ss y <strong>de</strong>terminamos el valor<strong>de</strong> dichas reg<strong>la</strong>s. Si es el mejor hasta ahora, loguardamos.*/void AddRule(RuleNo r);/* Agregamos <strong>la</strong> reg<strong>la</strong> r al conj <strong>de</strong> relgasincluidas e incrementamos <strong>la</strong> cantidad <strong>de</strong> reg<strong>la</strong>s que cubrenlos items que disparan <strong>la</strong> reg<strong>la</strong>*/void DeleteRule(RuleNo r);/* Eliminamos <strong>la</strong> reg<strong>la</strong> r <strong>de</strong>l conj <strong>de</strong> reg<strong>la</strong>sincluídas y <strong>de</strong>crementamos <strong>la</strong> cant <strong>de</strong> reg<strong>la</strong>s que cubren cada uno<strong>de</strong> los items cubiertos por <strong>la</strong> reg<strong>la</strong>*/void MakeIn<strong>de</strong>x();/* Crea un índice <strong>de</strong> reg<strong>la</strong>s incluídas en RuleIn<strong>de</strong>x.Selecciona primero aquel<strong>la</strong>s c<strong>la</strong>ses cuyas reg<strong>la</strong>s tienen el menornro <strong>de</strong> falsos positivos <strong>de</strong>ntro <strong>de</strong> cada c<strong>la</strong>se, pone <strong>la</strong>s reg<strong>la</strong>scon más aciertos primero */void FindDefault();/* Determina <strong>la</strong> c<strong>la</strong>se por <strong>de</strong>fecto. Los empates seresuelven a favor <strong>de</strong> <strong>la</strong> c<strong>la</strong>se más frecuente*/float Fuerza(PR ThisRule,Description Case);/* Dados una reg<strong>la</strong> y un caso,<strong>de</strong>termina <strong>la</strong> fuerza con <strong>la</strong> que po<strong>de</strong>mos <strong>de</strong>terminar que elcaso pertenece a <strong>la</strong> c<strong>la</strong>se especificada en <strong>la</strong> reg<strong>la</strong> */float Biased(int N, int E, float ExpE);/* Determina el nro <strong>de</strong> bitsnecesarios para codificar <strong>la</strong>s excepciones*/float ExceptionBits(int Fires, int FP, int FN);void FindRuleCo<strong>de</strong>s();/* Determina <strong>la</strong> longitud <strong>de</strong> codificación paratodas <strong>la</strong>s reg<strong>la</strong>s*/float CondBits(Condition C);/* Determina el nro <strong>de</strong> bits requerido paraCódigo Fuente Magdalena Servente 255


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentecodificar una condición */void SaveRules();/* Guarda el conjunto <strong>de</strong> reg<strong>la</strong>s en el archivo <strong>de</strong> reg<strong>la</strong>ssegún el or<strong>de</strong>n <strong>de</strong>l índice*/void GetRules();/* Obtiene un nuevo conj <strong>de</strong> reg<strong>la</strong>s <strong>de</strong>l archivo <strong>de</strong> reg<strong>la</strong>s*/Test FindTest(Test Newtest);/* Busca una prueba en el vector <strong>de</strong> pruebas,si no está allí, <strong>la</strong> agrega */bool SameTest(Test t1,Test t2);/*Verifica si <strong>la</strong> prueba t1 es igual a <strong>la</strong>prueba t2*/void InitialiseRules();/*Limpia <strong>la</strong>s variables para un nuevo conj <strong>de</strong> reg<strong>la</strong>s */bool NewRule(Condition Cond[],short NConds,C<strong>la</strong>ssNo TargetC<strong>la</strong>ss,float Err);/* Agrega una nueva reg<strong>la</strong>, al conjunto <strong>de</strong> reg<strong>la</strong>s actual. ActualizaRule[],NRules y,en caso <strong>de</strong> ser necesario,RuleSpace*/bool SameRule(RuleNo r,Condition Cond[],short NConds,C<strong>la</strong>ssNo TargetC<strong>la</strong>ss);/* Deci<strong>de</strong> si <strong>la</strong> reg<strong>la</strong> actual duplica <strong>la</strong> reg<strong>la</strong> r */void PrintIn<strong>de</strong>xedRules();/*Imprime el conjunto in<strong>de</strong>xado <strong>de</strong> reg<strong>la</strong>s*/void PrintRule(RuleNo r);/*Imprime <strong>la</strong> reg<strong>la</strong> r */void PrintCondition(Condition c);/*Imprime <strong>la</strong> condición c <strong>de</strong> una reg<strong>la</strong> <strong>de</strong>producción*/Arrow);void PruneRule(Condition Cond[],short NCond,C<strong>la</strong>ssNo TargetC<strong>la</strong>ss);/* Poda <strong>la</strong> reg<strong>la</strong> dadas <strong>la</strong>s condiciones Cond, y el nro <strong>de</strong>condiciones NCond, y agrega <strong>la</strong> reg<strong>la</strong> resultante al actual conjunto<strong>de</strong> reg<strong>la</strong>s si es lo suficientemente precisa*/bool Redundant(short R,Condition Cond[],short NCond);/* Verifica si <strong>la</strong>condición R es redundante*/bool IsSubset(Conjunto S1,Conjunto S2,Attribute Att);/* Deci<strong>de</strong> si el subconj <strong>de</strong> valores S1 está contenido en S2 */void FindTables(short NCond,C<strong>la</strong>ssNo TargetC<strong>la</strong>ss);/* Busca <strong>la</strong>s tab<strong>la</strong>s <strong>de</strong>distribución <strong>de</strong> frecuencias para <strong>la</strong> condiciones actuales*/void UpdateCount(ItemNo T[],ItemNo E[],short d,bool OK);/* Incrementa los valores <strong>de</strong> Total[d] y Errors[d]*/bool Satisfies(Description CaseDesc,Condition OneCond);/*Determina si <strong>la</strong> <strong>de</strong>scripción <strong>de</strong> un caso satisface <strong>la</strong> cond dada*/double Hypergeom(int a,int r,int A,int B);/* Distribución hipergeometrica(usa los log <strong>de</strong> los factoriales tabu<strong>la</strong>dos)*/float TableProb(int t11,int t12,int t21,int t22);/* TableProb examina<strong>la</strong> tab<strong>la</strong> t <strong>de</strong> contingencias <strong>de</strong> 2x2 y calcu<strong>la</strong> <strong>la</strong> probabilidad <strong>de</strong> que unadivisión al azar pueda producir una división al menos tan extrema comoesta. */void EvaluateRulesets(bool DeleteRules);/*Evalúa todos los conj <strong>de</strong> reg<strong>la</strong>s*/ItemNo Interpret(ItemNo Fp,ItemNo Lp,bool DeleteRules, bool CMInfo, bool/*Evalúa el conjunto <strong>de</strong> reg<strong>la</strong>s actual*/RuleNo BestRuleIn<strong>de</strong>x(Description CaseDesc,RuleNo Start);/*Busca <strong>la</strong> mejorreg<strong>la</strong> para el caso dado, <strong>de</strong>jando <strong>la</strong> probabilidad en Confi<strong>de</strong>nce*/public:__fastcall TDMC45(TComponent* Owner);void RecibirParametros(TParametros *Parametros);void C45(); //dispara el proceso <strong>de</strong>l C4.5 con los parámetros recibidosvoid GenerarReg<strong>la</strong>sC45(); //dispara el proceso <strong>de</strong> generación <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong><strong>de</strong>cisión};//---------------------------------------------------------------------------extern PACKAGE TDMC45 *DMC45;//---------------------------------------------------------------------------#endifD.4.2.2. UDMC45.cpp//---------------------------------------------------------------------------#inclu<strong>de</strong> #pragma hdrstop#inclu<strong>de</strong> "UDMC45.h"//---------------------------------------------------------------------------#pragma package(smart_init)#pragma resource "*.dfm"TDMC45 *DMC45;fstream FVitacora; //guarda los datos generados durante <strong>la</strong> ejecución <strong>de</strong>l C4.5256 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> 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, 0.001, 0.005, 0.01, 0.05, 0.10, 0.20, 0.40, 1.00};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, 3.09, 2.58, 2.33, 1.65, 1.28, 0.84, 0.25, 0.00};//*C<strong>la</strong>ssSum=0;//------------------------------------------------------------------------------void TDMC45::RecibirParametros(TParametros *Parametros){AnsiString sqlstring;TQuery *QGral=new TQuery(DMC45);Params=Parametros;TTennis->DatabaseName=Params->NombreBD;TTennis->TableName=Params->Tab<strong>la</strong>BD;TTennis->Active=true;//Inicializamos los queries que harán sus consultas sobre <strong>la</strong> base//especificadaQGral->DatabaseName=Params->NombreBD;//Inicializamos el campo Nivel en <strong>la</strong> Tab<strong>la</strong>sqlstring="Update ";AppendStr(sqlstring, Params->Tab<strong>la</strong>BD);AppendStr(sqlstring," SET Nivel = 0 ");QGral->SQL->Clear();QGral->SQL->Add(sqlstring);QGral->ExecSQL();QGral->SQL->Clear();TTennis->Close();TTennis->Open();}sqlstring.~AnsiString();<strong>de</strong>lete(QGral);//---------------------------------------------------------------------------void __fastcall TDMC45::DMC45Destroy(TObject *Sen<strong>de</strong>r){int i,j;<strong>de</strong>lete C<strong>la</strong>ssName;<strong>de</strong>lete AttName;Código Fuente Magdalena Servente 257


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}for (i=0;iTab<strong>la</strong>BD;VERBOSITY = 5; //grado <strong>de</strong> explicación en el Logif (Params->iCriterio==0)GAINRATIO = false;if (Params->iConjuntos==0)SUBSET = true;MINOBJS = Params->iMinObjs;CF =Params->iCF;Check(CF, Epsilon, 100);CF /= 100;/* Inicialización */GetNames();GetData();FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteif ( UNSEENS ){GetData();FVitacoraColC<strong>la</strong>sificador){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);//es contínuo/* Verificamos los tipos <strong>de</strong> datos */if ( TTennis->Fields->Fields[i]->DataType!=ftString){SpecialStatus[i] = "CONTINUOUS";}else //es discreto{SpecialStatus[i] = "DISCRETE";//Cargamos los valores <strong>de</strong>l atributoQGral->SQL->Clear();Código Fuente Magdalena Servente 259


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteQGral->SQL->Add("SELECT DISTINCT("+ TTennis->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 <strong>la</strong> máxima cantidad <strong>de</strong> valores,y chequeamos MaxDiscrVal */if (j>MaxDiscrVal)MaxDiscrVal=j;}}}}}catch(...){Application->MessageBox("Error en <strong>la</strong> carga <strong>de</strong> los datos <strong>de</strong><strong>la</strong>rchivo","Error",MB_OK|MB_ICONWARNING);}}<strong>de</strong>lete(QGral);sqlstring.~AnsiString();//---------------------------------------------------------------------------/*************************************************************************//* *//* Lee los casos <strong>de</strong> <strong>la</strong> tab<strong>la</strong>. *//* *//* Al terminar,los casos se almacenan en el vector Item con <strong>la</strong> forma *//* <strong>de</strong> Descriptions (i.e. vectores <strong>de</strong> valores <strong>de</strong> atributos), *//* y se le asigna a MaxItem el número <strong>de</strong> items <strong>de</strong> 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->Tab<strong>la</strong>BD);QData->Open();QData->First();do{++i;MaxItem = i;/* Verificamos si hay lugar para otro ítem */if ( i >= ItemSpace ){if ( ItemSpace ){ItemSpace += Inc;Item = (Description *)260 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}realloc(Item, ItemSpace*sizeof(Description));}else{Item = (Description *)malloc((ItemSpace=Inc)*sizeof(Description));}Dvec = (Description) calloc(MaxAtt+2, sizeof(AttValue));for(Att=0;AttFieldValues[TTennis->Fields->Fields[Att]->FieldName];if ( SpecialStatus[Att] == "IGNORAR" ){/* Salteamos este valor */DVal(Dvec, Att) = 0;}elseif ( 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;}}C<strong>la</strong>ss(Dvec) = PosicionC<strong>la</strong>se(QData->FieldByName(Params->ColC<strong>la</strong>sificador)->AsString);Item[i] = Dvec;QData->Next();} while ( Item[i] != NULL && !(QData->Eof) );QData->Close();}catch(...){Application->MessageBox("Error en <strong>la</strong> carga <strong>de</strong> los datos <strong>de</strong><strong>la</strong>rchivo","Error",MB_OK|MB_ICONWARNING);}<strong>de</strong>lete (QData);AtDiscreto.~AnsiString();}//-----------------------------------------------------------------------------int TDMC45::PosicionValor(AnsiString Valor,int nro_atrib, int pri, int ult)/* Busca <strong>la</strong> posición <strong>de</strong>l Valor para el atributo especificado por elnro_atrib en el Tab<strong>la</strong> <strong>de</strong> Valores <strong>de</strong> atributos y <strong>la</strong> <strong>de</strong>vuelve */{int i;Código Fuente Magdalena Servente 261


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentei=pri;while (AttValName[nro_atrib][i].AnsiCompareIC(Valor)!=0 && iDatabaseName=Params->NombreBD;QGral->SQL->Clear();QGral->SQL->Add(sqlstring);QGral->Open();QGral->First();if (QGral->FieldByName("Cant")->AsInteger==cantReg){res=0;} //es PKelse{res=1;}}catch(...){res=-1;}<strong>de</strong>lete (QGral);sqlstring.~AnsiString();return(res);/*************************************************************************//* Construye y poda un árbol a partir <strong>de</strong> todos los datos *//* *//*************************************************************************/void TDMC45::OneTree(){ItemNo*TargetC<strong>la</strong>ssFreq;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


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}Pruned[0] = CopyTree(Raw[0]);if ( Prune(Pruned[0]) ){FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}if ( TRIALS > 1 ){FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteSlice1 = (ItemCount *) calloc(MaxC<strong>la</strong>ss+2, sizeof(ItemCount));Slice2 = (ItemCount *) calloc(MaxC<strong>la</strong>ss+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 = 0.3 * (MaxItem + 1);}}}/*************************************************************************//* *//* Inicializa el peso <strong>de</strong> cada item *//* *//*************************************************************************/void TDMC45::InitialiseWeights(){ItemNo i;}ForEach(i, 0, MaxItem){Weight[i] = 1.0;}/*************************************************************************//* *//* Construye un árbol <strong>de</strong> <strong>de</strong>cisión para los casos Fp hasta Lp: *//* *//* - si todos los casos son <strong>de</strong> <strong>la</strong> misma c<strong>la</strong>se, el árbol es una hoja, *//* y <strong>de</strong>vuelve una hoja con dicha c<strong>la</strong>se *//* *//* - para cada atributo, calcu<strong>la</strong>r <strong>la</strong> información potencial provista *//* por una prueba sobre el atributo (basada en <strong>la</strong>s probabilida<strong>de</strong>s *//* <strong>de</strong> que cada caso tenga un valor particu<strong>la</strong>r para el atributo), *//* y <strong>la</strong> ganancia en información que resultaría <strong>de</strong> una prueba *//* sobre el atributo (basada en <strong>la</strong>s probabilida<strong>de</strong>s <strong>de</strong> cada caso *//* con un valor particu<strong>la</strong>r para el atributo pertenezca a una *//* <strong>de</strong>terminada c<strong>la</strong>se). *//* *//* - sobre esta base, y <strong>de</strong>pendiendo <strong>de</strong>l criterio <strong>de</strong> selección actual, *//* encontrar el mejor atributo para crear una rama. *//* Nota: no se permitirán divisiones sobre un atributo a menos *//* que dos o más 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, NoBestC<strong>la</strong>ss, KnownCases;float Factor, BestVal, Val, AvGain=0;Attribute Att, BestAtt, Possible=0;C<strong>la</strong>ssNo c, BestC<strong>la</strong>ss;Tree No<strong>de</strong>;DiscrValue v;bool PrevAllKnown;Cases = CountItems(Fp, Lp);/* Generamos <strong>la</strong> distribución en frecuencias <strong>de</strong> <strong>la</strong> c<strong>la</strong>se */ForEach(c, 0, MaxC<strong>la</strong>ss){C<strong>la</strong>ssFreq[c] = 0;}Código Fuente Magdalena Servente 265


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteForEach(i, Fp, Lp){C<strong>la</strong>ssFreq[ C<strong>la</strong>ss(Item[i]) ] += Weight[i];}/* Buscamos <strong>la</strong> c<strong>la</strong>se más frecuente */BestC<strong>la</strong>ss = 0;ForEach(c, 0, MaxC<strong>la</strong>ss){if ( C<strong>la</strong>ssFreq[c] > C<strong>la</strong>ssFreq[BestC<strong>la</strong>ss] ){BestC<strong>la</strong>ss = c;}}NoBestC<strong>la</strong>ss = C<strong>la</strong>ssFreq[BestC<strong>la</strong>ss];No<strong>de</strong> = Leaf(C<strong>la</strong>ssFreq, BestC<strong>la</strong>ss, Cases, Cases - NoBestC<strong>la</strong>ss);/* Si todos los casos son <strong>de</strong> <strong>la</strong> misma c<strong>la</strong>se o no hay suficientes casospara dividir, el árbol es una hoja */if ( NoBestC<strong>la</strong>ss == Cases || Cases < 2 * MINOBJS ){return No<strong>de</strong>;}Verbosity(1){FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteBestVal = -Epsilon;BestAtt = None;AvGain = ( Possible ? AvGain / Possible : 1E6 );Verbosity(2){if ( AvGain < 1E6 ){FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteKnownCases = Cases - CountItems(Fp, Kp-1);UnknownRate[BestAtt] = (Cases - KnownCases) / (Cases + 0.001);Verbosity(1){if ( UnknownRate[BestAtt] > 0 ){FVitacora= Cases - NoBestC<strong>la</strong>ss - Epsilon ){Verbosity(1){FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}}}return No<strong>de</strong>;/*************************************************************************//* *//* Agrupa los ítems correspondiente a <strong>la</strong> rama V <strong>de</strong> una prueba y *//* y <strong>de</strong>vuelve el índice <strong>de</strong>l último ítem *//* *//* Nota: si V está vacía, agrupa valores <strong>de</strong>sconocidos *//* *//*************************************************************************/ItemNo TDMC45::Group(DiscrValue V, ItemNo Fp, ItemNo Lp,Tree TestNo<strong>de</strong>){ItemNo i;Attribute Att;float Thresh;Conjunto SS;Att = TestNo<strong>de</strong>->Tested;if ( V ){/* Agrupar items según el valor <strong>de</strong>l atributo Att, según eltipo <strong>de</strong> rama */switch ( TestNo<strong>de</strong>->No<strong>de</strong>Type ){case BrDiscr:for(i=Fp;iCut;for(i=Fp;i


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> 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 <strong>de</strong> los items <strong>de</strong>s<strong>de</strong> 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 = MinGain - Epsilon && ThisInfo > Epsilon ){return ThisGain / ThisInfo;}else{270 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}return -Epsilon;}}else{return ( ThisInfo > 0 && ThisGain > -Epsilon ? ThisGain : -Epsilon );}/*************************************************************************//* *//* Resetea <strong>la</strong>s tab<strong>la</strong>s <strong>de</strong> frecuencia Freq[][] y ValFreq[] *//* *//*************************************************************************/void TDMC45::ResetFreq(DiscrValue MaxVal){DiscrValue v;C<strong>la</strong>ssNo c;}for (v=0;v


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteThisGain = (1 - UnknFrac) * (BaseInfo - ThisInfo / TotalItems);}Verbosity(5){FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}}{}else{}}}FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentebool FirstValue;short TextWidth, Skip, Values=0, i;Att = T->Tested;switch ( T->No<strong>de</strong>Type ){case BrDiscr:In<strong>de</strong>nt(Sh, Tab);FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}FVitacoraStrings[St->Branch[Next]->Leaf].Length() + 6;}MaxLl = Max(MaxLl, Ll);}return AttName->Strings[a].Length() + 4 + MaxLl;/*************************************************************************//* *//* In<strong>de</strong>nta Sh columnas *//* *//*************************************************************************/void TDMC45::In<strong>de</strong>nt(short Sh,char *Mark){FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}strcpy(Fn, FileName.c_str());strcat(Fn, Extension.c_str());if ( ! ( TRf = fopen(Fn, "w") ) ){FVitacoraErrors, sizeof(ItemCount));StreamOut((char *) T->C<strong>la</strong>ssDist, (MaxC<strong>la</strong>ss + 1) * sizeof(ItemCount));if ( T->No<strong>de</strong>Type ){StreamOut((char *) &T->Tested, sizeof(Attribute));StreamOut((char *) &T->Forks, sizeof(short));switch ( T->No<strong>de</strong>Type ){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 <strong>de</strong> <strong>de</strong>cisión con extensión Extension *//* *//*************************************************************************/Tree TDMC45::GetTree(AnsiString Extension){Tree Hold;static char *LastExt="";if ( strcmp(LastExt, Extension.c_str()) ){LastExt = Extension.c_str();Código Fuente Magdalena Servente 277


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteif ( TRf ) fclose(TRf);}strcpy(Fn, FileName.c_str());strcat(Fn, Extension.c_str());if ( ! ( TRf = fopen(Fn, "r") ) ){FVitacoraItems, sizeof(ItemCount));StreamIn((char *) &T->Errors, sizeof(ItemCount));T->C<strong>la</strong>ssDist = (ItemCount *) calloc(MaxC<strong>la</strong>ss+1, sizeof(ItemCount));StreamIn((char *) T->C<strong>la</strong>ssDist, (MaxC<strong>la</strong>ss + 1) * sizeof(ItemCount));if ( T->No<strong>de</strong>Type ){StreamIn((char *) &T->Tested, sizeof(Attribute));StreamIn((char *) &T->Forks, sizeof(short));switch ( T->No<strong>de</strong>Type ){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 Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}}}return T;/*************************************************************************//* *//* Stream caracteres <strong>de</strong>/hacia el archivo TRf <strong>de</strong>s<strong>de</strong>/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 No<strong>de</strong> *//* *//*************************************************************************/void TDMC45::ReleaseTree(Tree No<strong>de</strong>){DiscrValue v;if ( No<strong>de</strong>->No<strong>de</strong>Type ){ForEach(v, 1, No<strong>de</strong>->Forks){ReleaseTree(No<strong>de</strong>->Branch[v]);}}free(No<strong>de</strong>->Branch);if ( No<strong>de</strong>->No<strong>de</strong>Type == BrSubset ){free(No<strong>de</strong>->Subset);}}free(No<strong>de</strong>->C<strong>la</strong>ssDist);free(No<strong>de</strong>);/*************************************************************************//* *//* Cuenta los nodos <strong>de</strong> un árbol *//* *//*************************************************************************/int TDMC45::TreeSize(Tree No<strong>de</strong>){int Sum=0;DiscrValue v;if ( No<strong>de</strong>->No<strong>de</strong>Type ){ForEach(v, 1, No<strong>de</strong>->Forks){Sum += TreeSize(No<strong>de</strong>->Branch[v]);}}}return Sum + 1;/*************************************************************************//* *//* Devuelve una copia <strong>de</strong> tree T */Código Fuente Magdalena Servente 279


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente/* *//*************************************************************************/Tree TDMC45::CopyTree(Tree T){DiscrValue v;Tree New;New = (Tree) malloc(sizeof(tree_record));memcpy(New, T, sizeof(tree_record));New->C<strong>la</strong>ssDist = (ItemCount *) calloc(MaxC<strong>la</strong>ss+1, sizeof(ItemCount));memcpy(New->C<strong>la</strong>ssDist, T->C<strong>la</strong>ssDist, (MaxC<strong>la</strong>ss + 1) * sizeof(ItemCount));if ( T->No<strong>de</strong>Type ){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 <strong>de</strong> los atributos leídos 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 <strong>de</strong> los atributos leídos 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 Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}/*************************************************************************//* *//* Evaluación <strong>de</strong>l armado <strong>de</strong> subconjuntos sobre un atrib discreto. A *//* partir <strong>de</strong> los subconjuntos elegidos Subset[Att][], se asigna a *//* Subsets[Att] el nro <strong>de</strong> subconjuntos, y se calcu<strong>la</strong>n Info[] y Gain[] *//* <strong>de</strong> 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;C<strong>la</strong>ssNo 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 calcu<strong>la</strong>mos Freq[][], ValFreq[], info <strong>de</strong> base, y <strong>la</strong> gananciay <strong>la</strong> info total <strong>de</strong> una partición sobre el atrib discreto Att */ComputeFrequencies(Att, Fp, Lp);KnownItems = Items - ValFreq[0];if ( KnownItems < Epsilon ){Verbosity(2){FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}if ( ++Blocks < V1 ){ValFreq[Blocks] = ValFreq[V1];ForEach(c, 0, MaxC<strong>la</strong>ss){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 <strong>de</strong> una única c<strong>la</strong>se con otrs <strong>de</strong> <strong>la</strong> misma c<strong>la</strong>se *//* 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 c<strong>la</strong>se -- buscamos otras */for ( V2 = V1+1 ; V2


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteMinGain = PrevGain / 2;while ( Blocks > 2 ){BestVal = BestV1 = 0;BestGain = -Epsilon;/* Verificamos si existen subconjuntos razonables; si = SaveMINOBJS ) ReasonableSubsets++;}if ( ValFreq[V1] > ValFreq[Barred] ) Barred = V1;if ( ReasonableSubsets >= 3 ) Barred = 0;/* Para cada par <strong>de</strong> valores posibles, calcu<strong>la</strong>mos <strong>la</strong> ganancia y <strong>la</strong>info total <strong>de</strong> una división en <strong>la</strong> 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


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteReasonableSubsets >= 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


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente/*************************************************************************//* *//* Combina los valores <strong>de</strong> <strong>la</strong> distribución <strong>de</strong> 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){C<strong>la</strong>ssNo c;ForEach(c, 0, MaxC<strong>la</strong>ss){Slice1[c] = Freq[x][c];Slice2[c] = Freq[y][c];}Freq[x][c] += Freq[y][c];Freq[y][c] = Freq[Last][c];Slice1[MaxC<strong>la</strong>ss+1] = ValFreq[x];Slice2[MaxC<strong>la</strong>ss+1] = ValFreq[y];}ValFreq[x] += ValFreq[y];ValFreq[y] = ValFreq[Last];/*************************************************************************//* *//* Devuelve a x e y los valores <strong>de</strong> distribución originales a partir *//* <strong>de</strong> Slice1 y Slice2 *//* *//*************************************************************************/void TDMC45::Uncombine(DiscrValue x,DiscrValue y){C<strong>la</strong>ssNo c;ForEach(c, 0, MaxC<strong>la</strong>ss){Freq[x][c] = Slice1[c];Freq[y][c] = Slice2[c];}}ValFreq[x] = Slice1[MaxC<strong>la</strong>ss+1];ValFreq[y] = Slice2[MaxC<strong>la</strong>ss+1];/*************************************************************************//* *//* Imprime los valores <strong>de</strong>l 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


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente/*************************************************************************//* *//* Construye una prueba <strong>de</strong> nodo sobre un subconjunto <strong>de</strong> valores *//* *//*************************************************************************/void TDMC45::SubsetTest(Tree No<strong>de</strong>,Attribute Att){short S, Bytes;Sprout(No<strong>de</strong>, Subsets[Att]);No<strong>de</strong>->No<strong>de</strong>Type = BrSubset;No<strong>de</strong>->Tested = Att;No<strong>de</strong>->Errors = 0;}Bytes = (MaxAttVal[Att]>>3) + 1;No<strong>de</strong>->Subset = (Conjunto *) calloc(Subsets[Att] + 1, sizeof(Conjunto));ForEach(S, 1, No<strong>de</strong>->Forks){No<strong>de</strong>->Subset[S] = (Conjunto) malloc(Bytes);CopyBits(Bytes, Subset[Att][S], No<strong>de</strong>->Subset[S]);}/*************************************************************************//* *//* Setea Info[] and Gain[] para <strong>la</strong> partición discreta <strong>de</strong> 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 <strong>de</strong>l atributo */if ( Items


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente/* Computa <strong>la</strong>s tab<strong>la</strong>s <strong>de</strong> frecuencia Freq[][] y ValFreq[] para el *//* atrib Att para los items <strong>de</strong>s<strong>de</strong> Fp hasta Lp, y <strong>de</strong>termina <strong>la</strong> *//* proporción <strong>de</strong> <strong>de</strong>sconocidos (UnknownRate) para Att *//* *//*************************************************************************/void TDMC45::ComputeFrequencies(Attribute Att,ItemNo Fp,ItemNo Lp){Description Case;C<strong>la</strong>ssNo c;DiscrValue v;ItemNo p;ResetFreq(MaxAttVal[Att]);/* Determinamos <strong>la</strong> frecuencia <strong>de</strong> cada c<strong>la</strong>se según los casos<strong>de</strong> cada valor posible para el atributo dado */ForEach(p, Fp, Lp){Case = Item[p];Freq[ DVal(Case,Att) ][ C<strong>la</strong>ss(Case) ] += Weight[p];}/* Determinamos <strong>la</strong> frecuencia <strong>de</strong> cada valor posible para el atributo dado */ForEach(v, 0, MaxAttVal[Att]){ForEach(c, 0, MaxC<strong>la</strong>ss){ValFreq[v] += Freq[v][c];}}/* Determinamos <strong>la</strong> proporción <strong>de</strong> valores <strong>de</strong>sconocidos para cada atributo */}UnknownRate[Att] = ValFreq[0] / CountItems(Fp, Lp);/*************************************************************************//* *//* Devuelve <strong>la</strong> información base <strong>de</strong> los itemscon valores conocidos *//* <strong>de</strong> un atributo discreto, utilizando <strong>la</strong> tab<strong>la</strong> <strong>de</strong> frecuencias Freq[][] *//* *//*************************************************************************/float TDMC45::DiscrKnownBaseInfo(DiscrValue KnownItems,ItemCount MaxVal){C<strong>la</strong>ssNo c;ItemCount C<strong>la</strong>ssCount;double Sum=0;DiscrValue v;ForEach(c, 0, MaxC<strong>la</strong>ss){C<strong>la</strong>ssCount = 0;ForEach(v, 1, MaxVal){C<strong>la</strong>ssCount += Freq[v][c];}Sum += C<strong>la</strong>ssCount * Log(C<strong>la</strong>ssCount);}}return (KnownItems * Log(KnownItems) - Sum) / KnownItems;/*************************************************************************//* *//* Construye y <strong>de</strong>vuelve un nodo para una prueba sobre un *//* atributo discreto *//* *//*************************************************************************/void TDMC45::DiscreteTest(Tree No<strong>de</strong>,Attribute Att){ItemCount CountItems();Código Fuente Magdalena Servente 287


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteSprout(No<strong>de</strong>, MaxAttVal[Att]);}No<strong>de</strong>->No<strong>de</strong>Type = BrDiscr;No<strong>de</strong>->Tested = Att;No<strong>de</strong>->Errors = 0;/*************************************************************************//* *//* Evaluación <strong>de</strong> una prueba sobre un atributo continuo *//* --------------------------------------------------- *//* *//*************************************************************************//*************************************************************************//* *//* Trabajamos ocmo si los atributos continuos tuviesen los siguientes *//* valores posibles: *//* 0 (<strong>de</strong>sconocido), 1 (menor que el corte), 2(mayor que el corte) *//* Esta rutina busca el mejor corte para los items <strong>de</strong>s<strong>de</strong> 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;C<strong>la</strong>ssNo c;float AvGain=0, Val, BestVal, BaseInfo, ThreshCost;Verbosity(2){FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteQuicksort(Xp, Lp, Att);/* Contamos los valores base y <strong>de</strong>termimos <strong>la</strong> información base */ForEach(i, Xp, Lp){Freq[ 2 ][ C<strong>la</strong>ss(Item[i]) ] += Weight[i];SplitGain[i] = -Epsilon;SplitInfo[i] = 0;}BaseInfo = TotalInfo(Freq[2], 0, MaxC<strong>la</strong>ss) / KnownItems;/* Probamos cortes posibles entre los items i e i+1, y <strong>de</strong>terminamos <strong>la</strong>información y ganancia <strong>de</strong> cada corte.*/MinSplit = 0.10 * KnownItems / (MaxC<strong>la</strong>ss + 1);if ( MinSplit 25 ) MinSplit = 25;LowItems = 0;ForEach(i, Xp, Lp - 1){c = C<strong>la</strong>ss(Item[i]);LowItems += Weight[i];Freq[1][c] += Weight[i];Freq[2][c] -= Weight[i];if ( LowItems < MinSplit ) continue;elseif ( 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


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteInfo[Att] = 0.0;Verbosity(2){ FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente/* Or<strong>de</strong>na los items <strong>de</strong>s<strong>de</strong> Fp hasta Lp según 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


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteEstimateErrors(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 <strong>de</strong>terminado subárbol *//* *//*************************************************************************/float TDMC45::EstimateErrors(Tree T, ItemNo Fp,ItemNo Lp,short Sh,bool UpdateTree){ItemNo i, Kp, Ep;ItemCount Cases, KnownCases, *LocalC<strong>la</strong>ssDist, TreeErrors, LeafErrors,ExtraLeafErrors, BranchErrors,Factor, MaxFactor;DiscrValue v, MaxBr;C<strong>la</strong>ssNo c, BestC<strong>la</strong>ss;bool PrevAllKnown;/* Generamos <strong>la</strong> distribución <strong>de</strong> c<strong>la</strong>ses */Cases = CountItems(Fp, Lp);LocalC<strong>la</strong>ssDist = (ItemCount *) calloc(MaxC<strong>la</strong>ss+1, sizeof(ItemCount));ForEach(i, Fp, Lp){LocalC<strong>la</strong>ssDist[ C<strong>la</strong>ss(Item[i]) ] += Weight[i];}/* Buscamos <strong>la</strong> c<strong>la</strong>se más frecuente y actualizamos el árbol */BestC<strong>la</strong>ss = T->Leaf;ForEach(c, 0, MaxC<strong>la</strong>ss){if ( LocalC<strong>la</strong>ssDist[c] > LocalC<strong>la</strong>ssDist[BestC<strong>la</strong>ss] ){BestC<strong>la</strong>ss = c;}}LeafErrors = Cases - LocalC<strong>la</strong>ssDist[BestC<strong>la</strong>ss];ExtraLeafErrors = AddErrs(Cases, LeafErrors);if ( UpdateTree ){T->Items = Cases;T->Leaf = BestC<strong>la</strong>ss;memcpy(T->C<strong>la</strong>ssDist, LocalC<strong>la</strong>ssDist, (MaxC<strong>la</strong>ss + 1) * sizeof(ItemCount));}if ( ! T->No<strong>de</strong>Type ) /* hoja */{TreeErrors = LeafErrors + ExtraLeafErrors;292 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteif ( UpdateTree ){T->Errors = TreeErrors;}LocalVerbosity(1){Intab(Sh);FVitacoraLeaf].c_str();FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}Intab(Sh);FVitacoraTested].c_str();FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentechar Any=0;if ( T->No<strong>de</strong>Type == BrSubset ){A = T->Tested;Bytes = (MaxAttVal[A]>>3) + 1;HoldValues = (Conjunto) malloc(Bytes);/* Analizamos si <strong>la</strong> última (<strong>de</strong>fault) rama pue<strong>de</strong> simplificarse uomitirse */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 subárbol, <strong>de</strong>jando únicamente valores en lossubconjuntos <strong>de</strong> <strong>la</strong>s 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);}elseif ( T->No<strong>de</strong>Type ){ForEach(v, 1, T->Forks){CheckPossibleValues(T->Branch[v]);}}/*************************************************************************//* *//* Computa los errores adicionales si <strong>la</strong> proporción <strong>de</strong> error llega al *//* límite superior <strong>de</strong>l nivel <strong>de</strong> confianza. El coeficiente es el *//* cuadrado <strong>de</strong>l nro <strong>de</strong> <strong>de</strong>sviaciones estándar correspondientes al *//* nivel <strong>de</strong> 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 <strong>de</strong>l coeficiente, interpo<strong>la</strong>ndo losvalores <strong>de</strong> Val y Dev */int i;i = 0;while ( CF > Val[i] ) i++;Coeff = Dev[i-1] +Código Fuente Magdalena Servente 295


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> 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));}elseif ( e < 0.9999 ){Val0 = N * (1 - exp(log(CF) / N));return Val0 + e * (AddErrs(N, 1.0) - Val0);}elseif ( 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 <strong>la</strong> <strong>de</strong>scripción <strong>de</strong> un caso utilizando el árbol <strong>de</strong> <strong>de</strong>cisión *//* *//*************************************************************************/C<strong>la</strong>ssNo TDMC45::Category(Description CaseDesc,Tree DecisionTree){C<strong>la</strong>ssNo c, BestC<strong>la</strong>ss;if ( ! C<strong>la</strong>ssSum ){C<strong>la</strong>ssSum = (float *) malloc((MaxC<strong>la</strong>ss+1) * sizeof(float));}ForEach(c, 0, MaxC<strong>la</strong>ss){C<strong>la</strong>ssSum[c] = 0;}C<strong>la</strong>ssify(CaseDesc, DecisionTree, 1.0);BestC<strong>la</strong>ss = 0;ForEach(c, 0, MaxC<strong>la</strong>ss){Verbosity(5) printf("c<strong>la</strong>se %s peso %.2f\n", C<strong>la</strong>ssName[c], C<strong>la</strong>ssSum[c]);}if ( C<strong>la</strong>ssSum[c] > C<strong>la</strong>ssSum[BestC<strong>la</strong>ss] ) BestC<strong>la</strong>ss = c;}return BestC<strong>la</strong>ss;/*************************************************************************//* *//* C<strong>la</strong>sifica un caso utilizando el subárbol dado, ajustando el valor *//* <strong>de</strong> C<strong>la</strong>ssSum para cada c<strong>la</strong>se *//* *//*************************************************************************/void TDMC45::C<strong>la</strong>ssify(Description CaseDesc,Tree T,float Weight){DiscrValue v, dv;float Cv;Attribute a;C<strong>la</strong>ssNo c;296 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteswitch ( T->No<strong>de</strong>Type ){case 0: /* hoja */if ( T->Items > 0 ){/* Actualizamos a partir <strong>de</strong> TODAS <strong>la</strong>s c<strong>la</strong>ses */ForEach(c, 0, MaxC<strong>la</strong>ss){if ( T->C<strong>la</strong>ssDist[c] ){C<strong>la</strong>ssSum[c] += Weight * T->C<strong>la</strong>ssDist[c] / T->Items;}}}else{C<strong>la</strong>ssSum[T->Leaf] += Weight;}return;case BrDiscr: /* prueba sobre un atrib discreto */a = T->Tested;v = DVal(CaseDesc, a);if ( v && v Forks ) /* Nos aseguramos que no sea unnuevo valor discreto */{C<strong>la</strong>ssify(CaseDesc, T->Branch[v], Weight);}else{ForEach(v, 1, T->Forks){C<strong>la</strong>ssify(CaseDesc, T->Branch[v],(Weight * T->Branch[v]->Items) / T->Items);}}return;case ThreshContin: /* prueba sobre un atributo contínuo */a = T->Tested;Cv = CVal(CaseDesc, a);if ( Cv == Unknown ){ForEach(v, 1, 2){C<strong>la</strong>ssify(CaseDesc, T->Branch[v],(Weight * T->Branch[v]->Items) / T->Items);}}else{v = ( Cv Cut ? 1 : 2 );C<strong>la</strong>ssify(CaseDesc, T->Branch[v], Weight);}return;case BrSubset: /* prueba sobre un subconj <strong>de</strong> valores discretos */a = T->Tested;dv = DVal(CaseDesc, a);if ( dv ){ForEach(v, 1, T->Forks){if ( In(dv, T->Subset[v]) ){C<strong>la</strong>ssify(CaseDesc, T->Branch[v], Weight);Código Fuente Magdalena Servente 297


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}}}return;}}/* Valor <strong>de</strong>sconocido o no encontrado en ningún subconjunto */ForEach(v, 1, T->Forks){C<strong>la</strong>ssify(CaseDesc, T->Branch[v],(Weight * T->Branch[v]->Items) / T->Items);}return;/*************************************************************************//* *//* Imprime matrices <strong>de</strong> confusión *//* *//*************************************************************************/void TDMC45::PrintConfusionMatrix(ItemNo *ConfusionMat){short Row, Col;if ( MaxC<strong>la</strong>ss > 20 ) return; /* No imprimir matrices sin sentido *//* Imprimimos el encabezado primero, y luego cada una <strong>de</strong> <strong>la</strong>s fi<strong>la</strong>s */FVitacora


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente/*** REGLAS DE DECISIÓN *******//**************************************************************************************/void TDMC45::GenerarReg<strong>la</strong>sC45(){int o;extern char *optarg;extern int optind;bool FirstTime=true;char outFile[50]="Log\\C45Reg<strong>la</strong>s";//Inicializamos <strong>la</strong>s variablesFileName = "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 archivostrcat(outFile, DateTimeToStr(Now()).c_str());strcat(outFile, Params->Tab<strong>la</strong>BD.c_str());strcat(outFile, ".log");FReg<strong>la</strong>s.open(outFile, ios::out);FReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente/*************************************************************************//* *//* Creación <strong>de</strong>l vector LogItemNo para contener los logaritmos <strong>de</strong> *//* enteros, y el vector LogFact para contener los logaritmos <strong>de</strong> 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 <strong>de</strong> reg<strong>la</strong>s y lo procesamos. Luego *//* componemos un conjunto <strong>de</strong> reg<strong>la</strong>s a partir <strong>de</strong> estos conjuntos. *//* Si hay un sólo árbol, entoncesno se compone un nuevo conjunto. *//* *//* Los conj <strong>de</strong> reg<strong>la</strong>s se almacenan <strong>de</strong>s<strong>de</strong> PRSet[0] hasta PRSet[TRIALS], *//* don<strong>de</strong> PRSet[TRIALS] contiene el conjunto compuesto. *//* *//* Al terminar, el conjunto actual es el compuesto (si es que uno se *//* creó), sino es el conjunto <strong>de</strong> un árbol. *//* *//*************************************************************************/void TDMC45::GenerateRules(){Tree DecisionTree, GetTree();short t=0, RuleSetSpace=0, r;/* Buscamos los bits para codificar los atributos y <strong>la</strong>s ramas */FindTestCo<strong>de</strong>s();/* Procesamos cada árbol <strong>de</strong> <strong>de</strong>cisión */while ( DecisionTree = GetTree() ){FReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> 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].SRuleIn<strong>de</strong>x = RuleIn<strong>de</strong>x;PRSet[t].SDefaultC<strong>la</strong>ss = DefaultC<strong>la</strong>ss;}++t;if ( ! t ){FReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> 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 <strong>de</strong> 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;/*************************************************************************//* *//* Creación <strong>de</strong> un conjunto compuesto <strong>de</strong> reg<strong>la</strong>s <strong>de</strong> todas <strong>la</strong>s pruebas *//* *//*************************************************************************/void TDMC45::CompositeRuleset(){RuleNo r;short t, ri;InitialiseRules();/* Procesamos juntas todas <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> cada subconjunto */ForEach(t, 0, TRIALS-1){ForEach(ri, 1, PRSet[t].SNRules){r = PRSet[t].SRuleIn<strong>de</strong>x[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();FReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteFReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente/* profundidad inicial d *//* *//*************************************************************************/void TDMC45::TreeParameters(Tree t,short d){DiscrValue v;if ( t->No<strong>de</strong>Type ){ForEach(v, 1, t->Forks){TreeParameters(t->Branch[v], d+1);}}else{/* Es una hoja */}}if ( d > MaxDepth ) MaxDepth = d;MaxDisjuncts++;/*************************************************************************//* *//* Extrae los disjuntos <strong>de</strong>l arbol t en <strong>la</strong> profundidad d y los procesa *//* *//*************************************************************************/void TDMC45::Scan(Tree t,short d){DiscrValue v;short i;Condition *Term;Test x, FindTest();if ( t->No<strong>de</strong>Type ){d++;x = (Test) malloc(sizeof(struct TestRec));x->No<strong>de</strong>Type = t->No<strong>de</strong>Type;x->Tested = t->Tested;x->Forks = t->Forks;x->Cut = ( t->No<strong>de</strong>Type == ThreshContin ? t->Cut : 0 );if ( t->No<strong>de</strong>Type == 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);}}elseif ( t->Items >= 1 ){/* Hoja <strong>de</strong>l árbol <strong>de</strong> <strong>de</strong>cisión - construimos el conjunto <strong>de</strong>condiciones asociadas con esta hoja y <strong>la</strong>s 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 Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}}/*************************************************************************//* *//* Construcción <strong>de</strong> un subconjunto or<strong>de</strong>nado (in<strong>de</strong>xado por el RuleIn<strong>de</strong>x) *//* a partir <strong>de</strong>l actual conjunto <strong>de</strong> reg<strong>la</strong>s *//* *//*************************************************************************/void TDMC45::ConstructRuleset(){RuleNo r, OldNRules = NRules;/* Reservamos lugar para <strong>la</strong>s tab<strong>la</strong>s */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));C<strong>la</strong>ssRules = (RuleNo *) malloc((NRules+1) * sizeof(RuleNo));C<strong>la</strong>ssFreq = (float *) calloc(MaxC<strong>la</strong>ss+1, sizeof(ItemNo));Covered = (ItemNo *) calloc(MaxItem+1, sizeof(ItemNo));Match = (bool **) calloc(NRules+1, sizeof(Boolean *));FalsePos = (ItemNo *) calloc(MaxC<strong>la</strong>ss+1, sizeof(ItemNo));NoRule = (ItemNo *) calloc(MaxC<strong>la</strong>ss+1, sizeof(ItemNo));ForEach(r, 1, NRules){Match[r] = (Boolean *) calloc(MaxItem+1, sizeof(Boolean));}/* Cubrimos cada una <strong>de</strong> <strong>la</strong>s c<strong>la</strong>ses, y luego <strong>la</strong>s or<strong>de</strong>namos en uníndice <strong>de</strong> reg<strong>la</strong>s */InitialiseTables();FindRuleCo<strong>de</strong>s();Co<strong>de</strong>Weight = 0.5;ForEach(FocusC<strong>la</strong>ss, 0, MaxC<strong>la</strong>ss){CoverC<strong>la</strong>ss();}MakeIn<strong>de</strong>x();FindDefault();/* Liberamos espacio en memoria */}free(Value);free(RuleIn);free(C<strong>la</strong>ssRules);free(Subset);free(Covered);free(FalsePos);free(NoRule);ForEach(r, 1, OldNRules){free(Match[r]);}free(Match);/*************************************************************************//* *//* Inicialización <strong>de</strong> tab<strong>la</strong>s *//* *//*************************************************************************/Código Fuente Magdalena Servente 305


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentevoid TDMC45::InitialiseTables(){ItemNo i;RuleNo r;C<strong>la</strong>ssNo c;float Strength();ForEach(r, 1, NRules){RuleIn[r] = false;Rule[r].Used = Rule[r].Incorrect = 0;}ForEach(c, 0, MaxC<strong>la</strong>ss){C<strong>la</strong>ssFreq[c] = 0;}ForEach(i, 0, MaxItem){C<strong>la</strong>ssFreq[C<strong>la</strong>ss(Item[i])]++;ForEach(r, 1, NRules){Match[r][i] = Fuerza(Rule[r], Item[i]) > 0.1;}}}if ( Match[r][i] ){Rule[r].Used++;if ( C<strong>la</strong>ss(Item[i]) != Rule[r].Rhs ) Rule[r].Incorrect++;}/*************************************************************************//* *//* Seleccionamos un subconjunto <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s para <strong>la</strong> FocusC<strong>la</strong>ss *//* *//*************************************************************************/void TDMC45::CoverC<strong>la</strong>ss(){RuleNo r, RuleCount=0;ItemNo i;Verbosity(1){FReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente{AllCombinations(RuleCount);}elseif ( SIMANNEAL ){SimAnneal(RuleCount);}else{SpotSearch(RuleCount);}}memcpy(RuleIn, Subset, NRules+1);Verbosity(1){FReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}{}if ( ! (OutCount++ % 3) ) printf("\n\t\t");FReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente{}r = C<strong>la</strong>ssRules[ri];RuleIn[r] = Random < ProbIn;}}HillClimb(RuleCount);/*************************************************************************//* *//* Mejora un subconjunto <strong>de</strong> reg<strong>la</strong>s agregando o eliminando reg<strong>la</strong>s *//* *//*************************************************************************/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 = C<strong>la</strong>ssRules[ri];if ( RuleIn[r] ){ForEach(i, 0, MaxItem){if ( Match[r][i] ){Covered[i]++;}}}}/* Agregamos o eliminamos <strong>la</strong> reg<strong>la</strong> con <strong>la</strong> mayor reducción en el costo<strong>de</strong> codificación */while ( true ){Calcu<strong>la</strong>teValue();Verbosity(2){OutCount = 0;ForEach(ri, 1, RuleCount){r = C<strong>la</strong>ssRules[ri];}if ( ! RuleIn[r] ){if ( ! (OutCount++ % 3) ) printf("\n\t\t");FReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteif ( Delta > BestDelta ){Bestr = r;BestDelta = Delta;}}if ( ! Bestr ) break;}}if ( RuleIn[Bestr] ){DeleteRule(Bestr);}else{AddRule(Bestr);}/*************************************************************************//* *//* Calcu<strong>la</strong>mos los aciertos y errores para <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>la</strong> FocusC<strong>la</strong>ss *//* y <strong>de</strong>terminamos el valor <strong>de</strong> dichas reg<strong>la</strong>s. Si es el mejor hasta *//* ahora, lo guardamos. *//* *//*************************************************************************/void TDMC45::Calcu<strong>la</strong>teValue()/* -------------- */{RuleNo r, Selected=0, InCount;ItemNo i, Times, FPos=0, FNeg=0, SumCover=0,aux;float BaseBits, RuleBits=0, NewBits;C<strong>la</strong>ssNo ThisC<strong>la</strong>ss;Boolean *RuleMatch;ForEach(i, 0, MaxItem){ThisC<strong>la</strong>ss = C<strong>la</strong>ss(Item[i]);}if ( Covered[i] ){SumCover++;if( ThisC<strong>la</strong>ss != FocusC<strong>la</strong>ss ) FPos++;}elseif ( ThisC<strong>la</strong>ss == FocusC<strong>la</strong>ss ){FNeg++;}ForEach(r, 1, NRules){if ( Rule[r].Rhs == FocusC<strong>la</strong>ss ){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 ( C<strong>la</strong>ss(Item[i]) == FocusC<strong>la</strong>ss ){Right[r]++;}else310 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}}}}{}Wrong[r]++;RuleBits -= LogFact[Selected];BaseBits = Co<strong>de</strong>Weight * RuleBits + ExceptionBits(SumCover, FPos, FNeg);/* A partir <strong>de</strong> los aciertos y errores <strong>de</strong> cada reg<strong>la</strong>, calcu<strong>la</strong>mos su valor */Verbosity(1){FReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}{}SubsetValue = BaseBits;memcpy(Subset, RuleIn, NRules+1);/*************************************************************************//* *//* Agregamos <strong>la</strong> reg<strong>la</strong> r al conj <strong>de</strong> relgas incluidas e incrementamos <strong>la</strong> *//* cantidad <strong>de</strong> reg<strong>la</strong>s q cubren los items q disparan <strong>la</strong> reg<strong>la</strong> *//* *//*************************************************************************/void TDMC45::AddRule(RuleNo r){ItemNo i;RuleIn[r] = true;ForEach(i, 0, MaxItem){if ( Match[r][i] ){Covered[i]++;}}}Verbosity(1){FReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteRuleNo r, BestR, NewNRules = 0;ItemNo i;Boolean *Inclu<strong>de</strong>d;Inclu<strong>de</strong>d = (Boolean *) calloc(MaxC<strong>la</strong>ss+1, sizeof(Boolean));RuleIn<strong>de</strong>x = (RuleNo *) calloc(NRules+1, sizeof(RuleNo));Verbosity(1) printf("\nFalsosPos C<strong>la</strong>se\n");ForEach(i, 0, MaxItem){Covered[i] = 0;}/* Seleccionamos <strong>la</strong> mejor c<strong>la</strong>se para poner a continuación */ForEach(Pass, 0, MaxC<strong>la</strong>ss){ForEach(c, 0, MaxC<strong>la</strong>ss){if ( Inclu<strong>de</strong>d[c] ) continue;FalsePos[c] = 0;ForEach(i, 0, MaxItem){if ( Covered[i] || C<strong>la</strong>ss(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, MaxC<strong>la</strong>ss){if ( ! Inclu<strong>de</strong>d[c] &&( BestC < 0 || FalsePos[c] < FalsePos[BestC] ) ){BestC = c;}}Inclu<strong>de</strong>d[BestC] = true;Verbosity(1){FReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteRuleIn<strong>de</strong>x[++NewNRules] = BestR;RuleIn[BestR] = false;}ForEach(i, 0, MaxItem){Covered[i] |= Match[BestR][i];}}} while ( BestR );}NRules = NewNRules;free(Inclu<strong>de</strong>d);/*************************************************************************//* *//* Determina <strong>la</strong> c<strong>la</strong>se por <strong>de</strong>fecto. Los empates se resuelven a favor *//* <strong>de</strong> <strong>la</strong> c<strong>la</strong>se más frecuente *//* *//*************************************************************************/void TDMC45::FindDefault(){C<strong>la</strong>ssNo c;ItemNo i;/* Determinamos los items no cubiertos por ninguna reg<strong>la</strong> */ForEach(c, 0, MaxC<strong>la</strong>ss){NoRule[c] = 0;}ForEach(i, 0, MaxItem){if ( ! Covered[i] ){NoRule[C<strong>la</strong>ss(Item[i])]++;}}Verbosity(1){FReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> 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 <strong>de</strong> bits necesarios para codificar <strong>la</strong>s excepciones *//* *//*************************************************************************/float TDMC45::Biased(int N, int E, float ExpE){float Rate;if ( ExpE = N-1E-6 ){return ( 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 <strong>la</strong> longitud <strong>de</strong> codificación para todas <strong>la</strong>s reg<strong>la</strong>s *//* *//*************************************************************************/void TDMC45::FindRuleCo<strong>de</strong>s(){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]);}Código Fuente Magdalena Servente 315


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente/* Debemos codificar el nro <strong>de</strong> condiciones, pero mejorar <strong>la</strong>codificación total mediante <strong>la</strong> forma en que <strong>la</strong>s condicionespue<strong>de</strong>n reor<strong>de</strong>narse */}}Rule[r].Bits = Bits + LogItemNo[NCond] - LogFact[NCond];/*************************************************************************//* *//* Determina el nro <strong>de</strong> bits requerido para codificar una condición *//* *//*************************************************************************/float TDMC45::CondBits(Condition C){Test t;Attribute a;t = C->CondTest;a = t->Tested;switch ( t->No<strong>de</strong>Type ){case BrDiscr: /* prueba <strong>de</strong> un atrib discreto */case ThreshContin: /* prueba <strong>de</strong> un atrib continuo */return AttTestBits/REDUNDANCY + BranchBits[a];case BrSubset: /* prueba <strong>de</strong> un subconj <strong>de</strong> atrib discretos */}}return AttTestBits/REDUNDANCY + MaxAttVal[a];/*************************************************************************//* *//* Guarda el conjunto <strong>de</strong> reg<strong>la</strong>s en el archivo <strong>de</strong> reg<strong>la</strong>s según el or<strong>de</strong>n *//* <strong>de</strong>l í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") ) ){FReg<strong>la</strong>sForks, sizeof(short));StreamOut((char *) &Tst->Cut, sizeof(float));if ( Tst->No<strong>de</strong>Type == BrSubset ){Bytes = (MaxAttVal[Tst->Tested]>>3) + 1;ForEach(v, 1, Tst->Forks)316 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}{StreamOut((char *) Tst->Subset[v], Bytes);}}StreamOut((char *) &Rule[r].Lhs[d]->TestValue, sizeof(short));}StreamOut((char *) &Rule[r].Rhs, sizeof(C<strong>la</strong>ssNo));StreamOut((char *) &Rule[r].Error, sizeof(float));}SaveDiscreteNames();/*************************************************************************//* *//* Obtiene un nuevo conj <strong>de</strong> reg<strong>la</strong>s <strong>de</strong>l archivo <strong>de</strong> reg<strong>la</strong>s *//* *//*************************************************************************/void TDMC45::GetRules(){RuleNo nr, r;short n, d, v, Bytes;Condition *Cond;Test Tst;C<strong>la</strong>ssNo c;float e;if ( TRf ) fclose(TRf);strcpy(Fn, FileName.c_str());strcat(Fn, ".rules");if ( ! ( TRf = fopen(Fn, "r") ) ){FReg<strong>la</strong>sTested, sizeof(Attribute));StreamIn((char *) &Tst->Forks, sizeof(short));StreamIn((char *) &Tst->Cut, sizeof(float));if ( Tst->No<strong>de</strong>Type == 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(C<strong>la</strong>ssNo));StreamIn((char *) &e, sizeof(float));NewRule(Cond, n, c, e);free(Cond);}RecoverDiscreteNames();/*************************************************************************//* *//* Busca una prueba en el vector <strong>de</strong> pruebas, si no está allí, <strong>la</strong> agrega */Código Fuente Magdalena Servente 317


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> 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 <strong>la</strong> prueba t1 es igual a <strong>la</strong> prueba t2 *//* *//*************************************************************************/bool TDMC45::SameTest(Test t1,Test t2){short i;if ( t1->No<strong>de</strong>Type != t2->No<strong>de</strong>Type ||t1->Tested != t2->Tested ){return false;}}switch ( t1->No<strong>de</strong>Type ){case BrDiscr: return true;case ThreshContin: return t1->Cut == t2->Cut;case BrSubset:}return true;ForEach(i, 1, t1->Forks){if ( t1->Subset[i] != t2->Subset[i] ){return false;}}/*************************************************************************//* *//* Limpia <strong>la</strong>s variables para un nuevo conj <strong>de</strong> reg<strong>la</strong>s *//* *//*************************************************************************/void TDMC45::InitialiseRules()/* ---------------- */{NRules = 0;Rule = 0;RuleSpace = 0;}318 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente/*************************************************************************//* *//* Agrega una nueva reg<strong>la</strong>, al conjunto <strong>de</strong> reg<strong>la</strong>s actual. Actualiza *//* Rule[],NRules y,en caso <strong>de</strong> ser necesario,RuleSpace *//* *//*************************************************************************/bool TDMC45::NewRule(Condition Cond[],short NConds,C<strong>la</strong>ssNo TargetC<strong>la</strong>ss,float Err){short d, r;/* Verificamos si <strong>la</strong> reg<strong>la</strong> ya existe */ForEach(r, 1, NRules){if ( SameRule(r, Cond, NConds, TargetC<strong>la</strong>ss) ){Verbosity(1) printf("\tduplica <strong>la</strong> reg<strong>la</strong> %d\n", r);/* Mantenemos el estimador <strong>de</strong> error más pesismista */if ( Err > Rule[r].Error ){Rule[r].Error = Err;}}}return false;/* Verificamos que haya suficiente espacio para una nueva reg<strong>la</strong> */NRules++;if ( NRules >= RuleSpace ){RuleSpace += 100;if ( RuleSpace > 100 ){Rule = (PR *) realloc(Rule, RuleSpace * sizeof(PR));}else{Rule = (PR *) malloc(RuleSpace * sizeof(PR));}}/* Formamos <strong>la</strong> nueva reg<strong>la</strong> */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 = TargetC<strong>la</strong>ss;Rule[NRules].Error = Err;Verbosity(1) PrintRule(NRules);}return true;/*************************************************************************//* *//* Deci<strong>de</strong> si <strong>la</strong> reg<strong>la</strong> actual duplica <strong>la</strong> reg<strong>la</strong> r *//* *//*************************************************************************/bool TDMC45::SameRule(RuleNo r,Condition Cond[],short NConds,C<strong>la</strong>ssNo TargetC<strong>la</strong>ss){short d, i;Test SubTest1, SubTest2;Código Fuente Magdalena Servente 319


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteif ( Rule[r].Size != NConds || Rule[r].Rhs != TargetC<strong>la</strong>ss ){return false;}ForEach(d, 1, NConds){if ( Rule[r].Lhs[d]->CondTest->No<strong>de</strong>Type != Cond[d]->CondTest->No<strong>de</strong>Type ||Rule[r].Lhs[d]->CondTest->Tested != Cond[d]->CondTest->Tested ){return false;}switch ( Cond[d]->CondTest->No<strong>de</strong>Type ){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 in<strong>de</strong>xado <strong>de</strong> reg<strong>la</strong>s actual *//* *//*************************************************************************/void TDMC45::PrintIn<strong>de</strong>xedRules(){short ri;}ForEach(ri, 1, NRules ){PrintRule(RuleIn<strong>de</strong>x[ri]);}printf("\nC<strong>la</strong>se por <strong>de</strong>fecto: %s\n", C<strong>la</strong>ssName[DefaultC<strong>la</strong>ss]);/*************************************************************************//* *//* Imprime <strong>la</strong> reg<strong>la</strong> r *//* *//*************************************************************************/void TDMC45::PrintRule(RuleNo r){short d;printf("\nReg<strong>la</strong> %d:\n", r);ForEach(d, 1, Rule[r].Size){printf(" ");PrintCondition(Rule[r].Lhs[d]);}printf("\t-> c<strong>la</strong>se %s [%.1f%%]\n",320 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}C<strong>la</strong>ssName[Rule[r].Rhs], 100 * (1 - Rule[r].Error));/*************************************************************************//* *//* Imprime <strong>la</strong> condición c <strong>de</strong> una reg<strong>la</strong> <strong>de</strong> producción *//* *//*************************************************************************/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 <strong>de</strong>sconocido\n");return;}switch ( tp->No<strong>de</strong>Type ){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 <strong>la</strong> rama */for ( pv=1 ; Values Subset[v]) ){if ( First ){printf("{");First = false;}else{printf(", ");}printf("%s", AttValName[Att][pv]);}}printf("}\n");/*************************************************************************/Código Fuente Magdalena Servente 321


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente/* *//* Poda <strong>la</strong> reg<strong>la</strong> dadas <strong>la</strong>s condiciones Cond, y el nro <strong>de</strong> condiciones *//* NCond, y agrega <strong>la</strong> reg<strong>la</strong> resultante al actual conjunto <strong>de</strong> reg<strong>la</strong>s *//* si es lo suficientemente precisa *//* *//*************************************************************************/void TDMC45::PruneRule(Condition Cond[],short NCond,C<strong>la</strong>ssNo TargetC<strong>la</strong>ss){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 <strong>la</strong> matriz <strong>de</strong> satisfacción */TargetC<strong>la</strong>ssFreq[0] = TargetC<strong>la</strong>ssFreq[1] = 0;ForEach(i, 0, MaxItem){ForEach(d, 1, NCond){CondSatisfiedBy[d][i] = Satisfies(Item[i], Cond[d]);}TargetC<strong>la</strong>ssFreq[IsTarget(Item[i])]++;}DefaultError = 1.0 - (TargetC<strong>la</strong>ssFreq[true] + 1.0) / (MaxItem + 3.0);/* Buscamos <strong>la</strong>s condiciones a eliminar */Verbosity(1){FReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteFReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}return;if ( Pessimistic[0] >= DefaultError ){Verbosity(1){FReg<strong>la</strong>sTestValue;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->No<strong>de</strong>Type ){case BrDiscr: /* prueba sobre un atrib discreto */return false;case ThreshContin: /* prueba sobre un atrib contínuo */if ( vv == v &&( v == 1 ? t->Cut < Rt->Cut : t->Cut > Rt->Cut ) ){return true;324 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}}}break;case BrSubset: /* sprueba sobre un subconjunto <strong>de</strong> atrib discretos */if ( IsSubset(t->Subset[vv], Rt->Subset[v], Rt->Tested) ){return true;}}return false;/*************************************************************************//* *//* Deci<strong>de</strong> si el subconj <strong>de</strong> 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 <strong>la</strong>s tab<strong>la</strong>s <strong>de</strong> distribución <strong>de</strong> frecuencias para <strong>la</strong> condiciones *//* actuales: *//* *//* Total[0] = items q satisfacen todas <strong>la</strong>s condiciones *//* Total[d] = items q satisfacen todas <strong>la</strong>s condiciones menos d *//* *//* Errors[0] = items <strong>de</strong> c<strong>la</strong>se errónea q satisfacen todas <strong>la</strong>s cond *//* Errors[d] = items <strong>de</strong> c<strong>la</strong>se errónea q satisfacen todas <strong>la</strong>s cond *//* menos d *//* *//*************************************************************************/void TDMC45::FindTables(short NCond,C<strong>la</strong>ssNo TargetC<strong>la</strong>ss){ItemNo i;short Misses, Missed[2], d;Boolean CorrectC<strong>la</strong>ss;/* Limpiamos <strong>la</strong>s distribuciones */ForEach(d, 0, NCond){Total[d] = Errors[d] = 0;}/* Determinamos <strong>la</strong>s distribuciones */ForEach(i, 0, MaxItem){Misses = 0;CorrectC<strong>la</strong>ss = IsTarget(Item[i]);for ( d = 1 ; d


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}{UpdateCount(Total, Errors, 0, CorrectC<strong>la</strong>ss);}elseif ( Misses == 1 ){UpdateCount(Total, Errors, Missed[0], CorrectC<strong>la</strong>ss);}/* Ajustamos <strong>la</strong>s cuentas para reflejar todos los casos q satisfacentodas <strong>la</strong>s condiciones */}ForEach(d, 1, NCond){if ( ! Deleted[d] ){Total[d] += Total[0];Errors[d] += Errors[0];}}/*************************************************************************//* *//* Incrementa los valores <strong>de</strong> Total[d] y Errors[d] *//* *//*************************************************************************/void TDMC45::UpdateCount(ItemNo T[],ItemNo E[],short d,bool OK){T[d]++;if ( ! OK ) E[d]++;}/*************************************************************************//* *//* Determina si <strong>la</strong> <strong>de</strong>scripción <strong>de</strong> un caso satisface <strong>la</strong> 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 <strong>de</strong> <strong>la</strong> prueba sobre el item actual */switch ( t->No<strong>de</strong>Type ){case BrDiscr: /* prueba sobre un atrib discreto */v = DVal(CaseDesc, t->Tested);Outcome = ( v == 0 ? -1 : v );break;case ThreshContin: /* prueba sobre un atrib contínuo */cv = CVal(CaseDesc, t->Tested);Outcome = ( cv == Unknown ? -1 : cv Cut ? 1 : 2 );break;case BrSubset: /* prueba sobre un subconj <strong>de</strong> 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 Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}}return ( Outcome == OneCond->TestValue );/*************************************************************************//* *//* Distribución hipergeometrica (usa los log <strong>de</strong> los factoriales *//* tabu<strong>la</strong>dos) *//* *//*************************************************************************/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 <strong>la</strong> tab<strong>la</strong> t <strong>de</strong> contingencias <strong>de</strong> 2x2 y calcu<strong>la</strong> <strong>la</strong> *//* probabilidad <strong>de</strong> que una división al azar pueda producir una división *//* al menos tan extrema como esta. Esto también se conoce como <strong>la</strong> *//* "Prueba Exacta <strong>de</strong> 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 <strong>la</strong> tab<strong>la</strong> a <strong>la</strong> forma canónica */if ( t11 + t12 > t21 + t22 ){A = t11 + t12;B = t21 + t22;if ( t11 * (t21 + t22) > t21 * (t11 + t12) ){a0 = t11;r = t11 + t21;}else{a0 = t12;r = 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 calcu<strong>la</strong>mos <strong>la</strong> probabilidad */k = Min(r, A);ForEach(a, a0, k){Sum += Hypergeom(a, r, A, B);}}return Sum;/*************************************************************************/Código Fuente Magdalena Servente 327


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente/* *//* Evalúa todos los conj <strong>de</strong> reg<strong>la</strong>s *//* *//*************************************************************************/void TDMC45::EvaluateRulesets(bool DeleteRules){short t;ItemNo *Errors;float AvSize=0, AvErrs=0;Boolean Final;if ( TRIALS == 1 ){/* Evaluamos el conj <strong>de</strong> reg<strong>la</strong>s actual como si no existiera un conjcompuesto <strong>de</strong> reg<strong>la</strong>s */}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;RuleIn<strong>de</strong>x = PRSet[t].SRuleIn<strong>de</strong>x;DefaultC<strong>la</strong>ss = PRSet[t].SDefaultC<strong>la</strong>ss;if ( t < TRIALS ){FReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}FReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligenteelse{AssignedC<strong>la</strong>ss = DefaultC<strong>la</strong>ss;}if ( CMInfo ){ConfusionMat[C<strong>la</strong>ss(Item[i])*(MaxC<strong>la</strong>ss+1)+AssignedC<strong>la</strong>ss]++;}Tested++;if ( AssignedC<strong>la</strong>ss != C<strong>la</strong>ss(Item[i]) ){Errors++;if ( FoundRule ) Rule[Bestr].Incorrect++;Verbosity(3){FReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteForEach(ri, 1, NRules){p = RuleIn<strong>de</strong>x[ri];if ( Rule[p].Used > 0 ){ErrorRate = Rule[p].Incorrect / (float) Rule[p].Used;FReg<strong>la</strong>s


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente}return Errors;/*************************************************************************//* *//* Busca <strong>la</strong> mejor reg<strong>la</strong> para el caso dado, <strong>de</strong>jando <strong>la</strong> probabilidad *//* en Confi<strong>de</strong>nce *//* *//*************************************************************************/RuleNo TDMC45::BestRuleIn<strong>de</strong>x(Description CaseDesc,RuleNo Start){RuleNo r, ri;ForEach(ri, Start, NRules){r = RuleIn<strong>de</strong>x[ri];Confi<strong>de</strong>nce = Fuerza(Rule[r], CaseDesc);}if ( Confi<strong>de</strong>nce > 0.1 ){return ri;}}Confi<strong>de</strong>nce = 0.0;return 0;D.5. MÓDULOS DE CLASES DE DATOSD.5.1. UTiposD.5.1.1. UTipos.h//---------------------------------------------------------------------------#ifn<strong>de</strong>f UTiposH#<strong>de</strong>fine UTiposH//---------------------------------------------------------------------------//Definición <strong>de</strong> constantes#<strong>de</strong>fine LONG_CLASSIFIER 3 /*Longitud <strong>de</strong>l campo <strong>de</strong>l c<strong>la</strong>sificador*/#<strong>de</strong>fine MAX_CANT_DESCRIPTORES 20 /*Cantidad máxima <strong>de</strong> <strong>de</strong>scriptores que pue<strong>de</strong>haber en <strong>la</strong> tab<strong>la</strong>*/#<strong>de</strong>fine MAX_CANT_CLASIFICADORES 10 /*Cantidad máxima <strong>de</strong> valores distintos quepue<strong>de</strong> haber para el c<strong>la</strong>sificador*/#<strong>de</strong>fine MAX_HIJOS 20 /*Máxima <strong>de</strong> cantidad <strong>de</strong> hijos que pue<strong>de</strong> tener un nodo <strong>de</strong>lárbol*/#<strong>de</strong>fine MAX_NIVELES 200#<strong>de</strong>fine MAX_CHAR 100//---------------------------------------------------------------------------//---------------------------------------------------------------------------// DECLARACION DE TIPOS//---------------------------------------------------------------------------//---------------------------------------------------------------------------//Tab<strong>la</strong> <strong>de</strong> corre<strong>la</strong>ción//*****************EL TAMAÑO DE LA TABLA DEBERÍA SER DINÁMICOtype<strong>de</strong>f double TTab<strong>la</strong>Correl[MAX_CANT_DESCRIPTORES+1][MAX_CANT_CLASIFICADORES+1];type<strong>de</strong>f struct tree_no<strong>de</strong> *tree_ptr;struct tree_no<strong>de</strong> {short int f<strong>la</strong>g_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 mixtos3 si no es hoja*/int <strong>de</strong>sc;332 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentetree_ptr pHijos[MAX_HIJOS]; //hijo <strong>de</strong>rechoshort int D[MAX_CANT_DESCRIPTORES];/*Descriptores válidos para el nodo*/};type<strong>de</strong>f tree_ptr DECISION_TREE;type<strong>de</strong>f AnsiString TVecValores [MAX_NIVELES];type<strong>de</strong>f AnsiString TTab<strong>la</strong>Valores [MAX_NIVELES][MAX_NIVELES];type<strong>de</strong>f char TRule [MAX_CHAR];type<strong>de</strong>f int TVecInt [MAX_NIVELES];c<strong>la</strong>ss TParametros {public:AnsiString ArchivoIni;AnsiString NombreBD;AnsiString Tab<strong>la</strong>BD;AnsiString Tab<strong>la</strong>Reg<strong>la</strong>s;AnsiString ColC<strong>la</strong>sificador;AnsiString ExtensionFileReg<strong>la</strong>s;TStringList *LC<strong>la</strong>sificadores;int iFormatoReg<strong>la</strong>s; /* 0: Insight2+1: KappaPC2: ambos3: ninguno*/int iSistema; /* 0: ID31: C4.5 */int iCriterio; /* 0: Ganancia1: Proporción <strong>de</strong> ganancia */int iPoda;/* 0: Si1: No */int iConjuntos; /* indica si <strong>la</strong>s pruebas en el C4.5 serealizan sobre grupos <strong>de</strong> atrib discretos0: Si1: No */int iMinObjs; /* Cantidad mínima <strong>de</strong> objetos que <strong>de</strong>be teneruna rama en el C4.5 */int iCF;/* Nivel <strong>de</strong> confianza para <strong>la</strong> poda en elC4.5 */TParametros(AnsiString ArchIni); //constructor//Toma los parámetros <strong>de</strong>l archivo .ini~TParametros(); //<strong>de</strong>structor//Refresca los parámetros a partir <strong>de</strong>l archivo .ini/*Devuelve 0 si no hubo problemas,-1 en caso contrario*/int RefrescarParams();//Guardar los parámetros en el .ini/*Devuelve 0 si no hubo problemas,-1 en caso contrario*/int GrabarParams();};//---------------------------------------------------------------------------#endifD.5.1.2. UTipos.cpp//---------------------------------------------------------------------------#inclu<strong>de</strong> #pragma hdrstop#inclu<strong>de</strong> "UTipos.h"//---------------------------------------------------------------------------#pragma package(smart_init)//---------------------------------------------------------------------------//---------------------------------------------------------------------------// IMPLEMENTACIÓN DE LA CLASE TParametros//---------------------------------------------------------------------------Código Fuente Magdalena Servente 333


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente//---------------------------------------------------------------------------TParametros::TParametros(AnsiString ArchIni) //constructor//Toma los parámetros <strong>de</strong>l archivo .ini{int i;char Buffer[80];ArchivoIni=ArchIni;LC<strong>la</strong>sificadores = new TStringList();//Cargamos <strong>la</strong>s opciones por <strong>de</strong>fault <strong>de</strong>l archivo .ini//Cargamos los datos asociados con los c<strong>la</strong>sificadoresGetPrivateProfileString("C<strong>la</strong>sificadores", "ColC<strong>la</strong>sif", "???", Buffer, sizeofBuffer, ArchivoIni.c_str());if (Buffer!="???")ColC<strong>la</strong>sificador=Trim(Buffer);GetPrivateProfileString("C<strong>la</strong>sificadores", "lC<strong>la</strong>sif", "???", Buffer, sizeofBuffer, ArchivoIni.c_str());if (Buffer!="???"){LC<strong>la</strong>sificadores->Add(AnsiString(strtok(Buffer, ",")));i=0;while (Trim(LC<strong>la</strong>sificadores->Strings[i])!=""){LC<strong>la</strong>sificadores->Add(AnsiString(strtok(NULL, ",")));i++;}LC<strong>la</strong>sificadores->Delete(i);}//Cargamos los datos re<strong>la</strong>cionados con <strong>la</strong> Base <strong>de</strong> <strong>Datos</strong>GetPrivateProfileString("BaseDe<strong>Datos</strong>", "Tab<strong>la</strong>", "???", Buffer, sizeof Buffer,ArchivoIni.c_str());if (Buffer!="???")Tab<strong>la</strong>BD=Trim(Buffer);GetPrivateProfileString("BaseDe<strong>Datos</strong>", "Alias", "???", Buffer, sizeof Buffer,ArchivoIni.c_str());if (Buffer!="???")NombreBD=Trim(Buffer);//Cargamos los datos asociados con <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónGetPrivateProfileString("Reg<strong>la</strong>s", "Extension", "???", Buffer, sizeof Buffer,ArchivoIni.c_str());if (Buffer!="???")ExtensionFileReg<strong>la</strong>s=Trim(Buffer);GetPrivateProfileString("Reg<strong>la</strong>s", "Formato", "???", Buffer, sizeof Buffer,ArchivoIni.c_str());if (Buffer!="???")iFormatoReg<strong>la</strong>s=StrToInt(Trim(Buffer));//Cargamos los datos asociados con el sistema <strong>de</strong> resolución y sus opcionesGetPrivateProfileString("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", "???", Buffer, sizeof Buffer,ArchivoIni.c_str());if (Buffer!="???")iPoda=StrToInt(Trim(Buffer));//Cargamos los datos asociados con el C4.5GetPrivateProfileString("C45", "Conjuntos", "???", Buffer, sizeof Buffer,ArchivoIni.c_str());if (Buffer!="???")334 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteiConjuntos=StrToInt(Trim(Buffer));GetPrivateProfileString("C45", "MinObjs", "???", Buffer, sizeof Buffer,ArchivoIni.c_str());if (Buffer!="???")iMinObjs=StrToInt(Trim(Buffer));GetPrivateProfileString("C45", "CF", "???", Buffer, sizeof Buffer,ArchivoIni.c_str());if (Buffer!="???")iCF=StrToInt(Trim(Buffer));}//---------------------------------------------------------------------------TParametros::~TParametros() //<strong>de</strong>structor{ArchivoIni.~AnsiString();NombreBD.~AnsiString();Tab<strong>la</strong>BD.~AnsiString();Tab<strong>la</strong>Reg<strong>la</strong>s.~AnsiString();ColC<strong>la</strong>sificador.~AnsiString();ExtensionFileReg<strong>la</strong>s.~AnsiString();<strong>de</strong>lete LC<strong>la</strong>sificadores;}//---------------------------------------------------------------------------int TParametros::RefrescarParams()//Refresca los parámetros a partir <strong>de</strong>l archivo .ini/*Devuelve 0 si no hubo problemas,-1 en caso contrario*/{int i;char Buffer[80];try {LC<strong>la</strong>sificadores = new TStringList();//Cargamos <strong>la</strong>s opciones por <strong>de</strong>fault <strong>de</strong>l archivo .ini//Cargamos los datos asociados con los c<strong>la</strong>sificadoresGetPrivateProfileString("C<strong>la</strong>sificadores", "ColC<strong>la</strong>sif", "???", Buffer, sizeofBuffer, ArchivoIni.c_str());if (Buffer!="???")ColC<strong>la</strong>sificador=Trim(Buffer);GetPrivateProfileString("C<strong>la</strong>sificadores", "lC<strong>la</strong>sif", "???", Buffer, sizeofBuffer, ArchivoIni.c_str());if (Buffer!="???"){LC<strong>la</strong>sificadores->Add(AnsiString(strtok(Buffer, ",")));i=0;while (Trim(LC<strong>la</strong>sificadores->Strings[i])!=""){LC<strong>la</strong>sificadores->Add(AnsiString(strtok(NULL, ",")));i++;}LC<strong>la</strong>sificadores->Delete(i);}//Cargamos los datos re<strong>la</strong>cionados con <strong>la</strong> Base <strong>de</strong> <strong>Datos</strong>GetPrivateProfileString("BaseDe<strong>Datos</strong>", "Tab<strong>la</strong>", "???", Buffer, sizeof Buffer,ArchivoIni.c_str());if (Buffer!="???")Tab<strong>la</strong>BD=Trim(Buffer);GetPrivateProfileString("BaseDe<strong>Datos</strong>", "Alias", "???", Buffer, sizeof Buffer,ArchivoIni.c_str());if (Buffer!="???")NombreBD=Trim(Buffer);//Cargamos los datos asociados con <strong>la</strong>s reg<strong>la</strong>s <strong>de</strong> <strong>de</strong>cisiónGetPrivateProfileString("Reg<strong>la</strong>s", "Extension", "???", Buffer, sizeof Buffer,ArchivoIni.c_str());if (Buffer!="???")ExtensionFileReg<strong>la</strong>s=Trim(Buffer);Código Fuente Magdalena Servente 335


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteGetPrivateProfileString("Reg<strong>la</strong>s", "Formato", "???", Buffer, sizeof Buffer,ArchivoIni.c_str());if (Buffer!="???")iFormatoReg<strong>la</strong>s=StrToInt(Trim(Buffer));//Cargamos los datos asociados con el sistema <strong>de</strong> resolución y sus opcionesGetPrivateProfileString("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", "???", Buffer, sizeof Buffer,ArchivoIni.c_str());if (Buffer!="???")iPoda=StrToInt(Trim(Buffer));//Cargamos los datos asociados con el C4.5GetPrivateProfileString("C45", "Conjuntos", "???", Buffer, sizeof Buffer,ArchivoIni.c_str());if (Buffer!="???")iConjuntos=StrToInt(Trim(Buffer));GetPrivateProfileString("C45", "MinObjs", "???", Buffer, sizeof Buffer,ArchivoIni.c_str());if (Buffer!="???")iMinObjs=StrToInt(Trim(Buffer));GetPrivateProfileString("C45", "CF", "???", Buffer, sizeof Buffer,ArchivoIni.c_str());if (Buffer!="???")iCF=StrToInt(Trim(Buffer));return(0);}catch(...) {return(-1);}}//---------------------------------------------------------------------------int TParametros::GrabarParams()//Guardar los parámetros en el .ini/*Devuelve 0 si no hubo problemas,-1 en caso contrario*/{AnsiString lista;int in<strong>de</strong>x;try {//Actualizamos el archivo <strong>de</strong> inicioWritePrivateProfileString("C<strong>la</strong>sificadores","ColC<strong>la</strong>sif",ColC<strong>la</strong>sificador.c_str(), ArchivoIni.c_str());WritePrivateProfileString("BaseDe<strong>Datos</strong>", "Alias", NombreBD.c_str(),ArchivoIni.c_str());WritePrivateProfileString("BaseDe<strong>Datos</strong>", "Tab<strong>la</strong>", Tab<strong>la</strong>BD.c_str(),ArchivoIni.c_str());WritePrivateProfileString("Reg<strong>la</strong>s", "Extension", ExtensionFileReg<strong>la</strong>s.c_str(),ArchivoIni.c_str());//C<strong>la</strong>sificadoreslista= "";in<strong>de</strong>x=0;while (in<strong>de</strong>xCount){AppendStr(lista, LC<strong>la</strong>sificadores->Strings[in<strong>de</strong>x]);AppendStr(lista, ", ");in<strong>de</strong>x++;}336 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteWritePrivateProfileString("C<strong>la</strong>sificadores", "lC<strong>la</strong>sif", lista.c_str(),ArchivoIni.c_str());//Formato <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>slista=IntToStr(iFormatoReg<strong>la</strong>s);WritePrivateProfileString("Reg<strong>la</strong>s", "Formato", lista.c_str(),ArchivoIni.c_str());//Sistema <strong>de</strong> resoluciónlista=IntToStr(iSistema);WritePrivateProfileString("Resolucion", "Sistema", lista.c_str(),ArchivoIni.c_str());lista=IntToStr(iCriterio);WritePrivateProfileString("Resolucion", "Criterio", lista.c_str(),ArchivoIni.c_str());lista=IntToStr(iPoda);WritePrivateProfileString("Resolucion", "Poda", lista.c_str(),ArchivoIni.c_str());//C4.5lista=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 <strong>de</strong> tipos para C4.5 *//* ------------------------------- *//* *//*************************************************************************/type<strong>de</strong>f char *Conjunto;type<strong>de</strong>f int ItemNo; /* nro <strong>de</strong> data item */type<strong>de</strong>f float ItemCount; /* cant <strong>de</strong> items (parciales) */type<strong>de</strong>f short C<strong>la</strong>ssNo, /* nro <strong>de</strong> c<strong>la</strong>se, 0..MaxC<strong>la</strong>ss */DiscrValue; /* valor discreto <strong>de</strong>l atributo (0 = ?) */type<strong>de</strong>f short Attribute; /* nro <strong>de</strong> atributo, 0..MaxAtt */type<strong>de</strong>f union _attribute_value{DiscrValue _discr_val;float _cont_val;}AttValue, *Description;#<strong>de</strong>fine CVal(Case,Attribute) Case[Attribute]._cont_val#<strong>de</strong>fine DVal(Case,Attribute) Case[Attribute]._discr_val#<strong>de</strong>fine C<strong>la</strong>ss(Case)Case[MaxAtt+1]._discr_valCódigo Fuente Magdalena Servente 337


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente#<strong>de</strong>fine Unknown -999 /* valor <strong>de</strong>sconocido para un atrib continuo */#<strong>de</strong>fine BrDiscr 1 /* tipos <strong>de</strong> nodo: rama */#<strong>de</strong>fine ThreshContin 2 /* límite <strong>de</strong> corte */#<strong>de</strong>fine BrSubset 3 /* prueba <strong>de</strong> subconjuntos*/type<strong>de</strong>f struct tree_record *Tree;struct tree_record{short No<strong>de</strong>Type; /* 0=hoja 1=rama 2=corte 3=subconj */C<strong>la</strong>ssNo Leaf; /* c<strong>la</strong>se más frecuente <strong>de</strong>l nodo */ItemCount Items, /* nro <strong>de</strong> items en el nodo */*C<strong>la</strong>ssDist, /* distrib <strong>de</strong> c<strong>la</strong>se <strong>de</strong> los items */Errors; /* nro <strong>de</strong> errores en el nodo */Attribute Tested; /* atribute referenciado en <strong>la</strong> prueba */short Forks; /* nro <strong>de</strong> ramas en el nodo */float Cut, /* límite para los atrib continuos */Lower, /* límite inferior <strong>de</strong>l valor límite */Upper; /* límite superior <strong>de</strong>l valor límite */Conjunto *Subset; /* subconj <strong>de</strong> valores discretos */Tree *Branch; /* Branch[x] = (sub)árbol para el resultado x */};type<strong>de</strong>f Tree DECISION_TREE_C45;#<strong>de</strong>fine IGNORAR 1 /* estado especial <strong>de</strong> un atrib: no utilizar */#<strong>de</strong>fine DISCRETE 2 /* estado especial <strong>de</strong> un atrib: incorporar losvalores a medida que se leen los datos */type<strong>de</strong>f short RuleNo; /* nro <strong>de</strong> reg<strong>la</strong> */type<strong>de</strong>f struct TestRec *Test;struct TestRec{short No<strong>de</strong>Type; /* tipo <strong>de</strong> prueba */Attribute Tested; /* atributo testeado */short Forks; /* ramas posibles */float Cut; /* valor límite (si es relevante) */Conjunto *Subset; /* subconjunto (si es relevante) */};type<strong>de</strong>f struct CondRec *Condition;struct CondRec{Test CondTest; /* antece<strong>de</strong>nte <strong>de</strong> <strong>la</strong> prueba */short TestValue; /* resultado <strong>de</strong> <strong>la</strong> prueba */};type<strong>de</strong>f struct ProdRuleRec PR;struct ProdRuleRec{short Size; /* nro <strong>de</strong> condiciones */Condition *Lhs; /* condiciones */C<strong>la</strong>ssNo Rhs; /* c<strong>la</strong>se resultante <strong>de</strong> <strong>la</strong> reg<strong>la</strong> */float Error, /* proporción estimada <strong>de</strong> error */Bits; /* bits para codificar <strong>la</strong> reg<strong>la</strong> */ItemNo Used, /* cant <strong>de</strong> veces en q se uso <strong>la</strong> reg<strong>la</strong> */Incorrect; /* cant <strong>de</strong> veces en q <strong>la</strong> reg<strong>la</strong> fueincorrecta */};type<strong>de</strong>f struct RuleSetRec RuleSet;struct RuleSetRec{PR *SRule; /* reg<strong>la</strong>s */RuleNo SNRules, /* cant <strong>de</strong> reg<strong>la</strong>s */338 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente};*SRuleIn<strong>de</strong>x; /* indice <strong>de</strong> reg<strong>la</strong>s */C<strong>la</strong>ssNo SDefaultC<strong>la</strong>ss; /* c<strong>la</strong>se por <strong>de</strong>fecto */D.5.3. Defns.h/*************************************************************************//* *//* Definiciones utilizadas en el C4.5 *//* ---------------------------------- *//* *//*************************************************************************/#inclu<strong>de</strong> #inclu<strong>de</strong> #<strong>de</strong>fine None -1#<strong>de</strong>fine Epsilon 1E-3long random();#<strong>de</strong>fine Random ((random()&2147483647) / 2147483648.0)#<strong>de</strong>fine Max(a,b) ((a)>(b) ? a : b)#<strong>de</strong>fine Min(a,b) ((a)> 3] |= Bit((b) & 07))#<strong>de</strong>fine ForEach(v,f,l)for(v=f ; v= d)#<strong>de</strong>fine Check(v,l,h)if ( vh ) {printf("\t** valor inválido **\n"); exit(1);}D.5.4. Rulex.h/*************************************************************************//* *//* <strong>Datos</strong> globales para <strong>la</strong> construcción y aplicación <strong>de</strong> <strong>la</strong>s reg<strong>la</strong>s *//* -------------------------------------------------------------- *//* *//*************************************************************************/#<strong>de</strong>fine Before(n1,n2) (n1->Tested < n2->Tested || n1->No<strong>de</strong>Type < n2->No<strong>de</strong>Type ||n1->Tested == n2->Tested && n1->Cut < n2->Cut)#<strong>de</strong>fine IsTarget(case) (C<strong>la</strong>ss(case) == TargetC<strong>la</strong>ss ? 1 : 0)extern PR *Rule; /* reg<strong>la</strong>s <strong>de</strong> producción */extern RuleNo NRules, /* nro <strong>de</strong> relgas <strong>de</strong> producción */*RuleIn<strong>de</strong>x; /* ín<strong>de</strong>ice <strong>de</strong> <strong>la</strong>s relgas <strong>de</strong> producción */extern short RuleSpace; /* espacio reservado para <strong>la</strong>s relgas */extern RuleSet *PRSet; /* conjuntos <strong>de</strong> reg<strong>la</strong>s */extern C<strong>la</strong>ssNo DefaultC<strong>la</strong>ss;extern Boolean SIGTEST,/* c<strong>la</strong>se por <strong>de</strong>fecto asociada con unconj <strong>de</strong> reg<strong>la</strong>s *//* utilizar <strong>la</strong> prueba <strong>de</strong> Fisher en <strong>la</strong>Código Fuente Magdalena Servente 339


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligentepoda <strong>de</strong> reg<strong>la</strong>s */SIMANNEAL; /* usar simu<strong>la</strong>ted annealing */extern float SIGTHRESH, /* nivel <strong>de</strong> sig usado en <strong>la</strong> poda <strong>de</strong> relgas */REDUNDANCY, /* factor que regu<strong>la</strong> <strong>la</strong> codificaciónentre reg<strong>la</strong>s y excepciones */AttTestBits, /* bits promedio necesarios paracodificar un atributo testeado */*BranchBits; /* i<strong>de</strong>m para el valor <strong>de</strong>l atributo */extern float *LogItemNo; /* LogItemNo[i] = log2(i) */extern double *LogFact; /* LogFact[i] = log2(i!) */340 Magdalena Servente Código Fuente


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteREFERENCIAS[Babic et al, 1998] Babic, A., Mathiesen, U., Hedin, K., Bo<strong>de</strong>mar, 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, Linköping University Hospital,Suecia. Faculty of Electrical and Computer Engineering, University ofLjubljana, Eslovenia. Department of Internal Diseases, OskarshamnCounty Hospital, Suecia.[Baldwin et al, 2000]Baldwin, J.F., Lawry, J., Martin, T.P. 2000 Mass AssignmentInduction of Decision Trees on Words. A.I. Group, Departament ofEngineering Mathematics, University of Bristol, Reino Unido,{jim.baldwin, j.<strong>la</strong>wry, trevor.martin}@bristol.ac.uk[Bergadano et al, 1992] Bergadano, F., Matwin, S. Michalski, R. S., Zhang, J. (1992)Learning Two-TieredDescriptions of flexible Concepts: thePOSEIDON System. En Machine Learning, Volumen 8, páginas 5-43,DBLP, www.dblp.uni-tier.<strong>de</strong>, Dinamarca.[Blockeel y De Raedt, 1997][Blum, Langley, 1997][Blurock, 1996][Cabena et al, 2000][Cal<strong>la</strong>han, B., Coombs, 1998][Chen, 1994]Blockeel, H., De Raedt, L., 1997 Top-Down Induction of LogicalDecision Trees. Katholieke Universiteit Leuven, Departament ofComputer Science, Celestijne<strong>la</strong>an, BélgicaBlum, A., Langley, P. 1997 Selection of Relevant Features andExamples in Machine Learning. School of Computer Science,Carnegie Mellon University, Pittisburgh, Pennsylvania, Institute forthe Study of Learning and Expertise, Palo Alto, California, EE.UU.Edward S. Blurock, 1996 The ID3 Algorithm, Research Institute forSymbolic Computation, www.risc.unilinz.ac.at/people/bulrock/ANALYSIS/manual/document,AustriaCabena, P., Choi, H.H., Kim, S., Otsuka, S., Reinschmidt, J.,Saarenvirta, G. 2000. Intelligent Miner for Data Applications Gui<strong>de</strong>,International Technical Support Organization, IBM,http://www.redbooks.ibm.comCal<strong>la</strong>han, B., Coombs, J. 1998 Training Decision Trees with ID3,http://www.css.tayloru.edu/~jcoombs/proj/ml/id3.htmChen, H. 1994. Machine Learning for Information Retrieval: NeuralNetworks, Symbolic Learning, and Genetic Algorithms. JASIS,http://ai.bpa.arizona.edu/papers/mlir93/mlir93.html[Davidsson, 1995] Davidsson, P. 1995. ID3-SD: An Algortithm for LearningCharacteristic Decision Trees by Controlling the Degree ofGeneralization. Departament of Computer Science, Lund University,Suecia[DeJong, Mooney, 1986][Elomaa, 1993][Espasa-Calpe, 1974]DeJong, G.F., Mooney, R.J. 1986. Exp<strong>la</strong>nation-Based Learning. AnAlternative View, en Machine Learning, Volumen 1, páginas 145-176.Kluwer Aca<strong>de</strong>mic PublishingElomaa, T. 1993. In Defense of C4.5: Notes on Learning One-LevelDecision Trees. Departament of Computer Science, University ofHelsinki, Fin<strong>la</strong>ndia1974 Diccionario Enciclopédico Abreviado. Espasa-Calpe S.A.,Madrid. Tomo I, Séptima Edición, España.[Fayad et al, 1996] Fayad, U. M., Piatetsky-Shapiro, G., Smyth, P., Uhturudsamy, R.(eds). 1996 Advances in Knowledge Discovery and Data Mining, SanMateo, AAAI Press, EE.UU.[Fjara, 2000] Fjara, 2000. A Decision Tree Algorithm.www.cs.uml.edu/~fjara/mineset/id3/id3_example/id3_algoritm.html[Frank y Witten, 1999][Gallion et al, 1993]Frank, E. , Witten, I.H. 1999. Making Better Use of GlobalDiscretization, Proceedings 16 th International Conference on MachineLearning, páginas 115-123. Departament of Computer Science,University of Waikato, Nueva Ze<strong>la</strong>ndaGallion, R., St C<strong>la</strong>ir, D., Sabharwal, C., Bond, W.E. 1993. DynamicID3: A Symbolic Learning Algorithm for Many-Valued AttributeReferencias Magdalena Servente 341


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteDomains. Engineering Education Center, University of Missouri-Rol<strong>la</strong>, St. Luis, EE.UU.[García Martínez et al, 1987] García Martínez, R., Frítz, W., y B<strong>la</strong>nqué, J. 1987. Un algoritmo <strong>de</strong>aprendizaje <strong>de</strong> conceptos para sistemas inteligentes. Anales <strong>de</strong>l VCongreso Nacional <strong>de</strong> Informática y Teleinformática. Páginas 91-96.Buenos Aires. Junio. Argentina[García Martínez, 1994] García Martínez, R. 1994. Adquisición <strong>de</strong> Conocimiento. EnAbecasis, S. y Heras, C. Metodología <strong>de</strong> <strong>la</strong> Investigación. Prologadopor el Dr. L. Santaló. Editorial Nueva Librería. Argentina[García Martínez, 1997] García Martínez, R. 1997 Sistemas Autónomos: AprendizajeAutomático. Nueva Librería, Buenos Aires, Argentina[Gestwicki, 1997]Gestwicki, P. 1997 ID3: History, Implementation, and Applications,citeseer.nj.nec.com/398697.html[Grossman et al, 1999]Grossman, R., Kasif, S., Moore, R., Rocke, D., Ullman, J. 1999. DataMining Research: Opportunities and Challenges, A Report of threeNSF Workshops on Mining Large, Massive, and Distributed Data,January 1999, Chicago, EE.UU.[Hall, 1998] Hall, P.W. 1998. Machine Learning – ID3 C<strong>la</strong>ssification.Philipv@apk.net, http://junior.apk.net/~philiv/rschmlid.htm[Holsheimer, Siebes, 1994] Holsheimer, M., Siebes, A.P.J.M. 1994. Data Mining: the search forknowledge in databases. Computer Science/Departament ofAlgorithmics and Architectire, Centrum voor Wiskun<strong>de</strong> enInformatica, CS-R9406, Amsterdam, Ho<strong>la</strong>nda.[Holte, 1993]Holte, R.1993. Very Simple C<strong>la</strong>ssification Rules Perform Well onMost Commonly Used Datasets. Computer Science Departament,University of Ottawa, Canada.[Hunt et al, 1966]Hunt, E.B., Marin, J., Stone, P.J. 1966. Experiments in Induction.New York: Aca<strong>de</strong>mic Press, EE.UU.[Hunt, 1975]Hunt, E.B. 1975. Artificial Intelligence. New York: Aca<strong>de</strong>mic Press,EE.UU.[Joachims et al, 1995]Joachims, T., Freitag, D., Mitchell, T. 1997 Web Watcher: A TourGui<strong>de</strong> for the World Wi<strong>de</strong> Web, School of Computer Science,Carnegie Mellon University, EE.UU.[Joachims et al, 1997]Joachims, T., Mitchell, T., Freitag, D., Armstrong, R. 1995. WebWatcher: Machine Learning and Hypertext, School of ComputerScience, Carnegie Mellon University, EE.UU.[Joshi, 1997] Joshi, K.P. 1997. Analysis of Data Mining Algorithms,http://userpages.umbc.edu/~kjoshi1/data-mine/proj_rpt.htm[Kerns, Mansour, 1996] Kearns, M., Mansour, Y. 1996. On the Boosting Ability of Top-DownDecision Tree Learning Algorithms, AT&T Research, Tel-AvivUniversity, Israel.[Klemettinen et al, 1994] Klemettinen, M., Manni<strong>la</strong>, H., Ronkainen, P., Toivonen, H., Verkamo,A. 1994. Finding Interesting Rules from Large Sets of DiscoveredAssociation Rules, University of Helsinki, Department of ComputerScience, Helsinki, Fin<strong>la</strong>ndia.[Korab, 1997]Korab, H. 1997. Rule Induction: Decision Trees and Rules,http://www.ncsa.uiuc.edu/News/Access/Stories/97Stories/KUFRIN.html[Manni<strong>la</strong> et al, 1994]Manni<strong>la</strong>, H., Toivonen, H., Verkamo, A. 1994. Efficient Algorithmsfor Discovering Association Rules, University of Helsinki, Departmentof Computer Science, Helsinki, Fin<strong>la</strong>ndia.[Michalski et al, 1998]Michalski, R.S., Bratko, I., Kubat M. 1998. Machine Learning andData Mining. Methods and Applications. Wiley & Sons Ltd., EE.UU.[Michalski et al, 1982]Michalski, R. S., Baskin, A. B., Spackman, K. A. 1982. A Logic-Based Approach to Conceptual Database Analysis, Sixth AnnualSymposium on Computer Applications on Medical Care, GeorgeWashington University, Medical Center, Washington, DC, EE.UU.[Michalski, 1983]Michalski, R. S. 1983. A Theory and Methodology of InductiveLearning. En Michalski, R. S., Carbonell, J. G., Mitchell, T. M. (eds.).(1983) Machine Learning: An Artificial Intelligence Approach, Vol. I.342 Magdalena Servente Referencias


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> InteligenteMorgan-Kauffman, EE.UU.[Michalski, 1991][Michalski, Tecuci, 1994][Michie, 1986][Michie, 1998][Mitchell, 1997]Michalski, R. S. 1991. Towards an Unified Theory of Learning: AnOutline of Basic I<strong>de</strong>as, Proceedings of the 3rd World Conference onthe Fundamentals of Artificial Intelligence, Paris, Julio 1-5, 1991Michalski, R. S., Tecuci, G. (eds) 1994. Machine Learning: AMultistrategy Approach, Vol.IV, Morgan Kauffinan, EE.UU.Michie, D. 1986. On Machine Intelligence (2 nd ed), Ellis Horwood,Chichester, Reino UnidoMichie, D. 1988 Machine Learning in the next five years, EWSL-88,3rd European Working Session on Leaming, Pitman, G<strong>la</strong>sgow,Londres, Reino Unido.Mitchell, T. 1997. Machine Learning. MCB/McGraw-Hill, CarnegieMellon 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][Monter, 2001][Quin<strong>la</strong>n y Cameron-Jones, 1995][Quin<strong>la</strong>n, 1986][Quin<strong>la</strong>n, 1987][Quin<strong>la</strong>n, 1988b][Quin<strong>la</strong>n, 1989][Quin<strong>la</strong>n, 1990]Montalvetti, Mario 1995. Sistemas <strong>de</strong> adquisición automática <strong>de</strong>conocimientos, Tesis <strong>de</strong> grado en Ingeniería en Computación.Universidad Católica <strong>de</strong> Santiago <strong>de</strong>l Estero, Argentina.Monter, C. 2001. Equiparación <strong>de</strong> Marcos. Notas <strong>de</strong> Seminario.Escue<strong>la</strong> <strong>de</strong> Posgrado, Instituto Tecnológico <strong>de</strong> Buenos Aires,ArgentinaQuin<strong>la</strong>n, J.R., Cameron-Jones, R.M. 1995. Oversearching andLayered Search in Empirical Learning. Basser Departament ofComputer Science, University of Science, Australia.Quin<strong>la</strong>n, J.R. 1986. Induction of Decision Trees. En MachineLearning, Capítulo 1, p.81-106. Morgan Kaufmann, 1990Quin<strong>la</strong>n, J.R. 1987. Generating Production Rules from Decision trees.Proceeding of the Tenth International Joint Conference on ArtificialIntelligence, páginas. 304-307. San Mateo, CA., Morgan Kaufmann,EE.UU.Quin<strong>la</strong>n, J.R. 1988. Decision trees and multi-valued attributes. EnJ.E. Hayes, D. Michie, and J. Richards (eds.), Machine Intelligence,Volumen II, páginas. 305-318.Oxford University Press, Oxford, ReinoUnidoQuin<strong>la</strong>n, J.R. 1989. Unknown Attribute Values in Induction. BasserDepartament of Computer Science, University of Science, Australia.Quin<strong>la</strong>n, J. R. 1990. Learning Logic Definitions from Re<strong>la</strong>tions. EnMachine Leaming, Vol 5, páginas 239-266. Oxford University Press,Oxford, Reino Unido[Quin<strong>la</strong>n, 1993a] Quin<strong>la</strong>n, J.R. 1993. The Effect of Noise on Concept Learning, En R.S. Michalski, J. G. Carbonell, & T. M. Mitchells (Eds.) MachineLearning, The Artificial Intelligence Approach. Morgan Kaufmann,Vol. I, Capítulo 6, páginas149-167. San Mateo, CA: MorganKaufmann, EE.UU.[Quin<strong>la</strong>n, 1993b][Quin<strong>la</strong>n, 1993c][Quin<strong>la</strong>n, 1993d][Quin<strong>la</strong>n, 1995]Quin<strong>la</strong>n, J.R. 1993. Learning Efficient C<strong>la</strong>ssification Procedures andTheir Application to Chess Games, En R. S. Michalski, J. G.Carbonell, & T. M. Mitchells (Eds.) Machine Learning, The ArtificialIntelligence Approach. Morgan Kaufmann, Vol. II, Capítulo 15,páginas 463-482, EE.UU.Quin<strong>la</strong>n, J.R. 1993. Combining Instance-Based and Mo<strong>de</strong>l-BasedLearning. Basser Departament of Computer Science, University ofScience, Australia.Quin<strong>la</strong>n, J.R. 1993 C4.5: Programs for Machine Learning. MorganKaufmann Publishers, San Mateo, California, EE.UU.Quin<strong>la</strong>n, J.R. 1995 MDL and Categorical Theories. BasserDepartament of Computer Science, University of Science, Australia.Referencias Magdalena Servente 343


<strong>Algoritmos</strong> <strong>TDIDT</strong> <strong>aplicados</strong> a <strong>la</strong> Minería <strong>de</strong> <strong>Datos</strong> Inteligente[Quin<strong>la</strong>n, 1996a]Quin<strong>la</strong>n, J.R. 1996. Improved Use of Continuous Attributes in C4.5.Basser Departament of Computer Science, University of Science,Australia.[Quin<strong>la</strong>n, 1996b]Quin<strong>la</strong>n, J.R.1996. Learning First-Or<strong>de</strong>r Definitions of Functions.Basser Departament of Computer Science, University of Science,Australia[Riddle, 1997] Riddle, P.J. 1997. ID3 Algorithm.www.cs.auck<strong>la</strong>nd.ac.nz/~pat/706_99/ln/no<strong>de</strong>75.html, Nueva Ze<strong>la</strong>nda[Rissanen, 1983]Rissanen, J. 1983. A universal prior for integers and estimation byminimum <strong>de</strong>scription length. En Annals of Statistics 11, Vol 2, p. 416-431[S/A, 19950]S/A. 1995. Building C<strong>la</strong>ssification Mo<strong>de</strong>ls: ID3 and C4.5,yoda.cis.temple.edu:8080/UGAIWWW/lectures/C45, Pensilvania,[S/A, 1998]EE.UU.S/A 1998.Confi<strong>de</strong>nce intervals for small sample sizes. En EngineeringStatistics Handbook, Information Technology Laboratory, NIST,http://www.itl.nist.gov/div898/handbook/prc/section2/prc242.htm,EE.UU.[S/A, 1999] S/A. 1999. What is Data Mining?,www.citeseer.nj.nec.com/69212.html.[Thakore, 1993] Thakore, M., St C<strong>la</strong>ir, D. 1993. Effect of the X 2 test on theConstruction of ID3 <strong>de</strong>cision trees, Sun Microsystems, University ofMO-Rol<strong>la</strong>, Engineering Education Center, St. Louis, EE.UU.[Thrun et al, 1991][Thrun et al, 1998][Witten y Frank, 2000]Thrun, S., Ba<strong>la</strong>, 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 <strong>de</strong> Wel<strong>de</strong>, W., Wenzel, W., Wnek, J,Zhang, J. 1991 The MONK’s Problems. A Performance Comparisonof Different Learning Algorithms, Carnegie Mellon University,Pittisburgh, EE.UU.Thrun, S., Faloustos, C., Mitchell, T., Wasserman, L. 1998 AutomatedLearning and Discovery: State-Of-The-Art and Research Topics in aRapidly Growing Field. CMU-CALD-98-100, Center for AutomatedLearning and Discovery, Carnegie Mellon University, Pittisburgh,EE.UU.Witten, I.H., Frank, E. 2000. Data Mining: Practical MachineLearning Tools and Techniques with Java Implementations. MorganKaufmann, San Diego, EE.UU.344 Magdalena Servente Referencias

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!