UNIVERSIDADE CATÓLICA DE BRASÍLIA – UCB PROGRAMA DE PÓS-GRADUAÇÃO STRICTO SENSU EM GOVERNANÇA, TECNOLOGIA E INOVAÇÃO (MGTI) EXERCÍCIO DE CLASSIFICAÇÃO Ferramenta WEKA com árvore de decisão Mestrando: Marcos André Duque - UC 20150209 Professores: Dr. Hércules Prado Dr. Remis Balaniuk Base de dados utilizada: “glass.arff” (fonte: WEKA) Total inicial de instancias: 214; Total inicial de atributos: 10, sendo 09 numéricos e 01 nominal (Type); Software utilizado na análise: WEKA, versão 3.8.5. A análise dos dados foi dividida em três etapas: 1. Pré-processamento 1.1. Verificação das anomalias 1.1.1. Campos vazios: não identificados; Figura 1: Pré-processamento – verificação de campos vazios 1.1.2. Campos com valores inesperados ou inconsistentes: não identificados ao verificar a base de dados pelo “viewer” do Weka; Figura 2: Pré-processamento – verificação de campos com valores inesperados ou inconsistentes 1.1.3. Campos com “Outliers” e “ExtremeValue”: 1.1.3.1. Para identificação, foi empregado o filtro “weka.filters.unsupervised.attribute.InterquartileRange”. O filtro criou automaticamente mais dois atributos conforme figura 3, chamados “Outlier” e “ExtremeValue” Figura 3: Criação automática dos atributos Outline e ExtermeValue após filtro “weka.filters.unsupervised.attribute.InterquartileRange” No atributo “Outliers” pode-se verificar, conforme configuração default do filtro, 16 “Outliers” e 198 “não Outliers”. Já no atributo “ExtremeValue”, pode-se verificar, conforme configuração default do filtro, 42 “ExtremeValue” e 172 “não ExtremeValue”. Figura 4: Resultados dos atributos Outline e ExtermeValue após filtro “weka.filters.unsupervised.attribute.InterquartileRange” 1.1.3.2. Para remoção, foi empregado o filtro “weka.filters.unsupervised.instance.RemoveWithValues”. O filtro foi configurado da seguinte forma: Para remoção dos 16 “Outliers”, o primeiro passo foi configurar ao filtro o índice do atributo “Outlier” (no caso, atributo 11) e configurar o índice nominal do resultado a deletar como “last”, uma vez que o segundo resultado no atributo é o correspondente aos “outliers” Figura 5: Configurando o filtro “weka.filters.unsupervised.instance.RemoveWithValues” para remoção dos 16 “Outliers” Como resultado, o número de instancias caiu de 214 para 198 (214 – 16 = 198) e o número de “ExtremeValue” caiu de 42 para 35. Figura 6: Resultados obtidos após remoção dos 16 “Outliers” com o filtro “weka.filters.unsupervised.instance.RemoveWithValues” Para remoção dos 35 “ExtremeValues” remanescentes, nova configuração do filtro foi realizada, agora com o índice do atributo “ExtremeValue” (no caso, atributo 12) e configurar o índice nominal do resultado a deletar como “last”, uma vez que o segundo resultado no atributo é o correspondente aos “ExtremeValues”. Figura 7: Configurando o filtro “weka.filters.unsupervised.instance.RemoveWithValues” para remoção dos 35 “ExtremeValues” remanescentes. Como resultado, o número de instancias caiu de 198 para 163 (198 – 35 = 163) e observamos ao visualizar os valores da classe (Type) que um de seus “labels” foi reduzido a zero, podendo ser eliminado. Figura 8: Resultados obtidos após remoção dos 35 “ExtremeValues” remanescentes com o filtro “weka.filters.unsupervised.instance.RemoveWithValues” 1.1.3.3. Para remoção do “label” “vehic wind non-float”, o arquivo “glass.sem.outlier.e.extremevalue.arff”, foi aberto no NotePad++ para edição, eliminando do @attribute Type, a descrição 'vehic wind non-float'. Figura 9: Edição do “glass.sem.outlier.e.extremevalue.arff”, no NotePad++, eliminando do @attribute Type, a descrição 'vehic wind non-float' 1.1.3.4. Após os resultados, verificou-se: Que o atributo Ba possuía todos seus campos com valor “zero” sendo, portanto, possível sua supressão e Que há um desbalanceamento significativo nos valores de classe, sendo indicada a redução da dimensionalidade pelo uso do filtro “weka.filters.supervised.instance.ClassBalancer”. Figura 10: Labels da classe “Type” da Base “glass.sem.outlier.e.extremevalue.arff” editada no NotePad++ sem o Label 'vehic wind non-float', comparada com a mesma base, suprimido o atributo “Ba” e com classes balanceadas 1.2. Análise das distribuições: apuradas nos histogramas para cada atributo Foi verificado que as distribuições não eram gaussianas e que os desvios padrão eram muito baixos. Assim sendo, foi realizada a tentativa de normalização dos valores pelo emprego do filtro “weka.filters.unsupervised.attribute.Normalize”. Entretanto, os desvios padrão resultantes tiveram um incremento muito discreto, permanecendo ainda baixos. A seguir apresentamos tabela comparativa das distribuições antes e depois de todas as correções das anomalias procedidas: ANTES DA VERIFICAÇÃO DAS ANOMALIAS DEPOIS DA VERIFICAÇÃO DAS ANOMALIAS (FIG. 11, COM 214 INSTÂNCIAS, 10 ATRIBUTOS E 7 LABELS) (FIG. 12, COM 163 INSTÂNCIAS, 12 ATRIBUTOS E 6 LABELS) RI Simétrico e unimodal Multimodal NA Bimodal Bimodal MG Multimodal Multimodal AI Simétrico e unimodal Bimodal SL Assimétrica Negativa Bimodal K Assimétrica Negativa Multimodal CA Assimétrica Positiva Multimodal BA Simétrico e unimodal ---------- FE Assimétrica Positiva Assimétrica Positiva TYPE (CLASS) Multimodal Topo - balanceado @ Figura 11: Histograma dos atributos antes da verificação das anomalias Figura 12: Histograma dos atributos depois da verificação das anomalias e da supressão do atributo “Ba” Os atributos “Outlier” e “ExtremeValue” foram então removidos, ficando a base de dados com 163 instancias e 9 atributos: 2. Mineração e classificação Foi empregado o modelo classificatório baseado em árvore de decisão utilizando quatro algoritmos diferentes da ferramenta WEKA para a classe (Type), da base de dados “glass.sem.outlier.e.extremevalue.sematributoBa.reduzdimensional.normalizado”, com opção de teste por validação cruzada (folds = 10) Algoritmo Tam. árvore Tx Assertividade ou acurácia Tx Erro Precisão ROC Area J48 17 61.7323 % 38.2677 % 52,6% 80,5% RandomForest 100* 68.0933 % 31.9067 % 61,5% 90,1% RandomTree 69 62.1372 % 37.8628 % 59,9% 77,2% REPTree 15 56.6954 % 43.3046 % 49,6% 79,1% * (Bagging with 100 iterations and base learner) 3. Pós-processamento. Na etapa de pós processamento de dados foi constatado que com o algoritmo RandomForest, o modelo apresentou as melhores taxas de assertividade, precisão e curva de área ROC, indicando que se trata, com esse algoritmo, de um modelo genérico. === Run information === Scheme: weka.classifiers.trees.RandomForest -P 100 -I 100 -num-slots 1 -K 0 -M 1.0 -V 0.001 -S 1 Relation: Glass-weka.filters.unsupervised.attribute.InterquartileRange-Rfirst-last-O3.0-E6.0weka.filters.unsupervised.instance.RemoveWithValues-S0.0-C11-Llast-weka.filters.unsupervised.instance.RemoveWithValues-S0.0-C12-Llastweka.filters.unsupervised.attribute.Remove-R8-weka.filters.supervised.instance.ClassBalancer-num-intervals10weka.filters.unsupervised.attribute.Normalize-S1.0-T0.0-weka.filters.unsupervised.attribute.Remove-R10-11 Instances: 163 Attributes: 9 RI Na Mg Al Si K Ca Fe Type Test mode: 10-fold cross-validation === Classifier model (full training set) === RandomForest Bagging with 100 iterations and base learner weka.classifiers.trees.RandomTree -K 0 -M 1.0 -V 0.001 -S 1 -do-not-check-capabilities Time taken to build model: 0.03 seconds === Stratified cross-validation === === Summary === Correctly Classified Instances 110.9921 68.0933 % Incorrectly Classified Instances 52.0079 Kappa statistic 0.6171 Mean absolute error 0.1436 Root mean squared error 0.2713 Relative absolute error 50.9106 % Root relative squared error 71.5908 % Total Number of Instances 163 31.9067 % === Detailed Accuracy By Class === Weighted Avg. TP Rate FP Rate Precision Recall F-Measure MCC 0,761 0,191 0,443 0,761 0,560 0,470 0,907 0,701 build wind float 0,762 0,149 0,506 0,762 0,608 0,527 0,902 0,737 build wind non-float 0,563 0,033 0,771 0,563 0,650 0,603 0,902 0,675 vehic wind float 1,000 0,000 1,000 1,000 1,000 1,000 1,000 1,000 containers 1,000 0,006 0,969 1,000 0,984 0,981 0,998 0,990 tableware 0,000 0,003 0,000 0,000 0,000 -0,023 0,693 0,494 headlamps 0,681 0,064 0,615 0,681 0,634 0,593 0,901 0,766 d e f <-- classified as === Confusion Matrix === a b c ROC Area PRC Area Class 20.68 3.24 3.24 0 0 0 | a = build wind float 3.88 20.7 1.29 0 0.86 0.43 | b = build wind non-float 8.49 3.4 15.28 0 0 0 | c = vehic wind float 0 0 0 27.17 0 0 | d = containers 0 0 0 0 27.17 0 | e = tableware 13.58 13.58 0 0 0 0 | f = headlamps