Práctica Weka
Práctica Weka
Práctica Weka
Zacatepec
Equipo 7
Inteligencia de Negocios
(Business Intelligence)
Zacatepec, Morelos a 18 de Diciembre de 2017.
Introducción.
Explorer
Una vez que seleccionamos el archivo con el que trabajaremos, se cargaran los datos en
pantalla:
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 (sólo 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.
Una vez cargado el fichero, ya estamos en disposición de aprender un modelo (en este caso
un árbol de decisión). Para ello, seleccionamos en la pestaña Classify.
Para este primer ejemplo vamos a utilizar el algoritmo clásico de aprendizaje de árboles de
decisión C4.5 (J48 es el nombre que se le da en Weka), Para ello pulsamos Choose,
seleccionamos J48 en Trees.
Por último seleccionamos como opción de evaluación (test options) la opción Use training
set y posteriormente start
Si no ha habido problemas, el sistema nos muestra en la caja “Classifier Output”, 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.
PRACTICA 2
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.
Para ello, es necesario como primer paso cargar el archivo drug1n.arff.
Seleccionamos el atributo drug, para ver la distribución por clases y determinar que fármaco
son mas comunes.
Se puede concluir que el fármaco más efectivo es el Y. Podría aplicarse en caso de que falle
aplicar el siguiente (X), y si falla el que sigue, y así sucesivamente, sin embargo, 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 ejecutamos este modelo evaluamos sobre todos los datos de entrenamiento, veremos que
como era de esperar obtenemos un clasificador de precisión 45.5%.
Aunque evaluando con el método J48, se obtendría un precisión del 97%.
Sin embargo, se tiene un caso de error de solo 3.5%, aunque aún es posible reducir el nivel
de error, para ello se analizaran con más detenimiento, los atributos de entrada del problema.
Es posible que se puedan establecer mejores modelos si combinamos algunos atributos.
Podemos analizar pares de atributos utilizando diferentes gráficos.
Para comparar la relación entre atributos en Weka se utiliza el entorno Visualize, donde
podemos realizar gráficas entre pares de atributos y ver si tienen alguna relación con las
clases. De entre todas las combinaciones posibles, destaca la que utiliza los parámetros de
los niveles de sodio y potasio (K y Na)
En este gráfico sí que se ven algunas características muy significativas. Parece haber una
clara separación lineal entre una relación K/Na alta y una relación K/Na baja. Para las
concentraciones K/Na bajas, el fármaco Y es el más efectivo de una manera clara y parece
mostrarse que por encima de un cierto cociente K/Na ese medicamento deja de ser efectivo
y se debe recurrir a los otros cuatro. Podemos utilizar este conocimiento que acabamos de
extraer para mejorar nuestros modelos.
Se añade un filtro en preprocess>choose>filter> Unsupervised>Attribute>Addexpression,
pulsamos sobre la propia ventana del texto, y nos aparecen las opciones posibles. Sólo
tenemos que modificar la opción expression, asignandole el valor “a5/a6” (a5 corresponde a
K y a6 corresponde a NA), y la opción name, donde colocamos el nombre del nuevo atributo
“Na_to_Ka”. Para luego presionar apply.
Se genera de nuevo el árbol decisión J48 y se crea un nuevo 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.
PRACTICA 3
En el árbol de decisión final se puede observar que no se utilizan todos los atributos para
efectuar una clasificación, esto indica que hay atributos que no son significativos para la
resolución del problema. Existen métodos como los árboles de decisión, a los cuales no les
afecta de manera grave la presencia de atributos no significativos, ya que en el propio
mecanismo de aprendizaje realizan una selección de atributos por su relevancia. Sin
embargo, otros métodos no realizan este proceso, por lo que si realizamos un filtrado de
atributos previo al aprendizaje podremos mejorar de manera relevante su precisión, y al
mismo tiempo simplificamos los modelos.
Bien, en este caso probablemente los atributos no relevantes están afectando a la calidad del
método. Veamos como podemos efectuar un filtrado de atributos. Para ello vamos a la
sección Select Attributes. Esta sección esta especializada en este proceso, y contiene una
gran cantidad de técnicas diversas para realizar la selección de atributos. Si recordamos la
parte teórica, sabremos que hay dos familias de técnicas: los wrappers, y los métodos de
filtro. Dadas las características del problema en este caso podemos probar con una técnica
wrapper realizando una búsqueda exhaustiva. Para ello, pulsamos Choose de
AttributeEvaluator y seleccionamos el método WrapperSubsetEval. Para configurarlo
pulsamos en la ventana de texto. Vamos a utilizar el propio Naive Bayes para el wrapper,
por lo que seleccionaremos es método en classifier. Por otra parte en SearchMethod,
indicamos que queremos una búsqueda exhaustiva eligiendo ExhaustiveSearch.
PRACTICA 4
Procedemos a abrir el dataset credit-g.arff
Una vez con el archivo abierto nos dirijimos a la pestaña 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.
Empezamos con la clasificación más simple, asignar siempre la clase mayoritaria, (ZeroR).
Lanzamos la evaluación con validación cruzada de 10 pliegues. Y si todo ha ido bien,
veremos que se obtiene una precisión del 70 %, y un coste de de 1500 unidades.
Probemos ahora con otro método, por ejemplo Naive Bayes. Para ello seleccionamos,
NaiveBayes de Bayes.
En esta ocasión obtenemos una precisión de 75.4% y un coste de 850 unidades. Mejoramos
ambas medidas, sin embargo hemos de tener en cuenta que estos métodos están ignorando
la matriz de costes.
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.