Minería de datos

Anuncio
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
Descargar