Minería de Datos Análisis de Datos mediante WEKA Julio Escribano Barreno ([email protected]) Inteligencia en redes de Comunicaciones 5º Ingeniería de Telecomunicación Índice 1. Introducción 1 2. Definiciones 1 3. Análisis de los datos 4 3.1. Conjunto de datos nominales (vowel.arff) 4 3.1.1. Resultados con Decision Stump 4 3.1.2. Resultados con C4.5 7 3.1.3. Comparativa entre varios métodos 10 3.2. Conjunto de datos numérico (housing.arff) 11 3.2.1. Resultados con Decision Stump 11 3.2.2. Resultados con M5’ 12 3.2.3. Comparativa entre varios métodos 15 4. Referencias 17 Inteligencia en Redes de Comunicaciones 1. Introducción Un árbol de decisión es importante no porque resume lo que sabemos, sino porque esperamos que clasifique correctamente nuevos casos que podamos tener. Así, cuando construimos modelos de clasificación debemos tener datos de entrenamiento así como datos de test para saber cómo funciona realmente. El algoritmo más básico es el ID3 (que no utilizaremos), y las ideas básicas son: • En el árbol de decisión cada nodo corresponde con un atributo no-categórico y un arco con el valor posible de ese atributo. Una hoja del árbol especifica el valor esperado del atributo para los valores descritos en el camino desde el nodo inicial hasta la hoja. • En el árbol de decisión cada nodo debe estar asociado al atributo no-categórico que da más información acerca de los atributos que aún no hayan sido considerados. • Se utiliza la entropía para medir la información que tiene un nodo. C.45 es una extensión de ID3 que tiene en cuenta valores no disponibles, rangos de valores continuos en los atributos, derivación de reglas, etc. Utilizaremos varios algoritmos a lo largo de la práctica para conocer mejor el funcionamiento de los mismos, estudiando diferentes estrategias de entrenamiento utilizando los parámetros disponibles para cada uno. Finalmente analizaremos los resultados y sacaremos conclusiones acerca de los mismos. 2. Definiciones Si hay n mensajes con la misma probabilidad de ocurrencia, entonces, la probabilidad p de cada uno es 1/n y la información proporcionada por un mensaje es -log2(p) = log2(n) Lo que significa que si hay 16 mensajes posibles, entonces log(16) = 4 y necesitamos 4 bits para identificar cada mensaje. En general, si tenemos una distribución de probabilidades de P = (p1, p2,…, pn) entonces, la información proporcionada por esa distribución, llamada entropía de P, es I(P)= - (p1*log(p1) + p2*log(p2) + … + pn*log(pn)) Por ejemplo, si P es (0.5,0.5), entonces I(P) es 1, si P es (0.67,0.33), entonces I(P) es 0.92, si P es (1,0), entonces I(P)=0. Cuanto más uniforme es la distribución de la probabilidad, mayor es la información. Si un conjunto de T registros se divide en clases inconexas C1, C2,…,Ck, entonces la información necesaria para evaluar la clase de un elemento de T es Info(T) = I(P), donde P es la distribución de probabilidades de la partición (C1, C2,…,Ck): P = (|C1|/T, |C2|/T, …, |Ck|/T) Si primero dividimos T en la base de un valor no categórico X en conjuntos T1, T2,…,Tn, entonces, la información que necesitamos para identificar la clase de un elemento de T es: n T i Info(X, T ) = Info(Ti ) i =1 T y se define la ganancia como Ganancia(X, T ) = Info(T ) Info(X, T ) Esto representa la diferencia entre la información que se necesita para identificar un elemento de T y la información necesitada para identificar un elemento de T después Minería de Datos 1 Inteligencia en Redes de Comunicaciones de obtener el valor del atributo X, esto es, la ganancia en información debida al atributo X. Se puede utilizar esta noción de ganancia para clasificar atributos y para construir árboles de decisión donde se localiza en cada nodo el atributo con mayor ganancia entre los atributos todavía no considerados desde el nodo raíz. Veremos que es lo que se utiliza en el algoritmo ID3. Matriz de confusión También se llama tabla de contingencia. Es de tamaño n*n, siendo n el número de clases. El número de instancias clasificadas correctamente es la suma de los números en la diagonal de la matriz; los demás están clasificados incorrectamente. True Positive (TP) Rate Es la proporción de elementos que están clasificados dentro de la clase x, de entre todos los elementos que realmente son de la clase x. Es la parte de la clase que ha sido capturada. En la matriz de confusión es el elemento diagonal dividido por la suma de todos los elementos de la fila. False Positive (FP) Rate La proporción de ejemplos que han sido clasificados dentro de la clase x, pero pertenecen a una clase diferente. En la matriz de confusión es la suma de la columna de la clase x menos el elemento diagonal menos la suma de las filas del resto de las clases. Precisión Proporción de ejemplos que realmente tienen clase x de entre todos los elementos que se han clasificado dentro de la clase x. En la matriz de confusión es el elemento diagonal dividido por la suma de la columna en la que estamos. Todas estas medidas son útiles para comparar clasificadores, y las utilizaremos nosotros. Algoritmo ID3 El algoritmo ID3 se utiliza para construir un árbol de decisión. El algoritmo es el siguiente: Entradas: R: conjunto de atributos no-categóricos C: El atributo categórico. S: Conjunto de datos de entrenamiento Salidas: Árbol de decisión Begin Si S está vacío, devuelve un único nodo con el valor ‘Fallo’ Si S contiene todos los registros con el mismo valor para el atributo Categórico, devuelve un único nodo con ese valor; Si R está vacío, devuelve un único nodo cuyo valor es el más frecuente de los valores del atributo categórico que haya encontrado en los registros de S; [fíjese que entonces habrá errores, esto es, registros que no estarán bien clasificados]; Se define D como el atributo con la mayor ganancia(D,S) de los atributos de R; Se define {dj| j=1,2,…,m} los valores del atributo D; Se define {Sj| j=1,2,…,m} los subconjuntos de S consistentes respectivamente en registros con valor dj para el atributo D; Devuelve un árbol cuya raíz está etiquetada con D y los arcos Minería de Datos 2 Inteligencia en Redes de Comunicaciones etiquetados d1, d2, …, dm que van respectivamente a los árboles que se crearán como ID3(R-{D},C,S1), ID3(R-{D},C,S2), …, ID3(R{D},C,Sm) end Algoritmo C4.5 C4.5 es una extensión del algoritmo ID3. • Cuando se construye el árbol de decisión, se pueden tratar registros que tienen valores de atributos desconocidos, evaluando la ganancia o la relación de ganancia de un atributo considerando sólo los registros que tienen definidos ese atributo. • Cuando vamos a utilizar el árbol de decisión, se pueden clasificar registros que tienen no definido el valor de algún atributo estimando la probabilidad de los posibles resultados. También se puede trabajar con atributos que tienen valores continuos. Sea un atributo Ci que tiene un rango de valores continuo. Examinamos los valores para este atributo en el conjunto de entrenamiento, que son, en orden creciente, A1, A2,…,Am. Entonces, para cada valor Aj (J=1,2,…m), dividimos los registros en los que tienen un valor de Ci hasta un Aj, y los que tiene valores mayores que Aj. Para cada una de estas divisiones calculamos la ganancia, o la relación de ganancia, y escogemos la partición que maximiza la misma. Decisión Stump Es un árbol de decisión con una única división (con una rama adicional para valores no definidos). Es muy efectivo para problemas con dos clases, y para más clases no es fácil conseguir tasas de error menores que 0.5. Es muy simple, pero puede servir como base para comparar el modelo que queremos estudiar o implementar. El tiempo de cálculo del Decisión Stump es proporcional al número de ejemplos de entrenamiento. Necesita memoria proporcional a Número de clases * número de atributos * número de valores Esto puede ser mucho en el caso de atributos con rango continuo de valores (en el peor caso habrá un valor para cada instancia del atributo, aunque se puede utilizar el argumento maxThresholds para controlarlo. Minería de Datos 3 Inteligencia en Redes de Comunicaciones 3. Análisis de los datos 3.1. Conjunto de datos nominales (vowel.arff) En este caso se trata de poder reconocer las vocales. Hay varios atributos en el fichero original (vowel.arff), que son los siguientes: Column Description ------------------------------0 Train or Test 1 Speaker Number 2 Sex 3 Feature 0 4 Feature 1 5 Feature 2 6 Feature 3 7 Feature 4 8 Feature 5 9 Feature 6 10 Feature 7 11 Feature 8 12 Feature 9 13 Class % % % % % % % % % % % % % % % % Para comprobar la eficiencia del método se han utilizado distintos locutores para entrenamiento y prueba. Así, utilizaremos las instancias con el primer atributo de valor Train para generar el modelo, y las que tengan el valor Test las utilizaremos para comprobar su eficiencia. Además lo compararemos con el método de cross-validación, para ver cómo funciona realmente este método. Para separar los datos de entrenamiento de los datos de prueba, utilizamos dos filtros: • weka.filters.unsupervisied.instance.RemoveRange 529-last: Como las 528 primeras entradas del fichero son de entrenamiento y el resto de prueba, este filtro elimina de la 529 en adelante. Así primero nos quedamos con las de entrenamiento. Luego haremos lo mismo con las de prueba. • weka.filters.unsupervisied.attribute.Remove 1 2: Así eliminamos el primer atributo (train/test), con lo que nuestro resultado será más eficiente, al tener un atributo menos que clasificar. Además, eliminamos también el atributo que indica el locutor, ya que los locutores que se utilizan para el entrenamiento son distintos que los que se utilizan para la prueba. Dejaremos el atributo hombre/mujer, porque suponemos que nos dará más precisión a la hora de clasificar las vocales. Una vez aplicados los dos filtros en cada caso, almacenamos los resultados en los archivos vowel.train.arff y vowel.test.arff. 3.1.1. Resultados con Decision Stump Iremos comentando el archivo de salida que obtenemos: El Decision Stump no tiene propiedades editables. Lo primero que aparece es el algoritmo que se ha utilizado y un resumen del archivo con los datos que vamos a utilizar. Lo hemos incluido antes porque es el mismo para los dos análisis: Scheme: weka.classifiers.trees.DecisionStump Relation: vowel-weka.filters.unsupervised.instance.RemoveWithValues-S0.0-C1-L529last-weka.filters.unsupervised.attribute.Remove-R1weka.filters.unsupervised.attribute.Remove-R1 Instances: 528 Minería de Datos 4 Inteligencia en Redes de Comunicaciones Attributes: 12 Sex Feature Feature Feature Feature Feature Feature Feature Feature Feature Feature Class 0 1 2 3 4 5 6 7 8 9 Aquí aparece el modelo de clasificación. Recordemos que este modelo es un árbol de un único nivel, así que en el nodo raíz sólo coge un atributo. El mejor que ha encontrado es el Feature-1. Test mode: user supplied test set: 462 instances === Classifier model (full training set) === Decision Stump Classifications Feature 1 <= 1.09 : hEd Feature 1 > 1.09 : hYd Feature 1 is missing : hid Class distributions Feature 1 <= 1.09 hid hId hEd hAd hYd had hOd hod hUd hud hed 0.2625 0.2625 0.28125 0.04375 0.0 0.0125 0.01875 0.0 0.025 0.01875 0.075 Feature 1 > 1.09 hid hId hEd hAd hYd had hOd hod hUd hud hed 0.016304347826086956 0.016304347826086956 0.008152173913043478 0.11141304347826086 0.13043478260869565 0.125 0.12228260869565218 0.13043478260869565 0.11956521739130435 0.12228260869565218 0.09782608695652174 Feature 1 is missing hid hId hEd hAd hYd had hOd hod hUd hud hed 0.09090909090909091 0.09090909090909091 0.09090909090909091 0.09090909090909091 0.09090909090909091 0.09090909090909091 0.09090909090909091 0.09090909090909091 0.09090909090909091 0.09090909090909091 0.09090909090909091 Time taken to build model: 0.03 seconds A continuación aparece el error que tiene nuestro clasificador, según el conjunto de datos de test que hemos introducido. Como preveíamos, no es muy bueno, ya que sólo clasifica bien un 12% de las instancias. Recordemos que en la parte teórica de esta trabajo dijimos que era difícil encontrar una tasa de error menor que 0.5. Aquí tenemos un error absoluto relativo de un 87%, lo que no dice mucho a favor de este modelo. El estadístico kappa mide la coincidencia de la predicción con la clase real (1.0 significa que ha habido coincidencia absoluta). Como vemos, este estadístico tiene un valor de 0.04. === Evaluation on test 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 Minería de Datos 59 403 0.0405 0.1578 0.2821 95.4596 % 98.1234 % 462 12.7706 % 87.2294 % 5 Inteligencia en Redes de Comunicaciones Aquí vemos la precisión de nuestro modelo de forma más detallada, especificando por clases: === Detailed Accuracy By Class === TP Rate 0 0 0.405 0 1 0 0 0 0 0 0 FP Rate 0 0 0.193 0 0.767 0 0 0 0 0 0 Precision 0 0 0.173 0 0.115 0 0 0 0 0 0 Recall 0 0 0.405 0 1 0 0 0 0 0 0 F-Measure 0 0 0.243 0 0.207 0 0 0 0 0 0 Class hid hId hEd hAd hYd had hOd hod hUd hud hed La matriz de confusión, que nos indica cómo se han clasificado las distintas instancias: === Confusion Matrix === a 0 0 0 0 0 0 0 0 0 0 0 b c 0 37 0 27 0 17 0 3 0 0 0 0 0 4 0 0 0 0 0 6 0 4 d 0 0 0 0 0 0 0 0 0 0 0 e 5 15 25 39 42 42 38 42 42 36 38 f 0 0 0 0 0 0 0 0 0 0 0 g 0 0 0 0 0 0 0 0 0 0 0 h 0 0 0 0 0 0 0 0 0 0 0 i 0 0 0 0 0 0 0 0 0 0 0 j 0 0 0 0 0 0 0 0 0 0 0 k 0 0 0 0 0 0 0 0 0 0 0 | | | | | | | | | | | <-- classified as a = hid b = hId c = hEd d = hAd e = hYd f = had g = hOd h = hod i = hUd j = hud k = hed Si nos fijamos un poco en esta matriz podemos ver que sólo reconocemos las vocales hEd y hYd, puesto que se trata de un árbol de un único nivel. Ahora vamos a ver los resultados para el método de cross-validación que es el que se utiliza cuando no tenemos valores de prueba para nuestro clasificador. No reproducimos todo, sólo los resultados acerca de los datos de test: === 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 91 437 0.0896 0.1547 0.2783 93.62 % 96.8046 % 528 17.2348 % 82.7652 % === Detailed Accuracy By Class === TP Rate 0 0 0.938 0 0.792 0 0 0.167 0 0 0 FP Rate 0 0 0.24 0 0.538 0 0 0.133 0 0 0 Precision 0 0 0.281 0 0.128 0 0 0.111 0 0 0 Recall 0 0 0.938 0 0.792 0 0 0.167 0 0 0 F-Measure 0 0 0.433 0 0.221 0 0 0.133 0 0 0 Class hid hId hEd hAd hYd had hOd hod hUd hud hed === Confusion Matrix === a 0 0 b c 0 42 0 42 d 0 0 e 6 4 f 0 0 Minería de Datos g 0 0 h 0 2 i 0 0 j 0 0 k <-- classified as 0 | a = hid 0 | b = hId 6 Inteligencia en Redes de Comunicaciones 0 0 0 0 0 0 0 0 0 0 45 0 7 0 0 0 2 0 3 0 0 0 4 0 3 0 12 0 0 0 0 0 0 0 0 0 3 32 38 36 35 40 37 36 29 0 0 0 0 0 0 0 0 0 0 0 0 9 0 10 0 10 0 10 0 8 0 7 0 9 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | | | | | | | | | c d e f g h i j k = = = = = = = = = hEd hAd hYd had hOd hod hUd hud hed Aunque aquí sí que reconocemos más vocales, la eficiencia sigue siendo muy baja, con cerca de un 83% de errores en la clasificación. El hecho de que los resultados sean similar pero un poco mejores puede indicar la imperfección que introduce el hecho de utilizar el método de cross-validación en vez de datos reales. 3.1.2. Resultados con C4.5 === Run information === Scheme: weka.classifiers.trees.j48.J48 -C 0.25 -M 2 En este caso es un árbol de decisión. El nodo raíz es el es el atributo Feature-1, que determina la primera decisión y coincide con el nodo raíz del método de Decision Stump. Los números entre paréntesis al final de cada hoja son el número de ejemplos en la hoja. Si una o más hojas no son puras (no todos los elementos son de la misma clase), se da también el número de ejemplos no clasificado. Se utilizan números decimales y no enteros por la forma en que el algoritmo trabaja con los valores no definidos. En el segundo nivel del árbol están Feature-1 (otra vez), Feature-0, y así sucesivamente para los siguientes niveles. Weka también da la posibilidad de visualizar el árbol de decisión de forma gráfica, pero no lo vamos a reproducir aquí porque al tener tantos atributos la página se queda pequeña. Test mode: user supplied test set: 462 instances === Classifier model (full training set) === J48 pruned tree -----------------Feature 1 <= 1.078 | Feature 1 <= 0.624 | | Feature 1 <= -0.137: hid (26.0) | | Feature 1 > -0.137 | | | Feature 0 <= -3.57: hid (15.0) | | | Feature 0 > -3.57 | | | | Feature 5 <= 0.955 | | | | | Feature 4 <= 0.56: hEd (12.0) | | | | | Feature 4 > 0.56: hId (9.0) | | | | Feature 5 > 0.955: hId (31.0/1.0) | Feature 1 > 0.624 | | Feature 8 <= 0.144 | | | Feature 3 <= 0.085 | | | | Feature 0 <= -2.205: hed (6.0) | | | | Feature 0 > -2.205: hAd (4.0) | | | Feature 3 > 0.085 | | | | Feature 3 <= 1.595 | | | | | Feature 6 <= 0.192: hEd (31.0) | | | | | Feature 6 > 0.192 | | | | | | Sex = Male: hEd (3.0/1.0) | | | | | | Sex = Female: hAd (4.0/1.0) | | | | Feature 3 > 1.595: hId (3.0) | | Feature 8 > 0.144 | | | Feature 0 <= -2.826 | | | | Feature 0 <= -3.389: hud (3.0) | | | | Feature 0 > -3.389 | | | | | Feature 0 <= -3.105: hUd (3.0) Minería de Datos 7 Inteligencia en Redes de Comunicaciones | | | | | Feature 0 > -3.105: hOd (3.0) | | | Feature 0 > -2.826: hed (7.0/1.0) Feature 1 > 1.078 | Feature 0 <= -3.145 | | Feature 7 <= 0.226 | | | Feature 2 <= 0.352 | | | | Feature 0 <= -4.125 | | | | | Feature 1 <= 2.131 | | | | | | Feature 5 <= 0.112: hEd (3.0) | | | | | | Feature 5 > 0.112: hed (3.0) | | | | | Feature 1 > 2.131 | | | | | | Feature 7 <= 0.085 | | | | | | | Feature 0 <= -4.261: hud (18.0) | | | | | | | Feature 0 > -4.261: hed (2.0) | | | | | | Feature 7 > 0.085 | | | | | | | Feature 6 <= 0.516: hUd (7.0) | | | | | | | Feature 6 > 0.516: hud (2.0) | | | | Feature 0 > -4.125 | | | | | Feature 1 <= 2.064: had (6.0/1.0) | | | | | Feature 1 > 2.064 | | | | | | Feature 1 <= 2.488: hYd (4.0) | | | | | | Feature 1 > 2.488: hOd (2.0) | | | Feature 2 > 0.352 | | | | Feature 0 <= -4.836: hid (6.0) | | | | Feature 0 > -4.836: hId (6.0) | | Feature 7 > 0.226 | | | Feature 1 <= 3.066 | | | | Feature 4 <= -1.12 | | | | | Feature 3 <= 1.108 | | | | | | Feature 3 <= 0.593: hUd (4.0/1.0) | | | | | | Feature 3 > 0.593: hOd (7.0) | | | | | Feature 3 > 1.108 | | | | | | Feature 2 <= -0.167: hOd (2.0/1.0) | | | | | | Feature 2 > -0.167: hod (12.0) | | | | Feature 4 > -1.12 | | | | | Feature 1 <= 1.222 | | | | | | Sex = Male: hud (2.0) | | | | | | Sex = Female: hAd (5.0) | | | | | Feature 1 > 1.222 | | | | | | Feature 0 <= -4.384: hud (11.0) | | | | | | Feature 0 > -4.384 | | | | | | | Feature 5 <= 0.304: hOd (8.0/1.0) | | | | | | | Feature 5 > 0.304 | | | | | | | | Feature 2 <= -1.313: hud (7.0/1.0) | | | | | | | | Feature 2 > -1.313 | | | | | | | | | Feature 2 <= 0.441 | | | | | | | | | | Feature 1 <= 2.711: hUd (25.0/1.0) | | | | | | | | | | Feature 1 > 2.711 | | | | | | | | | | | Feature 0 <= -4.036: hUd (4.0) | | | | | | | | | | | Feature 0 > -4.036: hOd (4.0) | | | | | | | | | Feature 2 > 0.441: hud (3.0) | | | Feature 1 > 3.066 | | | | Feature 0 <= -4.65: hud (3.0/1.0) | | | | Feature 0 > -4.65 | | | | | Feature 0 <= -3.689: hod (37.0/2.0) | | | | | Feature 0 > -3.689: hOd (5.0/1.0) | Feature 0 > -3.145 | | Feature 0 <= -2.52 | | | Feature 1 <= 2.027 | | | | Feature 7 <= -0.178 | | | | | Sex = Male: had (3.0) | | | | | Sex = Female | | | | | | Feature 1 <= 1.727: hAd (4.0) | | | | | | Feature 1 > 1.727: had (2.0) | | | | Feature 7 > -0.178 | | | | | Feature 9 <= 0.659 | | | | | | Feature 5 <= 0.028: hYd (3.0/1.0) | | | | | | Feature 5 > 0.028 | | | | | | | Sex = Male | | | | | | | | Feature 1 <= 1.832: hed (18.0) | | | | | | | | Feature 1 > 1.832: hYd (3.0) | | | | | | | Sex = Female | | | | | | | | Feature 6 <= 0.345 | | | | | | | | | Feature 4 <= -0.561: had (3.0) | | | | | | | | | Feature 4 > -0.561: hed (13.0/1.0) | | | | | | | | Feature 6 > 0.345: had (3.0) | | | | | Feature 9 > 0.659: hOd (3.0) Minería de Datos 8 Inteligencia en Redes de Comunicaciones | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Feature 1 > 2.027 | | Feature 0 <= -3.012 | | | Feature 1 <= 2.447: had (3.0) | | | Feature 1 > 2.447: hOd (8.0) | | Feature 0 > -3.012 | | | Feature 7 <= 1.193 | | | | Feature 8 <= -1.004: had (2.0) | | | | Feature 8 > -1.004: hYd (30.0/1.0) | | | Feature 7 > 1.193: hOd (6.0) Feature 0 > -2.52 | Feature 4 <= -1.077: hYd (10.0/1.0) | Feature 4 > -1.077 | | Feature 2 <= -0.469 | | | Feature 7 <= 0.956 | | | | Feature 0 <= -2.415 | | | | | Feature 1 <= 1.43: hAd (2.0) | | | | | Feature 1 > 1.43: had (4.0) | | | | Feature 0 > -2.415: hAd (29.0) | | | Feature 7 > 0.956: had (3.0) | | Feature 2 > -0.469: had (18.0/2.0) Number of Leaves : 63 Size of the tree : 125 Tamaño del árbol = número de nodos del árbol. El árbol de decisión se evalúa muy rápidamente: Time taken to build model: 0.16 seconds Podemos ver que obtenemos resultados algo mejores que con el anterior clasificador, ya que hay un 39% de las instancias clasificadas correctamente y el estadístico kappa es 0.33. Esto era de esperar por todo lo que vimos en la parte de teoría. === Evaluation on test 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 182 280 0.3333 0.1108 0.3232 67.0389 % 112.4318 % 462 39.3939 % 60.6061 % === Detailed Accuracy By Class === TP Rate 0.643 0.405 0.214 0.214 0.69 0.381 0.643 0.643 0.119 0.381 0 FP Rate 0.005 0.055 0.048 0.043 0.136 0.1 0.117 0.043 0.043 0.021 0.057 Precision 0.931 0.425 0.31 0.333 0.337 0.276 0.355 0.6 0.217 0.64 0 Recall 0.643 0.405 0.214 0.214 0.69 0.381 0.643 0.643 0.119 0.381 0 F-Measure 0.761 0.415 0.254 0.261 0.453 0.32 0.458 0.621 0.154 0.478 0 Class hid hId hEd hAd hYd had hOd hod hUd hud hed También podemos ver en la matriz de confusión que hay muchos más elementos en la diagonal que en el anterior caso, lo que indica que se han clasificado correctamente más elementos. === Confusion Matrix === a b c d 27 12 3 0 0 17 13 0 0 5 9 13 0 0 0 9 e f 0 0 3 6 0 6 9 18 Minería de Datos g 0 0 3 4 h 0 0 0 0 i 0 1 0 0 j 0 2 0 0 k 0 0 6 2 | | | | <-- classified as a = hid b = hId c = hEd d = hAd 9 Inteligencia en Redes de Comunicaciones 0 0 0 0 0 2 0 0 0 0 0 1 4 1 0 0 1 0 0 2 1 5 29 2 6 0 0 0 0 18 16 0 0 0 0 0 6 5 27 0 0 1 0 0 0 14 27 1 0 0 5 1 8 15 5 5 0 7 0 3 3 1 16 0 9 4 11 0 15 1 0 8 2 0 2 4 0 | | | | | | | e f g h i j k = = = = = = = hYd had hOd hod hUd hud hed 3.1.3. Comparativa entre varios métodos Por lo tanto, para modelar este problema siempre será mejor utilizar el segundo algoritmo al primero, aunque seguirá sin ser suficiente para modelar nuestro problema. Hemos probado con otros clasificadores (no con todos), y los resultados que obtenemos son los siguientes (entre paréntesis indicamos si hemos modificado algún parámetro que nos mejore el resultado): Método Instancias bien clasificadas trees.DecisionStump 12.7706 % rules.DecisionTable 23.1602 % rules.OneR 28.1385 % rules.part.PART 38.5281 % trees.j48.J48 (unpruned=False) 39.3939 % trees.j48.J48 (unpruned=True) 40.6926 % bayes.NaiveBayes 46.1039 % lazy.IBk (no Normalization=False) 48.4848 % lazy.IBk (no Normalization=True) 54.7619 % Parece que habría que hacer más refinada la búsqueda del método a utilizar o buscar otros parámetros mejores. Quitando el atributo del Sexo, curiosamente obtenemos los mismos valores, pero en algunos casos mejoran el resultado ligeramente: Método trees.DecisionStump rules.DecisionTable rules.OneR rules.part.PART trees.j48.J48 (unpruned=False) trees.j48.J48 (unpruned=True) bayes.NaiveBayes lazy.IBk (no Normalization=False) lazy.IBk (no Normalization=True) Instancias bien clasificadas 12.7706 % 23.1602 % 28.1385 % 41.7749 % 38.5281 % 39.8268 % 46.1039 % 56.2771 % 56.2771 % 3.2. Conjunto de datos numéricos (housing.arff) En esta caso analizaremos datos numéricos, con el archivo housing.arff, que incluye información acerca del valor de la vivienda en barrios de Boston. El nombre de los atributos es el siguiente: Relation: Instances: Attributes: housing 506 14 CRIM ZN INDUS CHAS Minería de Datos 10 Inteligencia en Redes de Comunicaciones NOX RM AGE DIS RAD TAX PTRATIO B LSTAT class 3.2.1. Resultados con Decision Stump Ahora el árbol de decisión es muy simple: Es un árbol de decisión de un nivel en el que el atributo elegido es RM: === Classifier model (full training set) === Decision Stump Classifications RM <= 6.941 : 19.933720930232564 RM > 6.941 : 37.23815789473678 RM is missing : 22.532806324110652 En este caso el error es mayor, ya que tenemos un error del 84%. Time taken to build model: 0.01 seconds === Cross-validation === === Summary === Correlation coefficient Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 0.5804 5.6124 7.5044 84.4331 % 81.6759 % 506 3.2.2. Resultados con M5’ En este caso se ha generado primero un árbol de decisión, ya asociado a cada una de las hojas del mismo hay 19 modelos lineales. Para clasificar un valor, primero utilizamos el árbol de decisión, que nos llevará al modelo lineal correspondiente, de donde sacaremos el valor final. Las expresiones que aparecen en los modelos lineales sirven para sustituir los valores de los atributos correspondientes y así obtener el valor de la predicción deseada. == Classifier model (full training set) === M5 pruned model tree: (using smoothed predictions) LSTAT <= 9.725 : | RM <= 6.941 : | | DIS <= 3.325 : | | | RAD <= 7.5 : LM1 (23/53.169%) | | | RAD > 7.5 : | | | | CRIM <= 4.727 : LM2 (3/31.324%) | | | | CRIM > 4.727 : LM3 (4/0%) | | DIS > 3.325 : | | | RM <= 6.545 : LM4 (72/20.836%) | | | RM > 6.545 : | | | | LSTAT <= 4.915 : | | | | | PTRATIO <= 17.75 : LM5 (11/12.22%) | | | | | PTRATIO > 17.75 : LM6 (4/14.956%) | | | | LSTAT > 4.915 : | | | | | RM <= 6.611 : LM7 (7/12.839%) | | | | | RM > 6.611 : LM8 (18/20.153%) | RM > 6.941 : | | RM <= 7.437 : | | | AGE <= 76.95 : LM9 (29/31.464%) | | | AGE > 76.95 : Minería de Datos 11 Inteligencia en Redes de Comunicaciones | | | | B <= 394.7 : LM10 (8/56.187%) | | | | B > 394.7 : LM11 (3/9.054%) | | RM > 7.437 : LM12 (30/48.724%) LSTAT > 9.725 : | LSTAT <= 15 : LM13 (132/39.048%) | LSTAT > 15 : | | CRIM <= 5.769 : | | | CRIM <= 0.654 : | | | | DIS <= 1.906 : LM14 (10/22.692%) | | | | DIS > 1.906 : LM15 (36/36.717%) | | | CRIM > 0.654 : LM16 (37/31.47%) | | CRIM > 5.769 : | | | LSTAT <= 19.73 : LM17 (29/24.372%) | | | LSTAT > 19.73 : | | | | NOX <= 0.675 : LM18 (16/48.899%) | | | | NOX > 0.675 : LM19 (34/21.354%) LM num: 1 Linear Regression Model class = 7.5335 * CRIM + -0.7461 * INDUS + 5.0016 * RM + -3.494 LM num: 2 Linear Regression Model class = + 27.5333 LM num: 3 Linear Regression Model class = + 50 LM num: 4 Linear Regression Model class = 4.5295 -26.4372 6.0435 -0.0389 -0.4177 -0.0164 5.2821 * * * * * * CRIM + NOX + RM + AGE + DIS + TAX + LM num: 5 Linear Regression Model class = -0.1237 * AGE + 0.2713 * B + -70.2259 LM num: 6 Linear Regression Model class = -28.0303 * CRIM + 30.0354 LM num: 7 Linear Regression Model class = Minería de Datos 12 Inteligencia en Redes de Comunicaciones -68.3616 * RM + 473.6934 LM num: 8 Linear Regression Model class = -0.0986 * AGE + -1.1417 * DIS + -0.4622 * PTRATIO + 46.27 LM num: 9 Linear Regression Model class = 0.1081 * B + -8.5281 LM num: 10 Linear Regression Model class = 2.6335 * CRIM + 33.3089 LM num: 11 Linear Regression Model class = + 24.1667 LM num: 12 Linear Regression Model class = -10.5429 1.1087 5.6467 -1.8862 28.4631 * * * * CRIM + INDUS + RM + PTRATIO + LM num: 13 Linear Regression Model class = -0.124 1.9152 -0.0354 -0.7268 -0.4399 22.8122 * * * * * CRIM + RM + AGE + DIS + PTRATIO + LM num: 14 Linear Regression Model class = 11.7456 * CRIM + 0.0993 * B + -26.7485 LM num: 15 Linear Regression Model class = + 19.5611 Minería de Datos 13 Inteligencia en Redes de Comunicaciones LM num: 16 Linear Regression Model class = 0.1244 * RAD + 14.1304 LM num: 17 Linear Regression Model class = 3.889 * DIS + 0.008 * B + 3.6544 LM num: 18 Linear Regression Model class = -63.4932 * NOX + 54.9979 LM num: 19 Linear Regression Model class = -0.0552 -2.0031 6.4345 -0.2298 16.6312 * * * * CRIM + RM + DIS + LSTAT + Number of Rules : 19 Time taken to build model: 1.34 seconds Acerca de la eficiencia de este modelo con respecto al de Decision Stump hay que decir que este es mucho más eficiente, ya que consigue un error del 37%, frente al 84% del primero. === Cross-validation === === Summary === Correlation coefficient Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 0.9131 2.5053 3.7506 37.6897 % 40.8204 % 506 Si modificamos la opción de Weka que construye un árbol de regresión en vez del árbol de decisión obtenemos una eficiencia menor, ya que además de aumentar el error, el árbol es mayor (26 hojas frente a las 25 anteriores). Sólo reproducimos aquí los datos referentes a la eficiencia, por comodidad: Number of Rules : 26 Time taken to build model: 0.86 seconds === Cross-validation === === Summary === Correlation coefficient Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances Minería de Datos 0.8627 3.2864 4.8185 49.4398 % 52.443 % 506 14 Inteligencia en Redes de Comunicaciones Si ponemos la opción Unpruned=True, obtenemos un modelo con error ligeramente menor, pero con un mayor número de modelos lineales: Number of Rules : 193 Time taken to build model: 0.72 seconds === Cross-validation === === Summary === Correlation coefficient Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 0.9149 2.3831 3.7099 35.8505 % 40.3777 % 506 3.2.3. Comparativa entre varios métodos El resumen de los resultados obtenidos es el siguiente: Método trees.DecissionStump trees.m5.M5P (build regresión tree = False) trees.m5.M5P (build regresión tree = True) trees.m5.M5P (Unpruned=True) Minería de Datos Relative Absolute Error 84.4331 % 37.6897 % 49.4398 % 35.8505 % 15 Inteligencia en Redes de Comunicaciones 4. Referencias • http://www.cis.temple.edu/ingargio • “Data Mining: Practical Machine Learning Tools and Techniques with Java Implementations”, Witten, Frank, 2000. • http://www.cs.washington.edu/dm/vfml/modules.html • http://www.personal.psu.edu/users/a/j/ajb288/Meteo473/Milestone4/MS4definiti ons.html Minería de Datos 16