WEKA

 

 

WEKA TOOL


 

Weka es un ave nativa de Nueva Zelanda  que no vuela pero tiene predilección por objetos brillantes. [30]  Newzealand.com,. (2015). Viejas leyendas de nueva Zelanda cuentas que estas aves roban artículos brillantes. La universidad de Waikato de nueva Zelanda inicio el desarrollo de una herramienta con ese nombre debido a que esta contendría algoritmos para el análisis de datos. Actualmente el paquete de WEKA es una colección de algoritmos  de las máquinas de aprendizaje para tareas de la minería de datos. El paquete de Waikato Environment for Knowledge Analysis contiene herramientas para el preproceso de datos, clasificación, regresión, clustering, reglas de asociación y visualización. [31]  Hall, M., Frank, E., Geoffrey, H.,  Pfahringer, B., Reutemann, P., & Witten, I. H. (2009). Este software analiza grandes cantidades de datos y decide cual es la más importante. Su objetivo es hacer predicciones automáticas que ayuden a la toma de decisiones.

Existen otras herramientas para la minería de datos como RapidMiner, IBM Cognos Business Intelligence, Microsoft SharePoint and Pentaho. IBM Cognos Business Intelligence,  proporciona una visualización no muy amigable para el usuario. Microsoft SharePoint crea modelos predictivos del negocio pero la minería de su información no es su objetivo principal. Donde RapidMiner cuenta con una grandiosa visualización de resultados pero los datasets son cargados más lentos que en Weka. Pentaho su interfaz grafica es difícil de comprender al no describir sus opciones como Weka lo hace.

 

Weka VS Otras Herramientas de Maquinas de Aprendizaje

La herramienta Weka implementa técnicas de máquinas de aprendizaje implementadas en java fáciles de aprender bajo una licencia pública general de GNU. WEKA proporciona tres maneras para poder ser usada, mediante su interfaz gráfica, por línea de comando y sus interfaces códigos de aplicación de interfaces en lenguaje java API.  Aunque WEKA no ha sido usada primordialmente para predicciones en solución de problemas de negocios, esta ayuda a la construcción de nuevos algoritmos. Por lo tanto resulta ser el software ms óptimo para el análisis inicial de los datos, clasificaciones, algoritmos de clustering, investigaciones.

En este proyecto se utilizara la herramienta WEKA para la crear un modelo predictivo para clasificación de textos usando sus algoritmos de algoritmos de máquinas de aprendizaje.

 

Instalación

Weka se puede descargar en esta dirección: http://www.cs.waikato.ac.nz/~ml/weka/. En este caso se hablara de la última versión Weka 3.6.12. En esta misma URL se puede encontrar las instrucciones para ser instalado en diferentes plataformas.

En Windows  Weka debe estar situado en el lanzador del programa localizado en una carpeta de la versión de Weka descargada, en este caso weka-3-6. El directorio por defecto de Weka será el mismo directorio en que el archivo este cargado.

Para Linux se tendrá que abrir una terminal y escribir:

java-jar /installation/directory/weka.jar.

Suele ser común encontrar un error de insuficiencia de memoria, que a su vez se soluciona especificando los GB por ejemplo 2GB sera “-Xmx2048m” en los archivos de instalación. Se encontrara más información en weka.wikispaces.com/OutOfMemoryException . se puede ordenar con  el parámetro –Xms y –Xmx que indica la memoria RAM mínima y máxima respectivamente .

En windows se puede editar el archivo RunWeka.ini o RunWeka.bat en el directorio de instalación de Weka se debe cambiar la línea maxheap = 128m por maxheap = 1024m. No se puede asignar más de 1.4G a una JVM. También se puede asignar a la máquina virtual con una con el mandato:

java-Xms<memoria-mínima-asignada>M

-Xmx<memoria-máxima-asignada>M -jar weka.jar

[32]  Garcia, D., (2006).

En linux se utiliza la opción -XmMemorySizem, reemplazando MemorySize por el tamaño requerido en megabytes. Por ejemplo:

java-jar -Xm512m /instalación/directorio/weka.jar.

 

Ejecución 

La primera pantalla de Weka mostrara en un seleccionador se interfaces llamado “Applications” donde se  en esta versión se despliegan las sub-herramientas Explorer, Experimenter, KnowledgeFlow y Simple CLI. Explorer se encarga de realizar operaciones de exploración sobre un conjunto de datos. Experimenter efectúa experimentos para crear contrastes estadísticos de manera automatizada diferentes algoritmos de distintos datos. KnowledgeFlow muestra de forma gráfica el panel de trabajo del funcionamiento de Weka. Simple CLI o simple client que proporciona la interfaz de líneas de comandos para poder introducir mandatos.

La principal interfaz de usuario es “Explorer” compuesta por seis paneles. Preprocess es la primera ventana abierta para esta interfaz. En esta ventana los datos son cargados. Weka acepta cargar el conjunto de datos desde una URL, base de datos, archivos CSV o ARFF. Los archivos ARFF es el primordial formato para usar cualquier tarea de clasificación en WEKA.

Datos de entrada.

