Victoria
Antes de empezar con el tema es importante explicar a qué nos referimos a la parte
de árboles de decisión.
Los valores que pueden tomar las entradas y las salidas pueden ser valores
discretos o continuos.
Se utilizan más los valores discretos por simplicidad. Cuando se utilizan valores
discretos en las funciones de una aplicación se denomina clasificación y cuando se
utilizan los continuos se denomina regresión. Un árbol de decisión lleva a cabo un
test a medida que este se recorre hacia las hojas para alcanzar así una decisión.
Primero debes tener instalado weka, después con conexión a internet abres weka y
seleccionar “Tools”, este desplegará varias opciones y seleccionamos la que dice
“package manager”, después de darle clic se desplegará una pestaña, en esta
pestaña se seleccionara la opción “All” para que muestre todos los paquetes de
weka, en “Package search” escribirás SVM y dar enter, esto hará que aparezca 4
paquetes, seleccionaremos LibSVM y seleccionando el botón “Install” que está
arriba de “All” se instalara esta extensión, una vez instalado debemos cerrar weka y
volver a abrirlo para que la instalación funcione.
Filtros utilizados para limpiar los Dataset:
Para poder trabajar con los diferentes algoritmos en cada uno de los dataset fue
necesario realizar ciertos cambios para el funcionamiento de este poder ser dado.
Entre ellos se encuentra que algunos dataset se tuvieron que aplicar algunos filtros
y una vez aplicados se guardaba el dataset en formato arff.
Los filtros utilizados para este tipo de transformación, fueron usados desde weka y
estos fueron:
NumericToNominal: Este filtro permite cambiar los atributos de tipo numérico a tipo
nominal, esto es importante debido a que en algunos casos nuestros dataset son de
tipo numérico y algoritmos como el id3 o j48 o incluidos del random forest no
permiten utilizarse de manera eficiente con valores numéricos, por lo tanto, la
transformación de estos datos a nominal es importante para su uso debido a las
características principales de los algoritmos antes mencionados.
StringToNominal: Este filtro permite cambiar los atributos de tipo string a tipo
nominal, importante nuevamente debido a la características en lo que nuestros
dataset deben de estar para utilizar ciertos algoritmos como por ejemplo el id3 o tree
forest.
Uso de los Algoritmos para la experimentación de cada
Dataset:
Para poder correr con los distintos algoritmos en cada uno de los dataset otorgados,
se tuvieron que hacer ciertas modificaciones y colocar algunos filtros para poder
utilizar dicho algoritmo, lo primero es que se convirtió los dataset a un formato .arff
debido a su compatibilidad con weka, primero los archivos .data pasaban a ser .csv
en el caso del dataset de anonymous microsoft data se eliminó una columna de más
para su funcionamiento, respectivamente los archivos .csv pasarían a ser .arff una
vez los coloquemos en weka y estos los guardamos en este formato dada su
compatibilidad.
Árboles de decisiones:
Algoritmo J48:
Para poder utilizar el algoritmo j48 con los dataset otorgados se tuvieron que filtrar
antes de poder usar el algoritmo,usando los diversos filtros dados anteriormente.
Una vez se dio el filtro podemos obtener los resultados de la experimentación del
algoritmo j48 con el dataset “Zoo”.
Para utilizarlo con el dataset de “breast cancer wisconsin” al igual que el anterior
se filtró primeramente con el filtro NumericToNominal, permitiendo así el uso del
algoritmo, con esto hecho cada una de las columnas anteriormente numéricas,
pasaron a ser nominales, y así colocando la clase para usar el algoritmo se obtuvo
los resultados sin ningún tipo de problema.
Por lo que se pasó a utilizar el siguiente filtro, una vez utilizado se corrió
nuevamente el algoritmo el cual funcionó de manera correcta dando un respectivo
tiempo de uso de 1 minuto en el cual colocamos los resultados en la tabla de
resultados de los algoritmos de árboles de decisión.
Para poder utilizar el algoritmo random forest con los dataset otorgados,
primeramente se dio como requisito el utilizar el abrir el programa de
experimentación weka, para darle mas memoria ram debido a que random forest
consume más recursos pues este crea muchos árboles por revisión, luego de esto
se tuvieron que filtrar antes de poder usar el algoritmo,usando los diversos filtros
dados anteriormente.
Una vez se dio el filtro podemos obtener los resultados de la experimentación del
algoritmo random forest con el dataset “Zoo”.
Para utilizarlo con el dataset de “breast cancer wisconsin” al igual que el anterior
se filtró primeramente con el filtro NumericToNominal, permitiendo así el uso del
algoritmo, con esto hecho cada una de las columnas anteriormente numéricas,
pasaron a ser nominales, y así colocando la clase para usar el algoritmo se obtuvo
los resultados sin ningún tipo de problema.
Por lo que se pasó a utilizar el siguiente filtro, una vez utilizado se corrió
nuevamente el algoritmo el cual funcionó de manera incorrecta todo esto debido a
un error de memoria, pues estuvo 10 minutos funcionando para luego marcar dicho
error, lamentablemente weka cuenta por defecto con 256mb de memoria ram
asignada y antes de empezar le dimos un límite de 1.5gb de memoria ram, cosa que
no fue capaz de solucionar el error, debido a que pedia mas y aunque intentamos
bajar la generación de folds de 10 a 2 el error aun estaba presente, por lo que no
pudimos obtener ningún resultado aún intentando colocarle 4gb de memoria ram por
que weka no permite dicha cantidad.
Algoritmo LMT:
El LMT proporciona una descripción muy buena de los datos. Un LMT consiste
básicamente en una estructura de un árbol de decisión con funciones de regresión
logística en las hojas. Como en los árboles de decisión ordinarios, una prueba sobre
uno de los atributos es asociado con cada nodo interno. Para enumerar los atributos
con k valores, el nodo tiene k nodos hijos, y los casos son clasificados en las k
ramas dependiendo del valor del atributo. Para atributos numéricos, el nodo tienen
dos nodos hijos y la prueba consiste en comparar el valor del atributo con un
umbral: un caso puede ser clasificar los datos menores en la rama izquierda
mientras que los valores mayores en la rama derecha. Un LMT consiste en una
estructura de árbol que está compuesta por un juego N de nodos internos o no
terminales y un juego de T hojas o nodos terminales. La S denota el espacio,
atravesando por todos los atributos que están presentes en los datos.
Para cargar el algoritmo lmt en el dataset de “zoo” fue necesario de transformar los
atributos de dataset numéricos a nominales, pues dicho algoritmo permite su
funcionamiento con ese tipo de dato, una vez transformados se eligió la clase y se
corrió dando así los resultados de este.
Los árboles de decisión de un nivel o decisión stump (DS) son árboles que clasifican
casos, basados en valores característicos. Cada nodo en un árbol de decisión de un
nivel representa una característica de un caso para ser clasificado, y cada rama
representa un valor que el nodo puede tomar. Los casos son clasificados
comenzando en el nodo raíz y se cataloga basándose en sus valores
característicos. En el peor de los casos un árbol de decisión de un nivel puede
reproducir el sentido más común, y puede hacerse mejor si la selección
característica es particularmente informativa.
Generalmente, el conjunto propuesto consiste en los siguientes cuatro pasos:
1. Determinar la distancia métrica conveniente.
2. Encontrar el k vecino más cercano usando la distancia
métrica seleccionada.
3. Aplicar la empaquetación de clasificación de los árboles de
decisión de un nivel como entrenamiento de los k casos.
4. La respuesta a la empaquetación de conjunto es la
predicción para los casos de prueba.
Aplicación en weka:
Para aplicar este algoritmos a los datasets Zoo, Breast cancer Wisconsin,
Absenteeism at work y anonymous-msweb fue necesario cambiar todos los tipo de
dato base a tipo nominal, para esto usamos el filtro de NumberToNominal y en el
caso de anonymous-msweb también se tuvo que utilizar StringToNominal para
poder correr el algoritmo.
Algoritmo HoeffDringtree:
El primero con el que fue probado fue con el dataset de Absenteeism at work este
dataset no dio muchos problemas y fue especialmente rápido, dando así unos
resultados de manera rápida que fueron guardados en la tabla de resultados de
árboles de decisión, a este dataset no le fue necesario hacer nada más que el filtro
de NumericToMinal.
Lo mismo ocurrió para los dataset de zoo y breast cancer wisconsin estos no
necesitan de nada más que el simple filtro de numeric to nominal para funcionar, la
cosa cambió cuando fue el dataset de “anonymous-msweb” el cual aunque se
aplicó los filtros correspondientes, este marco un error de memoria con el algoritmo,
y no pudiendo obtener sus resultados.
Tabla de resultados Arboles de decisiones:
anonymous RandomFor -- -- -- --
-msweb est
anonymous LMT -- -- -- --
-msweb
anonymous HoeffDringt -- -- -- --
-msweb ree
Para explicar los resultados de manera breve podemos decir que entre todos los
algoritmos el que más destaca en estas pruebas es el algoritmo j48 el cual contó
con los mejores resultados y sin ningún tipo de fallos a la hora de experimentar, en
el segundo puesto se tendría al algoritmo decision stump cuando vemos que este no
marcó ningún tipo de error con ningún dataset sin embargo dicho algoritmo no tuvo
buenos resultados a la hora de experimentar, por último podemos decir que los
restantes si bien fueron buenos resultados en el caso de random forest y lmt estos
llegan a fallar en dataset muy grandes o con valores faltantes dado en el caso del
dataset de microsoft el cual al contener muchos datos estos no podían ser
interpretados de la mejor forma y pedían muchos requerimientos, hoeffdringtree
pasa a ser como el algoritmo decision stump el cual dio algunos resultados
bastantes buenos pero en otros malos incluso pidiendo muchos requerimientos de
memoria para el dataset de microsoft.
Aplicación en weka:
Para aplicar este algoritmos a los datasets Zoo, Breast cancer Wisconsin,
Absenteeism at work y anonymous-msweb fue necesario cambiar todos los tipo de
dato base a tipo nominal, para esto usamos el filtro de NumberToNominal y en el
caso de anonymous-msweb también se tuvo que utilizar StringToNominal para
poder correr el algoritmo.
Algoritmo KNN
El algoritmo clasifica cada dato nuevo en el grupo que corresponda, según tenga k
vecinos más cerca de un grupo o de otro. Es decir, calcula la distancia del elemento
nuevo a cada uno de los existentes, y ordena dichas distancias de menor a mayor
para ir seleccionando el grupo al que pertenecer. Este grupo será, por tanto, el de
mayor frecuencia con menores distancias.
Para utilizar los datasets Zoo, breast cancer wisconsin y absenteeism at work se
usó el filtro numericToNominal ya que estos datasets contenían columnas de tipo
numérico que impedían el uso de estos en el algoritmo. Una vez convertidos se
inició el proceso y los resultados fueron obtenidos sin errores.
Para utilizar el dataset de anonymous-msweb se aplicaron los filtros
numericalToNominal junto a StringToNominal para convertir las columna con datos
tipo numerical y string a nominal. Después de esto, weka continuaba marcando un
error al momento de utilizar el algoritmo, pues se saltaba alrededor de 20000
valores, por lo que se decidió a utilizar el filtro replaceMissingValue. Esto permitió
utilizar el algoritmo, pero la operación dió un error de memoria.
.
Naive Bayes
En teoría de la probabilidad y minería de datos un clasificador Bayesiano ingenuo es
un clasificador probabilístico fundamentado en el teorema de Bayes y algunas
hipótesis simplificadoras adicionales. Es a causa de estas simplificaciones, que se
suelen resumir en la hipótesis de independencia entre las variables predictoras, que
recibe el apelativo de ingenuo.
Al igual que en el algoritmo anterior, se hizo uso del filtro NumericalToNominal para
convertir las columnas numéricas a tipo nominal en los datasets Zoo, breast cancer
wisconsin y absenteeism at work. Y una vez convertidas las columnas necesarias
el proceso pudo llevarse a cabo con resultados satisfactorios.
anonymous NAIVE -- -- -- --
-msweb BAYES
Para explicar los resultados de esta tabla tenemos que tener en cuenta que el
algoritmo que representa la parte de árboles de decisión, cuenta con los mismos
resultados obtenidos en su respectivas pruebas, en este caso comparado con los
algoritmos restantes se puede decir que hizo un buen papel a la hora de interpretar
los datos y los resultados.
Mientras que los algoritmos knn svm y naive bayes mostraron un manejo los datos
bastante malo, esto debido a que si bien hubo fallas de memoria y o datos
incorrectos, la mayoría de estos tuvieron fallas a la hora de correr algunos dataset
como por ejemplo el naive bayes y el knn el cual saltaba la mayoría de datos dentro
del dataset.
svm pudo correr cada uno de los dataset pero mostró una falla en el dataset de
microsoft mostrando la mayor parte de sus resultados como erróneos.
Si se tiene que ver a simple vista podemos ver que los algoritmos como knn naive
bayes y svm son algoritmos útiles, pero al igual que los árboles decisión estos
muchas veces no son capaces de correr dataset muy elevados si no se cuenta con
los recursos suficientes, al igual que decir que el algoritmo j48 dio mejores
resultados que sus compañeros de árboles y los algoritmos anteriormente
mencionados ya sea en recursos o resultados.
Conclusión:
Como conclusión se puede obtener que la mayor diferencia de los algoritmos con
los cuales se experimentaron entre sí, puede depender de la cantidad o tipo de
información que estos tengan que manejar cada uno será útil dependiendo a qué
situación lo necesites o tengas que utilizarlo, pudiendo dar mejores resultados que
otros en ciertos momentos de la experimentación, sin embargo, se tiene que decir
que j48 fue uno de los mejores algoritmos entre entre los algoritmos de árboles de
decisión superando a la mayoría, y teniendo menor cantidad de fallos a la hora de
experimentar, por lo tanto podemos ver que j48 es un buen rival en contra de los
otros 3 algoritmos como lo es svm, Knn y Naive Bayes incluso siendo capaz de
ganar contra ellos en estas pruebas.
Referencias: