Minería de datos Este informe tratará de reflejar los resultados obtenidos y las tareas realizadas por cada miembro del equipo. Nuestro trabajo se engloba dentro del tercer tipo de trabajos posibles. Se trata de una aplicación directa de algoritmos de inteligencia artificial para a partir de un número elevado de datos sacar resultados (data mining) de ellos. El software que emplearemos será Weka (Waikato Enviroment for Knowledge Analysis), una biblioteca de clases de aprendizaje en Java, muy sencilla de utilizar, y desarrollada en la universidad de Waikato, Nueva Zelanda. Funciona en Windows, Linux y Macintosh. En este trabajo se modelarán dos problemas, uno de tipo nominal y otro de tipo numérico, para así poder comprobar los diferentes campos de aplicación de los algoritmos de que se dispone en el software a utilizar. Con ello veremos también que determinados tipos de datos no permiten la aplicación de unos algoritmos o que se obtienen resultados sin sentido. Cuando tratamos datos numéricos debemos tener cuidado en dos aspectos esenciales: Página 1 de 34 - - los atributos numéricos están discretizados, el rango del atributo está dividido en un conjunto de intervalos. Las instancias se ordenan según el valor de los atributos las fronteras se establecen donde la clase (la mayoría) cambia, de forma que se minimiza el error global. Hay que tener cuidado con el sobreajuste. El proceso de discretización es muy sensible al ruido y una instancia con una clase equivocada puede resultar en un grupo para esa muestra sola. La solución más sencilla es forzar un número mínimo de instancias por clase en cada intervalo. Normalmente se supone que los atributos tienen un distribución de probabilidad gaussiana. El método estándar de tratamiento es la división en grupos. El problema es que a diferencia de los datos nominales, cada atributo presenta muchos puntos posibles de división. La solución es evaluar la ganancia de información u otra variable para cada posible punto de división y elegir el mejor de ellos. Sin embargo exige mayor carga computacional. En este trabajo, para el caso nominal, estudiaremos un conjunto de datos sobre animales, y su clasificación zoológica nos ayudará a determinar de qué grupo (mamíferos, reptiles, etc) son otros animales. En el caso numérico, a partir de datos sobre coches seremos capaces de dar una buena aproximación a su silueta. El formato de los datos en Weka es como sigue: en un mismo archivo se especifican los atributos y los datos. Los valores en la tabla de datos están separados por comas y los atributos pueden tomar valores nominales o numéricos. Los valores nominales se separan por comas y se colocan entre llaves. Los atributos numéricos se declaran real. Los datos deben aparecer separados por comas. Los datos faltantes o desconocidos se escriben con interrogación. El archivo debe comenzar con @relation, seguido de algún nombre. A continuación deberán aparecer los atributos: valor(es), los cuales son indicados con @attribute. Los datos se escriben después del delimitador @data. Una de las formas de usar Weka es aplicar un método de aprendizaje (clasificador) a un conjunto de datos y analizar su salida para extraer información sobre los datos. Otra forma es aplicar varios clasificadores y comparar su funcionamiento para elegir uno para predicción. En nuestro caso ésta será la estrategia a seguir. En primer lugar veremos lo bien o mal que clasifica cada algoritmo disponible y a continuación haremos una validación cruzada para ver la calidad del clasificador frente a otros. 1.- Descripción de los posibles algoritmos a utilizar De forma breve describiremos aquí los posibles algoritmos a utilizar según los datos sean de tipo nominal o numérico. Una vez hecho esto, elegiremos dos o tres algoritmos Página 2 de 34 a aplicar en cada caso y haremos una descripción más detallada de la estructura de dichos algoritmos, fiabilidad de los mismos, por qué se han elegido frente a otros, etc. Weka dispone de una gran variedad de algoritmos para clasificar. En función del tipo de datos de entrada podemos utilizar: - Algoritmos para datos nominales o o o o o o - Árboles de decisión de un nivel (decisión stump) Clasificador 1R (OneR) Tabla de decisión ID3 C4.5 PART Algoritmos para datos numéricos o Árboles de decisión de un nivel o Tabla de decisión o Regresión lineal o M5 Aplicaremos los siguientes algoritmos a los datos sobre los que vamos a trabajar: - datos nominales o árboles de decisión de un nivel o clasificador 1R o C4.5 - datos numéricos o árboles de decisión de un nivel o tabla de decisión Se han elegido estos algoritmos por ser quizá los más representativos. Hemos sometido a estudio los datos con todos los algoritmos inicialmente propuestos y, como veremos, algunos consiguen excelentes soluciones mientras que otros (como los árboles de decisión) dan peores aproximaciones a priori. Sin embargo presentan la gran ventaja de que se pueden usar para cualquier tipo de datos, de ahí su utilización aquí. En cuanto a los otros algoritmos, veremos que se basan en principios parecidos. De hecho aquí estudiaremos el ID3 aunque por el tipo de datos disponibles deberemos usar su evolución, el C4.5, en la práctica. Es uno de los algoritmos más utilizados en la práctica, y por ello resulta interesante su estudio aquí. A continuación desarrollaremos cada uno de los posibles algoritmos a utilizar. Eso nos dará más información para decidirnos posteriormente por uno u otro. - Árboles de decisión Se pueden aplicar a casi todo. Los sistemas de aprendizaje basados en árboles de decisión son quizás el método más fácil de utilizar y de entender. Un árbol de decisión es un conjunto de condiciones organizadas en una estructura jerárquica, de tal manera que la decisión final a tomar se puede determinar siguiendo las condiciones que se cumplen desde la raíz del árbol hasta alguna de sus hojas. Los árboles de decisión se Página 3 de 34 utilizan desde hace siglos, y son especialmente apropiados para expresar procedimientos médicos, legales, comerciales, estratégicos, matemáticos, lógicos, etc. Una de las grandes ventajas de los árboles de decisión es que, en su forma más general, las opciones posibles a partir de una determinada condición son excluyentes. Esto permite analizar una situación y, siguiendo el árbol de decisión apropiadamente, llegar a una sola acción o decisión a tomar. Estos algoritmos se llaman algoritmos de partición o algoritmos de “divide y vencerás”. Otra característica importante de los primeros algoritmos de aprendizaje de árboles de decisión es que una vez elegida la partición dicha partición no se podía cambiar, aunque más tarde se pensara que había sido una mala elección. Por tanto, uno de los aspectos más importantes en los sistemas de aprendizaje de árboles de decisión es el denominado criterio de partición, ya que una mala elección de la partición (especialmente en las partes superiores del árbol) generará un peor árbol. El algoritmo básico de los árboles de decisión es: ALGORITMO Partición(N:nodo, E:cjto. de ejemplos) SI todos los ejemplos E son de la misma clase c ENTONCES Asignar la clase c al nodo N. SALIR; // Esta rama es pura, ya no hay que seguir partiendo. N es hoja. SI NO: Particiones := generar posibles particiones. MejorPartición:= seleccionar la mejor partición según el criterio de partición. PARA CADA condición i de la partición elegida. Añadir un nodo hijo i a N y asignar los ejemplos consistentes a cada hijo (Ei). // Realizar el mismo procedimiento global con cada hijo. Partición(i, Ei). FIN PARA FIN SI FIN ALGORITMO Para clasificar un cjto de ejemplos E, se invoca con la llamada Partición(R,E), donde R es un nodo raíz de un árbol por empezar. Simplemente, el algoritmo va construyendo el árbol (desde el árbol que sólo contiene la raíz) añadiendo particiones y los hijos resultantes de cada partición. Lógicamente, en cada partición, los ejemplos se van dividiendo entre los hijos. Finalmente, se llega a la situación en la que todos los ejemplos que caen en los nodos inferiores son de la misma clase y esa rama ya no sigue creciendo. La única condición que hay que exigir es que las particiones al menos separen ejemplos en distintos hijos, con lo que la cardinalidad de los nodos irá disminuyendo a medida que se desciende en el árbol. Como acabamos de comentar, los dos puntos más importantes para que el algoritmo anterior funcione bien son los siguientes: • Particiones a considerar: un conjunto de condiciones exhaustivas y excluyentes. Cuantas más particiones permitamos más expresivos podrán ser los árboles de decisión generados y, probablemente, más precisos. No obstante, cuantas más particiones elijamos, la complejidad del algoritmo será mayor. Por tanto, debemos encontrar un buen compromiso entre expresividad y eficiencia. Debido a esto, la mayoría de algoritmos de aprendizaje de árboles decisión sólo permiten un juego muy limitado de particiones. Por ejemplo, el C4.5 contiene un Página 4 de 34 solo tipo de partición para los atributos nominales y un solo tipo de partición para los atributos numéricos. • Criterio de selección de particiones. Incluso con sólo los dos tipos de particiones sencillas vistas, el número de particiones posibles en cada caso puede dispararse (si existen n atributos y m valores posibles para cada atributo, el número de particiones posibles es de n·m). Los algoritmos clásicos de aprendizaje de decisión son voraces, en el sentido de que una vez elegida la partición se continúa hacia abajo la construcción del árbol y no vuelven a plantearse las particiones ya construidas. Por tanto se debe buscar un criterio que permita realizar una buena elección de la partición que parece más prometedora y que esto se haga sin demasiado esfuerzo computacional. Esto es lo que diferencia fundamentalmente los distintos algoritmos de “partición” existentes hasta la fecha, como CART [Breiman et al. 1984], ID3 [Quinlan 1983][Quinlan 1986], C4.5 [Quinlan 1993], ASSISTANT [Cestnik et al. 1987], etc. En resumen, los árboles de decisión se basan en: - la aproximación de divide y vencerás produce el árbol - un nodo implica testar un atributo concreto - normalmente el atributo se comprara con una constante para su clasificación. También puede compararse el valor de dos atributos, o usar una función de uno o más atributos - las hojas asignan la clasificación, el grupo de clasificación o la distribución de probabilidad a las instancias - las instancias desconocidas van bajando por el árbol y son la base de los algorimos que aplicaremos en este informe. - Árboles de decisión de un nivel (decisión stump) En Weka, las prestaciones de los árboles de decisión de un nivel son las siguientes: - nombre de la clase: weka.classifiers.DecisionStump - puede manejar instancias ponderadas por pesos - puede procesar datos categóricos - no puede ser actualizado de forma incremental (soportar añadir nuevos datos sin reclasificar a los anteriores) - genera árboles de decisión binarios (de un nivel) para conjuntos de datos con datos categóricos o numéricos. Toma un atributo, que considera representativo, y lo utiliza para clasificar las instancias. Procesa los valores vacíos de atributos extendiendo una tercera rama del tronco, es decir, tratando los valores missing como un valor diferente del atributo. Está diseñado para ser usado con los métodos de mejora. - Clasificador 1R (OneR) Fue descrito por primera vez por Holte (1993), evaluando 16 hojas de datos (utilizando validación cruzada, por lo que los resultados eran representativos para el comportamiento de otros datos), con un número mínimo de instancias de 6 (este número se halló por prueba y error). Página 5 de 34 Es un algoritmo sencillo que sin embargo funciona de forma parecida a complejos árboles de decisión. Vamos a ver un sistema muy simple (1R) que es el equivalente a un decision stump. La idea es hacer reglas que prueban un solo par atributo-valor. Se prueban todos los pares atributo-valor y se selecciona el que ocasione el menor número de errores. Algoritmo: Para cada atributo Para cada valor de cada atributo, crea una regla: Cuenta cuántas veces ocurre la clase Encuentra la clase más frecuente Asigna esa clase a la regla Calcula el error de todas las reglas Selecciona las reglas con el error más bajo - - Se rompe arbitrariamente los empates. Los valores ausentes en 1R se tratan como un nuevo valor y con los atributos continuos se hace una división simple. Primero se ordenan los atributos con respecto a la clase (como con árboles de decisión). Se sugieren puntos de partición en cada lugar donde cambia la clase. Si existen dos clases diferentes con el mismo valor, se mueve el punto de partición a un punto intermedio con el siguiente valor hacia arriba o abajo dependiendo de donde está la clase mayoritaria. Un problema más serio es que el algoritmo tendía a favorecer construir reglas para cada una de las particiones, lo cual le da una clasificación perfecta (pero muy poca predicción futura). Lo que se hace es que se exige que cada partición tenga un número mínimo de ejemplos de la clase mayoritaria. Cuando hay clases adyacentes con la misma clase mayoritaria, éstas se juntan. En Weka, las prestaciones del clasificador OneR son las siguientes: - nombre de la clase: weka.classifiers.OneR - no puede manejar instancias ponderadas por pesos - no puede procesar datos categóricos - no puede ser actualizado de forma incremental (soportar añadir nuevos datos sin reclasificar a los anteriores) - es el esquema más sencillo de los planteados aquí. Produce reglas sencillas basadas en un solo atributo. Tiene un solo parámetro: el número mínimo de instancias que deben ser cubiertas por cada regla generada (6 por defecto). - ID3 Induction of Decision Trees Englobado dentro del llamado aprendizaje inductivo y supervisado, ID3 es un algoritmo de aprendizaje que pretende modelar los datos mediante un árbol, llamado árbol de decisión. En este árbol los nodos intermedios son atributos de los ejemplos presentados, las ramas representan valores de dichos atributos y los nodos finales son los valores de la clase, como ya vimos al hablar de los árboles de decisión binarios. Tanto éste como su evolución, el C4.5, pertenecen a la familia de métodos de inducción TDIDT (Top Página 6 de 34 Down Induction Trees). Ambos generan árboles y reglas de decisión a partir de datos preclasificados. Para construir los árboles se usa el método de aprendizaje “divide y vencerás”, como ya hemos dicho. El ID3 construye árboles de decisión a partir de un conjunto de ejemplos. Estos ejemplos o tuplas están constituidos por un conjunto de atributos y un clasificador o clase. Los dominios de los atributos y de las clases deben ser discretos. Para elegir qué atributos y en qué orden aparecen en el árbol se utiliza una función de evaluación: minimización de la entropía. También pueden escribirse en forma de reglas IF – THEN. Su principal aplicación son los problemas de decisión. Su empleo se centra en los llamados problemas de clasificación (diagnóstico de enfermedades dados los síntomas, problemas de malfuncionamiento de equipos, concesión de préstamos, o como en nuestro caso, clasificación de un ser en una especie animal dadas unas características del mismo). La función de salida presenta valores discretos. Los datos de aprendizaje pueden contener errores, los datos de aprendizaje pueden contener valores nulos en algún atributo para algún ejemplo. Mejor si los atributos tienen un dominio de valores reducido. Una vez aprendido el árbol, se emplea para clasificar nuevos casos. Como ventajas se puede decir que tiene buenos resultados en un amplio rango de aplicaciones y la precisión del resultado suele ser alta. Como desventajas hay que decir que los atributos y las clases deben ser discretos y a veces los árboles son demasiado frondosos, lo que dificulta su interpretación. Algoritmo ID3 Función Arbol-Decisión(ejemplos, atributos, default) Regresa un árbol de decisión Entradas: ejemplos: conjunto de ejemplos atributos: conjunto de atributos default: valor de default para el predicado meta if ejemplos = vacío then regresa default else if todos los ejemplos tienen la misma clasificación then regresa la clasificación else if atributos = vacío then regresa VALOR-MAYORITARIO (ejemplos) else Mejor (ESCOGE-ATRIBUTO (atributos, ejemplos) Arbol nuevo árbol de decisión con Mejor como raíz Para cada valor vi de Mejor do ejemplosi {ejemplos con Mejor = vi} subárbol (ARBOL-DECISION (ejemplosi, atributos - mejor, VALOR-MAYORITARIO (ejemplos)) Añade una rama a Árbol con etiqueta vi y subárbol Subárbol End return Árbol Este proceso recursivo tiene 4 posibles resultados: Página 7 de 34 1. Si existen ejemplos positivos y negativos, escoge el mejor atributo para particionarlos. 2. Si todos los atributos restantes son positivos (o negativos), termina y devuelve True (o False) 3. No quedan ejemplos (no ha sido observado un ejemplo con esa combinación de atributos). Devuelve un default en base a la clasificación mayoritaria de su nodo padre 4. No hay más atributos, pero se continua con ejemplos positivos y negativos. Posiblemente por ruido y/o falta de atributos y/o dominio no determinístico. Posible solución: tomar la clasificación mayoritaria. Fue creado por Ross Quinlan en 1983. En Weka el ID3 se considera un algoritmo implementado para fines pedagógicos. Se trata de un árbol de decisión basado en el divide y vencerás. - C4.5 Se trata de una versión posterior del ID3. Los árboles de decisión extienden el ID3 para que pueda trabajar con atributos numéricos. El C4.5 acaba con muchas de las limitaciones del ID3. Permite trabajar con valores continuos para los atributos, separando los posibles resultados en dos ramas en función de un umbral. Los árboles son menos frondosos porque cada hoja no cubre una clase en particular sino una distribución de clases. El C4.5 genera un árbol de decisión a partir de los datos mediante particiones realizadas recursivamente, según la estrategia de profundidad-primero (depth-first). Antes de cada partición de datos, el algoritmo considera todas las pruebas posibles que pueden dividir el conjunto de datos y selecciona la prueba que resulta en la mayor ganancia de información o en la mayor proporción de ganancia de información. Para cada atributo discreto, se considera una prueba con n resultados, siendo n el número de valores posibles que puede tomar el atributo. Para cada atributo continuo se realiza una prueba binaria sobre cada uno de los valores que toma el atributo en los datos. La implementación en Weka de este árbol de decisión de aprendizaje es el algoritmo J4.8. En Weka, las prestaciones del algoritmo C4.5 son las siguientes: - nombre de la clase: weka.classifiers.j48.J48 - puede manejar instancias ponderadas por pesos - puede procesar datos categóricos - no puede ser actualizado de forma incremental (soportar añadir nuevos datos sin reclasificar a los anteriores) - Weka permite utilizar árbol podado o no podado, se puede impedir el aumento de los subárboles, lo que desemboca en algoritmos más eficientes. También se puede fijar el umbral de confianza para el proceso de poda, y el número mínimo de instancias permitido en cada hoja. - Además de los procesos estándar de C4.5, se permite una opción que disminuye el error de poda, realizándose una poda del árbol de decisión que Página 8 de 34 optimiza el rendimiento en un conjunto fijo. Se puede fijar el tamaño de este grupo: el conjunto de datos se divide por igual en el número de grupos fijado, y la última parte se usa como conjunto fijo. También permite la construcción de árboles binarios. ID3 [Quinlan 1983][Quinlan 1986], C4.5 [Quinlan 1993] y derivados (Assistant [Cestnik et al. 1987]): son métodos “divide y vencerás” y están basados en criterios de partición derivados de la ganancia (GainRatio). Tienen poda basada en reglas u otros mecanismos más sofisticados. Contiene métodos de colapsado de ramas y muchas otras mejoras. Una versión más avanzada, la J4.8, es la que se distribuye con la librería WEKA. Existe, además, una versión comercial presumiblemente mejor que las anteriores denominada C5 (See5) y comercializada por el propio Quinlan directamente (RuleQuest) o a través de paquetes de minería de datos (Clementine). Los algoritmos de aprendizaje de árboles de decisión y conjuntos de reglas en su forma más sencilla obtienen un modelo que es completo y consistente con respecto a la evidencia. Es decir, el modelo cubre todos los ejemplos vistos y los cubre todos de manera correcta. Esto puede parecer óptimo a primera vista, pero se vuelve demasiado ingenuo en la realidad. En primer lugar, ajustarse demasiado a la evidencia suele tener como consecuencia que el modelo se comporte mal para nuevos ejemplos, ya que, en la mayoría de los casos, el modelo es solamente una aproximación del concepto objetivo del aprendizaje. Por tanto, intentar aproximar demasiado hace que el modelo sea demasiado específico, poco general y, por tanto, malo con otros datos no vistos. En segundo lugar, esto es especialmente patente cuando la evidencia puede contener ruido (errores en los atributos o incluso en las clases), ya que el modelo intentará ajustarse a los errores y esto perjudicará el comportamiento global del modelo aprendido. Esto es lo que se conoce como sobreajuste (overfitting). La manera más frecuente de limitar este problema es modificar los algoritmos de aprendizaje de tal manera que obtengan modelos más generales. En el contexto de los árboles de decisión y conjuntos de reglas, generalizar significar eliminar condiciones de las ramas del árbol o de algunas reglas. En el caso de los árboles de decisión dicho procedimiento se puede ver gráficamente como un proceso de “poda”. La poda es una de las primeras y más simples modificaciones que se han ideado para mejorar el comportamiento de los árboles de decisión. Con posterioridad se han definido otra serie de operadores y modificaciones, generalmente denominados operadores de “reestructuración”. Por ejemplo, el C4.5 realiza lo que se conoce como “colapsamiento” (collapsing) [Quinlan 1993]. Otros operadores de modificación de la topología del árbol son la “transposición”, la “transposición recursiva” y la “poda virtual” [Utgoff et al. 1997]. - PART Evita el paso de optimización global que se usa en las reglas del C4.5, genera una lista de decisión sin restricciones usando el procedimiento de divide y vencerás. Además construye un árbol de decisión parcial para obtener una regla. Para poder podar una rama (una regla) es necesario que todas sus implicaciones sean conocidas. El PART evita la generalización precipitada, y usa los mismos mecanismos que el C4.5 para Página 9 de 34 construir un árbol. La hoja con máxima cobertura se convierte en una regla y los valores ausentes de los atributos se tratan como en el C4.5, es decir, la instancia se divide en piezas. En cuanto al tiempo máximo para generar una regla, es el mismo que para construir un árbol podado, y esto ocurre cuando los datos tienen ruido. En el mejor de los casos el tiempo necesario es el mismo que para generar una regla sencilla, y esto se da cuando los datos no presentan ruido. En Weka, las prestaciones del algoritmo PART son las siguientes: - nombre de la clase: weka.classifiers.j48.PART - puede manejar instancias ponderadas por pesos - puede procesar datos categóricos - no puede ser actualizado de forma incremental (soportar añadir nuevos datos sin reclasificar a los anteriores) - PART forma regla a partir de árboles de decisión parcialmente podados construidos usando los heurísticos de C4.5. Las opciones disponibles para este algoritmo son un subconjunto por tanto de las disponibles para J4.8. Al igual que podíamos reducir el tamaño del árbol de decisión J4.8 usando poda de error reducido, se puede reducir el número de reglas de PART (con lo que se reduce también el tiempo de ejecución porque la complejidad depende del número de reglas que se generan). Sin embargo el podado de bajo error reduce la precisión del árbol de decisión y reglas resultante porque reduce la cantidad de datos que se usan en el entrenamiento. Con grandes cantidades de datos no es necesario tener esta desventaja en cuenta. - Tabla de decisión Más que un árbol, la tabla de decisión es una matriz de renglones y columnas que indican condiciones y acciones. Las reglas de decisión, incluidas en una tabla de decisión, establecen el procedimiento a seguir cuando existen ciertas condiciones. Este método se emplea desde mediados de la década de los cincuentas, cuando fue desarrollado por General Electric para el análisis de funciones de la empresa como control de inventarios, análisis de ventas, análisis de créditos y control de transporte y rutas. La tabla de decisión está integrada por cuatro secciones: identificación de condiciones, entradas de condiciones, identificación de acciones y entradas de acciones de la siguiente tabla. La identificación de condiciones señala aquellas que son relevantes. Las entradas de condiciones indican qué valor, si es que lo hay, se debe asociar para una determinada condición. La identificación de acciones presenta una lista del conjunto de todos los pasos que se deben seguir cuando se presenta cierta condición. Las entradas de acciones muestran las acciones específicas del conjunto que deben emprenderse cuando ciertas condiciones o combinaciones de éstas son verdaderas. En ocasiones se añaden notas en la parte inferior de la tabla para indicar cuándo utilizar la tabla o para diferenciarla de otras tablas de decisión. Las columnas del lado derecho de la tabla enlazan condiciones y acciones, forman reglas de decisión que establecen las condiciones que deben satisfacerse para emprender un determinado conjunto de acciones. Nótese que se omite el orden de la secuencia (en Página 10 de 34 que las condiciones son examinadas) cosa que no sucede con los árboles de decisión. La regla de decisión incorpora todas las condiciones que deben ser ciertas y no sólo una a la vez. En Weka, las prestaciones de las tablas de decisión son las siguientes: - nombre de la clase: weka.classifiers.DecisionTable - puede manejar instancias ponderadas por pesos - puede procesar datos categóricos - no puede ser actualizado de forma incremental (soportar añadir nuevos datos sin reclasificar a los anteriores) - la tabla se genera seleccionando un subconjunto de atributos representativos. Esto se hace utilizando una búsqueda del primer atributo mejor. Por defecto se prueban al menos 5 grupos de atributos en busca de la mejor solución, aunque es configurable. También se puede variar el número de agrupaciones de atributos que se hacen. Normalmente una tabla de decisión asigna la clase mayoritaria de los datos de entrenamiento a una instancia test si ésta no casa con alguna entrada de la tabla. Sin embargo se permite también que se asigne por defecto a la clase más cercana a la instancia test (usando la opción –I). Esto mejora significativamente el rendimiento. - Regresión lineal En Weka, las prestaciones de la regresión lineal son las siguientes: - nombre de la clase: weka.classifiers. LinearRegression - puede manejar instancias ponderadas por pesos - no puede ser actualizado de forma incremental (soportar añadir nuevos datos sin reclasificar a los anteriores) - es el esquema de aprendizaje para datos numéricos más sencillo, donde los parámetros solo controlan cómo se seleccionan los atributos que deben ser incluidos en la función lineal. Por defecto se usa el heurístico por el modelo M5’, cuyo tiempo de ejecución es lineal con el número de atributos. También puede reducirse el número de atributos a 1 o hacer una búsqueda avariciosa hacia delante. - M5 En Weka, las prestaciones del algoritmo M5’ son las siguientes: - nombre de la clase: weka.classifiers.m5.M5Prime - no puede manejar instancias ponderadas por pesos - no puede ser actualizado de forma incremental (soportar añadir nuevos datos sin reclasificar a los anteriores) - cuando se encuentra con un valor de atributo no determinado, M5’ reemplaza dicho hueco por la media global o la moda del conjunto de datos de entrenamiento antes de que se construyera el árbol. Permite diferentes tipos de salida: árbol modelo, árbol de decisión sin modelos lineales en las hojas y regresión lineal. Presenta un proceso automático de suavizado que puede ser deshabilitado y también se puede controlar la profundidad del podado, así como la cantidad de información a la salida. Página 11 de 34 2.- Modelos de estudio Aquí utilizaremos los datos elegidos y haremos variaciones de los parámetros y utilizaremos diferentes estrategias de entrenamiento. Aunque Weka es una potente herramienta tanto en el desarrollo de algoritmos de clasificación y filtrado como en el preprocesado de los datos para que tengan una estructura adecuada, aquí utilizaremos datos ya formateados, por lo que no es necesario el tratamiento previo de los mismos. Conjunto de datos nominales zoo.arff El primer conjunto de datos a estudiar se trata de un conjunto de datos nominales. En concreto es una base de datos de un zoo imaginario creado por Richard Forsyth en 1990. Distingue 7 clases de animales, 17 atributos (y además el nombre de la especie, único para cada muestra), 15 booleanos y 2 numéricos, y no hay valores perdidos de algún atributo. Los atributos booleanos pueden tomar dos valores, verdadero o falso. % 7. Attribute Information: (name of attribute and type of value domain) % 1. animal name: nombre del animal Unique for each instance % 2. hair pelo Boolean % 3. feathers plumas Boolean % 4. eggs huevos Boolean % 5. milk leche Boolean % 6. airborne volador Boolean % 7. aquatic acuático Boolean % 8. predator predador Boolean % 9. toothed con dientes Boolean % 10. backbone con espina dorsal Boolean % 11. breathes respira Boolean % 12. venomous venenoso Boolean % 13. fins aletas de pez Boolean % 14. legs patas Numeric (set of values: {0,2,4,5,6,8}) % 15. tail cola Boolean % 16. domestic doméstico Boolean % 17. catsize Boolean % 18. type Numeric (integer values in range [1,7]) Hay una amplia gama de animales, (el autor decide incluir a la chica como una especie más) clasificados en mamíferos, aves, reptiles, peces, anfibios, insectos y crustáceos. En concreto tenemos 101 instancias (que se corresponden con 101 tipos de animales). Los datos que tenemos son: Página 12 de 34 Donde cada color corresponde a uno de los tipos existentes (type), en concreto: mamíferos (azul), pájaros (rojo), reptiles (azul celeste), peces (gris), anfibios (rosa), insectos (verde) e invertebrados (amarillo). Clasificación Weka permite la aplicación de diversos algoritmos de clasificación, y también permite aplicar cuatro tipos de tests distintos: - Use training set: se mide la calidad del clasificador para predecir la clase de las instancias en las que ha sido entrenado. Útil cuando tenemos pocas muestras en el conjunto. Supplied test set: se evalúa la calidad del clasificador para predecir la clase de un conjunto de instancias cargadas desde un fichero. No es nuestro caso. Cross-validation: se evalúa la calidad del clasificador mediante validación cruzada, usando el número de grupos que se especifiquen. Percentage split: se evalúa la calidad del clasificador según lo bien que clasifique un porcentaje de los datos que se reserva para test. En todos los casos Weka nos ofrece una pantalla de resultados dividida en bloques. El primero de ellos (Run information) nos muestra el esquema utilizado para tratar los datos (el nombre de la clase empleada y los parámetros usados), el número de instancias (101 para zoo.arff), una lista de los atributos presentes y el modo de test de los cuatro anteriores utilizados. A continuación se hace una descripción del modelo del clasificador (Classifier model), que depende del algoritmo utilizado. En concreto el esquema en cada uno es: Página 13 de 34 - - - árboles de decisión de un nivel o nombre del algoritmo empleado o reglas de clasificación utilizadas: por ejemplo si leche = falso se trata de un ave y en caso contrario o ausencia es mamífero. o Las distribuciones obtenidas en los datos en cada una de las 3 reglas anteriores para cada una de las clases. o El tiempo empleado para hacer el modelo clasificador 1R o clasificación de cada animal en una clase, el número de instancias clasificadas de forma correcta del total de instancias o el tiempo empleado en hacer el modelo C4.5 o Estructura del árbol de clasificación resultante. En cada hoja y rama se especifica el criterio de división y en las hojas finales aparece para la clase que se especifica el número de casos correctamente clasificados y el número de casos mal clasificados. Si todos los datos pertenecen a la clase correcta solo aparece dicho número. Las ramas que aparecen son aquellas que clasifican el mayor número de casos con el menor error posible (menor número de casos erróneos). o Número de hojas y tamaño del árbol (nodos, ya sean intermedios o finales y el raíz). o Tiempo empleado en crear el modelo Se hace una evaluación de los datos (Evaluation on training set cuando estamos en el primer tipo de test y Stratified cross-validation en el resto) y se presentan las estadísticas: porcentaje de instancias clasificadas correctamente (precisión), estadísticas kappa (mide lo que se ajusta la predicción a la clase real, 1.0 significa ajuste total), error medio, error cuadrático medio, error relativo y error cuadrático relativo (más útiles cuando se hace regresión que en clasificación). Estas medidas se obtienen mediante las fórmulas Considerando que los valores para predecir sobre este grupo de instancias son p1, p2, ..., pn y los valores actuales son a1, a2, ..., an. Se presentan luego detalles de exactitud para cada clase (Detailed Accuracy By Class) y finalmente la matriz de confusión (Confusion Matrix). Los parámetros de exactitud para cada clase son los siguientes: Página 14 de 34 - - - la True Positive (TP) rate es la proporción de ejemplos que fueron clasificados como clase x, de entre todos los ejemplos que de verdad tienen clase x, es decir, qué cantidad de la clase ha sido capturada. En la matriz de confusión, es el valor del elemento de la diagonal dividido por la suma de la fila relevante. la False Positive (FP) rate es la proporción de ejemplos que fueron clasificados como clase x, pero en realidad pertenecen a otra clase, de entre todos los ejemplos que no tienen clase x. En la matriz de confusión, es la suma de la columna menos el valor del elemento de la diagonal dividido por la suma de las filas de las otras clases. La Precision es la proporción de ejemplos que de veras tienen clase x entre todos los que fueron clasificados como clase x. En la matriz es el elemento de la diagonal dividido por la suma de la columna relevante. La F-Measure es simplemente 2*Precision*Recall/(Precision+Recall), una medida combinada de precisión y recall. La matriz de confusión, o también tabla de contingencia, está formada por tantas filas y columnas como clases hay. El número de instancias clasificadas correctamente es la suma de la diagonal de la matriz y el resto están clasificadas de forma incorrecta. Como hemos visto, la información que se da aquí y en el apartado anterior es la misma expresada de otra forma. Por tanto nos limitaremos a presentar los resultados de la matriz de confusión, ya que comprobando el número de elementos no nulos fuera de la diagonal principal tenemos una buena aproximación de la calidad del clasificador. Veamos ahora los resultados que se obtienen cuando estudiamos la calidad del clasificador prediciendo la clase de las instancias de entrenamiento (Use training set) para los 3 algoritmos que hemos seleccionado: árboles de decisión de un nivel, clasificador 1R y C4.5. Cabe esperar resultados similares por ser algoritmos basados en árboles de decisión. a. Árboles de decisión de un nivel: === Run information === Scheme: Test mode: weka.classifiers.trees.DecisionStump evaluate on training data Esquema seguido Modo de evaluación === Classifier model (full training set) === Árbol de decisión binario Decision Stump Classifications milk = false : bird milk != false : mammal milk is missing : mammal Distribuciones de las clases Class distributions milk = false Mammal bird reptile fish amphibian insect 0.0 0.33 0.083 0.216 0.06 0.1 milk != false Mammal bird reptile fish amphibian insect 1.0 0.0 0.0 0.0 0.0 0.0 milk is missing Mammal bird reptile fish amphibian insect 0.40594059405940597 0.19801980198019803 0.04950495049504951 0.12871287128712872 0.039603960396039604 0.07920792079207921 0.09900990099009901 invertebrate 0.16 invertebrate 0.0 invertebrate Página 15 de 34 Las 7 clases posibles Y la distribución para esta relación Tiempo para construir el modelo Time taken to build model: 0.11 seconds === Evaluation on training set === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 61 40 60.396 39.604 0.4481 0.1332 0.2581 60.9052 78.3457 101 % % % % === Confusion Matrix === a b 41 0 0 20 0 5 0 13 0 4 0 8 0 10 c 0 0 0 0 0 0 0 d 0 0 0 0 0 0 0 e 0 0 0 0 0 0 0 f 0 0 0 0 0 0 0 g 0 0 0 0 0 0 0 | | | | | | | <-- classified as a = mammal b = bird c = reptile d = fish e = amphibian f = insect g = invertebrate El error de clasificación que se produce es un 39% de instancias mal clasificadas. Podemos ver que solo dos de los elementos no nulos están en la diagonal principal (mamíferos y aves). El resto ha sido mal clasificado. b. OneR === Classifier model (full training set) === animal: aardvark -> mammal antelope -> mammal bass -> fish bear -> mammal boar -> mammal […] vole -> mammal vulture -> bird wallaby -> mammal wasp -> insect wolf -> mammal worm -> invertebrate wren -> bird (101/101 instances correct) Time taken to build model: 0 seconds === Evaluation on training set === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 101 0 1 0 0 0 0 101 100 0 % % === Confusion Matrix === a b 41 0 0 20 0 0 0 0 0 0 c d 0 0 0 0 5 0 0 13 0 0 e 0 0 0 0 4 f 0 0 0 0 0 g 0 0 0 0 0 | | | | | <-- classified as a = mammal b = bird c = reptile d = fish e = amphibian Página 16 de 34 % % 0 0 0 0 0 0 0 0 0 0 8 0 | 0 10 | f = insect g = invertebrate Ahora la clasificación ha sido perfecta. No hay elementos no nulos fuera de la matriz principal. c. C4.5 === Classifier model (full training set) === J48 pruned tree -----------------feathers = false | milk = false | | backbone = false | | | airborne = false | | | | predator = false | | | | | legs <= 2: invertebrate (2.0) | | | | | legs > 2: insect (2.0) | | | | predator = true: invertebrate (8.0) | | | airborne = true: insect (6.0) | | backbone = true | | | fins = false | | | | tail = false: amphibian (3.0) | | | | tail = true: reptile (6.0/1.0) | | | fins = true: fish (13.0) | milk = true: mammal (41.0) feathers = true: bird (20.0) El árbol resultante de aplicar el algoritmo se presenta aquí de forma textual. Number of Leaves : Size of the tree : 9 17 Time taken to build model: 0.11 seconds === Evaluation on training set === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 100 1 0.987 0.0047 0.0486 2.1552 % 14.7377 % 101 99.0099 % 0.9901 % === Confusion Matrix === a b 41 0 0 20 0 0 0 0 0 0 0 0 0 0 c d 0 0 0 0 5 0 0 13 1 0 0 0 0 0 e 0 0 0 0 3 0 0 f g 0 0 0 0 0 0 0 0 0 0 8 0 0 10 | | | | | | | <-- classified as a = mammal b = bird c = reptile d = fish e = amphibian f = insect g = invertebrate 2) Cross- validation con 10 folds Ahora procedemos al estudio de los datos con 10 grupos, comprobando la calidad del clasificador. Cabe señalar que los resultados que se obtienen con el árbol de decisión de un nivel no cambian respecto al caso de usar todos los datos. En cuanto a los otros dos algoritmos, se detallan a continuación los parámetros más relevantes. En el siguiente apartado discutiremos los resultados obtenidos. Página 17 de 34 a. OneR === Stratified cross-validation === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 43 58 0.045 0.1641 0.4051 75 % 122.9514 % 101 42.5743 % 57.4257 % === Confusion Matrix === a 41 20 5 13 2 8 10 b 0 0 0 0 0 0 0 c 0 0 0 0 0 0 0 d 0 0 0 0 0 0 0 e 0 0 0 0 2 0 0 f 0 0 0 0 0 0 0 g 0 0 0 0 0 0 0 | | | | | | | <-- classified as a = mammal b = bird c = reptile d = fish e = amphibian f = insect g = invertebrate b. C4.5 === Run information === Scheme: Test mode: weka.classifiers.trees.j48.J48 -C 0.25 -M 2 10-fold cross-validation === Classifier model (full training set) === J48 pruned tree -----------------feathers = false | milk = false | | backbone = false | | | airborne = false | | | | predator = false | | | | | legs <= 2: invertebrate (2.0) | | | | | legs > 2: insect (2.0) | | | | predator = true: invertebrate (8.0) | | | airborne = true: insect (6.0) | | backbone = true | | | fins = false | | | | tail = false: amphibian (3.0) | | | | tail = true: reptile (6.0/1.0) | | | fins = true: fish (13.0) | milk = true: mammal (41.0) feathers = true: bird (20.0) Number of Leaves : Size of the tree : 9 17 Time taken to build model: 0.06 seconds === Stratified cross-validation === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 93 8 0.8955 0.0225 0.14 10.2694 % 42.4999 % 101 === Confusion Matrix === a b 41 0 0 20 0 0 c 0 0 3 d 0 0 1 e 0 0 0 f 0 0 1 g <-- classified as 0 | a = mammal 0 | b = bird 0 | c = reptile Página 18 de 34 92.0792 % 7.9208 % 0 0 0 0 0 0 0 0 0 13 1 0 0 0 0 0 0 3 0 0 0 0 5 2 0 0 3 8 | | | | d e f g = = = = fish amphibian insect invertebrate 3) Percentage split (66% datos de entrenamiento, resto de test) a. Árbol de decisión binario === Evaluation on test split === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 19 16 0.3939 0.1444 0.2742 64.8066 % 81.3879 % 35 54.2857 % 45.7143 % === Confusion Matrix === a 13 0 0 0 0 0 0 b 0 6 1 5 0 6 4 c 0 0 0 0 0 0 0 d 0 0 0 0 0 0 0 e 0 0 0 0 0 0 0 f 0 0 0 0 0 0 0 g 0 0 0 0 0 0 0 | | | | | | | <-- classified as a = mammal b = bird c = reptile d = fish e = amphibian f = insect g = invertebrate b. OneR === Evaluation on test split === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 13 22 0 0.1796 0.4238 80.6225 % 125.7661 % 35 37.1429 % 62.8571 % === Confusion Matrix === a 13 6 1 5 0 6 4 b 0 0 0 0 0 0 0 c 0 0 0 0 0 0 0 d 0 0 0 0 0 0 0 e 0 0 0 0 0 0 0 f 0 0 0 0 0 0 0 g 0 0 0 0 0 0 0 | | | | | | | <-- classified as a = mammal b = bird c = reptile d = fish e = amphibian f = insect g = invertebrate c. C4.5 === Evaluation on test split === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 33 2 0.926 0.0163 0.1278 7.3293 % 37.9199 % 35 === Confusion Matrix === a 13 0 b 0 6 c 0 0 d 0 0 e 0 0 f 0 0 g <-- classified as 0 | a = mammal 0 | b = bird Página 19 de 34 94.2857 % 5.7143 % 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 2 4 | | | | | c d e f g = = = = = reptile fish amphibian insect invertebrate Conjunto de datos nominales vehicle.arff El segundo conjunto de datos que vamos a estudiar está compuesto por datos numéricos. Básicamente todo lo explicado para los datos nominales del caso anterior seguirá siendo aplicable ahora. Sin embargo, al tratar datos numéricos hay que tener en cuenta que Weka produce un conjunto distinto de medidas de prestaciones. Los datos corresponden a las siluetas de varios modelos de vehículos. Los datos provienen del Instituto Turing, en Escocia. Para clasificar una silueta dentro de uno de cuatro posibles tipos se utilizarán una serie de parámetros extraídos de la silueta. El vehículo se puede observar desde diferentes ángulos. Estos datos ya han sido objeto de estudio y se ha llegado a la conclusión de que la estructura en árbol es un buen clasificador pero depende fuertemente de la orientación de los objetos, y agrupa vistas similares de objetos. Los parámetros fueron extraídos de las siluetas mediante HIPS (Hierarchical Image Processing System), que extrae una combinación de medidas independientes de la escala utilizando tanto las medidas basadas en los momentos clásicos como una varianza escalada y otros parámetros estadísticos sobre los ejes mayor y menor del vehículo, así como medidas heurísticas de oquedades, circularidad, vehículo compacto, etc. Los cuatro modelos tomados como referencia son: un bus de dos plantas, furgoneta Chevrolet, Saab 9000 y Opel Manta 400. Esta elección se dio porque las siluetas del bus, la furgoneta y cualquiera de los coches son claramente diferentes, pero sería más difícil distinguir los dos turismos. Las imágenes se tomaron con una cámara apuntando hacia abajo con un ángulo de elevación fijo (34,2° sobre la horizontal). Los vehículos se situaron sobre un fondo claro y se pintaron de negro mate para minimizar reflejos. Todas las imágenes tenían la misma resolución (128x128), se tomaron con la misma cámara, en escala de 64 tonos de gris. Las imágenes fueron filtradas para producir siluetas binarias de los vehículos, hechas negativo, limpiadas y almacenadas. Se realizaron más fotos rotando los vehículos, almacenándose al final un total de 2 juegos de 60 fotos por vehículo, cubriendo los 360° de rotación posibles. Después se realizaron dos tandas más de 2 juegos de 60 fotos, salvo la van que tuvo 2 juegos de 46 , a dos elevaciones diferentes (37,5° y 30,8°). Los atributos que tendrán los datos serán por tanto: % % % % % % % % % COMPACTNESS (average perim)**2/area CIRCULARITY (average radius)**2/area DISTANCE CIRCULARITY area/(av.distance from border)**2 RADIUS RATIO (max.rad-min.rad)/av.radius PR.AXIS ASPECT RATIO (minor axis)/(major axis) MAX.LENGTH ASPECT RATIO (length perp. max length)/(max length) SCATTER RATIO (inertia about minor axis)/(inertia about major axis) ELONGATEDNESS area/(shrink width)**2 PR.AXIS RECTANGULARITY area/(pr.axis length*pr.axis width) Página 20 de 34 % % % % % % % % % % % % % % % MAX.LENGTH RECTANGULARITY area/(max.length*length perp. to this) SCALED VARIANCE (2nd order moment about minor axis)/area ALONG MAJOR AXIS SCALED VARIANCE (2nd order moment about major axis)/area ALONG MINOR AXIS SCALED RADIUS OF GYRATION (mavar+mivar)/area SKEWNESS ABOUT (3rd order moment about major axis)/sigma_min**3 MAJOR AXIS SKEWNESS ABOUT (3rd order moment about minor axis)/sigma_maj**3 MINOR AXIS KURTOSIS ABOUT (4th order moment about major axis)/sigma_min**4 MINOR AXIS KURTOSIS ABOUT (4th order moment about minor axis)/sigma_maj**4 MAJOR AXIS HOLLOWS RATIO (area of hollows)/(area of bounding polygon) Tendremos 4 clases y un total de 846 instancias, además de 18 atributos. Ahora los datos son: Los colores corresponden con: bus (celeste), van (gris), Saab (rojo), Opel (azul). No hay atributos con valores missing. 1) Use training test o árboles de decisión de un nivel === Run information === Scheme: Test mode: weka.classifiers.trees.DecisionStump evaluate on training data === Classifier model (full training set) === Decision Stump Classifications Página 21 de 34 ELONGATEDNESS <= 41.5 : saab ELONGATEDNESS > 41.5 : van ELONGATEDNESS is missing : bus Class distributions ELONGATEDNESS <= 41.5 opel saab bus van 0.38481675392670156 0.387434554973822 ELONGATEDNESS > 41.5 opel saab bus van 0.1400862068965517 0.14870689655172414 ELONGATEDNESS is missing opel saab bus van 0.25059101654846333 0.2565011820330969 0.22774869109947643 0.0 0.2823275862068966 0.42887931034482757 0.2576832151300236 0.23522458628841608 Time taken to build model: 0.11 seconds === Evaluation on training set === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 347 499 0.2189 0.3372 0.4106 89.964 % 94.8494 % 846 41.0165 % 58.9835 % === Confusion Matrix === a b 0 147 0 148 0 87 0 0 c d <-- classified as 0 65 | a = opel 0 69 | b = saab 0 131 | c = bus 0 199 | d = van o tabla de decisión === Run information === Scheme: Test mode: weka.classifiers.rules.DecisionTable -X 1 -S 5 evaluate on training data === Classifier model (full training set) === Decision Table: Number of training instances: 846 Number of Rules : 122 Non matches covered by Majority class. Best first search for feature set, terminated after 5 non improving subsets. Evaluation (for feature selection): CV (leave one out) Feature set: 1,2,6,12,19 Time taken to build model: 1.76 seconds === Evaluation on training set === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 650 196 0.6913 0.1559 0.2792 41.5886 % 64.4893 % 846 === Confusion Matrix === a b 127 42 41 117 c 23 26 d <-- classified as 20 | a = opel 33 | b = saab Página 22 de 34 76.8322 % 23.1678 % 0 2 4 212 2 | 0 3 194 | c = bus d = van o M5’, Regresión lineal Al tener como último atributo (el de salida) la clase, de tipo nominal, tanto el M5’ como la regresión lineal no permiten procesar los datos. Por ello es necesario elegir alguna variable numérica para que clasifique en función de ella, o transformar convenientemente los datos. 2) Cross validation con 10 folds o árboles de decisión de un nivel === Run information === Scheme: Test mode: weka.classifiers.trees.DecisionStump 10-fold cross-validation === Classifier model (full training set) === Decision Stump Classifications ELONGATEDNESS <= 41.5 : saab ELONGATEDNESS > 41.5 : van ELONGATEDNESS is missing : bus Class distributions ELONGATEDNESS <= 41.5 opel saab bus van 0.38481675392670156 0.387434554973822 ELONGATEDNESS > 41.5 opel saab bus van 0.1400862068965517 0.14870689655172414 ELONGATEDNESS is missing opel saab bus van 0.25059101654846333 0.2565011820330969 0.22774869109947643 0.0 0.2823275862068966 0.42887931034482757 0.2576832151300236 0.23522458628841608 Time taken to build model: 0 seconds === Stratified cross-validation === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 338 508 0.2059 0.3374 0.4109 90.0086 % 94.9032 % 846 39.9527 % 60.0473 % === Confusion Matrix === a 52 61 34 0 b 95 87 53 0 c d <-- classified as 0 65 | a = opel 0 69 | b = saab 0 131 | c = bus 0 199 | d = van o tabla de decisión === Run information === Scheme: Test mode: weka.classifiers.rules.DecisionTable -X 1 -S 5 10-fold cross-validation === Classifier model (full training set) === Decision Table: Página 23 de 34 Number of training instances: 846 Number of Rules : 122 Non matches covered by Majority class. Best first search for feature set, terminated after 5 non improving subsets. Evaluation (for feature selection): CV (leave one out) Feature set: 1,2,6,12,19 Time taken to build model: 1.87 seconds === Stratified cross-validation === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 549 297 0.5319 0.1986 0.3515 52.9841 % 81.1977 % 846 64.8936 % 35.1064 % === Confusion Matrix === a b c d 75 74 40 23 59 103 26 29 6 7 198 7 8 10 8 173 | | | | <-a b c d classified as = opel = saab = bus = van 3.- Análisis de los resultados Tanto de forma gráfica como textual pasaremos a comentar los aspectos más destacados de los estudios realizados y las conclusiones que de ellos podemos derivar, así como las diferencias que se obtienen entre los distintos algoritmos utilizados. Para el primer conjunto de datos (zoo.arff) los resultados obtenidos son - Use training set Instancias clasificadas correctamente (%) Árbol de decisión 60,396 de un nivel OneR 100 C4.5 99,0099 Tabla de decisión 98,0198 PART 99,0099 Tiempo para construir el modelo (s) 0.11 Kappa statistic 0,4481 0 0.11 0.72 0.16 1 0,987 0,9739 0,987 Como puede verse, se han incluido los resultados que se obtienen también con tablas de decisión y PART. Podemos ver que en el primer caso la precisión es peor que en otros y el tiempo de ejecución es el muy superior a los demás. En el caso de PART los resultados son similares a los obtenidos con C4.5 pero algo más lentos. Ésta es una razón para el descarte de estos dos algoritmos. En cuanto a la comparación de los tres sometidos a estudio, podemos ver que el OneR no comete ningún error. Esto es lógico porque el algoritmo funciona probando todos los pares atributo-valor disponibles y clasifica con los de menos error. Al tener ahora como conjunto de entrenamiento todos los datos no hay posibilidad de fallo. Vemos que el C4.5 funciona bastante bien y que el árbol de decisión binario comete muchos errores. Página 24 de 34 El árbol generado por el C4.5 es el siguiente: - Cross – validation con 10 folds Instancias clasificadas correctamente (%) Árbol de decisión 60,396 de un nivel OneR 42,5743 C4.5 92,0792 Tabla de decisión 91,0891 PART 92,0792 Tiempo construir modelo (s) 0.11 0,05 0.06 0.16 0.06 para Kappa el statistic 0,4481 0,045 0,8955 0,8811 0,8955 Como vemos, de nuevo los resultados de PART son los mismos que los del C4.5. Ahora vemos que OneR no funciona bien en la validación cruzada; como cabía esperar, generaliza mal, mientras que el árbol de decisión no varía y C4.5 empeora pero muy poco. El variar el número de grupos no afecta en los resultados de clasificación. En cuanto al error cometido, Weka ofrece una representación gráfica de los errores que comete el clasificador. Las instancias clasificadas correctamente se representan por cruces y las erróneas por cuadrados. Cada color identifica la clase a la que pertenece la instancia. Weka ofrece la posibilidad de ver gráficamente en qué atributo comete más error o menos (por ejemplo cuánto se equivoca el clasificador cuando estudiamos si las instancias tienen o no pelo, o tienen leche, o ponen huevos). Página 25 de 34 - árbol de decisión - OneR Página 26 de 34 Al ver este gráfico se advierte que el OneR solo ha acertado clasificando mamíferos y a un par de anfibios. - C4.5 Vemos que ahora se acierta mucho en la clasificación. - Percentage split (66 % datos entrenamiento) Instancias clasificadas correctamente (%) Árbol de decisión 54,2857 de un nivel OneR 37,1429 C4.5 94,2837 Tiempo construir modelo (s) 0 0 0 para Kappa el statistic 0,3939 0 0,926 Como vemos, al evaluar los algoritmos utilizando un porcentaje de los datos de test, es decir, sin tener a priori información de clasificación sobre esos datos, aplicando directamente el algoritmo, los resultados son algo peores en el caso del árbol binario (54 % frente al 60 % en los casos anteriores) . Para el OneR el porcentaje de acierto también disminuye (de 42% a 37%) y sin embargo los resultados del C4.5 son mejores (94% frente a 92%). Esto nos da a entender que éste es el mejor algoritmo de clasificación de los que hemos estudiado. Página 27 de 34 Pasamos ahora a estudiar los datos referentes a las siluetas de los vehículos (vehicle.arff): - Use training set Instancias clasificadas correctamente (%) Árbol de decisión 41,0165 de un nivel Tabla de decisión 76,8322 Tiempo construir modelo (s) 0.11 1.76 para Kappa el statistic 0,2189 0,6913 Como vemos, la tabla de decisión da mejores resultados que el árbol, pero tarda bastante más. - Cross validation con 10 folds Instancias Tiempo para Kappa clasificadas construir el statistic correctamente (%) modelo (s) Árbol de decisión 39,9527 0 0,2059 de un nivel Tabla de decisión 64,8936 1.87 0,5319 Al tratar ahora con datos numéricos disminuye el porcentaje de instancias clasificadas correctamente con el árbol de decisión y con tabla de decisión respecto al caso anterior. Weka permite de nuevo representar gráficamente el error de clasificación. Además se puede obtener información exacta sobre cada instancia, en concreto el valor de sus parámetros y la estimación hecha por el algoritmo. Por ejemplo en el caso anterior obtenemos: Página 28 de 34 Como podemos ver, la instancia seleccionada es precisamente una de las mal clasificadas, ya que el algoritmo ha considerado que era una furgoneta pero era un bus. Además de visualizar los errores del clasificador, Weka permite también obtener gráficas de la curva marginal (el margen se define como la diferencia entre la probabilidad prevista para la clase real y la mayor probabilidad prevista para las otras clases), la curva umbral, que genera un gráfico ilustrando las diferencias de predicción que se obtienen variando el umbral entre las clases, y la curva de coste. Todas estas curvas también están disponibles para datos nominales, pero no son representativas en general al tener los atributos valores de entre un conjunto dado y no ser reales. Ahora veremos algunas de estas curvas para nuestros datos: Curva marginal, tabla de decisión Podemos ver cómo en los extremos la diferencia entre la probabilidad prevista para la clase y la probabilidad para las otras clases es casi de 1 en valor absoluto, es decir son muy diferentes, pero cuando el número de instancias no es demasiado bajo ni muy alto (menores a 600 instancias aprox.) la evolución de la diferencia es lineal, llegando a hacerse 0 para unas 400 instancias. Página 29 de 34 Curva de umbral - Opel - Saab - Van - Bus Para los dos turismos las curvas de umbral son similares. La precisión decae rápidamente cuando aumentamos el recall, mientras que en la furgoneta la caída es mucho más suave y casi nula en el bus. Curvas de coste Opel Saab Página 30 de 34 Bus Van Podemos ver qué silueta cuesta más para ser clasificada. Como era de esperar, el sistema encuentra muchos más problemas clasificando los dos turismos que distinguiendo entre un bus y una furgoneta. Además podemos ver que para minimizar el coste en el caso de los turismos se requiere un umbral parecido (0.2, 0.3), para la furgoneta el umbral es un poco mayor y para el autobús el umbral se sitúa por encima del 0.5. Parece que el umbral varía linealmente con el tamaño de los vehículos. Para el árbol de decisión los resultados son: Curva marginal: Página 31 de 34 Ahora las diferencias entre probabilidades son mucho menores, y tienden a 0 a medida que se aumenta el número de instancias. Curvas umbral: Las curvas ahora son diferentes al caso de tablas de decisión. Salvo en el caso de la furgoneta, presentan un crecimiento lineal, con más o menos pendiente, hasta alcanzar un punto de máxima precisión, y luego decae de forma exponencial. El máximo se alcanza precisamente en valores altos del umbral. En cuanto a la furgoneta, presenta un crecimiento lineal y un mínimo de precisión para el mínimo de umbral. Curvas de coste: Página 32 de 34 Podemos ver que los costes se agrupan en valores extemos del umbral y que se dan los mayores costes en todos los casos precisamente en dichos extremos. Por otro lado los costes presentan una simetría que no se daba en la tabla de decisión. Los costes son similares para el caso de los turismos, más dispersos para el caso del bus y ligeramente asimétricos en el caso de la furgoneta. Ahora sí se aprecian diferencias al incrementar el número de grupos. Los resultados obtenidos son: Árbol de decisión de un nivel Tabla de decisión Árbol de decisión de un nivel Tabla de decisión Árbol de decisión de un nivel Tabla de decisión N° grupos Instancias clasificadas correctamente (%) Tiempo para construir el modelo (s) Kappa statistic 10 39,9527 0 0,2059 10 64,8936 1.87 0,5319 20 39,1253 0.06 0,1949 20 65,0118 1.92 0,5334 30 38,2979 0 0,1841 30 65,8392 1.82 0,5445 Página 33 de 34 Como puede verse, los resultados obtenidos con la tabla van mejorando paulatinamente mientras que los del árbol de decisión van empeorando. Finalmente, si vemos los resultados que se obtienen destinando un 33 % de los datos a test: Instancias clasificadas correctamente (%) Árbol de decisión 39,5833 de un nivel Tabla de decisión 62,8472 Tiempo construir modelo (s) 0.06 2.09 para Kappa el statistic 0,2127 0,5082 El porcentaje de acierto para árbol de decisión ha disminuido levemente, mientras que para tabla de decisión el resultado es más lento y algo peor. Aún así la tabla de decisión ofrece un mejor resultado global que el árbol de decisión de un nivel. Si lo comparamos con los resultados obtenidos clasificando datos nominales podemos decir que en ese caso el clasificador por árbol de decisión binario era mejor que cuando clasifica datos numéricos. En ambos casos la tabla de decisión daba mejores resultados, pero es más lenta y con grandes volúmenes de datos la diferencia en el tiempo de ejecución se hace importante. REFERENCIAS - Weka explorer user guide for versión 3-3-4 – Richard Kirkby, Universidad de Waikato, 2003 Capítulo 8 de Data Mining: Practical Machine Learning Tools and Techniques with Java Implementations. Witten, Frank. 2000 Morgan Kaufmann Publishers http://www.itba.edu.ar/capis/webcapis/RGMITBA/articulosrgm/R-ITBA-26datamining.pdf http://www.ppgia.pucpr.br/~picolotto/Weka.doc http://satlab.mor.itesm.mx:8080/biditec/tesis/CueMati2002MariaIrasemaCru zPerez.pdf Página 34 de 34