Como se describió previamente se consideran tres datos de entrada en minería de datos. Estos son los conceptos, instancias y atributos. Un archivo Atributo-Relación File Formato es un archivo de texto que describe una lista de instancias de un concepto con sus respectivos atributos. Estos archivos sin los usados por Weka para la clasificación de texto y aplicaciones de clusters.

Archivos ARFF.

Estos archivos tienen dos secciones, la información de cabecera, y la información de datos.  La primera sección contiene el nombre de la relación con los atributos (nombre y tipo).  El nombre de la relación es definido en la primera línea del arff donde nombre-relación es un string con el siguiente formato:

@relation <nombre-relación >

La siguiente sección es las declaraciones de atributos. Esta es una secuencia ordenada de declaraciones de cada atributo de las instancias. Estas declaraciones definen de forma exclusiva el nombre del atributo y su tipo de datos. El orden en que los atributos se declaran indica la posición en que se encuentre en las instancias. Por ejemplo, el atributo que se declara la primera posición se espera que todas las instancias en la primera posición marquen el valor de este atributo. El formato para su declaración es:

@atributo < nombre-atributo > <tipo de dato>

Weka cuenta con varios <tipo de datos> soportados:

  1. i) NUMERIC o numérico: son todos los números reales donde la separación entre la parte decimal y entera esta representada por un punto y no por una coma.
  2. ii) INTEGER o números enteros: tratados como numeric.

iii) NOMINALES proporcionan una lista de posibles valores por ejemplo {buen, mal}. Estos consisten en expresar los posibles valores que el atributo puede tomar con el siguiente formato:

@attribute nombre_atributo {<nominal1>, <nominal2>, <nominal3>, …}

  1. iv) STRING: es una cadena de valores de texto. Estos atributos se declaran conforme a lo siguiente:

@attribute nombre_atributo string.

  1. v) DATE: son fechas declaradas como:

@attribute <nombre> Fecha [<formato de fecha >].

Donde <nombre> es el nombre del atributo y < formato de fecha > es una cadena opcional que está compuesta por caracteres separadores guiones espacios y unidades de tiempo. Formato de fecha específica los valores en que la fecha debe ser analizada. El formato establecido acepta la combinación de formato ISO-8601: aaaa-MM-dd’T’HH: mm: ss.

Ejemplo @attribute timestamp DATE “yyyy-MM-dd HH:mm:ss”

  1. vi) Atributos relacionales son atributos para los datos de varias instancias en el siguiente forma:

@attribute <nombre> relacional

<Siguientes definiciones de atributos>

@end <nombre>

Existen reglas en los nombres para las declaraciones de atributos:

a) Los nombres de relaciones de tipo cadena o string deben ser encerrados entre comillas dobles” si incluye espacios.

b) Tanto los atributos como nombres de relaciones no pueden comenzar con un carácter antes del \u0021 en ASCII ‘{‘, ‘}’, ‘,’, o ‘%’.

c) Valores que contienen espacios deben ser citados.

d) Las palabras clave numeric, real, integer, string y date pueden ser minúsculas o mayúsculas.

e) Los datos relacionales deben ir entre comillas dobles”.

La segunda sección es la declaración de la información. Se declara como @data en una sola línea. Cada línea debajo representa una instancia que delimita sus atributos por comas. El valor de los atributos debe de ser en el mismo orden en que estos fueron declarados en la sección uno con @atribute. Valores perdidos se representan con un signo de interrogación final “?”.Los valores de cadena y atributos nominales entre son diferentes con mayúsculas y minúsculas. Debe ser citado cualquier valor que contenga un espacio. Los comentarios son citados con el delimitador de carácter “%” hasta el final de la línea.

 

Para la clasificación de texto estos archivos arff  representaran el documento completo como un simple atributo de texto es decir de tipo string. El segundo atributo a considerar es el atributo clase. Este definirá la clase a la instancia corresponde. Este tipo de atributo puede ser de tipo string o nominal. Un ejemplo del resultante archivo es con texto del documento tipo string y la clase tipo nominad de dos valores:

@relation idioma

@attribute textoDocumento string

@attribute class {ingles , español}

@data

‘texto a clasificar aquí… ‘, español

‘Classify text here …’, English

 

Preprocesamiento de datos.

En esta ventana se cargan los datos que pueden ser editados. Los datos se pueden modificar mediante una edición manual o un filtro. Los filtros son los métodos de las técnicas de aprendizaje que modifican el conjunto de datos. Weka cuenta con una gran variedad de filtros estructurados jerárquicamente en supervisados y no-supervisados donde la raíz es weka. Estos filtros se dividirán en su forma de operar con los datos en dos  categorías atributo e instancia.

Como se mencionó anteriormente, estas técnicas se clasifican dependiendo de las relaciones de los datos de entrada. Las técnicas de aprendizaje no supervisado al ser modelos inductivos descriptivos no conocen su clasificación correcta. Esto quiere decir que las instancias no requieren un atributo que establezca la clase. Las técnicas inductivas predictivas del aprendizaje supervisado dependen de los valores de la clase a la que corresponde. Esto hace referencia a que las instancias contendrán el atributo de la clase a la que pertenecen.

En la parte de Current relation se describe conjunto de datos que se ha cargado el nombre, el número de instancias. El marco de Attributes permite seleccionar los  atributos utilizando las opciones de todos, ninguno, invertir y adicionalmente proporciona la opción de ingresar una expresión regular para la búsqueda de patrones en los atributos. En la parte Selected attribute  se muestra la información sobre el atributo seleccionado. En la parte inferior se ilustra un histograma de  los atributos seleccionados en Attributes.

 

Preproceso para la clasificación de documentos

 En Weka es posible crear modelos de clasificación de documentos de texto en categorías previamente analizadas. Los documentos normalmente necesitan ser convertidos en “vectores de texto” antes de aplicar las técnicas del aprendizaje automático en Weka. Para esto la manera más sencilla de representar el texto es como bolsa de palabras o palabra vector. [34]  Namee, B. (2012). El filtro StringToWordVector realiza el proceso de convertir el atributo string a un conjunto de atributos que representara la ocurrencia de las palabras del texto completo. El documento se representa como una cadena de texto que se representa como un solo atributo de tipo string.

StringToWordVector Filter

Este es el filtro fundamental para el análisis de texto en WEKA. Esta clase ofrece abundantes opciones del procesamiento del lenguaje natural que incluyen el uso de la lexematización para el corpus conveniente, tokens personalizados y uso de diferentes listas de palabras vacias. Al mismo tiempo, calcula los pesos de Frecuencia Duración y TF.IDF, etc

StringToWordVector coloca el atributo clase al inicio de la lista de atributos. Para cambiar el orden se puede usar el filtro Reorder para reordenar. En este filtro se pueden configurar todas las técnicas del procesamiento lingüístico del lenguaje natural a los atributos. Para aplicar el filtro StringtoWordVector en modo batch desde la línea de comandos se puede hacer de la siguiente manera:

java-cp /Aplicaciones/weka-3-6-2/weka.jar weka.filters.unsupervised.attribute.StringToWordVector -b -i datos_entrenamiento.arff -o vector_ datos_entrenamiento.arff -r datos_prueva.arff -s vector_ datos _ prueva.arff

La opción -cp pone Weka jar en el path de la clase, -b indica utilizar el modo batch, -i especifica el archivo de datos de entrenamiento, -o el archivo de salida después de procesar el primer archivo, -r es mi archivo de prueba y -S es el archivo de salida del previo archivo de prueba. También puede añadir cualquiera de las opciones de configuración después del nombre del filtro.

Desde la interfaz de usuario, las opciones se podrán modificar al dar clic en el nombre del filtro al lado del botón choose. Previamente habiendo seleccionado el filtro desde el booton choose.

Teniendo abierta la ventana weka.filters.unsupervised.attribute.StringToWordVector mostrara las siguientes opciones en ese orden para ser modificadas conforme a las necesidades de los documentos a clasificar.  Las opciones son:

  • IDFTransform
  • TFTransform
  • attributeIndices
  • attributeNamePrefix
  • doNotOperateOnPerClassBasis
  • invertSelection
  • lowerCaseTokens
  • minTermFreq
  • normalizeDocLength
  • outputWordCounts
  • periodicPruning
  • stemmer
  • stopwor
  • tokenizer
  • useStoplist
  • wordsToKeep

En Weka.sourcearchive.com  [39]  se hace referencia a un mapa mental de las opciones de Weka que son las siguientes que se muestra en la siguiente ilustracion:

 classweka_1_1filters_1_1unsupervised_1_1attribute_1_1StringToWordVector_a4ad7e64ecb476e527a19afee2c96aea6_a4ad7e64ecb476e527a19afee2c96aea6_cgraph


 

wordsToKeep:

Palabras para mantener: define el número N límite de palabras por clase si hay un atributo clase, que se intentara mantener. En este sólo los N términos más comunes en todos los valores de los atributos en la cadena se mantendrán. Un valor alto representara menor eficiencia debido a que tomara más tiempo el aprendizaje del modelo.

doNotOperateOnPerClassBasis

No poner en funcionamiento en clase base: bandera que establecerá mantener todas las palabras relevantes para todas las clases. Se establece como verdadero o “true”  cuando el número máximo de palabras y la frecuencia mínima término no se aplica a un atributo de una clase y en lugar se basa en todas las clases.

TFTransform

Termino Frecuencia puntuación (TF) Transformación: al posicionar la bandera con verdadero “true”  este filtro ejecuta la transformación termino-frecuencia peso que representa los datos textuales en un espacio de vector se usa la Termino- Frecuencia (TF). El TF representa en medida numérica la relevancia de las palabras del texto en toda la colección. Este no solo considera la relevancia de un solo termino por sí mismo, también lo considera en la completa colección de documentos.

Matemáticamente se expresa la función  de TF (t, d) donde expresa el termino t en el documento d en: log (1 + frecuencia de la palabra t en la instancia o documento d)

. La frecuencia inversa del documento IDF es el número de documentos en los que aparecerá el término t  donde t está definido en el TF. Encuentra palabras frecuentemente  relacionadas en función de log (1 + fij) donde fij es la frecuencia de la palabra t en el documento (ejemplo) j.

DFTransform

Frecuencia Inversa del Documento (IDF) Transformación: al posicionar la bandera con verdadero “true” este de definirá el uso de la siguiente ecuación:

Frecuencia de la palabra t en la instancia d como ftd y asi:

F td * log (nº de documentos o instancias d  / nº de documentos con  palabra t)

Esta se explica tomando en consideración  conjunto D que incluye todos los documentos encontrados en la colección representado como D = {d1, d2, …, dn}. Enceuntra los  documentos muy relevante a la otra en fij * log (num de Docs / num de Docs con la palabra i) cuando fij es la frecuencia de la palabra i en el documento (ejemplo) j.

Al multiplicar el TF por el IDF resultara el asignar un peso mayor a los términos con mayor frecuencia en los documentos pero que al mismo tiempo relativamente raros en la colección de documentos. [33]  Salton, G., Wong, A., & Yang, C. (1975).

outputWordCounts

Contar palabras de salida: cuenta las ocurrencias de palabras dentro de la cadena, la configuración por defecto sólo informa la presencia o ausencia como 0/1. El vector resultante será donde cada dimensión del vector es una palabra diferente. El valor en esa dimensión es un valor binario 0 o 1 es decir sí está o no la palabra en ese documento.

Se cuenta la frecuencia de la palabra en ese documento con un número entero con: IDFTransform y TFTransform como “False” y outputWordCounts con “True”.

Este se debe habilitar con true para hacer una cuenta de las palabras de forma explícita. Se establece como falso o ”false”  cuando solo le importa la presencia de un término y no su frecuencia.

Para calcular tf * (IDF) se establece IDFTransform comoVerdadero, TFTransform como falso y outputWordCounts Verdadero.  Para lograr log (1 + tf) * log (IDF) se establece TFTransform como True.

normalizeDocLength

Normalizar el tamaño del documento: cierto o true para establecer si las frecuencias de las palabras en una instancia deben ser normalizados. La normalización es calculada como ValorActual * longitudDelDocumentoPromedio / realLongitudDelDocumento. Esta opción se establece con tres sub opciones, la primera opción es no ejecutar normalización o “No normalization”. La segunda es “Normalize all data” que toma una medida como una escala común de todas las medidas tomadas en los diferentes documentos. La tercera opción es “Normalize test data only”.

Se cuenta de una palabra con un valor real del el resultado tf-idf de esa palabra en ese documento con IDFTransform y “TFTransform” en “True”  y “normalizeDocLength” to “Normalize all data.”

 

Stemmer

Partiendo: selecciona el algoritmo de stemming para usar en las palabras. Por defecto Weka soporta 4 stemmer algoritmos el Lovin Stemmer, su versión iterad y soporta los Snowball stemmers. El algoritmo IteratedLovinsStemmer es una versión del algoritmo LovinsStemmer que es un conjunto de reglas de transformación para modificar terminaciones de las palabras asi como palabras en presente participio, plurales irregulares, y morfológica en inglés. El algoritmo NullStemmer realiza ningún derivado en absoluto. El algoritmo SnowballStemmer surgió de vocabularios estándar de las palabras y sus equivalentes de tallo se proporcionan para cada despalilladora.

Weka puede agregar fácilmente nuevos stemmer algoritmos, ya que contiene una clase contenedora para los como lematizadores en español de snowball. Weka no contiene todos los algoritmos de snowball pero se pueden incluir fácilmente en la locación de la clase weka.core.stemmers.SnowballStemmer de Weka. Snowball es un lenguaje de procesamiento de cadenas diseñado para la creación de stemming. Existen tres métodos para conseguir estos algoritmos, el primero es instalar el paquete no oficial. La segunda es añadir snowball-20051019.jarsnowball-20051019.jar pre compilado a la localidad de la clase. La tercera es compilar los últimos stemmer por sí mismo de  snowball-20051019.zip. Ir a y para más para encontrar todos estos archivos se encuentran y más información.

Los algoritmos se encuentran en snowball.tartarus.org que cuentan con un stemmer en español. En el siguiente link http://snowball.tartarus.org/algorithms/spanish/stemmer.html se puede observar ejemplos y descargas del funcionamiento de este stemmer.

Snowball español stemming algoritmo con forme a Snowball.tartarus.org se define de la forma habitual las regiones R1 y R2 que se definieron previamente. Además se define RV como la región después de la siguiente vocal, si la segunda letra es una consonante, o RV como la región después de la siguiente consonante, si las primeras letras son dos vocales, o también RV como la región después de la tercera letra en caso que estas opciones no existan RV es el final de la palabra.

Paso 0: Busca el más largo pronombre entre los siguientes sufijos: “me   se   sela   selo   selas   selos   la   le   lo   las   les   los   nos” y eliminarlo, si viene después de uno de iendo ándo ár ér ír, ando iendo ar er ir yendo.

Paso 1: busca el sufijo más largo dentro de los comunes y lo elimina.

Paso 2: si no se removió ningún sufijo en el paso 1 busca eliminar otros sufijos.

Paso 3: busca el más largo entre los sufijos residuales “os a o á í ó e é” en RV los elimina.

Paso 4: retira acentos agudos. [36]

.  Para mayor información sobre sufijos en paso 1 y 2 ir a la página de snowball http://snowball.tartarus.org/algorithms/spanish/stemmer.html.

Se agregara el algoritmo previo cuando se aplique el siguiente comando para Windows:

java-classpath “weka.jar;snowball-20051019.jar” weka.gui.GUIChooser

Para Linux:

java-classpath “weka.jar:snowball-20051019.jar” weka.gui.GUIChooser

[37]  Weka.wikispaces.com,. (2015).

El jar snowball-20051019.jar previamente compilado y almacenado en la localidad donde se encuentra la aplicación de Weka en la computadora.

Se podrá confirmar conel comando:

javaweka.core.SystemInfo

Como se muestra en la siguiente figura.

C:\Program Files\Weka-3-6\snowball-20051019.jar

CLASSPATH

 

Stopwords

Palabras vacías: las palabras vacías o stop words son los términos que se han generalizado y aparece con más frecuencia, no proporcionan información sobre un texto. Esta opción determina si una sub cadena en el texto es una palabra de vacía. Las palabras vacías provienen de una lista predefinida. Esta opción convierte  todas las palabras del texto minúsculas antes de la eliminación. Stopwords es pertinente para eliminar palabras sin sentido dentro del texto y eliminar de las palabras frecuentes y útiles de árboles de decisión, como este por ejemplo “de”.

Las palabras vacías de Weca por defecto se basan en las listas de Rainbow http://www.cs.cmu.edu/~mccallum/bow/rainbow/. Rainbow es un programa que realiza la clasificación estadística de texto. Se basa en la biblioteca Bow. [38]  Cs.cmu.edu, (2015).  El formato de estas listas es una palabra por línea donde los comentarios serán cada línea que comienzan con ‘#’ para ser tanto omitidos. WEKA está configurada con una lista de palabras vacías inglés pero se puede establecer diferentes listas de stopwords. Se puede cambiar esta lista desde la interfaz de usuario dando clic a la opción que tiene Weka por defecto que en este caso es Weka-3-6 y elegir la localidad de la lista deseada. Rainbow cuenta con listas por separado en inglés y español, para poder efectuar ambos idiomas se añadió el archivo “ES-stopwords” que contiene ambas listas provenientes de Rainbow.

 

useStoplist:

Usar la lista de palabras vacías: bandera para utilizar las palabras vacías. Si está en verdadera o “True” ignora las palabras que se encuentren en la lista de stopwords predefinida con la opción anterior.

 

Tokenizer:

Tokenización: Elije unidad de medida para separar el atributo de texto completo. Este cuenta con  tres sub opciones. La primera es AlphabeticTokenizer donde los símbolos son sólo secuencias alfabéticas continuas que no se pueden editar. Al toquen izar solo considera el alfabeto en inglés. Al mismo tiempo se encuentra la simple opción de WordTokenizer tokenizer que establece una lista de delimitadores “deimiters”

La segunda es NGramTokenizer que divide la una cadena texto original en un sub conjunto de palabras consecutivas que forman un patrón con significado único. Sus parámetros derivados son los “delimiters” a utilizar que por defecto son  ‘\ r \ n \ t,;:.’ “() ?! ‘, GramMaxSize  que es el tamaño máximo del Ngram  con un valor predeterminado de 3 y el GramMinSize siendo el tamaño mínimo del Ngram con un valor predeterminado  de 1. N-gramas puede ayudar a descubrir patrones de palabras relacionadas entre ellas que representan un contexto significativo.  Como se referencio previamente, los signos de puntuación en español son  “, ; . : ¿ ? ¡ ! – — ( ) [ ] ’ ” << >> “. En español a diferencia de inglés contempla un signo de inicio y otro de fin en una exclamación.

 

minTermFreq:

Frecuencia mínima del término: Establece la frecuencia mínima que cada palabra o término tiene que poseer para ser considerado como atributo, el valor por defecto es 1. Es la  frecuencia que se aplica cuando se tenga un atributo clase y que no se haya puesto como verdadera la bandera “doNotOperateOnPerClassBasis”, el texto de toda la cadena para una clase particular que se encuentra en ese mismo atributo seleccionado se tokenisa.

La frecuencia de cada token se calcula basándose en la frecuencia con que este se encuentra en la clase. En contraste, si no existe la clase, el filtro calculará un diccionario único y la frecuencia se calcula en base a toda la cadena de valores de atributo del atributo elegido, no sólo las relativas a un valor de clase particular.

periodicPruning

Poda periódica: elimina palabras de baja frecuencia. Utiliza un valor numérico como porcentaje del tamaño del documento que establece la frecuencia a podar el diccionario. El valor por defecto es -1 y significa no poda periódica.  La tasa  de poda periódica es especificada como un porcentaje del conjunto de datos.  Por ejemplo, este especificara que cada 15% del conjunto de datos de entrada, se podara periódicamente en el diccionario, después de la creación de un diccionario completo. Puede que no tenga suficiente memoria para este enfoque.

attributeNamePrefix

Prefijo para Nombre del Atributo: establece el prefijo para los nombres de los atributos creados que por defecto es  “”.  Esto sólo establece un prefijo que se añadirá a los nombres de los atributos que el filtro StringToWordVector crea cuando se el documento se particional.

lowerCaseTokens

Términos en letras minúsculas: bandera que en verdadero o “True” convierte todas las palabras del documento en minúsculas antes de ser agregadas al registro. Bandera que en true eliminara la opción de distinguir nombres propios al eliminar la regla de que los nombres propios empiezan con mayúsculas. Acrónimos pueden ser considerados en mayúsculas con esta opción en “False”.

attributeIndices

Índices de atributos: establece el rango de atributos para actuar en los conjuntos de atributos. Por defecto es first-last que asegura que todos los atributos san tratados como si fueran una sola cadena de primero  a ultimo.  Este rango creará una cadena de los rangos que contiene una lista separada por comas.

invertSelection

Invertir selección: bandera para trabajar con los atributos seleccionados en el rango. Se coloca como “true” o verdadera para trabajar con los únicos atributos no seleccionados. Por defecto su valor es “False”  se trabajara con los atributos seleccionados.

Después de la limpieza de los datos en la pestaña de “Preprocess”, se analizará el vector de atributos para obtener el conocimiento deseable en la pestaña “Classify”.

 

Clasificación

El segundo panel de Explorer es “Classify” o clasificación que genera los modelos de las máquinas de aprendizaje a partir de los datos. Estos modelos sirven como una explicación clara  de la estructura encontrada en la información analizada. Weka en especial considera el modelo de árbol de decisiones J48 el más popular para la clasificación de texto. J48 es la implementación en java del algoritmo C4.5. Anteriormente se describió como el algoritmo representa en cada rama una de las posibles decisiones en formato if-then que el árbol ofrece para representar el resultado en cada hojas. Se puede resumir al algoritmo C4.5 como el que mide la cantidad de información contenida en un conjunto de datos y la agrupa por importancia. Se da la idea de la importancia de un atributo en un conjunto de datos. J48 Imprime recursivamente la estructura del árbol con variables de tipo string mediante el acceso a la información de cada  atributo almacenada en los nodos.

Para crear una clasificación, primero se debe de elegir el algoritmo clasificador en el botón “Choose” que se encuentra en el lado superior izquierdo de la ventana. Este botón desplegara un arbol donde la raíz es Weka y la sub carpeta es “classifiers”. Dentro de la sub carpeta tree  localizada en weka.classifiers.trees se encontraran los modelos de árboles como el J48 y el RepTree que referencia combina al árbol de decisión normal con el random forest algoritmo. Para poder acceder a las opciones del clasificador  se da doble clic en el nombre del clasificador seleccionado.

“Test Options”.

La clasificación cuenta con cuatro modos principales y otros para manejar los datos de entrenamiento. Estos se encuentran en la sección de “Test Options”  o “Opciones de Prueba”  con las siguientes opciones

Use training set: entrena el método con todos los datos disponibles y aplicara el resultado sobre la misma colección de datos.

Supplied test set:  se podrá seleccionar el conjunto de datos de entrenamiento que se encuentren en un archivo o url. Este conjunto debe ser compatible con los datos iniciales y se selecciona pulsando el botón “Set”.

Cross-validation: realizará una validación cruzada dependiendo del número seleccionado en “Folds” o particiones dado. La validación cruzada consiste en especificar un número de particiones para determinar cuántos modelos temporales se crearan. Se selecciona una parte y el clasificador se construye con todas las partes menos la seleccionada ya que se probara con la seleccionada. [32]  Garcia, D., (2006).

Percentage Split: define el porcentaje del total de los datos de entrada con el que se construirá el modelo clasificador y con la parte restante se probará.

Weka nos permite seleccionar algunas opciones más  para definir el método de prueba con el botón “More Options” , estas son:

Output Model: abrirá en la ventana de salida el modelo clasificador.

Output per-class stats: mostrará estadísticas de cada clase.

Output entropy evaluation mesures: mostrará la información de mediciones de la entropía en la clasificación.

Output confusion matrix: mostrará la matriz de confusión resultante del modelo clasificador.

Store predictions for visualization: Weka guardara as predicciones del modelo clasificador en los datos de prueba. En el caso del uso del clasificador J48 esta opción muestra los errores del árbol.

Output predictions: mostrara una tabla con los valores reales y valores predichos para cada instancia de los datos de prueba. Expresara como el clasificador se relaciona con cada instancia en la colección de datos  de prueba.

Output additional attributes: se configurar cuando se desea mostrar los valores de atributos y no los de la clase. Se especifica un rango que se incluirán junto con los valores reales y predichos de la clase.

Cost-sensitive evaluation: produce información adicional en la salida de la evaluación, el costo total y el costo promedio de los errores de clasificación.

Random seed for XCal / % Split : especifica la semilla aleatoria usada cuando antes de que se dividan los datos para fines de su evaluación.

Preserve order for % Split: conserva el orden en el porcentaje de los datos en lugar de crear una aleatoria por primera vez con el valor de las semillas que por defecto es 1.

Output source code: generará el código Java del modelo producido por el clasificador.

 

En dado caso que no se cuente con un conjunto de datos de evaluación independiente, es necesario obtener una idea razonable de precisión del modelo generado y seleccionar la opción correcta. Para el caso de clasificación de documentos se recomendara seleccione al menos 10 “Folds” para la validación cruzada como enfoque de evaluación. También se recomienda asignar un porcentaje amplio en  “Percentage Split”.

 

Debajo de estas opciones de “Test Options”  se encuentra un menú desplegable donde se encontrara una lista con todos los atributos. Esta permite seleccionar el atributo que actuara como el resultado para la clasificación. En el caso de la clasificación de documentos será la clase a la que la instancia corresponde.

El método de clasificación comenzara al presionar el botón Start”. La imagen de la ave weka que se encuentra en la parte inferior derecha empezará se moverá hasta que el clasificador logre terminar.

WEKA crea una representación gráfica del árbol de clasificación J48. Este árbol se puede visualizar  haciendo clic derecho en el último conjunto de resultados ”Result List” y seleccionando la opción “Visualize tree” o”Visualizar árbol”. El tamaño de la ventana se puede ajustar para que sea más explícito.

 

Clasificador para la clasificación de documentos J48

El modelo J48 utiliza el algoritmo de árbol de decisión C4.5 a para construir un modelo a partir de los datos de entrenamiento seleccionados. Este algoritmo se encuentra en weka.classifiers.trees.J48. El clasificador J48 cuenta con diferentes parámetros a los que se puede acceder haciendo doble clic en el nombre del clasificador seleccionado.

J48 emplea dos métodos de poda, pero este no realiza la poda de error.  Los objetivos principales de la poda son hacer el árbol más fácil de entender y reducir el riesgo de sobreuso  de los datos de entrenamiento para ser capaz de clasificar casi perfectamente. Con esto el árbol aprender las propiedades específicas de los datos de entrenamiento y no el concepto inferior.

El primer método de poda con el que J48 cuenta es conocido como el reemplazo del subárbol. Los nodos en un árbol de decisión pueden ser reemplazados con una hoja reduciendo el número de nodos en una rama. Este proceso comienza a partir en las hojas del árbol completamente formado  y trabaja subiendo hacia la raíz.

El segundo es la elevación del  subárbol. Se mueve un nodo hacia la raíz del árbol que sustituye a otros nodos a en la rama. Normalmente, este proceso no es  insignificante en los y es ser aconsejable apagarlo cuando el proceso de inducción toma mucho tiempo.

 

Al dar clic en el nombre del clasificador J48 que se encuentra al lado derecho del botón “Choose” mostrara una ventana con las siguientes opciones editables:

confidenceFactor:  establece el número de poda. Los donde los valores más pequeños experimentan más poda. La reducción del este valor puede reducir el tamaño de los árboles y además ayuda en la eliminación de nodos irrelevantes que generan a errores de clasificación. [40]  Drazin, S., & Montag, M. (2015).

minNumObj: ajusta el número mínimo de instancias de separación por hoja en el caso de árboles con muchas caminos.  Este número garantiza  que a cada división, al menos 2 de las ramas, tendrán este número mínimo.

unpruned: bandera para preformar la poda. En verdadero o  se podara el árbol. Por defecto se encuentra en “False” que significa que la poda no se efectúa.

reducedErrorPruning: bandera utilizar la reducción de errores de poda en el árbol C.4.5. Método posterior a la poda que utiliza una resistencia para las estimaciones de errores. Del mismo modo,  se para la cría subárboles y lanzar una excepción no utiliza el nivel de confianza para la poda.

Seed: número de la semilla para revolver los datos aleatorios y reducir el error de la poda. Esta se considera cuando la bandera reducedErrorPruning  esta como verdadero o “True”. Por defecto es 1.

numFolds: número de poda para reducir-error. Establece el número de pliegues que se retienen para la poda, con un conjunto usado para la poda y el resto para entrenamiento. Para usar estos Folds se necesita ajustar a verdadera o “True” la bandera de reducedErrorPruning.

 

binarySplits: bandera que al establecerse como verdadera o “Truecrea sólo dos ramas para atributos nominales con varios valores en lugar de una rama para cada valor. Cuando el atributo nominal es binario no hay diferencia, excepto en cómo se muestra este atributo en el resultado de salida. Por defecto es “False”.

saveInstanceData: bandera que al establecerse como verdadera o “Trueguarda los datos de entrenamiento para su visualizacion. Por defecto es “False”.

subtreeRaising: bandera que preformara la poda con el método de elevación del  subárbol o “subtreeRaising”. Esta mueve un nodo hacia la raíz del árbol sustituyendo a otros nodos. En “true” weka considerara “subtreeRaising” en el proceso de poda.

useLaplace: : bandera que preformara  el conteo de las hojas en Laplace. En “true” weka  contara las hojas que se hacen menores basan en una complemento popular a las estimaciones de probabilidad llamado Laplace.

debug: bandera para agregar información a la consola. Verdadera o True” añade a la consola información adicional del clasificador.

Se puede alcanzar 100% correcta en la formación de datos desactivando la poda  y establecer el número mínimo de instancias en una hoja a 1.

 

 Experimentos

Se seleccionó la herramienta Weka con el propósito de generar un modelo que clasificación de documentos especializados a partir de dos diferentes courpus (inglés y español).  El paquete de WEKA es una colección de algoritmos  de máquinas de aprendizaje para tareas de la minería de datos. La minería textual hace uso de estos algoritmos que al aprender de grupo de ejemplos  o “training set”, clasifican nuevos textos en categorías analizadas. Se define como Waikato Environment for Knowledge Analysis. Para mayor información dirigirse a http://www.cs.waikato.ac.nz/~ml/weka/.

            Adquisición de datos

Los documentos seleccionados para el conjunto de datos de entrenamiento se han conseguido de la librería de Thompson Rivers University que coenta con la siguiente dirección electrónica: http://www.tru.ca/library.html. Se seleccionaron aleatoriamente 71 artículos académicos de medicina en inglés y español. Estos documentos se almacenaron en formato Portable Document Format (PDF). En base a la librería de TRU, se reconoció la clasificación de los documentos en seis categorías Hemodiálisis, Nutrición, Cáncer, Obesidad, Dieta y Diabetes. Estos documentos se almacenaron en carpetas nombradas por categorías dentro de la carpeta principal llamada Medicina.

Con la finalidad de formar de un archivo arff se creó en Microsoft Visual  Studio Professional C# 2012 una aplicación que generara el archivo arff de una colección de documentos organizados en carpetas en base a su categoría. Esta aplicación pudo ser realizada con la colaboración de una librería PDF llamada iTextSharp para la extracción de texto de un documento de formato portable.

Documents Directory to ARFF puede especificar el nombre de la relación a definir,  la locación del directorio principal contenedor de los documentos subdivididos en  carpetas categóricas y comentarios requeridos. Así también, especifica el nombre del archivo generado con extensión arff y la locación del mismo. Al final de la aplicación se encuentras dos botones, uno de salida y otro para generar el archivo arff con la información descrita.  Esta puede ser descargada en http://www.scientificdatabases.ca bajo current projects para Minería de Texto.

 

 

El arff resultante generar un atributo tipo string llamado “textoDocumento” que describirá todo el texto encontrado en el documento y el atributo nominal “docClass” que definirá la clase a la que pertenece. Comprende mencionar que para versiones recientes de Weka  como en este caso Weka 3.6.12 el atributo clase nunca se puede ser nombrado class”. El archivo a generar se encontrará de la manera siguiente:

%  tutorial de Weka para la Clasificación de Documentos.

@RELATION Medicina

@attribute textoDocumento string

@attribute docClass {Hemodialysis, Nutrition, Cancer, Obesity, Diet, Diabetes}

@data

“texto…”, Hemodialysis

“texto…”, Nutrition

“texto….”, Cancer

“texto…”, Obesity

“texto…”, Diet

“texto…”, Diabetes

 

            Preproceso de documentos.

Para cargar el arff generado se dará clic al botón “Open file…” localizado en la parte superior derecha. En este se seleccionara el archivo creado  “medicinaWeka.arff”.  En la parte inferior se ilustra un histograma de  las etiquetas del atributo “docClass” que al posicionar el cursor sobre el describirá el valor del atributo como se muestra en la siguiente imagen.

 

En Weka para convertir el atributo “textoDocumento” a un conjunto de atributos que representaran la ocurrencia de las palabras del texto completo, usa el filtro StringToWordVector.

Se generaron de diferentes combinaciones de opciones aplicados a los mismos datos de entrenamiento. A los modelos resultantes de cada una se calculó su medida– Fβ, que describe la proporción de instancias erróneamente predichas del modelo. Las opciones que generaron un mayor número de instancias predichas correctamente han sido las siguientes:

wordsToKeep: se coloca con 1000  y  doNotOperateOnPerClassBasis: como “False” TFTransform como “True”, DFTransform como “True”  outputWordCounts como “True” y  normalizeDocLength: se establece con “No normalization”.

lowerCaseTokens: se coloca como “True”

Stemmer: se seleccionara “NullStemmer”.

Stopwords  se añadió el archivo “ES-stopwords” que se puede descargar  desde http://www.scientificdatabases.ca/current-projects/english-spanish-text-data-mining/  y se elijara “ES-stopwords”  previamente descargado con la opción   useStoplistse en “True” .

Tokenizer: se seleccionara “WordTokenizer” y se agregaran delimiters en español  .,;:'”()?!“¿!-[]’<>“

 

Extracción de información

 

Después de la limpieza de los datos en la pestaña, se analizará el vector de atributos para la creación del modelo de clasificación que definirá la estructura encontrada en la información analizada.  Se elige el árbol árbol de decisiones J48.  Weka considera J48 como la implementación en java del algoritmo C4.5. para alcanzar  el 100%  en clasificación correcta  se desactiva la poda  y se estableciendo el número mínimo de instancias en una hoja a 1. Se selecciona  “Use training set” para entrenar el método con todos los datos disponibles y aplicar el resultado sobre la misma colección de datos de entrada.

WEKA crea una representación gráfica del árbol de clasificación J48 como se muestra en la imagen siguiente.

 

  Introducción  

Minería Textual

        Weka        

  Tutorial Weka  

   Conclusión   

    Bibliografía    


Por Valeria Guevara