Mineria WEKA
Mineria WEKA
Weka es un conjunto de librerias JAVA para la extracción de conocimientos desde bases de datos.
Es un software ha sido desarrollado bajo licencia GPL lo cual ha impulsado que sea una de las
suites más utilizadas en el área en los últimos años.
Como se puede ver en la parte inferior de la Figura 1, Weka define 4 entornes de trabajo
· Simple CLI: Entorno consola para invocar directamente con java a los paquetes de weka
· Explorer: Entorno visual que ofrece una interfaz gráfica para el uso de los paquetes
1.1 Explorer
Como se puede observar existen 6 sub-entornos de ejecución:
· Preprocess: Incluye las herramientas y filtros para cargar y manipular los datos
· Select Attributes: Permite aplicar diversas técnicas para la reducción del número de atributos
· Visualize: En este apartado podemos estudiar el comportamiento de los datos mediante técnicas
de visualización.
Abrimos el Weka y lanzamos el Explorer. Lo primero que vamos a hacer es cargar los datos en el
área de trabajo. Para ello, pincha en el botón “Open file” del entorno “preprocess”. Seleccionamos
el fichero “weather.arff” y si todo ha ido bien veremos la pantalla de la Figura 3. Weka utiliza un
format específico de datos, el formato arff. Un fichero con este formato, no sólo contiene los datos
desde donde vamos a efectuar el aprendizaje, además incluye meta-información sobre los propios
datos, como por ejemplo el nombre y tipo de cada atributo, así como una descripción textual del
origen de los datos. Podemos convertir ficheros en texto conteniendo un registro por línea y con
los atributos separados con comas (formato csv) a ficheror arff mediante el uso de un filtro
convertidor.
Desde esta ventana podemos conocer bastantes detalles del dataset que acabamos de cargar. Por
ejemplo, el sistema nos indica que tenemos 14 registros con 5 atributos. Si seleccionamos cada
uno de los atributos, conoceremos más información del atributo en cuestión: tipo(nominal o
numérico), valores distintos, registros que no tienen información de ese atributo, el valor máximo
y mínimo (solo en atributos numéricos), y finalmente un histograma con información sobre la
distribución de los ejemplos para ese atributo, reflejando con el uso de colores la distribución de
clases de cada uno de los registros. Por ejemplo, en la Figura 3 podemos observar que el atributo
Outlook tiene tres valores diferentes (Sunny, Overcast y Rainy) siendo la distribución de [5,4,5]. En
el caso de los 5 registros donde el atributo Outlook=sunny, tenemos 3 con clase no y 2 con clase
yes2, cuando Outlook=overcast los 4 registros son yes, y finalmente cuando Outlook=rainy existen
3 con clase yes, y 2 con clase no.
1.2 CLASSIFY
Desde esta ventana podemos conocer bastantes detalles del dataset que
acabamos de cargar. Por ejemplo, el sistema nos indica que tenemos 14 registros
con 5 atributos. Si seleccionamos cada uno de los atributos, conoceremos más
información del atributo en cuestión: tipo(nominal o numérico),
valores distintos, registros que no tienen información de ese atributo, el valor
máximo y mínimo (solo en atributos numéricos), y finalmente un histograma con
información sobre la distribución de los ejemplos para ese atributo, reflejando con
el uso de colores la distribución de clases de cada uno de los registros. Por
ejemplo, en la Figura 3 podemos observar que el atributo Outlook tiene tres
valores diferentes (Sunny, Overcast y Rainy) siendo la distribución de [5,4,5]. En el
caso de los 5 registros donde el atributo Outlook=sunny, tenemos 3 con clase no y
2 con clase yes, cuando Outlook=overcast los 4 registros son yes, y finalmente
cuando Outlook=rainy existen 3 con clase yes, y 2 con clase no.
Pulsando en el botón Choose en Filter, tendremos acceso a multitud de
herramientas para el preprocesamiento de datos. Estas herramientas permiten
(entre otras muchas funcionalidades):
· Realizar un filtrado de atributos
· Cambiar el tipo de los atributos (discretizar o numerizar)
· Realizar muestreos sobre los datos
· Normalizar atributos numéricos
· Unificar valores de un mismo atributo
Como podemos observar weka nos informa en primer lugar de algunos parámetros
del dataset. A continuación nos muestra de manera textual el modelo aprendido
(en este caso el árbol de decisión). Por ultimo nos incluye información sobre la
evaluación del modelo. En este problema, el árbol aprendido tiene una precisión
máxima (100%) por lo que todas las medidas de error son 0. Además
podemos conocer más detalles de la distribución de los ejemplos por clase en la
matriz de confusión). Podemos visualizar el árbol de una manera más atractiva si
pulsamos el botón derecho sobre el texto trees.J48 de la caja Result-list.
Seleccionamos la opción Visualize Tree, y obtendremos el árbol de decision.
3. Un problema de clasificación
Vamos a abordar problemas más complejos a partir de ahora, en particular en la
parte de preparación de datos.
3.1 Enunciado del problema. Selección de Fármaco
En este caso se trata de predecir el tipo de fármaco (drug) que se debe administrar
a un paciente afectado de rinitis alérgica según distintos parámetros/variables. Las
variables que se recogen en los historiales clínicos de cada paciente son:
· Age: Edad
· Sex: Sexo
· BP (Blood Pressure): Tensión sanguínea.
· Cholesterol: nivel de colesterol.
· Na: Nivel de sodio en la sangre.
· K: Nivel de potasio en la sangre.
Hay cinco fármacos posibles: DrugA, DrugB, DrugC, DrugX, DrugY. Se han recogido
los datos del medicamento idóneo para muchos pacientes en cuatro hospitales. Se
pretende, para nuevos pacientes, determinar el mejor medicamento a probar.
3.2 Resolución del problema
En primer lugar vamos a cargar los datos del primer hospital fichero “drug1n.arff”,
ya que al ser el de menor tamaño (200 registros), permite hacer más pruebas
inicialmente.
La primera pregunta que nos podemos hacer es ver qué fármacos son más
communes en general, para ver si todos suelen ser igualmente efectivos en
términos generales. Para ello seleccionamos el atributo drug, y de esta manera
vemos al distribución por clases. Podemos concluir que el fármaco más efectivo es
el Y, que se administra con éxito en casi la mitad de los pacientes. Una regla vulgar
sería aplicar el fármaco Y, en el caso que falle, el fármaco X, y así sucesivamente
siguiendo las frecuencias de uso con éxito.
Weka tiene un método que permite generar este modelo tan simple, es decir
asignar a todos los ejemplos la clase mayoritaria, recibe el nombre de ZeroR4 en la
familia rules. Si vamos a la parte de Classify y ejecutamos este modelo evaluamos
sobre todos los datos de entrenamiento, veremos que como era de esperar
obtenemos un clasificador de precisión 45.5%.
Modelo mucho más simple y corto que el anterior, en el que se ve la importancia
del atributo que hemos creado Na_to_K. Además si analizamos su calidad vemos
que el nuevo modelo un 100% de precisión, con lo que el modelo es mucho más
fiable que antes.
No obstante, los árboles de decisión pueden tener poda y tener porcentajes que
no son del 100% ni siquiera con los mismos datos que se han usado para el
aprendizaje. De hecho si cambiamos el método de evaluación a validación cruzada
con 10 pliegues, podremos observar que la precisión baja ligeramente (99%). Sin
embargo, tal y como vimos en la parte de teoría, este método de evaluación
es mucho más justo. Observad, que el modelo que aparece corresponde al
aprendizaje al modelo aprendido con todos los datos. Weka muestra este modelo
de manera sólo informativa, ya que no lo utiliza para la evaluación.
Esta tabla indica que es 5 veces más costoso si se otorga un crédito a una persona
que no lo devuelve, que la situación contraria, Bien, vamos a ver cómo podemos
evaluar los modelos con respecto a la matriz de coste en Weka.
Para ello vamos a la ventana Classify, y en Test Options, pulsamos More Options.
Hablilitamos la opcion Cost-Sensitive Evaluation. Pulsamos Set para introducir la
matriz. Indicamos el número de clases, 2, e introducimos la matriz de costes. Es
importante que pulsemos enter tras escribir las cifras ya que es bastante
quisquillosa esta ventana. Finalmente cerramos todas las ventanas.
Veamos que pasa con Boosting. Esta técnica es bastante parecida al Bagging,
aunque utiliza una estrategia más ingeniosa ya que cada iteración intenta corregir
los errores cometidos anteriormente dando más peso a los datos que se han
clasificado erróneamente.
Seleccionamos AdaBoostM1 en Meta. En este método las opciones más
importantes son también numIterations donde marcamos el número de
iteraciones máximas (es decir de modelos base), y
Classifier, donde seleccionamos el método base con el cual deseamos crear los
modelos base.
4. Un problema de agrupación
4.1 Enunciado: Agrupación de Empleados
La empresa de software para Internet “Memolum Web” quiere extraer tipologías
de empleados, con el objetivo de hacer una política de personal más
fundamentada y seleccionar a qué grupos incentivar.
Las variables que se recogen de las fichas de los 15 empleados de la empresa son:
· Sueldo: sueldo anual en euros.
· Casado: si está casado o no.
· Coche: si viene en coche a trabajar (o al menos si lo aparca en el párking de la
empresa).
· Hijos: si tiene hijos.
· Alq/Prop: si vive en una casa alquilada o propia.
· Sindic.: si pertenece al sindicato revolucionario de Internet
· Bajas/Año: media del no de bajas por año
· Antigüedad: antigüedad en la empresa
· Sexo: H: hombre, M: mujer.
Los datos de los 15 empleados se encuentran en el fichero “empleados.arff”. Se
intenta extraer
grupos de entre estos quince empleados.
4.2 Resolución del Problema
Vamos a utilizar un algoritmo de clustering para obtener grupos sobre esta
población. En primer lugar
vamos a probar con tres grupos. Para ello acudimos a la ventana Cluster. Vamos a
empezar a trabajar con el algoritmo de Kmedias. Para ello en Clusterer, pulsamos
Choose, y seleccionamos SimpleKmeans. Lo configuramos definiendo como 3 el
NumClusters.