métodos de classificação para reconhecimento de
Transcrição
métodos de classificação para reconhecimento de
INSTITUTO FEDERAL DO ESPÍRITO SANTO PÓS-GRADUAÇÃO LATO SENSU EM ENGENHARIA ELÉTRICA COM ÊNFASE EM SISTEMAS INTELIGENTES APLICADOS À AUTOMAÇÃO LEOPOLDO MARCHIORI RODRIGUES MÉTODOS DE CLASSIFICAÇÃO PARA RECONHECIMENTO DE ATIVIDADE HUMANA VITÓRIA 2015 LEOPOLDO MARCHIORI RODRIGUES MÉTODOS DE CLASSIFICAÇÃO PARA RECONHECIMENTO DE ATIVIDADE HUMANA Monografia apresentada ao Curso de PósGraduação Lato Sensu em Engenharia Elétrica com Ênfase em Sistemas Inteligentes Aplicados à Automação do Instituto Federal do Espírito Santo como requisito parcial para obtenção do certificado de Especialista em Sistemas Inteligentes Aplicados à Automação. Orientador: Prof. Mário Mestria VITÓRIA 2015 (Biblioteca Nilo Peçanha do Instituto Federal do Espírito Santo) R696m Rodrigues, Leopoldo Marchiori. Métodos de classificação para reconhecimento de atividade humana / Leopoldo Marchiori Rodrigues. – 2015. 132 f. : il. ; 30 cm Orientador: Mário Mestria. Monografia (especialização) – Instituto Federal do Espírito Santo, Coordenadoria de Pós-Graduação em Engenharia Elétrica, Curso Pós-Graduação Lato Sensu em Engenharia Elétrica com Ênfase em Sistemas Inteligentes Aplicados à Automação, 2015. 1. Sistemas de reconhecimento de padrões. 2. Engenharia elétrica. 3. Mineração de dados (Computação). 4. Representação do conhecimento (Teoria da informação). I. Mestria, Mário. II. Instituto Federal do Espírito Santo. III. Título. CDD 21 – 006.4 LEOPOLDO MARCHIORI RODRIGUES MÉTODOS DE CLASSIFICAÇÃO PARA RECONHECIMENTO DE ATIVIDADE HUMANA Monografia apresentada ao Curso de PósGraduação Lato Sensu em Engenharia Elétrica com Ênfase em Sistemas Inteligentes Aplicados à Automação do Instituto Federal do Espírito Santo como requisito parcial para obtenção do certificado de Especialista em Sistemas Inteligentes Aplicados à Automação. Apresentado em 23 de Março de 2015 DECLARAÇÃO DO AUTOR Declaro, para fins de pesquisa acadêmica, didática e técnico-científica, que este Trabalho de Conclusão de Curso pode ser parcialmente utilizado, desde que se faça referência à fonte e ao autor. Vitória, 23 de Março de 2015. Leopoldo Marchiori Rodrigues Dedico a minha família. AGRADECIMENTOS Agradeço a Deus pelas pessoas maravilhosas que me cercam. Agradeço a minha família por me apoiar. Agradeço ao meu orientador pela dedicação que me foi dada. RESUMO O Reconhecimento de Atividade Humana é uma área de pesquisa inerente às aplicações de sensibilidade ao contexto, a qual tem aplicações, por exemplo, nas áreas de esportes, segurança e saúde. Para obter os dados de atividades de seres humanos existem as abordagens externa (por exemplo, com monitoramento por câmeras) e embarcada (por exemplo, com acelerômetros). Nessa área de pesquisa encontram-se trabalhos focados em múltiplos sensores simultaneamente auxiliando na coleta de informações em tempo real. Há também trabalhos dedicados a classificar a atividade de forma otimizada e precisa a partir de grande volume de dados coletados. Neste trabalho foram abordados os classificadores Rede Bayesiana e Rede Neural, construídos a partir de um conjunto de dados públicos, referentes à coleta de acelerômetros vestidos por um grupo de voluntários. Considerando-se os passos de um classificador na Mineração de Dados, foi feita a seleção de atributos, construção e treinamento, seguido pelos testes de validação, obtendo-se a Matriz de Confusão, a taxa de acerto e tempos de processamento. O objetivo é comparar diferentes métodos de classificação com diferentes técnicas de construção e validação, visando maior adequação aos dados, avaliando-se os impactos no desempenho e nas taxas de acerto. A implementação foi feita com a biblioteca pública de Mineração de Dados Weka e programação Java. Com menores tempos de processamento, a Rede Neural apresentou excelentes resultados. A Rede Bayesiana requereu maior investigação na configuração e nas técnicas de validação. Ela teve os maiores tempos de processamento, obtendo tanto o pior como o melhor resultado geral de acerto. A validação leave-one-person-out, com resultados ruins, revelou que a metodologia da coleta não permite ter um classificador genérico para pessoas diferentes. A técnica kfold cross-validation esteve presente no classificador com o melhor resultado de todos. Os resultados em geral foram satisfatórios. Palavras-Chave: Reconhecimento de Atividade Humana. Mineração de Dados. Classificadores. Rede Bayesiana. Rede Neural. ABSTRACT The Human Activity Recognition is a context awareness application intrinsic research theme, which has, for example, sports, security and health monitoring applications. As a way to acquire the human activity data, there are external approaches (e.g. cameras data) and embedded approaches (e.g. accelerometer data). In this area, we can find solutions using multiple sensors simultaneously supporting the real time data acquisition. In the other hand, there are authors focusing in an optimized and accurate way to classify the activity based on large amount of data. Here the Bayes Network and Neural Network classifiers were used. They were built from a public dataset regarding data acquired from accelerometers worn by a set of people. Considering the classification steps in Data Mining, the attributes selection, the building and training, then the validation tests were done, resulting in the Confusion Matrix, the accuracy rate and the processing time. The goal is to compare different classification methods using different building and training techniques, matching the dataset specifications, assessing the performance and accuracy rate's impacts. It was implemented a Java program using the Data Mining public library Weka. With the smaller processing times, the Neural Networks had excellent results. The Bayes Network required a further investigation on configuration and validation techniques, it had the biggest processing times, with both the smallest and the highest general accuracy result. The leave-oneperson-out validation technique, which had the worst results, shown that the gathering methodology was not the proper way to have data to build a generic classifier to any people. The k-fold cross-validation technique was used in the classifier with the best result. The general results were satisfactory. Keywords: Human Activity Recognition. Data Mining. Classifiers. Bayes Network. Neural Network. Figura 1 – Ilustração de Aplicações de HAR. ................................................................................ 12 Figura 2 – Diagrama de Sensibilidade ao Contexto. .................................................................... 13 Figura 3 – Virtual Caregiver – Aplicativo para Facebook. ............................................................ 19 Figura 4 – Virtual Caregiver – Aplicativo para Android. ............................................................... 19 Figura 5 – Arquitetura do Sistema de Detecção de Quedas. ...................................................... 21 Figura 6 – Ilustração da Tarefa de Classificação. ......................................................................... 23 Figura 7 – Arquitetura nivelada para aplicações de inferência de contexto. ............................ 24 Figura 8 – Diagrama de técnicas aplicadas a sinais para extração de características........... 25 Figura 9 – Diagrama de Metodologia de Classificador para HAR. ............................................. 28 Figura 10 – Distribuição das amostras nos voluntários................................................................ 29 Figura 11 – Distribuição das amostras nas classes...................................................................... 30 Figura 12 – Acelerômetros no corpo dos voluntários. .................................................................. 31 Figura 13 – Lilypad Arduíno (vestível). ........................................................................................... 31 Figura 14 – Arquivo dataset no formato CSV – amostra de algumas instâncias. .................... 32 Figura 15 – Exemplificação da Amostragem por Janela Deslizante. ......................................... 33 Figura 16 – Weka GUI – Exemplo de Rede Bayesiana. .............................................................. 36 Figura 17 – Diagrama de Implementação de classificadores HAR – Início. ............................. 40 Figura 18 – Diagrama de Implementação de classificadores HAR – Leave-one-person-out. 41 Figura 19 – Diagrama de Implementação de classificadores HAR – Holdout.......................... 42 Figura 20 – Diagrama de Implementação de classificadores HAR – Cross-Validation. ......... 43 Figura 21 – Diagrama de Implementação de classificadores HAR – Rede Neural. ................ 44 Figura 22 – Arquivo no formato ARFF. ........................................................................................... 45 Figura 23 – Weka GUI com aplicações. ......................................................................................... 47 Figura 24 – Weka GUI: Explorer. ..................................................................................................... 47 Figura 25 – Weka GUI: Arquivo carregado. ................................................................................... 48 Figura 26 – Weka GUI: Distribuição das classes para cada atributo. ........................................ 49 Figura 27 – Weka GUI: Memória insuficiente. ............................................................................... 50 Figura 28 – Weka GUI: Rede Bayesiana – Naive Bayes e Simple Estimator. ......................... 53 Figura 29 – Weka GUI: Rede Bayesiana (Gráfico) – Naive Bayes e Simple Estimator.......... 54 Figura 30 – Weka GUI: Rede Bayesiana – Hill Climber e Simple Estimator. ........................... 56 Figura 31 – Weka GUI: Rede Bayesiana – Seleção de Atributos com algoritmo Genético. .. 57 Figura 32 – Weka GUI: Rede Bayesiana – Hill Climber e Simple Estimator com seleção de atributos, somente os acelerômetros. ........................................................................ 59 Figura 33 – Weka GUI: Rede Bayesiana – Hill Climber e Simple Estimator, sem seleção de atributos. ......................................................................................................................... 61 Figura 34 – Weka GUI: Rede Naive Bayes – sem seleção de atributos. .................................. 62 Figura 35 – Weka GUI: Rede Bayesiana – K2 e Simple Estimator, leave-one-person-out.... 64 Figura 36 – Weka GUI: Rede Neural – Épocas=500.................................................................... 67 Figura 37 – Rede Neural: Gráfico da função sigmóide. ............................................................... 67 Figura 38 – Weka GUI: Rede Neural – Época 500. ...................................................................... 68 Figura 39 – Programa Java: Rede Bayesiana – estouro de memória com número de nós pai maior que 2. ................................................................................................................... 71 LISTA DE TABELAS Tabela 1 – Resultados com Weka GUI – Rede Bayesiana. ........................................................ 52 Tabela 2 – Resultados com Weka GUI – Rede Neural (Perceptron Multicamadas). .............. 52 Tabela 3 – Matriz de Confusão: Rede Bayesiana – Naive Bayes e Simple Estimator. .......... 54 Tabela 4 – Matriz de Confusão: Rede Bayesiana – Hill Climber e Simple Estimator, Seleção de atributos com algoritmo Genético........................................................................... 58 Tabela 5 – Matriz de Confusão: Rede Bayesiana – Hill Climber e Simple Estimator, Seleção de atributos somente com acelerômetros. ................................................................. 60 Tabela 6 – Matriz de Confusão: Rede Bayesiana – Hill Climber global e Simple Estimator.. 61 Tabela 7 – Matriz de Confusão: Rede Naive Bayes. .................................................................... 63 Tabela 8 – Matriz de Confusão: Rede Bayesiana – K2 e Simple Estimator. ............................ 65 Tabela 9 – Matriz de Confusão: Rede Neural (Perceptron Multicamadas) – Épocas=500, Taxa de Aprendizado = 0,3, Momentum = 0,2. ......................................................... 68 Tabela 10 – Resultados com programa Java – Rede Bayesiana. ............................................. 69 Tabela 11 – Resultados com programa Java – Rede Neural (Perceptron Multicamadas). ... 69 Tabela 12 – Matriz de Confusão: Rede Bayesiana – Hill Climber e Simple Estimator. Leaveone-person-out (katia), número máximo de nós pai igual a 1. ................................ 73 Tabela 13 – Matriz de Confusão: Rede Bayesiana – Hill Climber e Simple Estimator. Holdout com 66% para treinamento, número máximo de nós pai igual a 1. ..................... 74 Tabela 14 – Matriz de Confusão: Rede Bayesiana, repetição do teste – Hill Climber e Simple Estimator. Holdout com 66% para treinamento, número máximo de nós pai igual a 1. .................................................................................................................................. 76 Tabela 15 – Matriz de Confusão: Rede Bayesiana – Hill Climber e Simple Estimator. Leaveone-person-out (katia), número máximo de nós pai igual a 2. .............................. 77 Tabela 16 – Matriz de Confusão: Rede Bayesiana – Hill Climber e Simple Estimator. Leaveone-person-out (wallace), número máximo de nós pai igual a 2. ......................... 79 Tabela 17 – Matriz de Confusão: Rede Bayesiana – Hill Climber e Simple Estimator. Holdout com 66% para treinamento, número máximo de nós pai igual a 2. ..................... 80 Tabela 18 – Matriz de Confusão: Rede Bayesiana – Hill Climber e Simple Estimator. 10-fold cross validation, número máximo de nós pai igual a 2........................................... 82 Tabela 19 – Matriz de Confusão: Rede Neural (Perceptron Multicamadas) – Épocas=1000, Taxa de Aprendizado = 0,3, Momentum = 0,2. ....................................................... 84 Tabela 20 – Matriz de Confusão: Rede Neural (Perceptron Multicamadas) – Épocas=5000, Taxa de Aprendizado = 0,3, Momentum = 0,6. ....................................................... 86 SUMÁRIO 1 INTRODUÇÃO ............................................................................................... 11 1.1 CONTEXTUALIZAÇÃO .................................................................................. 11 1.2 OBJETIVO GERAL ......................................................................................... 14 1.3 ORGANIZAÇÃO DO TRABALHO ................................................................... 15 2 PESQUISA BIBLIOGRÁFICA........................................................................ 17 3 METODOLOGIA ............................................................................................ 28 3.1 METODOLOGIA HAR..................................................................................... 28 3.2 METODOLOGIA DA COLETA DE DADOS .................................................... 29 3.3 METODOLOGIA DE CLASSIFICAÇÃO.......................................................... 33 3.3.1 Mineração de Dados ..................................................................................... 33 3.3.2 Descrição do Processo ................................................................................ 37 3.3.3 Arquivo de Dados ......................................................................................... 45 3.3.4 Interface Gráfica de Usuário Weka .............................................................. 46 3.3.5 Desenvolvimento do Programa Java .......................................................... 49 4 RESULTADOS E DISCUSSÕES ................................................................... 51 4.1 RESULTADOS COM WEKA GUI ................................................................... 52 4.1.1 Rede Bayesiana ............................................................................................ 53 4.1.2 Rede Neural - PMC ........................................................................................ 65 4.2 RESULTADOS COM PROGRAMA JAVA ...................................................... 69 4.2.1 Rede Bayesiana ............................................................................................ 71 4.2.2 Rede Neural - PMC ........................................................................................ 82 5 CONCLUSÕES E TRABALHOS FUTUROS ................................................. 87 REFERÊNCIAS .............................................................................................. 92 APÊNDICE A – Código fonte Java .............................................................. 94 APÊNDICE B – Resultados Weka GUI na Rede Bayesiana ..................... 104 APÊNDICE C – Resultados Weka GUI na Rede Neural ........................... 117 APÊNDICE D – Resultados programa Java na Rede Bayesiana ............ 125 APÊNDICE E – Resultados programa Java na Rede Neural ................... 131 11 1 INTRODUÇÃO 1.1 CONTEXTUALIZAÇÃO É fato que as aplicações de tecnologia de computação vestível, com a disponibilidade de diversos tipos de serviços, têm se intensificado nos últimos anos. Por exemplo, grandes fabricantes de gadgets, tais como Apple e Samsung, têm lançado relógios dedicados com sensor de batimento cardíaco e outras facilidades que auxiliam o usuário nas comunicações e monitoramento da sua saúde, o que evidencia uma tendência de prover cada vez mais dispositivos vestíveis com serviços inteligentes em tempo real baseados no próprio comportamento do usuário. O termo Reconhecimento de Atividade Humana, o qual será referenciado a partir de agora como HAR (Human Activity Recognition), remete a uma solução, a qual ultimamente tem sido foco de intensas pesquisas, que fornece a informação em tempo real da atividade humana baseado em dados coletados de sensores. Tal sensoriamento pode ser feito de formas variadas, embarcado – acelerômetros, microfone, GPS (Global Positioning System), monitor de batimento cardíaco, RFID (Radio-Frequency Identification) – ou externo (câmera ou sensor de presença), o que torna a construção da solução do reconhecedor de atividade humana, ou simplesmente classificador, bastante desafiadora. Além dessas duas vertentes de pesquisa e aplicação (sensoriamento e classificação), existe a próxima etapa natural que é a entrega do serviço, que se baseia nos dois anteriores. A entrega de serviço está na linha de trabalho de Sensibilidade ao Contexto (Context Awereness), em que a partir da classificação, mais alguma outra informação relevante (por exemplo, a localização), fornece-se um serviço de grande utilidade (UGULINO; FERREIRA; VELLOSO; FUKS, 2012). A atividade é elemento chave para o contexto. As aplicações práticas para HAR são possíveis de serem identificadas em: monitoramento de atividades físicas, saúde assistida (UGULINO; FERREIRA; VELLOSO; FUKS, 2012), detecção de quedas (GJORESKI; LUSTREK; GAMS, 2011), assistência a idosos, serviços móveis baseados em localização, segurança (LOCKHART, 2011), jogos (Nintendo Wii ou Kinect) ou ainda nos esportes – ver na Figura 1. 12 Figura 1 – Ilustração de Aplicações de HAR. Fonte: Elaborado pelo autor, 2015. As técnicas de Mineração de Dados têm sido cada vez mais aplicadas em diversas áreas de conhecimento e tecnologias para descoberta de conhecimento a partir de grande massa de dados (KESAVARAJ; SUKUMARAN, 2013). É um processo computacional de descoberta de padrões em grande massa de dados, transformando isso em uma estrutura inteligente e compreensível. Em processos de Classificação e de Clusterização analisa-se um conjunto de dados e gera-se um conjunto de regras, utilizando uma base de dados para treinamento, que podem ser utilizadas para classificar automaticamente novos dados de entrada. O objetivo de um algoritmo de Classificação é gerar os resultados mais corretos e precisos quanto for possível. Classificadores têm várias aplicações (KESAVARAJ; SUKUMARAN, 2013) como em análise de consumo, modelagem de negócios, marketing, análise de crédito, biomedicina e modelagem de resposta a medicamentos. A Mineração de Dados e suas técnicas de classificação têm sido extensivamente utilizados para processar os dados coletados de sensores, como por exemplo acelerômetros, e em seguida obter resultados úteis de classificação nas aplicações de HAR. 13 Nos últimos anos a quantidade de trabalhos publicados na comunidade científica mundial sobre HAR tem crescido bastante. Em especial observamos publicações no Institute of Electrical and Electronics Engineers (IEEE) sobre HAR baseado em dados colhidos de acelerômetros vestíveis (UGULINO; CARDADOR; VEGA; VELLOSO; MILIDIU, 2012). Muitas publicações relacionadas com dados baseados em acelerômetros presentes em aparelhos celulares também têm sido comuns (KESAVARAJ; SUKUMARAN, 2013), (LOCKHART, 2011) e (RAVI; DANDEKAR; MYSORE; LITTMAN, 2005). A vasta popularização dos mais recentes modelos de smartphones (aparelho celular com funcionalidades avançadas que podem ser estendidas por meio de programas executados por seu sistema operacional) com acelerômetros já embarcados torna estas aplicações muito relevantes. Na Figura 2 é mostrado um diagrama esclarecedor da contextualização do assunto a ser tratado neste trabalho. Figura 2 – Diagrama de Sensibilidade ao Contexto. Fonte: Elaborado pelo autor, 2015. Este trabalho foca em classificadores de atividade humana com técnicas de Mineração de Dados a partir de dados público de acelerômetros triaxiais vestidos em voluntários em coleta controlada. 14 1.2 OBJETIVO GERAL Como se pode perceber pela contextualização abordada anteriormente, HAR se insere nas aplicações de sensibilidade ao contexto, que podem ser bem complexas e vão desde a coleta de dados de sensores diversos até a entrega de um serviço relevante, preciso e dinâmico. Isto tem alto grau de dependência dos dispositivos instalados, da capacidade de embarcar e dos requisitos da aplicação. O foco aqui dado é no desenvolvimento de classificadores aplicados a um conjunto de dados públicos referentes a acelerômetros triaxiais. O objetivo é implementar um programa Java, com a utilização da biblioteca Open Source Weka, biblioteca de código aberto chamada “Waikato Environment for Knowledge Analysis” (WEKA 3, 2014) para a aplicação de métodos de classificação, com treinamento e testes, num conjunto de dados público (chamado a partir de agora de dataset) referente a acelerômetros triaxiais e dados específicos de voluntários (UGULINO; CARDADOR; VEGA; VELLOSO; MILIDIU, 2012). Esses dados são obtidos de 4 acelerômetros triaxiais (x, y e z) espalhados no corpo de voluntários em coleta controlada durante um determinado tempo de monitoramento, bem como de suas características individuais tais como peso, idade, altura e índice de massa corporal. O resultado do programa é a classe de atividade humana a partir dos dados de entrada. Os objetivos são listados a seguir: 1. Expandir as aplicações com o dataset do trabalho dos autores Ugulino, Cardador, Vega, Velloso e Milidiu (2012), ao usar mais classificadores com diferentes configurações. o Parte-se da premissa de que não existe um único classificador que seja o melhor para todos os tipos de conjunto de dados, como apontado por Kesavaraj e Sukumaran (2013). Portanto é totalmente útil e esperado aplicar mais de uma técnica de classificação num determinado problema. 2. Comparar técnicas de validação. 3. Verificar as diferenças de treinamento de classificador considerando coletas de voluntários distintos (diferentes características físicas). 15 4. Avaliar o desempenho dos classificadores com diferentes técnicas de validação. As características e métodos da abordagem são: Rede Neural (Perceptron Multicamadas) e Rede Bayesiana. Treinamento Supervisionado. Testes para avaliação do classificador. Comparação de resultados. Considerando a extensão do contexto em que se insere o desenvolvimento de classificadores para HAR aqui discutido, é importante salientar os itens que não são escopo deste trabalho, a saber: Sensores, dispositivos, Calibração, Coleta. Dados de acelerômetros de smartphone. Classificadores Meta-level (RAVI; DANDEKAR; MYSORE; LITTMAN, 2005). Entrega de Serviço a partir da atividade – Sensibilidade ao Contexto. 1.3 ORGANIZAÇÃO DO TRABALHO O trabalho desenvolvido foi dividido nas seguintes etapas: Pesquisa Bibliográfica, Definição de Escopo, Metodologia, Implementação, Resultados e Conclusões. No Capítulo 1 são apresentados a contextualização do problema, explicando conceitos importantes sobre o assunto, com a definição do escopo deste trabalho e a pesquisa bibliográfica base. No Capítulo 2 os trabalhos de referência são descritos, mostrando-se alguns de seus resultados e metodologias. A Metodologia utilizada, incluindo a explicação de como o dataset público fornecido na publicação base deste trabalho (UGULINO; CARDADOR; VEGA; VELLOSO; MILIDIU, 2012) foi coletado, está no Capítulo 3. No referido capítulo, estão detalhadamente explicadas as técnicas de classificação utilizadas, as variações de 16 configurações de cada uma, a forma como os resultados são obtidos e como são comparados. No Capítulo 4 os resultados de cada diferente configuração de cada classificador utilizado (Rede Bayesiana e Rede Neural) são mostrados em forma de tabelas, sendo seguido por breves discussões de cada um. As Matrizes de Confusão e os desempenhos são evidenciadas. As conclusões sobre os resultados obtidos, fazendo-se comparações, inclusive com o resultado do trabalho de Ugulino, Cardador, Vega, Velloso e Milidiu (2012), e as sugestões de possíveis futuras abordagens e diferentes metas, estão no Capítulo 5. 17 2 PESQUISA BIBLIOGRÁFICA Nesta seção são apresentadas as principais informações referentes às referências bibliográficas pesquisadas para fundamentar este trabalho. Principais assuntos abordados: Mineração de Dados e Classificadores. Coleta de Dados para atividade humana – diferentes dispositivos e préprocessamento. Reconhecimento de Atividade Humana e suas aplicações. O presente trabalho teve como pilar fundamental um dataset público disponível em Ugulino, Cardador, Vega, Velloso e Milidiu (2012), com 165633 instâncias. Tal conjunto de dados é utilizado aqui neste trabalho em todos os testes para obtenção dos resultados discutidos e para a comparação de classificadores. No referido trabalho (UGULINO; CARDADOR; VEGA; VELLOSO; MILIDIU, 2012) o autor contextualiza o assunto tratado fazendo uma revisão da literatura, com base em sua pesquisa nas publicações dos últimos anos sobre o assunto, evidenciando um crescente interesse e relevância: no IEEE, entre os anos de 2006 e 2012, foram publicados 144 artigos sobre “Activity Recognition” (reconhecimento de atividade), desconsiderando-se os que usam acelerômetros de smartphones, processamento de imagem, atividades não humanas, atividade combinadas, jogos, reconhecimento de gestos e trabalhos somente com sensores sem classificadores. Em seguida, ele detalha o trabalho da construção da coleta de dados de acelerômetros (configuração, instalação e calibragem de dispositivos dedicados – 4 acelerômetros tri-axiais ADXL335 conectados a um microcontrolador ATmega328V, do toolkit Lilypad Arduino). Segue-se o detalhamento da escolha e implementação de classificador de atividade humana baseado em máquina de aprendizado, incluindo-se a metodologia de préprocessamento. Com o uso do classificador AdaBoost com 10 iterações, sendo a árvore de decisão C4.5 com um fator de confiança de 0,25, o resultado geral foi de 18 99,4% (média ponderada), usando a técnica de validação 10-fold cross validation, com os seguintes percentuais de acurácia por classe de atividade: “Sentado” 100%, “Sentar-se” 96,9%, “Em pé” 99,8%, “Levantando-se” 96,9%, e “Andando” 99,8%. Observa-se que neste trabalho não foi feita nenhuma menção mais precisa à plataforma de testes nem aos tempos de processamento para pré-processamento, construção e validação do classificador, não ficando portanto evidente qual foi o exato custo computacional do classificador utilizado para os dados coletados. Já em Ugulino, Ferreira, Velloso e Fuks (2012) os autores estendem as realizações do trabalho feito em Ugulino, Cardador, Vega, Velloso e Milidiu (2012) no quesito entrega de serviço. Possui foco no desafio de proporcionar uma vida mais independente para idosos e doentes crônicos, de modo a evitar o impacto social, os riscos e os custos de uma internação, que cresce à medida que a expectativa de vida da população tem aumentado. O referido trabalho (UGULINO; FERREIRA; VELLOSO; FUKS, 2012) aplica um sistema de e-health para acompanhamento de pacientes, onde acelerômetros vestíveis geram dados para coleta e classificação em tempo real, tendo-se um sistema chamado Virtual Caregiver, acessível via aplicativo de smartphone e de redes sociais (como o Facebook), para acompanhamento em tempo real. Nessa solução os batimentos cardíacos do paciente são monitorados e associados com sua atividade ou postura e dados de GPS. Tanto parentes como médicos podem acompanhar pacientes constantemente por este sistema, podendo-se atuar de forma preventiva ao invés de análise estatística de um grande banco de dados. Exemplificações da tela do sistema de acompanhamento no Facebook e em aplicativo de smartphone estão nas Figuras 3 e Figura 4, respectivamente. Elas foram propositalmente alteradas pelo autor para preservar dados pessoais que nelas existem. A metodologia de coleta, amostragem, extração e seleção de características, bem como o classificador utilizado foi o mesmo que em Ugulino, Cardador, Vega, Velloso e Milidiu (2012), ou seja, AdaBoost com 10 árvores C4.5, com o qual se atingiu 99,4% de acerto. 19 Figura 3 – Virtual Caregiver – Aplicativo para Facebook. Fonte: Ugulino, Ferreira, Velloso e Fuks (2012). Figura 4 – Virtual Caregiver – Aplicativo para Android. 20 Fonte: Ugulino, Ferreira, Velloso e Fuks (2012). Em Gjoreski, Lustrek e Gams (2011) aborda-se uma interessante aplicação prática para o Reconhecimento de Atividade Humana, que é a Detecção de Queda através de reconhecimento de postura. Motiva-se pela crescente taxa de envelhecimento da população de alguns países, principalmente na Europa, o que aumenta a preocupação com a qualidade de vida das pessoas idosas, cada vez menos assistidas diretamente por uma pessoa constantemente dedicada. Os autores Gjoreski, Lustrek e Gams (2011) exploram diversos cenários de posicionamento e quantidade de acelerômetros vestíveis, com nove posições possíveis para cada acelerômetro (espalhadas na cintura, peito, coxa e tornozelo). Os testes realizados foram bem completos e detalhados: Sentando-se normalmente numa cadeira. Tropeçando e caindo rapidamente no chão. Deitando-se normalmente na cama. Queda vagarosa (tentando se segurar num móvel), caindo no chão. Sentando-se rapidamente numa cadeira. Caindo rapidamente da cadeira ao tentar se levantar, acabando sentado no chão. Procurando algo no chão com as mãos e pés apoiados no chão, e então caindo. 21 O trabalho de Gjoreski, Lustrek e Gams (2011) utiliza técnica de classificador com Mineração de Dados, com treinamento supervisionado, sendo um algoritmo baseado em limiares. Após avaliação de diversos classificadores utilizando a ferramenta Interface Gráfica de Usuário do Weka, o qual será referenciado a partir de agora como Weka GUI (Graphical User Interface), tais como Naive Bayes, SVM, J48 e Floresta Aleatória (Random Forest), este último foi o escolhido por ter atingido os melhores resultados para todas posturas dos testes. Na Figura 5 é mostrado um diagrama exemplificando as etapas de detecção de quedas, desde a aquisição de dados do mundo real até o classificador que realiza a decisão. Figura 5 – Arquitetura do Sistema de Detecção de Quedas. Fonte: Adaptado de Gjoreski, Lustrek e Gams (2011). Com o objetivo de ser o menos intrusivo possível, com o mínimo de acelerômetros mas com o máximo de acerto na detecção, ele conclui que 3 acelerômetros são suficientes para reconhecimento de queda, exceto em casos de queda muito lenta. Atingiu 90% de acerto no reconhecimento de postura com apenas 2 acelerômetros, um no peito e outro na cintura. Com os 4 acelerômetros atinge-se 99% de acurácia no reconhecimento de postura. Ele compara seu trabalho à solução de reconhecimento de postura utilizando sensores locais (externos, não embarcado), que requer uma instalação dedicada e é mais caro, e que só atingiu 89% de acerto. Em Kesavaraj e Sukumaran (2013) são apresentadas as técnicas mais comuns de Classificação. As técnicas de Classificação, ou máquinas de aprendizado, são as mais 22 comuns em aplicações para Mineração de Dados, onde se prediz a que grupo pertence uma determinada instância de dados. Nesse estudo os autores Kesavaraj e Sukumaran (2013) fazem uma revisão global das principais técnicas de classificação tais como Árvore de Decisão, Rede Bayesiana, Rede Neural, Support Vector Machines (SVM), k-Nearest Neighbor. As Redes Neurais Artificiais (RNA), com arquitetura Perceptron Multicamadas (PMC), segundo Rakhman, Sun e Catur (2009), são utilizadas nas áreas de reconhecimento de padrões, neurociência computacional, reconhecimento de fala, reconhecimento de imagens, segurança cibernética. Uma importante área de aplicação recente é a Inteligência Artificial. Ainda segundo o autor, o processo de construção de uma RNA no Weka utiliza PMC, que é um classificador que utiliza algoritmo backpropagation para realizar a classificação da instância de entrada da rede. Como é de senso comum, o trabalho de Kesavaraj e Sukumaran (2013) conclui que não existe um único algoritmo Classificador que seja o melhor para todos os tipos de dataset. Cada Classificador é específico a um ou mais domínios de aplicações. Também é mencionado que apesar de os Classificadores terem valiosas aplicações diretas em muitos problemas, é importante avaliar o risco de se estar escolhendo um deles. Pode-se estar escolhendo com base num resultado aleatoriamente bom, ou seja, um que coincidentemente no contexto do treinamento resultou em boa acurácia, mas que pode ser ineficaz ao ser estendido a novos dados. Nesse estudo sobre classificadores os autores Kesavaraj e Sukumaran (2013), na introdução, explica como é o processo de construção de um Classificador. Na construção do modelo (treinamento) o algoritmo de classificação busca por relacionamentos entre os valores preditos e os valores desejados. Diferentes Classificadores utilizam diferentes técnicas para encontrar tais relacionamentos. Esses relacionamentos podem então ser sumarizados como um modelo, o qual pode ser aplicado a novos e diferentes conjuntos de dados em que a classe é desconhecida. Na Figura 6 é ilustrada a tarefa de classificação. 23 Figura 6 – Ilustração da Tarefa de Classificação. Fonte: Adaptado de Kesavaraj e Sukumaran (2013). Motivado pela praticamente onipresença de dispositivos móveis, tais como smartphones, e pela grande necessidade de prover serviços sensíveis ao contexto (redes sociais, assistência a idosos, sistemas de alertas), em Figo, Diniz, Ferreira e Cardoso (2010) apresenta-se uma extensa investigação e resultados, incluindo comparações de desempenho (tempo de processamento) entre as técnicas, para metodologias de extração de informações de atividades a partir de dados reais brutos de acelerômetros, desde processamento de sinal clássico como Fast Fourier Transform (FFT) até metodologias de processamento de palavras. Uma organização comumente apresentada de aplicações para sensibilidade ao contexto é mostrada na Figura 7. 24 Figura 7 – Arquitetura nivelada para aplicações de inferência de contexto. Fonte: Adaptado de Figo, Diniz, Ferreira e Cardoso (2010). Um diagrama geral hierarquizado das técnicas de pré-processamento é mostrado na Figura 8. Nela pode-se verificar que existem 3 grandes tipos de técnicas: Domínio do Tempo. Domínio da Frequência. Domínio de Representação Discreta. 25 Figura 8 – Diagrama de técnicas aplicadas a sinais para extração de características. Fonte: Adaptado de Figo, Diniz, Ferreira e Cardoso (2010). Em geral as métricas no domínio da frequência, como FFT e Wavelets, se mostraram aquém do esperado no trabalho de Figo, Diniz, Ferreira e Cardoso (2010), considerando-se os recursos computacionais gastos no seu processamento. Técnicas de processamento baseadas em tempo, as quais em geral são mais simples de implementar, apresentaram bons resultados. O processamento baseado em palavras também se mostrou bom para a aplicação. Cogitou-se que ambas técnicas podem melhorar ainda mais se for aplicado mais pré-processamento nos dados. Este trabalho traz importante contribuição na avaliação das melhores técnicas de préprocessamento para aplicações com acelerômetros e inferência de contexto. No trabalho de Huynh (2008) pôde-se verificar conceitos e um breve estudo com resultados de experimentos com variadas quantidades de dados para treinamentos de classificadores, por exemplo Naive Bayes. A maioria das atividades realizadas por usuários de smartphones durante o dia-a-dia são, segundo Lockhart (2011): Andar, Correr, Subir e Descer Escadas, Sentar, 26 Levantar, Deitar. O trabalho de Lockhart (2011) se foca em métodos de Mineração de Dados com dados de acelerômetros para reconhecimento de atividades de usuários que carregam um smartphone comum no bolso direito da calça. O diferencial proposto é a classificação mesmo quando a pessoa está fazendo múltiplas atividades, não somente uma única por vez. Baseando-se em dispositivos de diversos fabricantes com sistema operacional Android, e utilizando a biblioteca Weka (WEKA 3, 2014), ambos construídos em linguagem de programação Java, foram coletados dados de 53 indivíduos. Segundo Lockhart (2011), foi verificado que um modelo impessoal e generalizado, construído com base em um conjunto de pessoas e testado em outro conjunto, têm em média uma taxa de acerto de 71%. Isso poderia trazer o benefício de se ter um único Reconhecedor de Atividade que poderia ser utilizado por qualquer pessoa. Entretanto o autor revela que uma modelagem feita a partir de um único acelerômetro para uma pessoa, utilizada somente com ela, resulta numa taxa de acerto muito melhor, de 97%. Portanto conclui-se que há enormes diferenças na maneira como as pessoas realizam suas atividades, em termos do que um acelerômetro pode capturar. Aplicações interessantes de HAR para o dia-a-dia das pessoas com dispositivos móveis são sugeridas, tais como: segurança e prevenção de roubo com identificação de usuário, adaptação dos serviços do dispositivo móvel de acordo com a atividade (por exemplo, a lista de músicas tocadas enquanto corre), comportamento de saúde (acompanhamento e registro das atividades diárias, inferindo-se o grau de sedentarismo, por exemplo). Segundo Ravi, Dandekar, Mysore e Littman (2005), acelerômetros triaxiais, os quais fornecem valores de acelerações nos eixos x, y e z, podem ser utilizados tanto em detecção de movimento como em sensoriamento de posição corporal. Importantes avanços são citados em tal trabalho tais como sensibilidade ao contexto, provimento de serviços e monitoramento de atividades. O problema de reconhecimento de atividade humana é tratado como um problema de classificação pelos autores Ravi, 27 Dandekar, Mysore e Littman (2005). Um detalhado trabalho de desenvolvimento e análise de classificadores e meta-classificadores é apresentado, com comparações de resultados de desempenho e acurácia. Os dados foram coletados de acelerômetros embarcados nos indivíduos, com transmissão via bluetooth para um dispositivo móvel. As classes consideradas foram: Em pé, Andando, Correndo, Subindo Escadas, Descendo Escadas, Sentar-se, Utilizando o Aspirador de Pó, Escovando Dente. Avaliações de desempenho são feitas para classificadores do tipo Árvore de Decisão, SVM, Naive Bayes, entre outros. Classificadores meta-level foram utilizados objetivando-se encontrar a melhor combinação de classificadores para dados de reconhecimento de atividades, aplicando-se diferentes técnicas de avaliação de resultados entre classificadores base. 28 3 METODOLOGIA 3.1 METODOLOGIA HAR Esta seção visa definir como é a maneira com que uma solução é construída para prover a classificação de atividade humana. Desde a coleta de dados até a validação do classificador. Na Figura 9 é ilustrado como é construído e utilizado um Classificador, exemplificandose dados de Reconhecimento de Atividade Humana, tais como o sinal coletado de acelerômetro devidamente posicionado quando a pessoa faz o movimento de beber do copo ou virar a página de um livro. Figura 9 – Diagrama de Metodologia de Classificador para HAR. Fonte: Elaborado pelo autor, 2015. As etapas de construção de um Classificador são: 1. Treinamento: a. Buscam-se os relacionamentos entre os dados das instâncias de entrada e as classes alvo, utilizando-se dados separados para treinamento. 29 i. OBS.: Os dados para treinamento podem ser separados utilizando-se diversas técnicas, como visto na Seção 3.3.2. b. O Classificador é construído baseado num conjunto de dados cujas classificações já são conhecidas – Aprendizado Supervisionado. 2. Testes de Validação. a. Com o Modelo (conjunto de regras) construído, ou seja, o Classificador pronto, usa-se outro conjunto de dados (o de Testes). b. Com essa aplicação, comparam-se os resultados (a classe à qual pertence cada instância do conjunto de dados) com as classes desejadas. 3. Resultados: a. Avaliam-se as taxas de acerto gerais, as Matrizes de Confusão, o Desempenho de Treinamento e construção do modelo e dos Testes de validação. 3.2 METODOLOGIA DA COLETA DE DADOS Esta seção visa explicar como foi a coleta e os critérios de obtenção de dados conforme trabalho de Ugulino, Cardador, Vega, Velloso e Milidiu (2012), onde se obteve o dataset público. Note-se que os métodos descritos nesta seção não denotam as ações do presente trabalho, mas sim como foram os passos e considerações explicados pelos referidos autores. Os dados foram coletados de 4 acelerômetros tri-axiais (x, y e z), 2 horas de atividades feitas separadamente para cada um de 4 voluntários (2 homens e 2 mulheres), totalizando 8 horas de atividades coletadas. A partir da coleta, foi feita a amostragem dos sinais dos sensores. Na Figura 10 verifica-se a distribuição das instâncias dos indivíduos por gênero, idade, altura e peso. Figura 10 – Distribuição das amostras nos voluntários. Fonte: Adaptado de Ugulino, Cardador, Vega, Velloso e Milidiu (2012). 30 Foram no total 165.633 amostras e consideradas 5 classes de atividades, realizadas de forma controlada e num tempo determinado, seguindo um roteiro: 1. Sentado (Sitting) 2. Sentar-se (Sitting down) 3. Em pé (Standing) 4. Levantando-se (Standing up) 5. Andando (Walking) Conforme confirmado nos testes do Capítulo 4, onde o arquivo de dados fornecido pelos autores Ugulino, Cardador, Vega, Velloso e Milidiu (2012) foi carregado pelo programa Java para treinamento e testes para a construção de classificador, as amostras estão distribuídas da forma da Figura 11. Figura 11 – Distribuição das amostras nas classes. Fonte: Adaptado de Ugulino, Cardador, Vega, Velloso e Milidiu (2012). Os acelerômetros foram instalados no corpo dos voluntários nas seguintes posições (Figura 12): 1. Cintura (Waist). 2. Coxa esquerda (Left Thigh). 3. Tornozelo direito (Right Ankle). 4. Braço direito (Right Arm). 31 Figura 12 – Acelerômetros no corpo dos voluntários. Fonte: Adaptado de Ugulino, Cardador, Vega, Velloso e Milidiu (2012). A captura dos dados dos acelerômetros foi através de plataforma Lilypad Arduíno (placa microcontroladora projetada para wearables e e-textiles), ver Figura 13. Figura 13 – Lilypad Arduíno (vestível). Fonte: Ugulino, Cardador, Vega, Velloso e Milidiu (2012). 32 Um arquivo no formato Comma-Separated Values (CSV) foi fornecido pelos autores Ugulino, Cardador, Vega, Velloso e Milidiu (2012), contendo todas as amostras coletadas. Uma visualização com o editor de planilhas pode ser vista na Figura 14. Figura 14 – Arquivo dataset no formato CSV – amostra de algumas instâncias. Fonte: Adaptado de Ugulino, Cardador, Vega, Velloso e Milidiu (2012). Uma das primeiras etapas a serem feitas com os dados coletados é o seu PréProcessamento, quando se prepara o conjunto de dados coletados na forma bruta. Isto foi feito por Ugulino, Cardador, Vega, Velloso e Milidiu (2012) no dataset disponibilizado publicamente. Esta ação consiste em amostrar o sinal do sensor convenientemente, de acordo com a técnica que melhor se adequa aos dados e ao cenário em questão. Neste caso foi utilizada a técnica de Janela Deslizante, onde foi utilizada uma janela de tempo de 1 segundo, sobreposição entre janelas de 150 milissegundos, frequência de aproximadamente 8 amostras por segundo. Uma exemplificação visual da amostragem por Janela Deslizante sobre o sinal é mostrada na Figura 15. O resultado dessa amostragem são as instâncias do dataset, que corresponde cada uma a uma linha no arquivo, contendo os valores dos sinais em x, y e z de cada acelerômetro, conforme Figura 14. 33 Figura 15 – Exemplificação da Amostragem por Janela Deslizante. Fonte: Elaborado pelo autor, 2015. 3.3 METODOLOGIA DE CLASSIFICAÇÃO Esta seção descreve a metodologia planejada e implementada para este trabalho de construção de classificadores para testes e comparações dos resultados. Na Seção 3.3.1 se descrevem brevemente os passos da Mineração de Dados e como se obter um bom classificador. Na Seção 3.3.2 é apresentado o processo desenvolvido neste trabalho, através de um Diagrama de Implementação dos classificadores. A preparação dos dados de entrada na forma de arquivo em formato especial é descrita na Seção 3.3.3. O propósito e a forma como é utilizada a interface gráfica Weka GUI está na Seção 3.3.4. Na Seção 3.3.5 é feita uma breve comparação entre a abordagem com Weka GUI e o Programa Java desenvolvido, seguindo-se pela descrição da implementação do Programa Java de aplicação dos Classificadores. 3.3.1 Mineração de Dados De forma geral, nas aplicações de técnicas de Mineração de Dados, têm-se a seguinte sequencia ações: 34 1. 2. 3. 4. 5. Pré-processamento. Extração de características. Seleção de características. Classificador. Obtenção da Matriz de Confusão. Seguindo a Mineração de Dados e a classificação de instâncias, após a avaliação da Matriz de Confusão e das taxas de acerto, de cada classe desejada, o pesquisador em geral repete os passos acima, pré-processando novamente com o objetivo de sanar ruídos nas informações, preencher valores faltantes ou até mesmo ajustar a infraestrutura de sensores e coleta de dados. Ele reavalia as características/atributos considerados, podendo remover os irrelevantes ou os com ruído, alterar a forma como alguns são calculados e consolidados, ou adicionar outros para melhorar a qualidade da classificação. A partir disso reconstrói e treina seu classificador, separando convenientemente a massa de dados para testes, para então obter as taxas de acerto e Matriz de Confusão. Este processo depende de muitos fatores, tais como a experiência do pesquisador em relação ao problema tratado, a forma como os dados são coletados, se a quantidade de dados é suficientemente representativa do problema, entre outros. Sendo assim ele pode refazer seu Classificador convenientemente, adotando diferentes configurações para melhorar os resultados. Sobre a Rede Bayesiana como classificador (BOUCKAERT,2008), cada atributo e classe é representado por um nó. Para o caso de atributos todos discretos, cada nó da rede possui uma tabela de probabilidades, que são calculadas durante sua construção. O cálculo de probabilidade de priori é feito utilizando a Inferência de Bayes, ou seja P(Y|X)=P(X|Y)*P(Y)/P(X), onde P(Y|X) é a probabilidade a posteriori (ou seja, probabilidade da classe Y dado o atributo X), P(X|Y) é a probabilidade a priori, P(Y) é a probabilidade da classe dada sua fração nas instâncias, P(X) é a verossimilhança. De forma geral, a construção de uma Rede Bayesiana segue os seguintes passos de aprendizado: 1) Assume-se alguma ordem entre os nós, obtendo-se uma lista. 2) Nessa lista de nós, para cada probabilidade de cada nó é verificado se há dependência dos nós anteriores na lista. 35 3) Para onde há impacto, cria-se um arco do nó anterior para o atual. a. Desta forma tem-se uma rede que é um grafo direcional acíclico. 4) Calculam-se as probabilidades de cada nó dado as dos nós pai – Probabilidade a Priori. a. Utiliza as informações dos dados de treinamento, onde se conhecem as probabilidades das classes e as verossimilhanças. 5) No nó da classe, calcula as probabilidades com base nas probabilidades a priori nos nós de dependência. 6) Verifica a acurácia com base nas instâncias de treinamento. 7) Repete passo 1. a. Essa iteração é repetida tantas vezes quantas forem necessárias para o algoritmo de treinamento decidir pela melhor rede. O processo de construção e treinamento da Rede Bayesiana é feito através de uma heurística a ser escolhida. Na biblioteca Weka estão disponíveis, na forma de algoritmo de aprendizado (“searchAlgorithm”), por exemplo (BOUCKAERT,2008): Hill Climber: Técnica de otimização de busca local, começa com uma solução arbitrária e tenta buscar a melhor solução ao mudar um dos elementos da solução. Se a melhorar a solução, uma nova mudança simples é feita na nova solução até não haver mais como melhorar. Uma outra técnica chamada K2 é semelhante, sendo que considera uma ordenação fixa das variáveis da rede. Simulated Anealing: Metaheurística para otimização com busca local probabilística, fazendo analogia com a termodinâmica. A partir de uma solução qualquer, gera novo vizinho próximo, escolhido de acordo com uma função objetivo e variável (temperatura), proporcional à componente aleatória, convergindo para a solução ótima. A cada geração de um novo vizinho, é testada a variação delta do valor da função objetivo. Genetic Search: Técnica de busca para otimização e busca, inspirada pela biologia evolutiva. Dada uma população (solução), a evolução é por novas gerações. A cada geração, a adaptação de cada solução é avaliada, alguns indivíduos são selecionados para a próxima geração, e recombinados ou mutados para formar uma nova população, que é então é utilizada como entrada para a próxima iteração do algoritmo. 36 Na Figura 16 é mostrada uma Rede Bayesiana de exemplo, onde se podem visualizar os nós dos atributos e o nó da classe, bem como os arcos ligando-os. Figura 16 – Weka GUI – Exemplo de Rede Bayesiana. Fonte: Bouckaert (2008). Segundo Bouckaert (2008), sendo U = {x1, ..., xn}, n ≥ 1, um conjunto de variáveis aleatórias, a Rede Bayesiana B sobre o conjunto U é uma estrutura de rede BS, a qual é uma rede direcional acíclica sobre U e um conjunto de tabelas de probabilidades BP = { p(u | pa(u)) | u U } onde pa(u) é o conjunto de nós pai de u em BS. A Rede Bayesiana representa a distribuição de probabilidades P(U)=Πu U p(u|pa(u)). As Redes Neurais Artificiais (RNA), segundo Rakhman, Sun e Catur (2009), é um modelo matemático ou computacional que tenta simular a estrutura e os aspectos funcionais de uma rede neural biológica. Consiste num grupo interconectado de neurônios artificiais. Isso provê uma poderosa ferramenta de aprendizado, bastante utilizado em Mineração de Dados devido a ter uma boa resposta preditiva. A arquitetura Perceptron Multicamadas (PMC) é a mais famosa RNA, nela os neurônios são agrupados em camadas (uma camada de entrada, uma de saída e uma ou mais camadas escondidas), e existem apenas conexões para frente (feedforward). Ela mapeia um conjunto de dados de entrada (instância) num valor de saída apropriado (classe). Utiliza três ou mais camadas de neurônios (nós), com função de ativação não linear, portanto é capaz de distinguir dados separados não linearmente. Cada nó 37 de uma camada se conecta com todos os nós da camada seguinte sob um determinado peso. O algoritmo backpropagation de aprendizado supervisionado de rede é o mais comumente utilizado em diversas aplicações. 3.3.2 Descrição do Processo Neste trabalho as tradicionais técnicas de Extração e Seleção de Características (FIGO; DINIZ; FERREIRA; CARDOSO, 2010) não foram implementadas pelos seguintes motivos: Não há valores faltantes entre os atributos nas instâncias. A não padronização entre os valores dos atributos é resolvida com sua normalização quando necessário, dependendo do classificador. Um dos propósitos deste trabalho é expandir a abordagem do dataset do trabalho de Ugulino, Cardador, Vega, Velloso e Milidiu (2012), onde foram extraídas e selecionadas diversas características a partir dos atributos de entrada. É importante ressaltar que tais cálculos e seleção lá descritos certamente demandam esforço computacional (tempo, memória e processamento), o que contudo não foi mencionado. A Extração e Seleção de Características tem como um dos principais propósitos reduzir a redundância dos dados de entrada e manter apenas o que for mais relevante para a classificação. Uma das etapas deste trabalho é a aplicação de técnica de seleção de atributos para comparação com a não seleção (utilização de todos os atributos da forma como foram coletados, ou seja os valores fornecidos pelos acelerômetros). Note-se que aqui não é feita criação de características especiais a partir dos atributos. Conforme já esclarecido na seção 1.2, para a aplicação de métodos de classificação foi utilizada a biblioteca de código aberto Open Source Weka, abreviatura para “Waikato Environment for Knowledge Analysis” (WEKA 3, 2014). É uma plataforma de máquina de aprendizado implementada em Java, desenvolvido pela Universidade de Waikato, sendo aprimorada desde 1997, utilizada em diversas áreas, em especial educação e pesquisa. Ela contém ferramentas de visualização e algoritmos para análise de dados e modelos de predição, juntamente com uma interface gráfica que facilita o acesso às suas funcionalidades. Por disponibilizar um grande número de 38 métodos e técnicas que podem ser incorporados em outros sistemas ou serem visualizados graficamente, é uma escolha de muitos pesquisadores e desenvolvedores. Por ser construída em Java, uma linguagem moderna, muito conhecida e portátil, torna a sua aplicação muito ampla, podendo inclusive ser aplicada em tecnologia embarcada. Com o intuito de diversificar a abordagem de implementação de classificadores no dataset público para HAR, e por consequência expandir a análise de classificação e prover melhor entendimento dos dados coletados para sua melhor classificação, este trabalho tem a seguinte sequência de ações: 1) Preparação do arquivo de dados (dataset) no formato apropriado. 2) Utilização de Weka GUI (resultados na Seção 4.1) através de: a) Rede Bayesiana i) Utilizar diferentes técnicas de validação: (1) 10-fold cross-validation. (2) holdout com 66% para treinamento. (3) leave-one-person-out – variando na escolha da pessoa para testes. ii) Algoritmos de Aprendizado de rede: (1) Naive Bayes. (2) Hill Climber. (3) Hill Climber (global, com ajustes de configuração). (4) K2. iii) Seleção de Atributos: (1) Nenhum – usa todos atributos do dataset. (2) Algoritmo Genético para descobrir os atributos relevantes. (3) Seleção Manual – apenas os dados dos acelerômetros, ignorando os atributos físicos dos indivíduos. b) Rede Naive Bayes (holdout com 66% para treinamento). i) Classificador Ingênuo (Naive Bayes) – pressupões independência entre os sensores. c) Rede Neural – Perceptron Multicamadas (algoritmo Validação holdout). 39 i) Definir melhor combinação de número de Épocas, Taxa de Aprendizado, Momentum e normalização dos atributos de entrada. d) Aquisição da Taxa de Acerto. e) Aquisição da Matriz de Confusão. f) Comparações. g) Conclusões (Capítulo 5). 3) Desenvolvimento do Programa Java (resultados na Seção 4.2) através de: a) Rede Bayesiana (algoritmo de aprendizado Hill Climber e nenhuma seleção de atributos) i) Utilizar diferentes técnicas de validação: (1) 10-fold cross-validation. (2) holdout com 66% para treinamento. (3) leave-one-person-out – variando na escolha da pessoa para testes. ii) Número máximo de nós pai na rede: (1) 1 nó. (2) 2 nós. b) Rede Neural – Perceptron Multicamadas (algoritmo Validação holdout). i) Definir melhor combinação de número de Épocas, Taxa de Aprendizado, Momentum e normalização dos atributos de entrada. c) Aquisição da Taxa de Acerto. d) Aquisição da Matriz de Confusão. e) Aquisição do Desempenho: i) Tempo para construir treinar a rede. ii) Tempo para Teste de validação. f) Comparações. g) Conclusões (Capítulo 5). Note-se que além da própria Rede Bayesiana, foi implementada também o classificador ingênuo, isto é, a Rede Naive Bayes. A intenção é verificar o pressuposto de independência entre os atributos de entrada. Um diagrama esclarecedor da metodologia e passos utilizados neste trabalho é mostrado pela composição da Figura 17, Figura 18, Figura 19, Figura 20 e Figura 21. 40 Observa-se que o registro de consumo de memória foi um item não fundamental para análise final dos classificadores, sendo apenas item de monitoramento em caso de alguma configuração ou implementação estar causando utilização excessiva da memória do computador, ocorrendo estouro de pilha de memória. Figura 17 – Diagrama de Implementação de classificadores HAR – Início. Fonte: Elaborado pelo autor, 2015. 41 Figura 18 – Diagrama de Implementação de classificadores HAR – Leave-one-person-out. Fonte: Elaborado pelo autor, 2015. 42 Figura 19 – Diagrama de Implementação de classificadores HAR – Holdout. Fonte: Elaborado pelo autor, 2015. 43 Figura 20 – Diagrama de Implementação de classificadores HAR – Cross-Validation. Fonte: Elaborado pelo autor, 2015. 44 Figura 21 – Diagrama de Implementação de classificadores HAR – Rede Neural. Fonte: Elaborado pelo autor, 2015. 45 3.3.3 Arquivo de Dados Com o arquivo de dados (dataset) fornecido pelos autores Ugulino, Cardador, Vega, Velloso e Milidiu (2012), contendo todas as instâncias, foi necessário transformar para o formato específico utilizado pela biblioteca Weka (WEKA 3, 2014). Este arquivo tem a extensão chamada Attribute-Relation File Format (ARFF), sendo codificado como American Standard Code for Information Interchange (ASCII), e possui uma sintaxe específica. Uma amostra de como ficou o arquivo ARFF após a conversão manual do arquivo CSV é mostrada na Figura 22. Figura 22 – Arquivo no formato ARFF. % HAR dataset - Ugulino, W.; Cardador, D.; Vega, K.; Velloso, E.; Milidiu, R.; Fuks, H. % Wearable Computing: Accelerometers' Data Classification of Body Postures and Movements. @relation 'HAR' @attribute 'user' { debora, jose_carlos, katia, wallace} @attribute 'gender' { Man, Woman } @attribute 'age' integer @attribute 'how_tall_in_meters' real @attribute 'weight' integer @attribute 'body_mass_index' real @attribute 'x1' real @attribute 'y1' real @attribute 'z1' real @attribute 'x2' real @attribute 'z2' real @attribute 'y2' real @attribute 'x3' real @attribute 'y3' real @attribute 'z3' real @attribute 'x4' real @attribute 'y4' real @attribute 'z4' real @attribute class { sitting, sittingdown, standing, standingup, walking } @data debora,Woman,46,1.62,75,28.6,-3,92,-63,-23,18,-19,5,104,-92,-150,-103,-147,sitting debora,Woman,46,1.62,75,28.6,-3,94,-64,-21,18,-18,-14,104,-90,-149,-104,-145,sitting debora,Woman,46,1.62,75,28.6,-1,97,-61,-12,20,-15,-13,104,-90,-151,-104,-144,sitting Fonte: Elaborado pelo autor, 2015. Podemos perceber pelo arquivo de dados no formato ARFF acima que ele necessita de uma clara listagem dos atributos e da classe considerada no problema em questão. A sintaxe é a seguinte: 1) Linhas começando com “%” são apenas comentários. 2) Após os comentários, deve ter uma linha “@relation” onde se deve colocar o nome do dataset (chamei aqui de “HAR” mas poderia ser qualquer outro nome). 3) Em seguida vem os atributos (“@attribute”), e por fim os dados (“@data”). 46 a) Atributos nominais são seguidos pelo universo de valores, separados por “,” e cercados por “{” e “}”. b) Atributos numéricos são seguidos por real ou por integer. c) Atributos “string”, “date” também são permitidos (mas não são o caso do dataset deste trabalho). d) A linha em que a classe é especificada com a palavra “class”, podendo ser nominal (segue-se seu universo de valores possíveis) ou numérico (int ou real). 4) Após “@data” deverão ser colocados os dados, seguindo a ordem com que foram declarados os atributos, devendo ser uma instância por linha. a) Se houver algum valor faltante, deverá haver uma marcação “?” no lugar na instância (não é o caso do dataset deste trabalho). 3.3.4 Interface Gráfica de Usuário Weka Em um primeiro momento foram feitos testes utilizando a própria Interface Gráfica de Usuário Weka (Weka GUI), Figura 23, disponibilizada juntamente com a biblioteca Java. Ela facilita a visualização dos dados carregados e das funcionalidades disponíveis na biblioteca Open Source. O mesmo grupo de pesquisadores e professores da Universidade de Waikato disponibiliza também um livro (WITTEN; FRANK; HALL, 2011) que descreve muito bem as técnicas de máquinas de aprendizado disponíveis na ferramenta, e como utilizá-las, sendo uma importante fonte tanto para esclarecimentos teóricos das técnicas como um guia de uso da biblioteca em si. 47 Figura 23 – Weka GUI com aplicações. Fonte: Weka 3 (2014). Ao clicar em “Explorer”, uma tela com opções de carregamento de arquivo e ferramentas de Mineração de Dados: “Classify”, “Cluster”, “Associate”, “Select Attributes”, “Visualize”. Veja Figura 24 abaixo. Figura 24 – Weka GUI: Explorer. Fonte: Weka 3 (2014). 48 Ao carregar o dataset público do trabalho (UGULINO; CARDADOR; VEGA; VELLOSO; MILIDIU, 2012) pode-se visualizar mais claramente os dados distribuídos nos atributos das instâncias carregadas (Figura 25). Figura 25 – Weka GUI: Arquivo carregado. Fonte: Weka 3 (2014). Para visualizar todas as distribuições de todos os atributos nas classes existentes, pode-se clicar em “Visualize All”, então uma tela nova é aberta tal como Figura 26. 49 Figura 26 – Weka GUI: Distribuição das classes para cada atributo. Fonte: Weka 3 (2014). 3.3.5 Desenvolvimento do Programa Java Um programa Java que incorpora a biblioteca Open Source Weka 3.6.12 foi implementado tendo em vista os objetivos referentes à metodologia de avaliação dos classificadores construídos. Uma das desvantagens da utilização somente da interface gráfica Weka GUI é a falta de um maior controle de como os dados são carregados. Quando se carregam os dados do arquivo em formato ARFF as opções de técnicas de validação holdout ou kfold cross-validation não levam em consideração a ordem em que as instâncias se apresentam no arquivo. Por exemplo, se o arquivo tem suas instâncias ordenadas por nome da pessoa, e para cada pessoa ordenado por classe, daí se a escolha for holdout com 66% para treinamento o Weka GUI irá simplesmente cortar as 34% últimas instâncias do arquivo, podendo-se estar desconsiderando erroneamente parte dos dados de uma pessoa e/ou os dados completos de uma pessoa. Esta separação de pessoa remete a uma técnica de validação diferente, chamada leave-one-personout. O correto para holdout, considerando-se independência dos dados e visando maior generalização quanto possível, seria separar 66% para treinamento para cada 50 pessoa e cada classe. Assim, uma implementação mais sofisticada foi feita para melhor tratamento dos dados sendo carregados. Uma outra importante motivação para o desenvolvimento de um programa Java e não somente fazer testes com a interface Weka GUI é o fato que diversas vezes a interface gráfica não faz uso inteligente e otimizado da memória. Por diversas vezes, mesmo com uma configuração de algoritmo de construção e treinamento da rede simplificado (com restritos limites para espaço de busca pela rede), obteve-se o erro de insuficiência de memória, como exemplificado na Figura 27. Figura 27 – Weka GUI: Memória insuficiente. Fonte: Weka 3 (2014). Desta forma foi utilizado o Java versão JDK 1.7.0_71 para Windows, incorporando a biblioteca Open Source Weka 3.6.12. A plataforma para o desenvolvimento e testes foi: Memória RAM de 8 GB. Processador Intel Core i7 2.20 GHz. Windows 7, 64 bits. Eclipse Java EE IDE for Web Developers. Version: Kepler Service Release 1. O código fonte do programa Java desenvolvido está anexado no Apêndice A. 51 4 RESULTADOS E DISCUSSÕES Esta seção visa a apresentação organizada dos resultados e discussões pontuais dos mesmos frente ao objetivo proposto desde trabalho. Conforme Seção 3.3.2 foram feitas duas abordagens para carga de dados, préprocessamento, construção e treinamento da rede, e testes de validação para obtenção da taxa de acerto e Matriz de Confusão. Os resultados nas seções a seguir se dividem em: Weka GUI: o Rede Bayesiana. o Rede Neural. Programa Java: o Rede Bayesiana. o Rede Neural. A interface gráfica Weka GUI permite uma melhor visualização dos dados quando carregados, permite agilidade para modificar os parâmetros de configuração dos classificadores. Com seu uso no início dos trabalhos foi possível uma melhor compreensão das potencialidades da biblioteca Weka, permitindo um melhor aproveitamento ao se construir um programa Java que a utilize. O programa Java desenvolvido permitiu uma maior clareza e flexibilidade para alterações necessárias de configuração, melhor monitoramento do tempo gasto em construção, treinamento e testes dos classificadores e maior flexibilidade na carga dos dados, os quais puderam ter suas características devidamente consideradas e tratadas no programa. A Rede Neural (Perceptron Multicamadas) apresentou bons resultados em todos os testes com ela, tanto com Weka GUI como no programa Java. Uma das Redes Bayesianas mostrou o melhor resultado de todos, ao ser testada com o programa Java, para o uso da técnica 10-fold cross validation para separação de dados de teste e treinamento, Hill Climber como algoritmo de aprendizado para construção da rede, 52 a qual teve 2 nós como limite de nós pai por cada nó da rede. A Rede Naive Bayes, testada com o Weka GUI, apresentou o pior resultado de todos. 4.1 RESULTADOS COM WEKA GUI Em relação aos dados obtidos com o uso da interface gráfica Weka GUI, uma tabela contendo um resumo pode ser encontrada na Tabela 1 e na Tabela 2. Tabela 1 – Resultados com Weka GUI – Rede Bayesiana. Teste Nº Rede Validação Algoritmo de Pesquisa Algoritmo de Estimação Seleção de Atributos Observações Acerto % 1 Bayesiana 10-fold crossvalidation 2 Bayesiana holdout com 66% para treinamento Hill Climber Simple Estimator Sim (Algoritmo Genético) 3 Bayesiana holdout com 66% para treinamento Hill Climber Simple Estimator Sim 4 Bayesiana holdout com 66% para treinamento Hill Climber (global, com ajustes Simple Estimator de configuração) Não N/A 91,5919 5 Naive Bayes holdout com 66% para treinamento N/A N/A Não N/A 77,0505 6 Bayesiana leave-oneperson-out (katia) K2 (ajustes de configuração) Simple Estimator Não O arquivo de dados foi manualmente dividido em 2: Testes, só com "katia" Treinamento, com os outros 54,2021 Naive Bayes Simple Estimator Não N/A 91,0651 Seleção de Atributos: Redução 18 para 10 atributos, sendo todos de acelerômetros 89,5676 Seleção de Atributos: Apenas os dados de todos os 4 acelerômetros 91,0326 Matriz de confusão a 48180 166 0 192 4 a 16335 72 0 108 3 a 16326 53 0 71 1 a 16433 54 0 81 2 a 15629 353 125 369 229 a 3498 18 0 22 0 b 2207 9738 273 1746 857 b 782 3076 167 686 225 b 786 3291 130 586 271 b 667 3363 156 579 287 b 151 2312 193 846 615 b 5167 565 1169 1220 415 c 0 682 45472 1483 2339 c 0 351 15198 514 872 c 0 235 15294 494 806 c 0 222 15325 493 758 c 1365 1033 14790 1751 3122 c 0 355 8410 38 2 d 240 820 219 7797 544 d 87 314 56 2347 381 d 92 277 67 2634 167 d 106 267 74 2674 133 d 58 51 39 557 896 d 393 1990 2173 1416 37 e 4 421 1406 1196 39646 e 3 171 566 517 13484 e 3 128 496 387 13720 e 1 78 432 345 13785 e 4 235 840 649 10103 e 5222 1089 2482 1014 13102 classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando Fonte: Elaborado pelo autor, 2015. Tabela 2 – Resultados com Weka GUI – Rede Neural (Perceptron Multicamadas). Teste Nº 1 Rede Rede Neural (Perceptron Multicamadas) Validação holdout com 66% para treinamento Épocas 500 Taxa de Aprendizado 0,3 Momentum 0,2 Acerto % 97,4234 Matriz de confusão a 17161 16 0 36 4 b c 7 3707 23 156 63 0 86 15728 160 251 d 35 121 88 3711 90 e 4 54 148 109 14557 classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando Fonte: Elaborado pelo autor, 2015. A Rede Neural (Perceptron Multicamadas) apresentou o melhor resultado, e a Rede Naive Bayes apresentou o pior resultado. 53 4.1.1 Rede Bayesiana [ TESTE 1 ] Este teste em resumo consiste em: Rede Bayesiana, validação 10-fold cross-validation, algoritmo de pesquisa de rede Naive Bayes, algoritmo de Estimação Simple Estimator, sem seleção de atributos. Resultado de acerto = 91,0651 %. Ao selecionar o classificador na aba “Classify” como Rede Bayesiana (BayesNet), como na Figura 28, com as seguintes configurações: Técnica de validação: 10-fold cross-validation. O algoritmo de pesquisa e aprendizado de rede Bayes: Naive Bayes (significando que trata-se de uma rede fixa com um arco entre o nó da classe e cada nó de atributo, para todos os atributos) O algoritmo de Estimação de probabilidade condicional para a rede foi o Simple Estimator com alpha=0.5 (significa que a probabilidade inicial da tabela de probabilidade da rede é de 0.5). Figura 28 – Weka GUI: Rede Bayesiana – Naive Bayes e Simple Estimator. Fonte: Weka 3 (2014). 54 Os resultados completos apresentados pela interface Weka GUI no Teste 1 para Rede Bayesiana estão no Apêndice B. Na Figura 29 é mostrado o resultado da Rede Bayesiana em forma gráfica. São exibidas também as tabelas de distribuição de probabilidades dos nós “class”, “user” e “weight”. Figura 29 – Weka GUI: Rede Bayesiana (Gráfico) – Naive Bayes e Simple Estimator. Fonte: Weka 3 (2014). As informações da Tabela 3 mostram a Matriz de Confusão. Nota-se uma precisão insatisfatória para a classe “Levantando-se” (62,81%), ocorrendo notoriamente uma dificuldade para distinção da classe “Sentar-se”. Uma acurácia muito boa foi atingida para a classe “Em pé” (96,00%). O grau de Acerto foi de 91,0651 %. Tabela 3 – Matriz de Confusão: Rede Bayesiana – Naive Bayes e Simple Estimator. a 48180 166 0 192 4 b 2207 9738 273 1746 857 c 0 682 45472 1483 2339 d 240 820 219 7797 544 e 4 421 1406 1196 39646 Fonte: Elaborado pelo autor, 2015. [ TESTE 2 ] classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando 55 Este teste em resumo consiste em: Rede Bayesiana, validação holdout com 66% para treinamento, algoritmo de pesquisa de rede Hill Climber com ajustes de configuração, algoritmo de Estimação Simple Estimator, com seleção de atributos usando algoritmo Genético (o que reduziu de 18 para 10 atributos). Resultado de acerto = 89,5676 %. Neste teste foram feitas alterações no algoritmo de construção da rede. Ao selecionar o classificador na aba “Classify” como Rede Bayesiana (BayesNet), como na Figura 30, com a técnica de validação holdout com 66% para treinamento, obtiveram-se os resultados descritos a seguir. Configurações: O algoritmo de pesquisa e aprendizado de rede Bayes utilizado foi Hill Climber para adicionar, remover e reverter arcos da rede. o ‘initAsNaiveBayes’ = True – A rede inicial é Naive Bayes, portanto o classificador tem um arco para cada um de todos os atributos. o ‘maxNrOfParents’ = 1 – O número máximo de nós pai cada nó da rede pode ter. Sendo 1 a construção da rede fica mais simples e menos custosa, ficando simplesmente uma rede Naive Bayes. o ‘scoreType’ = BAYES – Medida usada para julga a qualidade da rede gerada no algoritmo. o ‘useArcReversal’ = False – Não permite que a busca pela rede considere reversão de arcos entre os nós. O algoritmo de Estimação de probabilidade condicional para a rede foi o Simple Estimator com alpha=0,5. 56 Figura 30 – Weka GUI: Rede Bayesiana – Hill Climber e Simple Estimator. Fonte: Weka 3 (2014). Neste teste foi feita a seleção de atributos para tentativa de obtenção de melhor resultado na construção da rede e seu treinamento. A aposta nesta técnica é que atributos não relevantes para a classificação sejam convenientemente desconsiderados. Antes de executar a construção e treinamento do classificador, na aba “Select Attributes” (Figura 31), selecionou-se o algoritmo Genético para busca e seleção dos atributos (GOLDBERG, 1989). Configuração utilizada: ‘crossoverProb’ = 0.6 – Probabilidade de crossover (dois membros da população trocar material genético). ‘maxGenerations’ = 20 – Número de gerações a serem avaliadas. ‘mutationProb’ = 0.033 – Probabilidade de ocorrer mutação. ‘populationSize’ = 20 – Número de indivíduos (conjunto de atributos) na população. ‘reportFrequency’ = 20 – Frequência de gerações com que a ferramenta irá mostrar um relatório do andamento do algoritmo. ‘seed’ = 1 – Usado para valores aleatórios. 57 ‘startSet’ = “” – Ponto inicial para a pesquisa, podendo ser uma lista de atributos. Neste caso manteve-se vazio. Figura 31 – Weka GUI: Rede Bayesiana – Seleção de Atributos com algoritmo Genético. Fonte: Weka 3 (2014). Os resultados completos apresentados pela interface Weka GUI no Teste 2 para a Seleção de Atributos e em seguida para a Rede Bayesiana estão no Apêndice B. Notou-se que a quantidade de atributos foi de 18 para 10 (apenas alguns valores dos acelerômetros foram considerados). As informações da Tabela 4 mostram a Matriz de Confusão. Nota-se uma precisão insatisfatória para a classe “Levantando-se” (56,30%), ocorrendo notoriamente uma dificuldade para distinção da classe “Sentar-se”. Uma acurácia muito boa foi atingida na classe “Em pé” (95,10%) e “Sentado” (94,90%). O grau de Acerto foi de 89,5676 %. 58 Tabela 4 – Matriz de Confusão: Rede Bayesiana – Hill Climber e Simple Estimator, Seleção de atributos com algoritmo Genético. a 16335 72 0 108 3 b 782 3076 167 686 225 c 0 351 15198 514 872 d 87 314 56 2347 381 e 3 171 566 517 13484 classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando Fonte: Elaborado pelo autor, 2015. [ TESTE 3 ] Este teste em resumo consiste em: Rede Bayesiana, validação holdout com 66% para treinamento, algoritmo de pesquisa de rede Hill Climber com ajustes de configuração, algoritmo de Estimação Simple Estimator, com seleção de atributos onde se considerou apenas os dados dos acelerômetros, removendo-se todos os outros. Resultado de acerto = 91,0326 %. Neste teste foram feitas alterações no algoritmo de construção da rede. Ao selecionar o classificador na aba “Classify” como Rede Bayesiana (BayesNet), como na Figura 32, com a técnica de validação holdout com 66% para treinamento obtiveram-se os resultados descritos a seguir. Configurações: O algoritmo de pesquisa e aprendizado de rede Bayes utilizado foi Hill Climber para adicionar, remover e reverter arcos da rede. o ‘initAsNaiveBayes’ = True – A rede inicial é Naive Bayes, portanto o classificador tem um arco para cada um de todos os atributos. o ‘maxNrOfParents’ = 1 – O número máximo de nós pai cada nó da rede pode ter. Sendo 1 a construção da rede fica mais simples e menos custosa, ficando simplesmente uma rede Naive Bayes. o ‘scoreType’ = BAYES – Medida usada para julga a qualidade da rede gerada no algoritmo. o ‘useArcReversal’ = False – Não permite que a busca pela rede considere reversão de arcos entre os nós. 59 O algoritmo de Estimação de probabilidade condicional para a rede foi o Simple Estimator com alpha=0.5. Figura 32 – Weka GUI: Rede Bayesiana – Hill Climber e Simple Estimator com seleção de atributos, somente os acelerômetros. Fonte: Weka 3 (2014). Mais uma vez foi feita a seleção de atributos para tentativa de obtenção de melhor resultado na construção da rede e seu treinamento. A consideração aqui é que somente os dados dos acelerômetros seriam relevantes, removendo-se todos os outros. Os resultados completos da construção e treinamento da Rede Bayesiana apresentados pela interface Weka GUI neste Teste 3 é mostrado no Apêndice B. As informações da Tabela 5 mostram a Matriz de Confusão. Nota-se uma precisão insatisfatória para a classe “Levantando-se” (63,10%), ocorrendo notoriamente uma dificuldade para distinção da classe “Sentar-se”. Uma acurácia muito boa foi atingida na classe “Em pé” (95,70%) e “Sentado” (94,90%). O grau de Acerto foi de 91,0326 %. 60 Tabela 5 – Matriz de Confusão: Rede Bayesiana – Hill Climber e Simple Estimator, Seleção de atributos somente com acelerômetros. a 16326 53 0 71 1 b 786 3291 130 586 271 c 0 235 15294 494 806 d 92 277 67 2634 167 e 3 128 496 387 13720 classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando Fonte: Elaborado pelo autor, 2015. [ TESTE 4 ] Este teste em resumo consiste em: Rede Bayesiana, validação holdout com 66% para treinamento, algoritmo de pesquisa de rede Hill Climber (global) com ajustes de configuração, algoritmo de Estimação Simple Estimator, sem seleção de atributos. Resultado de acerto = 91,5919 %. Ao selecionar o classificador na aba “Classify” como Rede Bayesiana (BayesNet), como na Figura 33, com a técnica de validação holdout com 66% para treinamento obtiveram-se os resultados descritos a seguir. Configurações: O algoritmo de pesquisa e aprendizado de rede Bayes utilizado foi Hill Climber global para adicionar, remover e reverter arcos da rede. o ‘CVType’ = LOO-CV – É a estratégia de cross-validation para a busca pela rede. LOO-CV (leave one out cross-validation) significa deixar um de fora no cross-validation. o ‘initAsNaiveBayes’ = True – A rede inicial é Naive Bayes, portanto o classificador tem um arco para cada um de todos os atributos. o ‘maxNrOfParents’ = 1 – O número máximo de nós pai cada nó da rede pode ter. Sendo 1 a construção da rede fica mais simples e menos custosa, ficando simplesmente uma rede Naive Bayes. o ‘useArcReversal’ = False – Não permite que a busca pela rede considere reversão de arcos entre os nós. 61 O algoritmo de Estimação de probabilidade condicional para a rede foi o Simple Estimator com alpha=0.5. Figura 33 – Weka GUI: Rede Bayesiana – Hill Climber e Simple Estimator, sem seleção de atributos. Fonte: Weka 3 (2014). Os resultados completos apresentados pela interface Weka GUI no Teste 4 para Rede Bayesiana estão no Apêndice B. As informações da Tabela 6 mostram a Matriz de Confusão. Nota-se uma precisão insatisfatória para a classe “Levantando-se” (64,10%), ocorrendo notoriamente uma dificuldade para distinção da classe “Sentar-se”. Uma acurácia muito boa foi atingida na classe “Em pé” (95,90%) e “Sentado” (95,50%). O grau de Acerto foi de 91,5919 %. Tabela 6 – Matriz de Confusão: Rede Bayesiana – Hill Climber global e Simple Estimator. a 16433 54 0 81 2 b 667 3363 156 579 287 c 0 222 15325 493 758 d 106 267 74 2674 133 e 1 78 432 345 13785 Fonte: Elaborado pelo autor, 2015. classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando 62 [ TESTE 5 ] Este teste em resumo consiste em: Rede Naive Bayes, validação holdout com 66% para treinamento. Resultado de acerto = 77,0505 %. Ao selecionar o classificador na aba “Classify” como Rede Naive Bayes, como na Figura 34, com a técnica de validação holdout com 66% para treinamento obtiveramse os resultados descritos a seguir. Figura 34 – Weka GUI: Rede Naive Bayes – sem seleção de atributos. Fonte: Weka 3 (2014). Os resultados completos apresentados pela interface Weka GUI no Teste 5 para Rede Bayesiana estão no Apêndice B. As informações da Tabela 7 mostram a Matriz de Confusão. Nota-se uma imprecisão muito elevada para a classe “Levantando-se” (13,40%), ocorrendo enorme dificuldade para distinção da classe “Em pé”, e também das classes "Sentar-se" e "Andando". Ainda assim uma acurácia boa foi atingida na classe “Em pé” (92,50%) e “Sentado” 63 (90,80%), revelando que mesmo que o classificador em geral piore, a distinção dessas duas classes é mais fácil que das demais. O grau de Acerto foi de 77,0505 %. Tabela 7 – Matriz de Confusão: Rede Naive Bayes. a 15629 353 125 369 229 b 151 2312 193 846 615 c 1365 1033 14790 1751 3122 d 58 51 39 557 896 e 4 235 840 649 10103 classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando Fonte: Elaborado pelo autor, 2015. [ TESTE 6 ] Este teste em resumo consiste em: Separação prévia e manual do arquivo de dataset em dois arquivos: 1 somente com as instâncias da “katia” (para testes) e outro arquivo somente com as instâncias dos outros usuários (para treinamento). Rede Bayesiana, validação leave-one-person-out onde o voluntário “katia” foi removido ficando os outros 3 para treinamento, algoritmo de pesquisa de rede K2 com ajustes de configuração, algoritmo de Estimação Simple Estimator, sem seleção de atributos. Resultado de acerto = 54,2021 %. Note-se que o algoritmo de pesquisa e construção de rede K2 é semelhante ao Hill Climber, porém segue a ordem das variáveis. Seleciona-se o classificador na aba “Classify” como Rede Bayesiana (BayesNet), como na Figura 35, com a opção de “Test Options” fornecendo-se o dataset de teste manualmente via arquivo. Configurações: O algoritmo de pesquisa e aprendizado de rede Bayes utilizado foi K2 para adicionar, remover e reverter arcos da rede. 64 o ‘initAsNaiveBayes’ = True – A rede inicial é Naive Bayes, portanto o classificador tem um arco para cada um de todos os atributos. o ‘maxNrOfParents’ = 1 – O número máximo de nós pai cada nó da rede pode ter. Sendo 1 a construção da rede fica mais simples e menos custosa, ficando simplesmente uma rede Naive Bayes. o ‘scoreType’ = BAYES – Medida usada para julga a qualidade da rede gerada no algoritmo. o ‘randomOrder’ = False – Não é aleatório, seguindo a ordem dos nós conforme o dataset fornecido. De qualquer forme o nó com a classe é sempre o primeiro na construção da rede. O algoritmo de Estimação de probabilidade condicional para a rede foi o Simple Estimator com alpha=0.5. Figura 35 – Weka GUI: Rede Bayesiana – K2 e Simple Estimator, leave-one-person-out. Fonte: Weka 3 (2014). Os resultados completos apresentados pela interface Weka GUI no Teste 6 para Rede Bayesiana estão no Apêndice B. As informações da Tabela 8 mostram a Matriz de Confusão. Nota-se uma imprecisão muito elevada para a classe Sentar-se” (14,10%), ocorrendo enorme dificuldade para distinção da classe “Em pé”, e também das classes "Levantando-se" e "Andando". A 65 única classe com acurácia aceitável foi “Andando” (96,70%), revelando que mesmo que o classificador seja muito ruim, a detecção dessa classe é mais fácil que das demais. O grau de Acerto foi de 54,2021 %. Tabela 8 – Matriz de Confusão: Rede Bayesiana – K2 e Simple Estimator. a 3498 18 0 22 0 b 5167 565 1169 1220 415 c 0 355 8410 38 2 d 393 1990 2173 1416 37 e 5222 1089 2482 1014 13102 classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando Fonte: Elaborado pelo autor, 2015. 4.1.2 Rede Neural - PMC [ TESTE 1 ] Este teste em resumo consiste em: Rede Neural (Perceptron Multicamadas), validação holdout com 66% para treinamento, com backpropagation, Épocas=500, Taxa de Aprendizado = 0,3, Momentum = 0,2, nós com função sigmoid. São 21 neurônios na camada de entrada, representando os atributos da instância, 13 na camada escondida (intermediária), e 5 na camada de saída (classes). Sem seleção de atributos. Percentual de acerto = 97,4234 %. Configurações utilizadas: ‘decay’ = False – Sendo valor falso não permite que o valor da Taxa de Aprendizado (learning rate) decaia. Quando está como verdadeiro, auxilia no desempenho e ajuda a rede parar de divergir do valor desejado, pois redefine o valor da taxa de aprendizado dividindo-o pelo número de épocas. ‘hiddenLayers’ = a – Define as camadas escondidas da rede. O valor “a” significa 'a' = (attribs + classes) / 2. 66 ‘learningRate’ = 0,3 – Taxa com que os pesos são atualizados, definindo a velocidade do aprendizado. o Nota: Uma taxa de aprendizado muito baixa torna o aprendizado da rede muito lento, ao passo que uma taxa de aprendizado muito alta provoca oscilações no treinamento e impede a convergência do processo de aprendizado. ‘momentum’ = 0,2 – Aumenta a velocidade de treinamento, ao mesmo tempo reduz o perigo de instabilidade. ‘nominalToBinaryFilter’ = True – Pré-processa as instâncias nos atributos nominais. Ajuda o desempenho do treinamento. ‘normalizeAttributes’ = True – Deve ser aplicado pois existem atributos não normalizados, inclusive os que estavam como nominais. ‘normalizeNumericClass’ = True – Normaliza atributos numéricos. Ajuda o desempenho do treinamento. ‘reset’ = True – Permite que a Taxa de Aprendizado seja reiniciada com um menor valor caso haja divergência com o desejado, reiniciando o treinamento. ‘trainingTime’ = 500 – Número de Épocas. ‘validationThreshold’ = 20 – Limiar de aceite para quando houver piora no treino. Ao selecionar o classificador na aba “Classify” como Rede Neural (MultilayerPerceptron), um classificador com backpropagation, como na Figura 36, com as seguintes configurações: 67 Figura 36 – Weka GUI: Rede Neural – Épocas=500. Fonte: Weka 3 (2014). Todos os nós da rede estão com a função sigmóide. Uma ilustração desta função está na Figura 37. Figura 37 – Rede Neural: Gráfico da função sigmóide. Fonte: Elaborado pelo autor, 2015. Os resultados completos apresentados pela interface Weka GUI no Teste 1 para Rede Neural (Perceptron Multicamadas) estão no Apêndice C. 68 As informações da Tabela 9 mostram a Matriz de Confusão. Todas as classes na Rede Neural atingiram uma taxa individual de acerto bem elevada, chegando a 98,40 para "Sentar-se". A menor acurácia foi para a classe "Levantando-se" (89,00%), com uma leve dificuldade de distinção com as classes "Sentar-se" e "Em pé". O grau de Acerto foi de 97,4234 %. Tabela 9 – Matriz de Confusão: Rede Neural (Perceptron Multicamadas) – Épocas=500, Taxa de Aprendizado = 0,3, Momentum = 0,2. a 17161 16 0 36 4 b 7 3707 23 156 63 c d 0 86 15728 160 251 35 121 88 3711 90 e 4 54 148 109 14557 classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando Fonte: Elaborado pelo autor, 2015. Na Figura 38 é mostrado graficamente a rede na última época (iteração) ao final do treinamento. O Erro por Época foi de 0,009487. As entradas são os atributos: user (“debora”, “jose_carlos”, “katia”, “wallace”), gender, age, how_tall_in_meters, weight, body_mass_index, acelerômetros (x1, y1, z1, x2, y2, z2, x3, y3, z3, x4, y4, z4). As saídas são as classes (“sitting”, “sittingdown”, “standing”, “standingup”, “walking”). Figura 38 – Weka GUI: Rede Neural – Época 500. Fonte: Weka 3 (2014). 69 4.2 RESULTADOS COM PROGRAMA JAVA Em relação aos dados obtidos com o programa Java, uma tabela contendo um resumo pode ser encontrada na Tabela 10 e Tabela 11. Tabela 10 – Resultados com programa Java – Rede Bayesiana. Teste Nº Rede Validação Algoritmo de Pesquisa Algoritmo de Estimação Performance Número máx Nós Pai Construção e Treinamento (s) Acerto % Matriz de confusão Testes (s) 1 Bayesiana leave-one-personout (katia) 2 Bayesiana holdout com 66% para treinamento Hill Climber Simple Estimator 1 56,589 0,29 86,8561 3 Bayesiana holdout com 66% para treinamento Hill Climber Simple Estimator 1 55,861 0,283 88,7188 4 Bayesiana leave-one-personout (katia) Hill Climber Simple Estimator 2 4787,289 0,416 34,9921 5 Bayesiana leave-one-personout (wallace) Hill Climber Simple Estimator 2 4129,986 0,336 32,4944 6 Bayesiana holdout com 66% para treinamento Hill Climber Simple Estimator 2 4322,115 0,246 97,4544 7 Bayesiana 10-fold cross validation Hill Climber Simple Estimator 2 5540,887 51458,738 97,9282 Hill Climber Simple Estimator 1 46, 426 0,424 30,0098 a 682 85 0 138 7 a 11502 381 5 296 83 a 23011 581 12 451 151 a 39 316 0 273 82 a 4524 54 1412 205 693 a 11611 8 0 4 0 a 100745 46 2 25 3 b 2041 954 1555 1167 2755 b 110 1476 67 425 349 b 180 3475 126 789 583 b 191 948 148 1140 3333 b 29 57 59 109 141 b 25 2519 50 170 37 b 173 22335 213 1257 259 c 1548 613 2048 459 78 c 0 204 10431 394 897 c 7 297 20798 690 1483 c 31 581 6373 359 272 c 3 75 1201 311 985 c 0 12 10694 83 66 c 2 158 93072 513 618 d 4862 926 4716 639 95 d 68 177 95 1395 290 d 143 398 180 3240 513 d 5325 1169 1855 718 522 d 11 583 1349 797 2193 d 45 156 88 2574 59 d 299 888 499 22723 374 e 5147 1439 5915 1307 10621 e 3 491 334 355 8395 e 25 707 748 560 17298 e 8694 1003 5858 1220 9347 e 10426 2717 10446 2693 10025 e 2 34 100 34 9852 e 43 227 954 310 85526 classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando Fonte: Elaborado pelo autor, 2015. Tabela 11 – Resultados com programa Java – Rede Neural (Perceptron Multicamadas). Teste Nº Rede 1 Rede Neural (Perceptron Multicamadas) holdout com 66% para treinamento 2 Rede Neural (Perceptron Multicamadas) holdout com 66% para treinamento Validação Performance Taxa de Aprendizado Momentum 1000 0,3 5000 0,3 Épocas Acerto % Construção e Treinamento (s) Testes (s) 0,2 781,849 782,084 95,5106 0,6 3894,841 3895,117 96,4380 Matriz de confusão a 11627 70 1 50 11 a 11653 45 2 60 7 b 19 2294 8 174 44 b 1 2422 15 158 45 c 0 158 10712 221 351 c 0 70 10773 132 269 d 27 137 58 2324 58 d 27 145 71 2421 83 e 10 70 153 96 9550 e 2 47 71 94 9610 classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando Fonte: Elaborado pelo autor, 2015. Percebemos que a Rede Bayesiana mostrou o melhor resultado (97,9282% de acerto) após ser construída admitindo-se até 2 nós pai por nó da rede, adotando-se a técnica de validação 10-fold cross validation, tomando ao mesmo tempo o maior tempo para 70 construir e treinar (5540,887 segundos) e testar (51458,738 segundos), ou seja, teve o menor desempenho no tempo computacional. O pior resultado foi obtido com Rede Bayesiana ao se utilizar a técnica de validação leave-one-person-out, com a “katia”, com no máximo 1 nó pai por nó da rede (30,0098% de acerto). Mesmo ao trocar a pessoa (“wallace”) a ser separada para teste de validação, o resultado continua muito ruim, em torno de 30% de taxa de acerto. Maiores detalhes acerca das conclusões sobre os motivos que levaram as técnicas de validação holdout e 10-fold cross validation estão no capítulo 5. Os resultados para Rede Neural (Perceptron Multicamadas) foram muito bons, tendo 95,5106% e 96,438% de taxa de acerto nas duas tentativas, após pequenas alterações nas configurações de número de épocas e de momentum. Uma das Redes Bayesiana mostrou o melhor resultado de todos, 97,9282%, para o uso da técnica 10fold cross validation para separação de dados de teste e treinamento, Hill Climber como algoritmo de aprendizado para construção da rede, a qual teve 2 nós como limite de nós pai por cada nó da rede. Em ambos os testes o número máximo de épocas foi atingido. Ao se testar a Rede Bayesiana com maior número máximo de nós pai para cada nó da rede, por exemplo 3 (o que seria uma rede denominada Bayes Net Augmented Bayes Network, BAN), ou até mesmo 1000 (o que configura uma quantidade ilimitada para a biblioteca Weka), os resultados teriam potencial para melhorar um pouco, entretanto devido às limitações da plataforma de testes houve estouro de memória (Figura 39). Notou-se uso constante de pelo menos 5 Giga bytes de memória RAM, chegando rapidamente a um estouro (obs.: o computador de teste tem no máximo 8 Giga bytes de memória RAM). Note-se que houve tentativas de configurar um maior espaço de pilha de memória para o programa, chegando-se a 6 GB num computador de 8 GB, mas mesmo assim resultou em estouro de pilha. 71 Figura 39 – Programa Java: Rede Bayesiana – estouro de memória com número de nós pai maior que 2. Fonte: Elaborado pelo autor, 2015. 4.2.1 Rede Bayesiana [ TESTE 1 ] Este teste em resumo consiste em: Rede Bayesiana, validação leave-one-person-out (“katia” para testes e os outros 3 para treinamento), algoritmo de pesquisa de rede Hill Climber (número máximo de nós pai igual a 1), algoritmo de Estimação Simple Estimator, sem seleção de atributos. Resultado de acerto = 30,0098 %. Desempenho: o Construção e Treinamento da rede: 46, 426 segundos. 72 o Teste de validação: 0,424 segundos. O arquivo original com o dataset completo foi carregado em memória, a partir disso o programa se encarregou de separar as instâncias de uma pessoa para testes apenas, ficando o restante para treinamento da rede. Configurações: O algoritmo de pesquisa e aprendizado de rede Bayes utilizado foi Hill Climber para adicionar, remover e reverter arcos da rede. o ‘initAsNaiveBayes’ = False – A rede inicial não é Naive Bayes, portanto a rede inicial é vazia. o ‘maxNrOfParents’ = 1 – O número máximo de nós pai cada nó da rede pode ter. Sendo 1 a construção da rede fica mais simples e menos custosa, ficando simplesmente uma rede Naive Bayes. o ‘scoreType’ = BAYES – Medida usada para julga a qualidade da rede gerada no algoritmo. O algoritmo de Estimação de probabilidade condicional para a rede foi o Simple Estimator com alpha=0.5. Os resultados completos apresentados pelo programa Java no Teste 1 para Rede Bayesiana estão no Apêndice D. As informações da Tabela 12 mostram a Matriz de Confusão. Neste resultado em geral muito ruim, houve uma classe ainda pior, que é a “Sentado”, que com uma acurácia de apenas 4,78% foi preterida perante todas as outras, com “Levantando-se” e “Andando”. A classe “Andando” ainda assim teve uma precisão de 78,35%. O grau de Acerto foi de 30,0098 %. 73 Tabela 12 – Matriz de Confusão: Rede Bayesiana – Hill Climber e Simple Estimator. Leave-oneperson-out (katia), número máximo de nós pai igual a 1. a 682 85 0 138 7 b 2041 954 1555 1167 2755 c 1548 613 2048 459 78 d 4862 926 4716 639 95 e 5147 1439 5915 1307 10621 classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando Fonte: Elaborado pelo autor, 2015. [ TESTE 2 ] Este teste em resumo consiste em: Rede Bayesiana, validação holdout (66% para treinamento), algoritmo de pesquisa de rede Hill Climber (número máximo de nós pai igual a 1), algoritmo de Estimação Simple Estimator, sem seleção de atributos. Resultado de acerto = 86,8561 %. Desempenho: o Construção e Treinamento da rede: 56,589 segundos. o Teste de validação: 0,29 segundos. O arquivo original com o dataset completo foi carregado em memória, a partir disso o programa se encarregou de separar as instâncias considerando que elas estão agrupadas por pessoa e classe. Desta forma, num loop de iterações nas instâncias o programa, a cada 10 instâncias, separou 6 para treinamento e 4 para testes, prosseguimento até o final do dataset, resultando assim numa separação homogênea dos dados. Configurações: O algoritmo de pesquisa e aprendizado de rede Bayes utilizado foi Hill Climber para adicionar, remover e reverter arcos da rede. o ‘initAsNaiveBayes’ = False – A rede inicial não é Naive Bayes, portanto a rede inicial é vazia. 74 o ‘maxNrOfParents’ = 1 – O número máximo de nós pai cada nó da rede pode ter. Sendo 1 a construção da rede fica mais simples e menos custosa, ficando simplesmente uma rede Naive Bayes. o ‘scoreType’ = BAYES – Medida usada para julga a qualidade da rede gerada no algoritmo. O algoritmo de Estimação de probabilidade condicional para a rede foi o Simple Estimator com alpha=0.5. Os resultados completos apresentados pelo programa Java no Teste 2 para Rede Bayesiana estão no Apêndice D. As informações da Tabela 13 mostram a Matriz de Confusão. Nota-se uma precisão insatisfatória para as classes “Levantando-se” (48,69%) e "Sentar-se" (54,09%), ocorrendo notoriamente uma dificuldade para distinção da classe “Sentar-se” e "Andando", respectivamente. Uma acurácia muito boa foi atingida na classe “Sentado” (98,45%) e "Em Pé" (95,42%). O grau de Acerto foi de 86,8561 %. Tabela 13 – Matriz de Confusão: Rede Bayesiana – Hill Climber e Simple Estimator. Holdout com 66% para treinamento, número máximo de nós pai igual a 1. a 11502 381 5 296 83 b 110 1476 67 425 349 c 0 204 10431 394 897 d e 68 177 95 1395 290 3 491 334 355 8395 classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando Fonte: Elaborado pelo autor, 2015. [ TESTE 3 ] Este teste em resumo consiste em: Rede Bayesiana, validação holdout (66% para treinamento), algoritmo de pesquisa de rede Hill Climber (número máximo de nós pai igual a 1), algoritmo de Estimação Simple Estimator, sem seleção de atributos. Repetição do teste anterior para dar mais uma chance à heurística de construção da rede. 75 Resultado de acerto = 88,7188%. Desempenho: o Construção e Treinamento da rede: 55,861 segundos. o Teste de validação: 0,283 segundos. Trata-se da repetição do teste anterior, apenas para verificar uma possível melhora no resultado, sem nenhuma alteração, dando mais uma chance à heurística de construção da rede. O arquivo original com o dataset completo foi carregado em memória, a partir disso o programa se encarregou de separar as instâncias considerando que elas estão agrupadas por pessoa e classe. Desta forma, num loop de iterações nas instâncias o programa, a cada 10 instâncias, separou 6 para treinamento e 4 para testes, prosseguimento até o final do dataset, resultando assim numa separação homogênea dos dados. Configurações: O algoritmo de pesquisa e aprendizado de rede Bayes utilizado foi Hill Climber para adicionar, remover e reverter arcos da rede. o ‘initAsNaiveBayes’ = False – A rede inicial não é Naive Bayes, portanto a rede inicial é vazia. o ‘maxNrOfParents’ = 1 – O número máximo de nós pai cada nó da rede pode ter. Sendo 1 a construção da rede fica mais simples e menos custosa, ficando simplesmente uma rede Naive Bayes. o ‘scoreType’ = BAYES – Medida usada para julga a qualidade da rede gerada no algoritmo. O algoritmo de Estimação de probabilidade condicional para a rede foi o Simple Estimator com alpha=0.5. Os resultados completos apresentados pelo programa Java no Teste 3 para Rede Bayesiana estão no Apêndice D. As informações da Tabela 14 mostram a Matriz de Confusão. Nota-se uma precisão insatisfatória para as classes “Levantando-se” (56,54%) e "Sentar-se" (63,67%), 76 ocorrendo notoriamente uma dificuldade para distinção da classe “Sentar-se” e "Andando", respectivamente. Uma acurácia muito boa foi atingida na classe “Sentado” (98,48%) e "Em Pé" (95,12%). O grau de Acerto foi de 88,7188%. Tabela 14 – Matriz de Confusão: Rede Bayesiana, repetição do teste – Hill Climber e Simple Estimator. Holdout com 66% para treinamento, número máximo de nós pai igual a 1. a 23011 581 12 451 151 b 180 3475 126 789 583 c 7 297 20798 690 1483 d 143 398 180 3240 513 e 25 707 748 560 17298 classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando Fonte: Elaborado pelo autor, 2015. [ TESTE 4 ] Este teste em resumo consiste em: Rede Bayesiana, validação leave-one-person-out (“katia” para testes e os outros 3 para treinamento), algoritmo de pesquisa de rede Hill Climber (número máximo de nós pai igual a 2), algoritmo de Estimação Simple Estimator, sem seleção de atributos. Resultado de acerto = 34,9921 %. Desempenho: o Construção e Treinamento da rede: 4787,289 segundos. o Teste de validação: 0,416 segundos. O arquivo original com o dataset completo foi carregado em memória, a partir disso o programa se encarregou de separar as instâncias de uma pessoa para testes apenas, ficando o restante para treinamento da rede. Configurações: O algoritmo de pesquisa e aprendizado de rede Bayes utilizado foi Hill Climber para adicionar, remover e reverter arcos da rede. 77 o ‘initAsNaiveBayes’ = False – A rede inicial não é Naive Bayes, portanto a rede inicial é vazia. o ‘maxNrOfParents’ = 2 – O número máximo de nós pai cada nó da rede pode ter. Sendo 2 trata-se de uma rede denominada Tree Augmented Bayes Network (TAN). o ‘scoreType’ = BAYES – Medida usada para julga a qualidade da rede gerada no algoritmo. O algoritmo de Estimação de probabilidade condicional para a rede foi o Simple Estimator com alpha=0.5. Os resultados completos apresentados pelo programa Java no Teste 4 para Rede Bayesiana estão no Apêndice D. As informações da Tabela 15 mostram a Matriz de Confusão. Neste resultado em geral muito ruim, houve uma classe destacadamente fora do esperado, que é a “Sentado”, que com uma acurácia de apenas 0,27% foi preterida perante todas as outras, principalmente “Levantando-se” e “Andando”. A classe “Andando”, em geral com bons resultados individuais, teve uma precisão de 68,95%. O grau de Acerto foi de 34,9921 %. Tabela 15 – Matriz de Confusão: Rede Bayesiana – Hill Climber e Simple Estimator. Leave-oneperson-out (katia), número máximo de nós pai igual a 2. a 39 316 0 273 82 b 191 948 148 1140 3333 c 31 581 6373 359 272 d 5325 1169 1855 718 522 e 8694 1003 5858 1220 9347 classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando Fonte: Elaborado pelo autor, 2015. [ TESTE 5 ] Este teste em resumo consiste em: Rede Bayesiana, validação leave-one-person-out (“wallace” para testes e os outros 3 para treinamento), algoritmo de pesquisa de rede Hill Climber (número 78 máximo de nós pai igual a 2), algoritmo de Estimação Simple Estimator, sem seleção de atributos. Resultado de acerto = 32,4944 %. Desempenho: o Construção e Treinamento da rede: 4129,986 segundos. o Teste de validação: 0,336 segundos. O teste anterior está aqui sendo repetido agora considerando outra pessoa para testes, “wallace”, com o objetivo de verificar o comportamento para diferentes dados (as características individuais da “katia” e do “wallace” são bem diferentes). O arquivo original com o dataset completo foi carregado em memória, a partir disso o programa se encarregou de separar as instâncias de uma pessoa para testes apenas, ficando o restante para treinamento da rede. Configurações: O algoritmo de pesquisa e aprendizado de rede Bayes utilizado foi Hill Climber para adicionar, remover e reverter arcos da rede. o ‘initAsNaiveBayes’ = False – A rede inicial não é Naive Bayes, portanto a rede inicial é vazia. o ‘maxNrOfParents’ = 2 – O número máximo de nós pai cada nó da rede pode ter. Sendo 2 trata-se de uma rede denominada Tree Augmented Bayes Network (TAN). o ‘scoreType’ = BAYES – Medida usada para julga a qualidade da rede gerada no algoritmo. O algoritmo de Estimação de probabilidade condicional para a rede foi o Simple Estimator com alpha=0.5. Os resultados completos apresentados pelo programa Java no Teste 5 para Rede Bayesiana estão no Apêndice D. De onde se destacam as informações da Tabela 16. Neste resultado em geral muito ruim, houve uma classe destacadamente fora do esperado, que é a Sentar-se, que com uma acurácia de apenas 1,64% foi preterida perante quase todas as outras, 79 principalmente “Andando”. A classe “Andando”, em geral com bons resultados individuais, teve uma precisão de 71,42%. Grau de Acerto = 32,4944 % Tabela 16 – Matriz de Confusão: Rede Bayesiana – Hill Climber e Simple Estimator. Leave-oneperson-out (wallace), número máximo de nós pai igual a 2. a 4524 54 1412 205 693 b 29 57 59 109 141 c d 3 75 1201 311 985 11 583 1349 797 2193 e 10426 2717 10446 2693 10025 classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando Fonte: Elaborado pelo autor, 2015. [ TESTE 6 ] Este teste em resumo consiste em: Rede Bayesiana, validação holdout (66% para treinamento), algoritmo de pesquisa de rede Hill Climber (número máximo de nós pai igual a 2), algoritmo de Estimação Simple Estimator, sem seleção de atributos. Resultado de acerto = 97,4544 %. Desempenho: o Construção e Treinamento da rede: 4322,115 segundos. o Teste de validação: 0,246 segundos. O arquivo original com o dataset completo foi carregado em memória, a partir disso o programa se encarregou de separar as instâncias considerando que elas estão agrupadas por pessoa e classe. Desta forma, num loop de iterações nas instâncias o programa, a cada 10 instâncias, separou 6 para treinamento e 4 para testes, prosseguimento até o final do dataset, resultando assim numa separação homogênea dos dados. Configurações: O algoritmo de pesquisa e aprendizado de rede Bayes utilizado foi Hill Climber para adicionar, remover e reverter arcos da rede. 80 o ‘initAsNaiveBayes’ = False – A rede inicial não é Naive Bayes, portanto a rede inicial é vazia. o ‘maxNrOfParents’ = 2 – O número máximo de nós pai cada nó da rede pode ter. Sendo 2 trata-se de uma rede denominada Tree Augmented Bayes Network (TAN). o ‘scoreType’ = BAYES – Medida usada para julga a qualidade da rede gerada no algoritmo. O algoritmo de Estimação de probabilidade condicional para a rede foi o Simple Estimator com alpha=0.5. Os resultados completos apresentados pelo programa Java no Teste 6 para Rede Bayesiana estão no Apêndice D. As informações da Tabela 17 mostram a Matriz de Confusão. Todas as classes tiveram excelentes precisões. A melhor foi "Sentado", com uma taxa de acerto individual de 99,38%. A classe "Levantando-se" teve a menor de todas as taxas, mesmo assim foi alta, 89,84%. Nota-se na Matriz de Confusão os maiores valores concentrados na diagonal da matriz. O grau de Acerto foi de 97,4544 %. Tabela 17 – Matriz de Confusão: Rede Bayesiana – Hill Climber e Simple Estimator. Holdout com 66% para treinamento, número máximo de nós pai igual a 2. a 11611 8 0 4 0 b 25 2519 50 170 37 c 0 12 10694 83 66 d e 45 156 88 2574 59 2 34 100 34 9852 Fonte: Elaborado pelo autor, 2015. [ TESTE 7 ] Este teste em resumo consiste em: classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando 81 Rede Bayesiana, validação 10-fold cross validation, algoritmo de pesquisa de rede Hill Climber (número máximo de nós pai igual a 2), algoritmo de Estimação Simple Estimator, sem seleção de atributos. Resultado de acerto = 97,9282%. Desempenho: o Construção e Treinamento da rede: 5540,887 segundos. o Teste de validação: 51458,738 segundos. O arquivo original com o dataset completo foi carregado em memória, a partir disso o programa utilizou a chamada apropriada da biblioteca Weka para efetuar a validação k-fold validation, configurando com fold=10. Configurações: O algoritmo de pesquisa e aprendizado de rede Bayes utilizado foi Hill Climber para adicionar, remover e reverter arcos da rede. o ‘initAsNaiveBayes’ = False – A rede inicial não é Naive Bayes, portanto a rede inicial é vazia. o ‘maxNrOfParents’ = 2 – O número máximo de nós pai cada nó da rede pode ter. Sendo 2 trata-se de uma rede denominada Tree Augmented Bayes Network (TAN). o ‘scoreType’ = BAYES – Medida usada para julga a qualidade da rede gerada no algoritmo. O algoritmo de Estimação de probabilidade condicional para a rede foi o Simple Estimator com alpha=0.5. Os resultados completos apresentados pelo programa Java no Teste 7 para Rede Bayesiana estão no Apêndice D. As informações da Tabela 18 mostram a Matriz de Confusão. Este teste apresentou o melhor resultado geral de todos para Rede Bayesiana, tendo todas as classes com excelentes taxas de acerto individuais. A melhor foi "Sentado", com uma taxa de acerto individual de 99,49%. A classe "Levantando-se" teve a menor taxas, mesmo assim foi alta, 91,52%. Nota-se na Matriz de Confusão os maiores valores concentrados na diagonal da matriz. 82 O grau de Acerto foi de 97,9282 %. Tabela 18 – Matriz de Confusão: Rede Bayesiana – Hill Climber e Simple Estimator. 10-fold cross validation, número máximo de nós pai igual a 2. a 100745 46 2 25 3 b 173 22335 213 1257 259 c 2 158 93072 513 618 d 299 888 499 22723 374 e 43 227 954 310 85526 classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando Fonte: Elaborado pelo autor, 2015. 4.2.2 Rede Neural - PMC [ TESTE 1 ] Este teste em resumo consiste em: Rede Neural (Perceptron Multicamadas), validação holdout com 66% para treinamento, com backpropagation, Épocas=1000, Taxa de Aprendizado = 0,3, Momentum = 0,2, nós com função sigmoid. São 21 neurônios na camada de entrada, representando os atributos da instância, 13 na camada escondida (intermediária), e 5 na camada de saída (classes). Sem seleção de atributos. Percentual de acerto = 95,5106 %. Desempenho: o Construção e Treinamento da rede: 781,849 segundos. o Teste de validação: 782,084 segundos. Configurações utilizadas: ‘decay’ = True – Sendo valor verdadeiro, auxilia no desempenho e ajuda a rede parar de divergir do valor desejado, pois redefine o valor da taxa de aprendizado dividindo-o pelo número de épocas. ‘hiddenLayers’ = a – Define as camadas escondidas da rede. O valor “a” significa 'a' = (attribs + classes) / 2. 83 ‘learningRate’ = 0,3 – Taxa com que os pesos são atualizados, definindo a velocidade do aprendizado. o Nota: Uma taxa de aprendizado muito baixa torna o aprendizado da rede muito lento, ao passo que uma taxa de aprendizado muito alta provoca oscilações no treinamento e impede a convergência do processo de aprendizado. ‘momentum’ = 0,2 – Aumenta a velocidade de treinamento, ao mesmo tempo reduz o perigo de instabilidade. ‘nominalToBinaryFilter’ = True – Pré-processa as instâncias nos atributos nominais. Ajuda o desempenho do treinamento. ‘normalizeAttributes’ = True – Deve ser aplicado pois existem atributos não normalisados, inclusive os que estavam como nominais. ‘normalizeNumericClass’ = True – Normaliza atributos numéricos. Ajuda o desempenho do treinamento. ‘reset’ = True – Permite que a Taxa de Aprendizado seja reiniciada com um menor valor caso haja divergência com o desejado, reiniciando o treinamento. ‘trainingTime’ = 1000 – Número de Épocas. ‘validationThreshold’ = 20 – Limiar de aceite para quando houver piora no treino. O arquivo original com o dataset completo foi carregado em memória, a partir disso o programa se encarregou de separar as instâncias considerando que elas estão agrupadas por pessoa e classe. Desta forma, num loop de iterações nas instâncias o programa, a cada 10 instâncias, separou 6 para treinamento e 4 para testes, prosseguimento até o final do dataset, resultando assim numa separação homogênea dos dados. Os resultados completos apresentados pelo programa Java no Teste 1 para Rede Neural (Perceptron Multicamadas) estão no Apêndice E. As informações da Tabela 19 mostram a Matriz de Confusão. Todas as classes na Rede Neural atingiram uma taxa individual de acerto bem elevada, chegando a 99,52% para "Sentado". A menor acurácia foi para a classe "Levantando-se" (81,12%), com uma leve dificuldade de distinção com as classes "Sentar-se" e "Em pé". 84 O grau de Acerto foi de 95,5106 %. Tabela 19 – Matriz de Confusão: Rede Neural (Perceptron Multicamadas) – Épocas=1000, Taxa de Aprendizado = 0,3, Momentum = 0,2. a 11627 70 1 50 11 b 19 2294 8 174 44 c 0 158 10712 221 351 d e 27 137 58 2324 58 10 70 153 96 9550 classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando Fonte: Elaborado pelo autor, 2015. [ TESTE 2 ] Este teste em resumo consiste em: Rede Neural (Perceptron Multicamadas), validação holdout com 66% para treinamento, com backpropagation, Épocas=5000, Taxa de Aprendizado = 0,3, Momentum = 0,6, nós com função sigmoid. São 21 neurônios na camada de entrada, representando os atributos da instância, 13 na camada escondida (intermediária), e 5 na camada de saída (classes). Sem seleção de atributos. Percentual de acerto = 96,438 %. Desempenho: o Construção e Treinamento da rede: 3894,841 segundos. o Teste de validação: 3895,117 segundos. Configurações utilizadas: ‘decay’ = True – Sendo valor verdadeiro, auxilia no desempenho e ajuda a rede parar de divergir do valor desejado, pois redefine o valor da taxa de aprendizado dividindo-o pelo número de épocas. ‘hiddenLayers’ = a – Define as camadas escondidas da rede. O valor “a” significa 'a' = (attribs + classes) / 2. ‘learningRate’ = 0,3 – Taxa com que os pesos são atualizados, definindo a velocidade do aprendizado. o Nota: Uma taxa de aprendizado muito baixa torna o aprendizado da rede muito lento, ao passo que uma taxa de aprendizado muito alta provoca 85 oscilações no treinamento e impede a convergência do processo de aprendizado. ‘momentum’ = 0,6 – Aumenta a velocidade de treinamento, ao mesmo tempo reduz o perigo de instabilidade. ‘nominalToBinaryFilter’ = True – Pré-processa as instâncias nos atributos nominais. Ajuda o desempenho do treinamento. ‘normalizeAttributes’ = True – Deve ser aplicado pois existem atributos não normalisados, inclusive os que estavam como nominais. ‘normalizeNumericClass’ = True – Normaliza atributos numéricos. Ajuda o desempenho do treinamento. ‘reset’ = True – Permite que a Taxa de Aprendizado seja reiniciada com um menor valor caso haja divergência com o desejado, reiniciando o treinamento. ‘trainingTime’ = 5000 – Número de Épocas. ‘validationThreshold’ = 20 – Limiar de aceite para quando houver piora no treino. O arquivo original com o dataset completo foi carregado em memória, a partir disso o programa se encarregou de separar as instâncias considerando que elas estão agrupadas por pessoa e classe. Desta forma, num loop de iterações nas instâncias o programa, a cada 10 instâncias, separou 6 para treinamento e 4 para testes, prosseguimento até o final do dataset, resultando assim numa separação homogênea dos dados. Os resultados completos apresentados pelo programa Java no Teste 2 para Rede Neural (Perceptron Multicamadas) estão no Apêndice E. As informações da Tabela 20 mostram a Matriz de Confusão. Todas as classes na Rede Neural atingiram uma taxa individual de acerto bem elevada, chegando a 99,74% para "Sentado". A menor acurácia foi para a classe "Levantando-se" (84,50%), com uma leve dificuldade de distinção com as classes "Sentar-se" e "Em pé". Grau de Acerto = 96,4838 %. 86 Tabela 20 – Matriz de Confusão: Rede Neural (Perceptron Multicamadas) – Épocas=5000, Taxa de Aprendizado = 0,3, Momentum = 0,6. a 11653 45 2 60 7 b 1 2422 15 158 45 c 0 70 10773 132 269 d e 27 145 71 2421 83 2 47 71 94 9610 Fonte: Elaborado pelo autor, 2015. classificado como: a = Sentado b = Sentar-se c = Em pé d = Levantando-se e = Andando 87 5 CONCLUSÕES E TRABALHOS FUTUROS De acordo com os resultados apresentados no Capítulo 3, podemos fazer conclusões com base em comparações entre eles e nas metas deste trabalho. Tanto com a Rede Neural (Perceptron Multicamadas) como com a Rede Bayesiana obtiveram-se excelentes resultados, com mais de 97% de taxa de acerto. A Rede Neural possui o melhor desempenho (tempo de processamento) na construção e treinamento e nos testes, obtendo simultaneamente excelentes taxas de acerto. A Rede Bayesiana atingiu excelentes taxas de acerto quando se utilizou a técnica de validação 10-fold cross-validation, e configurando-se o número máximo de nós pai para cada nó da rede com valor pelo menos 2. Contudo tanto a construção da rede como os testes de validação da Rede Bayesiana são extremamente custosos (elevado tempo, por exemplo 14 horas para testes de validação, enquanto a Rede Neural chegou a levar aproximadamente 1 hora nos testes validação). Na Rede Bayesiana, ao se aplicar diferentes técnicas de Validação (holdout e 10-fold cross-validation), com e sem seleção de atributos, obtiveram-se resultados em torno de 90% para a maioria. A técnica de validação 10-fold cross-validation apresentou o melhor resultado global de todos os testes (97,9282%). A técnica de validação holdout é bastante eficaz para o problema proposto, principalmente quando se leva em consideração as características e ordenação das instâncias no arquivo de dados carregado (tal como foi feito no Programa Java). A técnica de validação leave-oneperson-out se mostrou bastante ruim, com resultados de percentual de acerto abaixo de 35% em todas as tentativas, independentemente do número máximo de nós pai ou de outras configurações do algoritmo de construção da Rede Bayesiana (Hill Climber, detalhado nos testes 1, 4 e 5 da seção 4.2.1, ou K2, detalhado no teste 6 da seção 4.1.1). Isto revela que o treinamento, da forma que é realizado, considerando-se a metodologia de coleta de dados, não é útil para ser expandido para pessoas diferentes, ou seja, com diferentes comportamentos físicos que impactem as medições dos acelerômetros. 88 Selecionar atributos na Rede Bayesiana, na tentativa de remover os não relevantes, não causou impacto significativo neste problema, mesmo ao se aplicar métodos sofisticados de seleção de atributos, tal como o algoritmo Genético. Mudanças na técnica heurística de construção da Rede Bayesiana se mostrou promissor. Obteve-se o melhor resultado dos testes ao mudar de Hill Climber local para Hill Climber global. Entretanto, ao se tentar mudar de Hill Climber para K2, que é semelhante mas atrelado à ordem dos nós da rede, há grande piora do resultado (chegou-se a uma taxa de acerto de aproximadamente 54%). A Rede Naive Bayes como classificador (também chamado de Classificador Ingênuo), a qual é bem mais simples pois assume que terá apenas o nó da classe ligada com um arco a todos os outros nós dos atributos, se mostrou bastante ineficaz para o problema proposto. Sua baixa taxa de acerto revela que não existe completa independência entre os atributos. Isso já era de certa forma esperado tendo em vista que os dados dos usuários dependem, por exemplo, da idade, peso e altura, pois eles impactam na forma como os movimentos são realizados e nos valores coletados dos acelerômetros. Sabe-se que atributos correlacionados podem causar degeneração em relação ao desempenho do Classificador Ingênuo porque a condição de independência condicional não vale mais para aqueles atributos. No trabalho de Ugulino, Cardador, Vega, Velloso e Milidiu (2012), onde se publicou o dataset aqui utilizado, obteve-se uma taxa de acerto de 99,4%. As variáveis de entrada foram as referenciadas na Figura 14 da seção 3.2. Os autores utilizaram o classificador AdaBoost, o qual combina árvores de decisão, e técnica de validação 10fold cross validation. Portanto, comparando-se as taxas de acerto, este trabalho apresenta um bom resultado, isto é,97,9282%. Note-se que no trabalho de Ugulino, Cardador, Vega, Velloso e Milidiu (2012) não há detalhamento da plataforma computacional utilizada nem dos resultados de desempenho (tempo de construção, treinamento e validação do classificador). Aqui o melhor resultado encontrado, isto é, 97,9282%, foi para Rede Bayesiana, com algoritmo de aprendizado Hill Climber, número máximo de nós pai igual a 2, com 10-fold cross validation. Sendo assim, considerando-se os tempos gastos para construção, treinamento e testes aqui encontrados, considera-se que os resultados do presente trabalho são satisfatórios. 89 Verificando-se os melhores e piores resultados obtidos e o escopo deste trabalho, são sugeridos os seguintes trabalhos futuros para aprimoramento dos resultados de classificador HAR com Rede Bayesiana e Rede Neural: 1. Rede Bayesiana: a. Ao invés de Hill Climbing, testar com algoritmos tais como ‘Simulated Annealing’, ‘Tabu Search’. b. Métrica de julgamento: i. Alterar o Score Type da rede de ‘BAYES’ para ‘Bdeu’, ‘MDL’, ‘ENTROPY’ ou ‘AIC’ (BOUCKAERT, 2008). c. Estimador de Probabilidade: i. Ao invés de Simple Estimator, testar com outras opções da biblioteca Weka: ‘BMAEstimator’, ‘BayesNetEstimator’ ou ‘MultiNomialBMAEstimator’ (BOUCKAERT, 2008). 2. Rede Neural – Perceptron Multicamadas: a. Ajustar configurações: Epochs, Learningrate, Momentum. b. Repetir testes com validação holdout e k-fold cross validation, variandose o valor de ‘k’. 3. Validação: a. Não executar novos testes utilizando validação leave-one-person-out, pois apresentou os piores resultados considerando-se a metodologia de coleta de dados apresentada. b. Repetir: i. Holdout, variando-se o percentual de instâncias para teste (entre 20% e 50%). ii. K-fold cross validation, variando-se convenientemente o valor de k entre 3 e 100. 4. Extração e Seleção de Características: 90 a. Calcular diferentes características a partir dos atributos, com funções matemáticas e estatísticas representantes dos dados, semelhantemente ao que foi feito por Ugulino, Cardador, Vega, Velloso e Milidiu (2012). b. Monitorar o tempo de processamento da extração e seleção de características e seu impacto relativo no tempo de processamento geral. 5. Coleta de Dados: a. Expandir o escopo do trabalho e desenvolver infraestrutura de sensores para coleta de dados de acelerômetros de pessoas em atividades controladas. b. Expandir os tipos físicos, a quantidade de tempo e a quantidade de usuários para coleta. c. Trabalhos mais focados em certas atividades, com maior variabilidade de testes em diferentes posições de acelerômetros no corpo e diferentes ações para levantamento de dados de treinamento, combinados com uma detalhada e bem escolhida extração e seleção de características, como feito por Gjoreski, Lustrek e Gams (2011), onde se trabalhou com detecção de quedas, são bastante eficientes, atingindo-se taxa de acerto entre 90 e 99%. Portanto uma possível abordagem poderia ser manter a variação de pessoas com diferentes características físicas, como em Ugulino, Cardador, Vega, Velloso e Milidiu (2012), mas expandindo-se a quantidade de cenários de testes e de posicionamento dos sensores nos corpos dos voluntários. d. Utilizar dados de acelerômetros de smartphones em bolso da calça do usuário como em (KESAVARAJ; SUKUMARAN, 2013), (LOCKHART, 2011) e (DANDEKAR; MYSORE; LITTMAN, 2005). Com foco nos desafios atuais do Reconhecimento de Atividade Humana e técnicas de Classificação, podem-se vislumbrar possíveis futuras abordagens. Com o objetivo de prover uma completa solução de HAR, ou seja, sensoriamento da atividade e classificação e entrega de serviço em tempo real, de forma clara e útil ao propósito do usuário, pode-se implementar uma interpretação dinâmica dos dados dos sensores, aliando-se dispositivo e processamento para gerar inteligência. 91 A criação de um classificador e entrega de serviço a partir de correlacionamento de múltiplos sensores pode ser bastante eficiente. Por exemplo, podem-se combinar acelerômetros e GPS embarcados na pessoa, ou ainda combinar os dados dos acelerômetros com processamento digital de imagem a partir de dados de câmeras, podendo ser utilizado na área de segurança. Com uma combinação de múltiplos classificadores seria possível dinamicamente escolher o melhor resultado para cada entrada, com potencial de aumentar a acurácia da classificação. Uma abordagem desse tipo é encontrada em Ravi, Dandekar, Mysore e Littman (2005), onde se abordam os Classificadores Meta-level. A combinação de etapas de HAR numa única solução e com possível realimentação pode gerar resultados proveitosos. Nas etapas de interpretação e entrega de serviço, a realimentação poderia aprimorar dinamicamente as etapas de coleta e classificação. Um foco em atividades complexas, com alto grau de similaridades umas com as outras, e combinadas entre si, tais como beber enquanto anda, subir e descer escadas, traria benefícios nas aplicações do classificador HAR. Aliado a isso, o foco no pré-processamento considerando-se períodos de não atividade, isto é, identificar intervalos de atividades, é complexo e possui grandes potenciais. Neste trabalho percebeu-se um péssimo resultado quando os dados de treinamento e testes são separados por indivíduos (técnica leave-one-person-out). Isso se deve à forma de coleta, ao pré-processamento e aos atributos considerados. Indivíduos possuem diferentes centros de massa, maneiras de se movimentar e inércias de movimentação diferentes. Isto leva à necessidade de se trabalhar melhor na posição dos acelerômetros. A generalização, ou seja, obter um classificador único para diferentes indivíduos em maior número possível, seria um objetivo futuro muito importante. 92 REFERÊNCIAS BOUCKAERT, R. R. Bayesian Network Classifiers in Weka for Version 3-5-7. The University of Waikato, 2008. FIGO, D.; DINIZ, P. C.; FERREIRA, D. R.; CARDOSO, J. M. P. Preprocessing techniques for context recognition from accelerometer data. Pervasive and Mobile Computing, vol. 14, no. 7, pp. 645–662, 2010. GJORESKI, H.; LUSTREK, M.; GAMS, M. Accelerometer Placement for Posture Recognition and Fall Detection. In: 7th International Conference on Intelligent Environments, IE, 2011. GOLDBERG, D. E. Genetic Algorithms in Search Optimization and Machine Learning. 1st Edition, ISBN: 0201157675, Addison-Wesley Longman Publishing Co., Inc. Boston, MA, USA, 1989. HUYNH, D.T.G. Human Activity Recognition with Wearable Sensors, pp 59-65, Technische Universität Darmstadt, 2008. KESAVARAJ, G.; SUKUMARAN, S. A study on classification techniques in data mining , Computing, Communications and Networking Technologies (ICCCNT),2013 Fourth International Conference on pp. 4-6 July 2013. LOCKHART, J. Mobile Sensor Data Mining, Fordham Undergraduate Research Journal, vol. 1, pp 67-68, 2011. RAKHMAN, A.; SUN, G. Y.; CATUR R. Building Artificial Neural Network Using WEKA Software. Information System Department, Sepuluh Nopember Institute of Technology at Surabaya, Indonesia, 2009 RAVI, N.; DANDEKAR, N.; MYSORE, P.; LITTMAN, M. Activity recognition from accelerometer data, in: Proceedings of the 17th conference on Innovative applications of artificial intelligence - Volume 3, IAAI'05, AAAI Press, pp. 1541-1546, 2005. UGULINO, W.; CARDADOR, D.; VEGA, K.; VELLOSO, E.; MILIDIU, R.; FUKS, H. Wearable Computing: Accelerometers' Data Classification of Body Postures and Movements. Proceedings of 21st Brazilian Symposium on Artificial Intelligence. Advances in Artificial Intelligence - SBIA 2012. In: Lecture Notes in Computer Science. , pp. 52-61. Curitiba, PR: Springer Berlin / Heidelberg. ISBN 978-3-64234458-9. DOI: 10.1007/978-3-642-34459-6_6, 2012. UGULINO, W.; FERREIRA, M.; VELLOSO, E.; FUKS, H. Virtual Caregiver: Colaboração de Parentes no Acompanhamento de Idosos. Anais do SBSC 2012, IX Simpósio Brasileiro de Sistemas Colaborativos, pp. 43-48. São Paulo, SP: IEEE. ISBN 978-0-7695-4890-6, 2012. Weka 3: Data Mining Software in Java. Disponível em: <http://www.cs.waikato.ac.nz/ml/weka>. Acesso em: 03 nov. 2014. 93 WITTEN, I. H.; FRANK E.; HALL, M. A. Data Mining: Practical Machine Learning Tools and Techniques. 3rd Edition, Morgan Kaufmann Publishers, 2011. 94 APÊNDICE A – CÓDIGO FONTE JAVA Neste item é disponibilizado o código fonte em Java 1.7, construído baseado na metodologia e resultados descritos nos capítulos anteriores. package weka; import import import import import import import import import import import import import import import import import import import import weka.core.Attribute; weka.core.Instance; weka.core.Instances; weka.core.SelectedTag; weka.core.converters.ArffLoader; weka.classifiers.Classifier; weka.classifiers.Evaluation; weka.classifiers.bayes.BayesianLogisticRegression; weka.classifiers.bayes.NaiveBayes; weka.classifiers.bayes.NaiveBayesUpdateable; weka.classifiers.bayes.net.estimate.SimpleEstimator; weka.classifiers.bayes.net.search.SearchAlgorithm; weka.classifiers.bayes.net.search.ci.ICSSearchAlgorithm; weka.classifiers.bayes.net.search.global.HillClimber; weka.classifiers.bayes.net.search.local.Scoreable; weka.classifiers.functions.MultilayerPerceptron; weka.experiment.ClassifierSplitEvaluator; weka.filters.unsupervised.instance.RemoveWithValues; weka.filters.Filter; weka.gui.SelectedTagEditor; import import import import import import import import import java.io.File; java.io.FileOutputStream; java.io.FileReader; java.io.IOException; java.io.PrintStream; java.util.Arrays; java.util.Collections; java.util.Enumeration; java.util.Random; import javax.swing.JTable.PrintMode; import com.sun.xml.internal.bind.v2.schemagen.xmlschema.LocalAttribute; /** * @author Leopoldo Marchiori Rodrigues * @since Mar/2015 * @version 1.0 * * MÉTODOS DE CLASSIFICAÇÃO PARA RECONHECIMENTO DE ATIVIDADE HUMANA * * INSTITUTO FEDERAL DO ESPÍRITO SANTO * PÓS-GRADUAÇÃO LATO SENSU EM ENGENHARIA ELÉTRICA COM ÊNFASE EM SISTEMAS INTELIGENTES APLICADOS À AUTOMAÇÃO * */ public class MyWeka { public static Instances TRAIN_DATA = null; public static Instances TEST_DATA = null; public static double SAMPLE_PERCENTAGE = 100; // LEAVE_ONE_PERSON_OUT: //public static int LEAVE_ONE_PERSON_OUT_INDEX = 1; // second person to appear in set public static int PERSON_NAME_INDEX = 0; // In the referred data set the person's always the first attribute public static String LEAVE_ONE_PERSON_OUT_NAME = "katia"; // In the referred data person's name is always the first attribute public static String LEAVE_ONE_PERSON_OUT_NAME_2nd_attempt = "wallace"; // In the data set the person's name is always the first attribute the data name is set the referred 95 // HOLDOUT: public static double HOLDOUT_TRAIN_PERCENTAGE = 66; // CROSS_VALIDATION public static int CROSS_VALIDATION_RANDOM_SEED = 1; public static int CROSS_VALIDATION_FOLD = 3; // 10-fold cross validation // Bayes Net - SEARCH ALGOTHYM public enum BayesNetSearchAlgorithm { GLOBAL_GENETICSEARCH, GLOBAL_HILLCLIMBER, GLOBAL_SIMULATEDANNEALING, GLOBAL_TABUSEARCH, LOCAL_GENETICSEARCH, LOCAL_HILLCLIMBER, LOCAL_SIMULATEDANNEALING, LOCAL_TABUSEARCH }; // BAYES NET MAX NR OF PARENTS public static int BAYES_NET_MAX_NR_OF_PARENTS = 3; public enum ValidationTechnique { LEAVE_ONE_PERSON_OUT, // Premise: The data must be ordered by the persons HOLDOUT, CROSS_VALIDATION }; /** * @param args */ public static void main(String[] args) throws Exception { String dataParameter = args[0]; if(Common.isNotEmpty(dataParameter)) { PrintStream out = new PrintStream(new FileOutputStream("C:\\GoogleDrive\\2PGEN Monografia\\_example_weka\\_results\\output_retests2.txt")); System.setOut(out); long tStart = 0; long tEnd = 0; long tDelta = 0; double elapsedSeconds = 0; // ////////////////////////////////////////////////////////////////////// try { // // // // --------------------------------Step 1: Express the problem with features --------------------------------This step corresponds to the engineering task needed to write an .arff file. System.out.println("file = '" + dataParameter + "'"); System.out.println("\n\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); System.out.println("Load data - Validation Technique"); System.out.println("LEAVE_ONE_PERSON_OUT"); System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); // katia TRAIN_DATA = null;TEST_DATA = null; // Reset data loadData(dataParameter, ValidationTechnique.LEAVE_ONE_PERSON_OUT, LEAVE_ONE_PERSON_OUT_NAME); if((TRAIN_DATA != null && TEST_DATA != null) && (TRAIN_DATA.numInstances() > 0 && TEST_DATA.numInstances() > 0)) { System.out.println("---------------------------------"); System.out.println(" BAYES NET"); System.out.println("---------------------------------"); weka.classifiers.bayes.BayesNet bnet = buildClassifierBayesNet(BayesNetSearchAlgorithm.LOCAL_HILLCLIMBER); validateAndGetConfusionMatrix(bnet, ValidationTechnique.LEAVE_ONE_PERSON_OUT); } // wallace TRAIN_DATA = null;TEST_DATA = null; // Reset data 96 loadData(dataParameter, ValidationTechnique.LEAVE_ONE_PERSON_OUT, LEAVE_ONE_PERSON_OUT_NAME_2nd_attempt); if((TRAIN_DATA != null && TEST_DATA != null) && (TRAIN_DATA.numInstances() > 0 && TEST_DATA.numInstances() > 0)) { System.out.println("---------------------------------"); System.out.println(" BAYES NET"); System.out.println("---------------------------------"); weka.classifiers.bayes.BayesNet bnet = buildClassifierBayesNet(BayesNetSearchAlgorithm.LOCAL_HILLCLIMBER); validateAndGetConfusionMatrix(bnet, ValidationTechnique.LEAVE_ONE_PERSON_OUT); } System.out.println("\n\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); System.out.println("Load data - Validation Technique"); System.out.println("HOLDOUT"); System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); TRAIN_DATA = null;TEST_DATA = null; // Reset data loadData(dataParameter, ValidationTechnique.HOLDOUT, null); if((TRAIN_DATA != null && TEST_DATA != null) && (TRAIN_DATA.numInstances() > 0 && TEST_DATA.numInstances() > 0)) { System.out.println("---------------------------------"); System.out.println(" BAYES NET"); System.out.println("---------------------------------"); weka.classifiers.bayes.BayesNet bnet = buildClassifierBayesNet(BayesNetSearchAlgorithm.LOCAL_HILLCLIMBER); validateAndGetConfusionMatrix(bnet, ValidationTechnique.HOLDOUT); } TRAIN_DATA = null;TEST_DATA = null; // Reset data loadData(dataParameter, ValidationTechnique.HOLDOUT, null); if((TRAIN_DATA != null && TEST_DATA != null) && (TRAIN_DATA.numInstances() > 0 && TEST_DATA.numInstances() > 0)) { System.out.println("---------------------------------"); System.out.println(" BAYES NET"); System.out.println("---------------------------------"); weka.classifiers.bayes.BayesNet bnet = buildClassifierBayesNet(BayesNetSearchAlgorithm.LOCAL_SIMULATEDANNEALING); validateAndGetConfusionMatrix(bnet, ValidationTechnique.HOLDOUT); } System.out.println("\n\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); System.out.println("Load data - Validation Technique"); System.out.println("CROSS_VALIDATION"); System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); // O método de validação cruzada denominado k-fold consiste em dividir o conjunto total de dados em k subconjuntos mutuamente exclusivos do mesmo tamanho e, a partir disto, um subconjunto é utilizado para teste e os k-1 restantes são utilizados para estimação dos parâmetros e calcula-se a acurácia do modelo. Este processo é realizado k vezes alternando de forma circular o subconjunto de teste. A figura abaixo mostra o esquema realizado pelo k-fold. // Exemplo do esquema de particionamento e execução do método k-fold com k = 3. // Ao final das k iterações calcula-se a acurácia sobre os erros encontrados, através da equação descrita anteriormente, obtendo assim uma medida mais confiável sobre a capacidade do modelo de representar o processo gerador dos dados TRAIN_DATA = null;TEST_DATA = null; // Reset data loadData(dataParameter, ValidationTechnique.CROSS_VALIDATION, null); if((TRAIN_DATA != null && TEST_DATA != null) && (TRAIN_DATA.numInstances() > 0 && TEST_DATA.numInstances() > 0)) { System.out.println("---------------------------------"); System.out.println(" BAYES NET"); System.out.println("---------------------------------"); weka.classifiers.bayes.BayesNet bnet = buildClassifierBayesNet(BayesNetSearchAlgorithm.LOCAL_HILLCLIMBER); validateAndGetConfusionMatrix(bnet, ValidationTechnique.CROSS_VALIDATION); } } catch (Exception e) { System.out.println("Bayes Net attempt failed!\n\n"); e.printStackTrace(); } 97 try { System.out.println("\n\n-----------------------------------------"); System.out.println("NEURAL NETWORK - Multilayer Perceptron"); System.out.println("-----------------------------------------"); // TODO: Explain each parameter: weka.classifiers.functions.MultilayerPerceptron mlp = new MultilayerPerceptron(); mlp.setAutoBuild(true); // ? mlp.setDebug(true); // ? mlp.setDecay(true); // ? mlp.setHiddenLayers("a"); // 1 for each hidden layer. Comma separated. To have no hidden layers put a single 0 here. // This will only be used if autobuild is set. // There are also wildcard values 'a' = (attribs + classes) / 2, 'i' = attribs, 'o' = classes , 't' = attribs + classes. mlp.setLearningRate(0.3); // Should be between 0 an 1, so 10.3 is a wrong value!!! mlp.setMomentum(0.6); // Should be between 0 an 1, so 10.6 is a wrong value!!! mlp.setNominalToBinaryFilter(true); // [Performance] true, as it has a lot of nominal attributes mlp.setNormalizeAttributes(true); // [Performance] true, as it has non normalised attributes values, including the nominal ones mlp.setNormalizeNumericClass(true); // ? mlp.setReset(true); // To allow reseting the learning rate when it fails during the process mlp.setSeed(0); // ? mlp.setTrainingTime(50000); // Epochs (If the validation set is non-zero then it can terminate the network early) mlp.setValidationSetSize(50); // The percentage size of the validation set. (The training will continue until it is observed that the error on the validation set has been consistently getting worse, // or if the training time is reached). mlp.setValidationThreshold(200); // ? TRAIN_DATA = null;TEST_DATA = null; // Reset data loadData(dataParameter, ValidationTechnique.HOLDOUT, null); if((TRAIN_DATA != null && TEST_DATA != null) && (TRAIN_DATA.numInstances() > 0 && TEST_DATA.numInstances() > 0)) { System.out.println("---------------------------------"); System.out.println("TRAIN DATA"); System.out.println("---------------------------------"); tStart = System.currentTimeMillis(); mlp.buildClassifier(TRAIN_DATA); tEnd = System.currentTimeMillis(); tDelta = tEnd - tStart; elapsedSeconds = tDelta / 1000.0; System.out.println("[PERFORMANCE] Build Classifier using TRAIN data: "+elapsedSeconds+" seconds"); System.out.println("---------------------------------"); System.out.println("TEST DATA"); System.out.println("---------------------------------"); // Test the model Evaluation eTest = new Evaluation(TEST_DATA); eTest.evaluateModel(mlp, TEST_DATA); // TEST tEnd = System.currentTimeMillis(); tDelta = tEnd - tStart; elapsedSeconds = tDelta / 1000.0; System.out.println("[PERFORMANCE] Validating using TEST data: "+elapsedSeconds+" seconds"); // Print the result à la Weka explorer: String strSummary = eTest.toSummaryString(); System.out.println(strSummary); // Get the confusion matrix double[][] cmMatrix = eTest.confusionMatrix(); System.out.println("---------------------------------"); System.out.println("Confusion Matrix"); System.out.println("---------------------------------"); // Print the confusion matrix System.out.println("confusion matrix :::::"); Common.printMatrix(cmMatrix); } 98 } catch (Exception e) { System.out.println("Neural Network attempt failed!\n\n"); e.printStackTrace(); } } else { System.out.println("ERROR - incorrect paramenters: train and test data file!"); } } /** * Evaluate the Classifier using the test data and provide the Confusion Matrix. * @param bnet * @param pValidationTechnique * @throws Exception */ private static void validateAndGetConfusionMatrix(weka.classifiers.bayes.BayesNet bnet, ValidationTechnique pValidationTechnique) throws Exception { long tStart; long tEnd; long tDelta; double elapsedSeconds; // --------------------------------// Step 3: Test the classifier // --------------------------------System.out.println("---------------------------------"); System.out.println("TEST DATA"); System.out.println("---------------------------------"); // Test the model Evaluation eTest = new Evaluation(TEST_DATA); tStart = System.currentTimeMillis(); // only for CROSS_VALIDATION if(pValidationTechnique.equals(ValidationTechnique.CROSS_VALIDATION)) { eTest.crossValidateModel(bnet, TEST_DATA, CROSS_VALIDATION_FOLD, new Random(CROSS_VALIDATION_RANDOM_SEED)); } eTest.evaluateModel(bnet, TEST_DATA); // TEST tEnd = System.currentTimeMillis(); tDelta = tEnd - tStart; elapsedSeconds = tDelta / 1000.0; System.out.println("[PERFORMANCE] Validating using TEST data: "+elapsedSeconds+" seconds"); // Print the result à la Weka explorer: String strSummary = eTest.toSummaryString(); System.out.println(strSummary); // Get the confusion matrix double[][] cmMatrix = eTest.confusionMatrix(); System.out.println("---------------------------------"); System.out.println("Confusion Matrix"); System.out.println("---------------------------------"); // Print the confusion matrix System.out.println("confusion matrix :::::"); Common.printMatrix(cmMatrix); } /** * Build the Bayes Net Classifier using some Search algorithm, like a heuristic, and an Estimator for probability condition for the net cells. * @param pBayesNetSearchAlgorithm * @return * @throws Exception */ public static weka.classifiers.bayes.BayesNet buildClassifierBayesNet(BayesNetSearchAlgorithm pBayesNetSearchAlgorithm) throws Exception { long tStart; long tEnd; long tDelta; double elapsedSeconds; // --------------------------------// Step 2: Train a Classifier 99 // // // // // --------------------------------System.out.println("---------------------------------"); System.out.println("WEKA Classfier - BAYES NET"); System.out.println("---------------------------------"); // Choose a classifier (weka.classifiers.Classifier) and create the model. // Create a naïve bayes classifier Classifier cModel = (Classifier)new NaiveBayes(); cModel.buildClassifier(structure); System.out.println("---------------------------------"); System.out.println("TRAIN DATA"); System.out.println("---------------------------------"); // // SEARCH ALGORITHM (Learner) // searchAlgorithm -- Select method used for searching network structures. // create new instance of scheme //BayesNetSearchAlgorithm whichSearchAlgorithm = BayesNetSearchAlgorithm.values()[(int)pBayesNetSearchAlgorithm]; System.out.println("SEARCH ALGORITHM (Learner) = '" + pBayesNetSearchAlgorithm.toString() + "'"); weka.classifiers.bayes.net.search.SearchAlgorithm scheme = new SearchAlgorithm(); switch (pBayesNetSearchAlgorithm) { case LOCAL_HILLCLIMBER: { scheme = new weka.classifiers.bayes.net.search.local.HillClimber(); // set options ::: //scheme.setOptions(weka.core.Utils.splitOptions("-P 100000 -N -S BAYES")); // initAsNaiveBayes -- When set to true (default), the initial network used for structure learning is a Naive Bayes Network, that is, a network with an arrow from the classifier node to each other node. When set to false, an empty network is used as initial network structure ((weka.classifiers.bayes.net.search.local.HillClimber)scheme).setInitAsNaiveBayes(false); // maxNrOfParents: maximum number of parents a node in the Bayes net can have. As it's 100000 then its pretty much unlimted // ATTENTION!!! If this 'maxNrOfParents' value is set to a high value, it brings a huge memory usage rate by the 'buildClassifier' method, almost 5 GB of RAM in heap space. ((weka.classifiers.bayes.net.search.local.HillClimber)scheme).setMaxNrOfParents(BAYES_NET_MAX_ NR_OF_PARENTS); // scoreType -- The score type determines the measure used to judge the quality of a network structure. It can be one of Bayes, BDeu, Minimum Description Length (MDL), Akaike Information Criterion (AIC), and Entropy. ((weka.classifiers.bayes.net.search.local.HillClimber)scheme).setScoreType(new SelectedTag(Scoreable.BAYES, weka.classifiers.bayes.net.search.local.LocalScoreSearchAlgorithm.TAGS_SCORE_TYPE)); //System.out.println("scoreType"); } case GLOBAL_HILLCLIMBER: { scheme = new weka.classifiers.bayes.net.search.global.HillClimber(); ((weka.classifiers.bayes.net.search.global.HillClimber)scheme).setInitAsNaiveBayes(false); ((weka.classifiers.bayes.net.search.global.HillClimber)scheme).setMaxNrOfParents(BAYES_NET_MAX _NR_OF_PARENTS); ((weka.classifiers.bayes.net.search.global.HillClimber)scheme).setCVType(new SelectedTag(Scoreable.BAYES, weka.classifiers.bayes.net.search.global.GlobalScoreSearchAlgorithm.TAGS_CV_TYPE)); } case LOCAL_SIMULATEDANNEALING: { // TStart -- (default = 10.0) Sets the start temperature of the simulated annealing search. The start temperature determines the probability that a step in the 'wrong' direction in the search space is accepted. // The higher the temperature, the higher the probability of acceptance. // delta -- (default = 0.999) Sets the factor with which the temperature (and thus the acceptance probability of steps in the wrong direction in the search space) is decreased in each iteration. // markovBlanketClassifier -- (default = false) When set to true (default is false), after a network structure is learned a Markov Blanket correction is applied to the network structure. // This ensures that all nodes in the network are part of the Markov blanket of the classifier node. // runs -- (default = 10000) Sets the number of iterations to be performed by the simulated annealing search. 100 // scoreType -- (default = BAYES) The score type determines the measure used to judge the quality of a network structure. It can be one of Bayes, BDeu, Minimum Description Length (MDL), Akaike Information Criterion (AIC), and Entropy. // seed -- (default = 1) Initialization value for random number generator. Setting the seed allows replicability of experiments. scheme = new weka.classifiers.bayes.net.search.local.SimulatedAnnealing(); ((weka.classifiers.bayes.net.search.local.SimulatedAnnealing)scheme).setDelta(0.5); ((weka.classifiers.bayes.net.search.local.SimulatedAnnealing)scheme).set ((weka.classifiers.bayes.net.search.local.SimulatedAnnealing)scheme).setScoreType(new SelectedTag(Scoreable.BAYES, weka.classifiers.bayes.net.search.local.LocalScoreSearchAlgorithm.TAGS_SCORE_TYPE)); } } // // ESTIMATOR // estimator -- Select Estimator algorithm for finding the conditional probability tables of the Bayes Network. // SimpleEstimator is used for estimating the conditional probability tables of a Bayes network once the structure has been learned. Estimates probabilities directly from data. SimpleEstimator estimator = new SimpleEstimator(); // set options // alpha -- Alpha is used for estimating the probability tables and can be interpreted as the initial count on each value // estimator.setOptions(weka.core.Utils.splitOptions("-A 0.5")); estimator.setAlpha(0.5); System.out.println("Simple Estimator - alpha=0.5"); // // set options for bayes classifier weka.classifiers.bayes.BayesNet bnet = new weka.classifiers.bayes.BayesNet(); bnet.setEstimator(estimator); // estimator bnet.setSearchAlgorithm(scheme); // search algorythm //scheme.buildStructure(bnet, TRAIN_DATA); // TRAIN tStart = System.currentTimeMillis(); bnet.buildClassifier(TRAIN_DATA); tEnd = System.currentTimeMillis(); tDelta = tEnd - tStart; elapsedSeconds = tDelta / 1000.0; System.out.println("[PERFORMANCE] Build Classifier using TRAIN data: "+elapsedSeconds+" seconds"); return bnet; } // // /** * Gives Train and Test instances by reference - set static variables TRAIN_DATA and TEST_DATA * @param fileParameter * @param pValidationTechnique * @throws IOException */ private static void loadData(String fileParameter, ValidationTechnique pValidationTechnique, String pLeaveOnePersonOut_name) throws IOException { File myDataFile = new File(fileParameter); Instances myData = loadFileData(myDataFile); Instance myi = myData.firstInstance(); System.out.println("Number of Instances = " + myData.numInstances()); if(myData != null) { // Sample the file data double mySampleValue = SAMPLE_PERCENTAGE; sampleInstancesData(myData, mySampleValue); TRAIN_DATA = myData; TEST_DATA = myData; if(pValidationTechnique == ValidationTechnique.LEAVE_ONE_PERSON_OUT) { System.out.println("pLeaveOnePersonOut_name = " + pLeaveOnePersonOut_name); if(Common.isNotEmpty(pLeaveOnePersonOut_name)) { Attribute myItemPersonNameAttr = myData.attribute(PERSON_NAME_INDEX); // It's where the user name is in the attribute's list // Get the index of the desired Person's name from the attribute declaration int myPersonNameIndex_enum = 0; Enumeration myClassNameValues_Enum = myItemPersonNameAttr.enumerateValues(); String enumValue_attr = ""; while(myClassNameValues_Enum.hasMoreElements()) 101 { enumValue_attr = (String) myClassNameValues_Enum.nextElement(); if(Common.isNotEmpty(enumValue_attr) && enumValue_attr.equals(pLeaveOnePersonOut_name)) { System.out.println("Found the Person's name from the attribute declaration = " + enumValue_attr); break; } myPersonNameIndex_enum++; } // Check if it did found the persons's name in the attribute declaration if(Common.isNotEmpty(enumValue_attr)) { System.out.println("The index of the desired Person's name from the attribute declaration = " + String.valueOf(myPersonNameIndex_enum)); // select the person that will be part of the test data only int myPersonNameAttr_index = 0; if(PERSON_NAME_INDEX >= 0) { myPersonNameAttr_index = PERSON_NAME_INDEX; } try { String myPersonNameAttr_index_str = String.valueOf(myPersonNameAttr_index); String myPersonNameIndex_enum_str = String.valueOf(myPersonNameIndex_enum+1); String.valueOf(myPersonNameIndex_enum); RemoveWithValues filter = new RemoveWithValues(); // // TRAIN String[] options_train = new String[6]; options_train[0] = "-S"; // match if value matches options_train[1] = "0.0"; // options_train[2] = "-C"; // attribute index options_train[3] = "first";// myPersonNameAttr_index_str; // The position of the attribute "User" (i.e. the name of the person) options_train[4] = "-L"; // match if value matches options_train[5] = myPersonNameIndex_enum_str; // Person to be out of training dataset, it's the index in the attribute declaration filter.setOptions(options_train); filter.setInputFormat(myData); // filter.setAttributeIndex("first"); // filter.setNominalIndices(myPersonNameIndex_enum_str); // Person to be out of training dataset, it's the index in the attribute declaration TRAIN_DATA = Filter.useFilter(myData, filter); System.out.println("Train data number of instances = " + TRAIN_DATA.numInstances()); // // TEST String[] options_test = new String[7]; options_test[0] = "-S"; // match if value matches options_test[1] = "0.0"; // options_test[2] = "-C"; // attribute index options_test[3] = "first";// myPersonNameAttr_index_str; // The position of the attribute "User" (i.e. the name of the person) options_test[4] = "-L"; // match if value matches options_test[5] = myPersonNameIndex_enum_str; // Person to be out of training dataset, it's the index in the attribute declaration options_test[6] = "-V"; // filter.setOptions(options_test); filter.setInputFormat(myData); // filter.setAttributeIndex("first"); // filter.setNominalIndices(myPersonNameIndex_enum_str); // filter.setInvertSelection(true); TEST_DATA = Filter.useFilter(myData, filter); System.out.println("Test data number of instances = " + TEST_DATA.numInstances()); } catch (Exception e) { System.out.println("Load Data - Leave One Person Out. ERROR "); e.printStackTrace(); // Clear to abort the process TRAIN_DATA = null; TEST_DATA = null; } } } } 102 else if (pValidationTechnique == ValidationTechnique.HOLDOUT) { double myHouldout_TrainPerc = 40.0; // default if(HOLDOUT_TRAIN_PERCENTAGE> 0.0 && HOLDOUT_TRAIN_PERCENTAGE < 100.0) { myHouldout_TrainPerc = HOLDOUT_TRAIN_PERCENTAGE; } if(myHouldout_TrainPerc > 0.0 && myHouldout_TrainPerc < 100.0) { TEST_DATA = new Instances(myData); TEST_DATA.delete(); int myPerc = 10 - (int)Math.ceil(myHouldout_TrainPerc / 10.0); // quantity of instances to be deleted for(int i=0; i < myData.numInstances(); i++) { // The data remains only after (HOLDOUT_TRAIN_PERCENTAGE-1) instances. Hence it will have only HOLDOUT_TRAIN_PERCENTAGE of instances // For each 10 instances, it removes HOLDOUT_TRAIN_PERCENTAGE if(i % 10 == 0) { for(int idx=(i-myPerc); idx < i; idx++) { // Test array limits if(idx >= 0 && idx <= myData.numInstances()) { TEST_DATA.add(myData.instance(idx)); myData.delete(idx); } } } } TRAIN_DATA = new Instances(myData); System.out.println("HOLDOUT Instances TRAIN_DATA data ("+HOLDOUT_TRAIN_PERCENTAGE+"%) = " + TRAIN_DATA.numInstances() + " instances."); System.out.println("HOLDOUT Instances TEST_DATA data ("+(100HOLDOUT_TRAIN_PERCENTAGE)+"%) = " + TEST_DATA.numInstances() + " instances."); } } else if (pValidationTechnique == ValidationTechnique.CROSS_VALIDATION) { // TODO Nothing to do! } } } /** * It sample Instances data like: every 10 instances, it keeps those to match the 'pSamplePerc' value. * @param pInstancesData * @param pSamplePerc */ private static void sampleInstancesData(Instances pInstancesData, double pSamplePerc) { if(pSamplePerc > 0.0 && pSamplePerc < 100.0) { int myPerc = 10 - (int)Math.ceil(pSamplePerc / 10.0); // quantity of instances to be deleted //System.out.println("Original data = " + pInstancesData.numInstances()); //System.out.println("Cut = " + myPerc); for(int i=0; i < pInstancesData.numInstances(); i++) { // The data remains only after (SAMPLE_PERCENTAGE-1) instances. Hence it will have only SAMPLE_PERCENTAGE of instances // For each 10 instances, it removes SAMPLE_PERCENTAGE if(i % 10 == 0) { for(int idx=(i-myPerc); idx < i; idx++) { // Test array limits if(idx >= 0 && idx <= pInstancesData.numInstances()) pInstancesData.delete(idx); } } } System.out.println("Sampled Instances data ("+SAMPLE_PERCENTAGE+"%) = " + pInstancesData.numInstances() + " instances."); } } 103 /** * Load data from arff file * @param pDataFile * @return The Instances from the file * @throws IOException */ private static Instances loadFileData(File pDataFile) throws IOException { ArffLoader loader_data = new ArffLoader(); loader_data.setFile(pDataFile); //Instances myData = loader_data.getStructure(); Instances myData = loader_data.getDataSet(); myData.setClassIndex(myData.numAttributes() - 1); myData.setClass(myData.attribute(myData.numAttributes() - 1)); return myData; } } 104 APÊNDICE B – RESULTADOS WEKA GUI NA REDE BAYESIANA Em relação aos dados obtidos com o uso do Weka GUI, neste item são mostrados os resultados completos obtidos na íntegra da interface gráfica para Rede Bayesiana. [ TESTE 1 ] === Run information === Scheme:weka.classifiers.bayes.BayesNet -D -Q weka.classifiers.bayes.net.search.fixed.NaiveBayes -- -E weka.classifiers.bayes.net.estimate.SimpleEstimator -- -A 0.5 Relation: HAR Instances: 165632 Attributes: 19 user gender age how_tall_in_meters weight body_mass_index x1 y1 z1 x2 z2 y2 x3 y3 z3 x4 y4 z4 class Test mode:10-fold cross-validation === Classifier model (full training set) === Bayes Network Classifier not using ADTree #attributes=19 #classindex=18 Network structure (nodes followed by parents) user(4): class gender(2): class age(3): class how_tall_in_meters(4): class weight(3): class body_mass_index(3): class x1(33): class y1(42): class z1(50): class x2(60): class z2(77): class y2(66): class x3(64): class y3(57): class 105 z3(57): class x4(41): class y4(40): class z4(33): class class(5): LogScore Bayes: -7239805.937637346 LogScore BDeu: -7258923.39451518 LogScore MDL: -7255833.002513655 LogScore ENTROPY: -7237151.761861411 LogScore AIC: -7240260.761861411 Time taken to build model: 8.54 seconds === Stratified cross-validation === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 150833 14799 0.8802 0.039 0.1675 13.0884 % 43.3858 % 165632 91.0651 % 8.9349 % === Detailed Accuracy By Class === Weighted Avg. TP Rate 0.952 0.823 0.96 0.628 0.914 0.911 FP Rate 0.003 0.033 0.038 0.012 0.025 0.022 Precision 0.993 0.657 0.91 0.81 0.929 0.915 Recall 0.952 0.823 0.96 0.628 0.914 0.911 F-Measure 0.972 0.731 0.934 0.708 0.921 0.911 ROC Area 0.999 0.982 0.994 0.972 0.992 0.993 Class sitting sittingdown standing standingup walking === Confusion Matrix === a 48180 166 0 192 4 b c 2207 0 9738 682 273 45472 1746 1483 857 2339 d e 240 4 820 421 219 1406 7797 1196 544 39646 | | | | | <-- classified as a = sitting b = sittingdown c = standing d = standingup e = walking [ TESTE 2 ] SELECT ATTRIBUTES: === Run information === Evaluator: weka.attributeSelection.CfsSubsetEval Search:weka.attributeSelection.GeneticSearch -Z 20 -G 20 -C 0.6 -M 0.033 -R 20 -S 1 Relation: HAR Instances: 165632 Attributes: 19 user gender age how_tall_in_meters 106 weight body_mass_index x1 y1 z1 x2 z2 y2 x3 y3 z3 x4 y4 z4 class Evaluation mode:evaluate on all training data === Attribute Selection on all input data === Search Method: Genetic search. Start set: no attributes Population size: 20 Number of generations: 20 Probability of crossover: 0.6 Probability of mutation: 0.033 Report frequency: 20 Random number seed: 1 Initial population merit scaled 0.17484 0.17457 0.23959 0.24048 0.20074 0.20093 0.18715 0.1871 0.19866 0.19882 0.20359 0.20383 0.21345 0.21387 0.00335 0 0.20324 0.20347 0.19069 0.1907 0.20921 0.20956 0.20393 0.20418 0.20391 0.20416 0.24359 0.24456 0.1571 0.15651 0.12566 0.1245 0.21161 0.212 0.25832 0.25954 0.18771 0.18767 0.18307 0.18295 subset 1 2 3 4 5 7 9 11 15 16 17 18 1 3 6 7 8 9 11 12 17 1 2 3 5 6 7 8 9 12 13 14 17 18 3 5 11 13 16 8 15 2 6 7 11 13 17 2 3 5 6 9 10 11 12 14 3 1 2 3 5 7 8 9 11 13 15 16 3 5 10 16 17 18 2 4 5 6 7 9 10 11 15 16 17 1 2 3 4 7 10 11 12 13 17 5 6 7 8 14 17 18 3 4 5 6 8 10 11 12 14 16 17 18 1 2 5 11 14 18 1 2 3 4 7 9 11 9 1 2 7 8 12 13 15 16 18 4 5 6 12 13 14 15 18 1 2 4 6 11 13 14 15 17 18 Generation: 20 merit scaled 0.38322 0.43534 0.38322 0.43534 0.37067 0.35396 0.38322 0.43534 0.38322 0.43534 subset 8 9 10 11 12 13 14 16 17 18 8 9 10 11 12 13 14 16 17 18 8 10 11 12 13 14 15 16 17 18 8 9 10 11 12 13 14 16 17 18 8 9 10 11 12 13 14 16 17 18 107 0.37067 0.31605 0.38322 0.38044 0.38322 0.37253 0.38322 0.38207 0.38322 0.36869 0.38322 0.34916 0.38207 0.35315 0.37976 0.35396 0 0.43534 0.41732 0.43534 0.36606 0.43534 0.42786 0.43534 0.34116 0.43534 0.2146 0.42786 0.24046 0.41292 8 10 11 12 13 14 15 16 17 18 3 6 8 9 10 11 12 13 14 17 18 8 9 10 11 12 13 14 16 17 18 7 8 9 10 11 12 14 16 17 18 8 9 10 11 12 13 14 16 17 18 9 10 11 12 13 14 15 16 17 18 8 9 10 11 12 13 14 16 17 18 8 9 10 11 12 13 14 16 17 8 9 10 11 12 13 14 16 17 18 8 9 10 12 13 14 16 17 8 9 10 11 12 13 14 16 17 18 3 8 9 10 11 12 13 14 17 18 8 9 10 11 12 13 14 16 17 10 11 12 13 16 17 18 8 9 10 11 12 13 14 15 16 17 18 Attribute Subset Evaluator (supervised, Class (nominal): 19 class): CFS Subset Evaluator Including locally predictive attributes Selected attributes: 8,9,10,11,12,13,14,16,17,18 : 10 y1 z1 x2 z2 y2 x3 y3 x4 y4 z4 Conforme resultado acima, apenas alguns valores dos acelerômetros foram considerados. Com isso a construção e treinamento do classificador teve o seguinte resultado: === Run information === Scheme:weka.classifiers.bayes.BayesNet -D -Q weka.classifiers.bayes.net.search.local.HillClimber -- -P 1 -S BAYES -E weka.classifiers.bayes.net.estimate.SimpleEstimator -- -A 0.5 Relation: HAR-weka.filters.unsupervised.attribute.Remove-R1-7,15 Instances: 165632 Attributes: 11 y1 z1 x2 z2 y2 x3 y3 x4 y4 z4 class Test mode:split 66.0% train, remainder test 108 === Classifier model (full training set) === Bayes Network Classifier not using ADTree #attributes=11 #classindex=10 Network structure (nodes followed by parents) y1(42): class z1(50): class x2(60): class z2(77): class y2(66): class x3(64): class y3(57): class x4(41): class y4(40): class z4(33): class class(5): LogScore Bayes: -5234803.301829825 LogScore BDeu: -5251104.121105709 LogScore MDL: -5248563.671593952 LogScore ENTROPY: -5232916.855685799 LogScore AIC: -5235520.855685799 Time taken to build model: 7.75 seconds === Evaluation on test split === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 50440 5875 0.86 0.0463 0.1802 15.5294 % 46.6877 % 56315 89.5676 % 10.4324 % === Detailed Accuracy By Class === Weighted Avg. TP Rate 0.949 0.772 0.951 0.563 0.901 0.896 FP Rate 0.005 0.036 0.043 0.016 0.03 0.025 Precision 0.989 0.623 0.897 0.737 0.915 0.899 Recall 0.949 0.772 0.951 0.563 0.901 0.896 F-Measure 0.969 0.69 0.923 0.638 0.908 0.895 === Confusion Matrix === a 16335 72 0 108 3 b c 782 0 3076 351 167 15198 686 514 225 872 d e 87 3 314 171 56 566 2347 517 381 13484 [ TESTE 3 ] === Run information === | | | | | <-- classified as a = sitting b = sittingdown c = standing d = standingup e = walking ROC Area 0.999 0.976 0.992 0.958 0.989 0.99 Class sitting sittingdown standing standingup walking 109 Scheme:weka.classifiers.bayes.BayesNet -D -Q weka.classifiers.bayes.net.search.local.HillClimber -- -P 1 -S BAYES -E weka.classifiers.bayes.net.estimate.SimpleEstimator -- -A 0.5 Relation: HAR-weka.filters.unsupervised.attribute.Remove-R1-6 Instances: 165632 Attributes: 13 x1 y1 z1 x2 z2 y2 x3 y3 z3 x4 y4 z4 class Test mode:split 66.0% train, remainder test === Classifier model (full training set) === Bayes Network Classifier not using ADTree #attributes=13 #classindex=12 Network structure (nodes followed by parents) x1(33): class y1(42): class z1(50): class x2(60): class z2(77): class y2(66): class x3(64): class y3(57): class z3(57): class x4(41): class y4(40): class z4(33): class class(5): LogScore Bayes: -6279001.179200344 LogScore BDeu: -6297958.972109587 LogScore MDL: -6294899.292670791 LogScore ENTROPY: -6276608.621540063 LogScore AIC: -6279652.621540063 Time taken to build model: 12.46 seconds === Evaluation on test split === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 51265 5050 0.8798 0.0393 0.1679 13.1893 % 43.4946 % 56315 91.0326 % 8.9674 % 110 === Detailed Accuracy By Class === Weighted Avg. TP Rate 0.949 0.826 0.957 0.631 0.917 0.91 FP Rate 0.003 0.034 0.038 0.012 0.025 0.022 Precision 0.992 0.65 0.909 0.814 0.931 0.915 Recall 0.949 0.826 0.957 0.631 0.917 0.91 F-Measure 0.97 0.727 0.932 0.711 0.924 0.911 ROC Area 0.999 0.981 0.994 0.974 0.992 0.993 Class sitting sittingdown standing standingup walking === Confusion Matrix === a 16326 53 0 71 1 b c 786 0 3291 235 130 15294 586 494 271 806 d e 92 3 277 128 67 496 2634 387 167 13720 | | | | | <-- classified as a = sitting b = sittingdown c = standing d = standingup e = walking [ TESTE 4 ] === Run information === Scheme:weka.classifiers.bayes.BayesNet -D -Q weka.classifiers.bayes.net.search.global.HillClimber -- -P 1 -S LOO-CV -E weka.classifiers.bayes.net.estimate.SimpleEstimator -- -A 0.5 Relation: HAR Instances: 165632 Attributes: 19 user gender age how_tall_in_meters weight body_mass_index x1 y1 z1 x2 z2 y2 x3 y3 z3 x4 y4 z4 class Test mode:split 66.0% train, remainder test === Classifier model (full training set) === Bayes Network Classifier not using ADTree #attributes=19 #classindex=18 Network structure (nodes followed by parents) user(4): gender(2): age(3): how_tall_in_meters(4): 111 weight(3): class body_mass_index(3): x1(33): class y1(42): class z1(50): class x2(60): z2(77): class y2(66): class x3(64): class y3(57): class z3(57): class x4(41): class y4(40): class z4(33): class class(5): LogScore Bayes: -7321644.599101443 LogScore BDeu: -7339028.137542079 LogScore MDL: -7336199.308086318 LogScore ENTROPY: -7319200.520757531 LogScore AIC: -7322029.520757531 Time taken to build model: 1034.27 seconds === Evaluation on test split === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 51580 4735 0.8872 0.0381 0.1624 12.7716 % 42.0615 % 56315 91.5919 % 8.4081 % === Detailed Accuracy By Class === Weighted Avg. TP Rate 0.955 0.844 0.959 0.641 0.921 0.916 FP Rate 0.004 0.032 0.037 0.011 0.021 0.02 Precision 0.992 0.666 0.912 0.822 0.942 0.92 Recall 0.955 0.844 0.959 0.641 0.921 0.916 F-Measure 0.973 0.744 0.935 0.72 0.931 0.916 === Confusion Matrix === a 16433 54 0 81 2 b c 667 0 3363 222 156 15325 579 493 287 758 d e 106 1 267 78 74 432 2674 345 133 13785 | | | | | <-- classified as a = sitting b = sittingdown c = standing d = standingup e = walking [ TESTE 5 ] === Run information === Scheme:weka.classifiers.bayes.NaiveBayes Relation: HAR ROC Area 1 0.983 0.994 0.972 0.993 0.993 Class sitting sittingdown standing standingup walking 112 Instances: Attributes: 165632 19 user gender age how_tall_in_meters weight body_mass_index x1 y1 z1 x2 z2 y2 x3 y3 z3 x4 y4 z4 class Test mode:split 66.0% train, remainder test === Classifier model (full training set) === Naive Bayes Classifier Class Attribute sitting sittingdown standing standingup walking (0.31) (0.07) (0.29) (0.07) (0.26) ================================================================================= user debora 15616.0 3548.0 14941.0 3854.0 13623.0 jose_carlos 5744.0 778.0 3730.0 737.0 2176.0 katia 14281.0 4018.0 14235.0 3711.0 13557.0 wallace 14994.0 3487.0 14468.0 4116.0 14038.0 [total] 50635.0 11831.0 47374.0 12418.0 43394.0 gender Man Woman [total] 20737.0 29896.0 50633.0 4264.0 7565.0 11829.0 18197.0 29175.0 47372.0 4852.0 7564.0 12416.0 16213.0 27179.0 43392.0 age mean std. dev. weight sum precision 41.4962 14.9324 50631 15.6667 39.1196 12.5741 11827 15.6667 39.9743 13.2905 47370 15.6667 38.9824 12.1917 12414 15.6667 38.6077 11.6133 43390 15.6667 1.6266 0.0554 50631 0.0433 1.6199 0.0554 11827 0.0433 1.6236 0.0551 47370 0.0433 1.6242 0.0553 12414 0.0433 1.6222 0.0551 43390 0.0433 weight mean std. dev. weight sum precision 71.1071 11.0128 50631 9.3333 70.4644 11.493 11827 9.3333 71.1733 11.2232 47370 9.3333 71.6285 11.3554 12414 9.3333 71.3863 11.4302 43390 9.3333 body_mass_index mean std. dev. weight sum 26.2394 2.9849 50631 26.0693 3.1084 11827 26.2704 3.0309 47370 26.3667 3.0296 12414 26.3175 3.061 43390 how_tall_in_meters mean std. dev. weight sum precision 113 precision 2.2 2.2 2.2 2.2 2.2 x1 mean std. dev. weight sum precision -7.2012 12.7789 50631 6.3178 -1.8093 13.6125 11827 6.3178 -6.3669 5.3302 47370 6.3178 -5.4343 12.0286 12414 6.3178 -7.8895 14.2844 43390 6.3178 y1 mean std. dev. weight sum precision 66.0606 25.3636 50631 4.254 96.6324 13.8939 11827 4.254 97.9275 5.2084 47370 4.254 91.437 13.8766 12414 4.254 100.9873 21.0367 43390 4.254 z1 mean std. dev. weight sum precision -49.4923 24.9452 50631 3.0359 -115.4644 53.3842 11827 3.0359 -106.902 21.0281 47370 3.0359 -120.0979 30.9045 12414 3.0359 -115.5717 19.8956 43390 3.0359 x2 mean std. dev. weight sum precision -58.8961 90.5488 50631 1.4076 -93.6597 166.5096 11827 1.4076 -18.588 108.4462 47370 1.4076 -102.4841 178.8513 12414 1.4076 -191.4157 231.2945 43390 1.4076 z2 mean std. dev. weight sum precision -55.1922 116.2322 50631 1.1325 -65.6641 193.7716 11827 1.1325 53.8135 128.4173 47370 1.1325 -75.0732 208.4052 12414 1.1325 -153.8342 285.5089 43390 1.1325 y2 mean std. dev. weight sum precision -87.2441 134.3249 50631 1.0527 -167.4213 198.4473 11827 1.0527 -144.9704 106.3666 47370 1.0527 -178.3258 203.5482 12414 1.0527 -311.5323 239.2151 43390 1.0527 x3 mean std. dev. weight sum precision 23.4112 42.2296 50631 1.119 8.4644 13.821 11827 1.119 22.9999 20.4362 47370 1.119 -7.08 114.582 12414 1.119 13.8135 62.8355 43390 1.119 y3 mean std. dev. weight sum precision 88.552 23.5501 50631 1.4956 106.3749 21.4923 11827 1.4956 108.26 27.0134 47370 1.4956 57.0144 134.9779 12414 1.4956 132.4972 51.7651 43390 1.4956 z3 mean std. dev. weight sum precision -95.4293 21.2444 50631 1.3676 -90.0946 23.21 11827 1.3676 -87.9563 23.9704 47370 1.3676 -104.764 119.6185 12414 1.3676 -96.4823 48.8635 43390 1.3676 x4 mean std. dev. weight sum precision -131.7686 32.2263 50631 2.0753 -183.0704 33.1693 11827 2.0753 -178.2163 17.5803 47370 2.0753 -195.588 56.4453 12414 2.0753 -185.8304 24.5539 43390 2.0753 y4 mean std. dev. weight sum precision -109.8197 17.7223 50631 3.0148 -96.3126 13.7275 11827 3.0148 -85.6418 10.7335 47370 3.0148 -92.6842 16.036 12414 3.0148 -79.9296 17.5949 43390 3.0148 114 z4 mean std. dev. weight sum precision -162.02 12.0749 50631 3.2715 -140.8232 15.3334 11827 3.2715 -157.3678 7.2295 47370 3.2715 -153.8883 16.5574 12414 3.2715 -166.2517 11.8334 43390 3.2715 Time taken to build model: 1.76 seconds === Evaluation on test split === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 43391 12924 0.6878 0.0964 0.2784 32.3283 % 72.1192 % 56315 77.0505 % 22.9495 % === Detailed Accuracy By Class === Weighted Avg. TP Rate 0.908 0.58 0.925 0.134 0.675 0.771 FP Rate 0.028 0.034 0.18 0.02 0.042 0.075 Precision 0.936 0.562 0.67 0.348 0.854 0.769 Recall 0.908 0.58 0.925 0.134 0.675 0.771 F-Measure 0.922 0.571 0.777 0.193 0.754 0.757 ROC Area 0.992 0.92 0.947 0.795 0.947 0.948 Class sitting sittingdown standing standingup walking === Confusion Matrix === a 15629 353 125 369 229 b c 151 1365 2312 1033 193 14790 846 1751 615 3122 d e 58 4 51 235 39 840 557 649 896 10103 | | | | | <-- classified as a = sitting b = sittingdown c = standing d = standingup e = walking [ TESTE 6 ] === Run information === Scheme:weka.classifiers.bayes.BayesNet -D -Q weka.classifiers.bayes.net.search.local.K2 -- -P 1 -S BAYES -E weka.classifiers.bayes.net.estimate.SimpleEstimator -- -A 0.5 Relation: HAR Instances: 115835 Attributes: 19 user gender age how_tall_in_meters weight body_mass_index x1 y1 z1 x2 115 z2 y2 x3 y3 z3 x4 y4 z4 class Test mode:user supplied test set: size unknown (reading incrementally) === Classifier model (full training set) === Bayes Network Classifier not using ADTree #attributes=19 #classindex=18 Network structure (nodes followed by parents) user(4): class gender(2): class age(2): class how_tall_in_meters(3): class weight(2): class body_mass_index(2): class x1(29): class y1(34): class z1(45): class x2(53): class z2(59): class y2(50): class x3(51): class y3(50): class z3(52): class x4(31): class y4(40): class z4(28): class class(5): LogScore Bayes: -4539432.023334331 LogScore BDeu: -4554782.790020879 LogScore MDL: -4552588.19632091 LogScore ENTROPY: -4537436.127625114 LogScore AIC: -4540035.127625114 Time taken to build model: 2.87 seconds === Evaluation on test set === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 26991 22806 0.4136 0.1868 0.399 62.4988 % 102.9553 % 49797 54.2021 % 45.7979 % === Detailed Accuracy By Class === TP Rate 0.245 0.141 FP Rate 0.001 0.174 Precision 0.989 0.066 Recall 0.245 0.141 F-Measure 0.393 0.09 ROC Area 0.923 0.714 Class sitting sittingdown 116 Weighted Avg. 0.591 0.382 0.967 0.542 0.011 0.1 0.271 0.099 0.955 0.236 0.572 0.735 0.591 0.382 0.967 0.542 0.73 0.291 0.719 0.546 === Confusion Matrix === a 3498 18 0 22 0 b 5167 565 1169 1220 415 c 0 355 8410 38 2 d e 393 5222 1990 1089 2173 2482 1416 1014 37 13102 | | | | | <-- classified as a = sitting b = sittingdown c = standing d = standingup e = walking 13556 0.932 0.611 0.938 0.889 standing standingup walking 117 APÊNDICE C – RESULTADOS WEKA GUI NA REDE NEURAL Em relação aos dados obtidos com o uso do Weka GUI, neste item são mostrados os resultados completos obtidos na íntegra da interface gráfica para Rede Neural (Perceptron Multicamadas). [ TESTE 1 ] === Run information === Scheme:weka.classifiers.functions.MultilayerPerceptron -L 0.3 -M 0.2 -N 500 -V 0 -S 0 -E 20 -H a Relation: HAR Instances: 165632 Attributes: 19 user gender age how_tall_in_meters weight body_mass_index x1 y1 z1 x2 z2 y2 x3 y3 z3 x4 y4 z4 class Test mode:split 66.0% train, remainder test === Classifier model (full training set) === Sigmoid Node 0 Inputs Weights Threshold -36.79274584484229 Node 5 39.68578337578611 Node 6 -9.554027961196546 Node 7 -14.747639342699715 Node 8 1.778388421214272 Node 9 2.848044035630467 Node 10 -12.874665618835099 Node 11 2.2392355269010786 Node 12 -10.807281847843745 Node 13 2.7558875667363782 Node 14 -0.39113155678304024 Node 15 11.994290451959857 Node 16 49.6226777815245 Node 17 -0.8528538664254068 Sigmoid Node 1 118 Inputs Weights Threshold -29.75357622682827 Node 5 -3.588397519937941 Node 6 28.0031853739731 Node 7 -4.32737990038502 Node 8 -7.089945526138122 Node 9 -33.866946982483306 Node 10 0.5007495319542233 Node 11 43.89971597954132 Node 12 -12.313545717988235 Node 13 8.245806139469988 Node 14 -9.179097681208551 Node 15 -32.16662630563486 Node 16 -28.958694277384176 Node 17 24.35070364897305 Sigmoid Node 2 Inputs Weights Threshold 11.21602057948537 Node 5 -16.05896570024455 Node 6 -6.593373248351487 Node 7 -19.14520134381832 Node 8 -14.00016001005417 Node 9 15.246040489256297 Node 10 -12.355506230430185 Node 11 6.690628619920042 Node 12 -20.825630166448708 Node 13 -7.28189369887786 Node 14 -7.387684556228819 Node 15 -6.496367727870688 Node 16 -45.48998612460697 Node 17 -8.68696757418541 Sigmoid Node 3 Inputs Weights Threshold -10.562525142025704 Node 5 6.909119211313568 Node 6 9.085965536556339 Node 7 -4.6562154368926265 Node 8 -2.8556617354222107 Node 9 -13.83212599164983 Node 10 -2.2739339575679045 Node 11 -14.142605114912234 Node 12 22.835155361872097 Node 13 -7.973363508170197 Node 14 4.324480082190775 Node 15 2.464694285185372 Node 16 -27.66212881284188 Node 17 -21.751014934630582 Sigmoid Node 4 Inputs Weights Threshold -12.840000176402508 Node 5 -14.761873132146462 Node 6 -4.959754959925497 Node 7 20.291900966260975 Node 8 15.260440185472351 Node 9 2.4250557749027304 Node 10 16.783917896642304 Node 11 15.37745377722535 Node 12 -21.923219400606513 Node 13 7.266749730260691 Node 14 9.901614246089085 Node 15 7.775858433929051 119 Node 16 -29.520128377058587 Node 17 3.9973230314348 Sigmoid Node 5 Inputs Weights Threshold -11.697636886874006 Attrib user=debora 7.743836843636903 Attrib user=jose_carlos 3.3789381821099242 Attrib user=katia 5.9162442021661406 Attrib user=wallace 6.366964874530165 Attrib gender 1.9386088733828113 Attrib age 1.509181684562363 Attrib how_tall_in_meters -0.6139423300863251 Attrib weight -0.04591888447264319 Attrib body_mass_index 0.016017782856673927 Attrib x1 -53.22949252940056 Attrib y1 -53.00913317332426 Attrib z1 -29.434351208189234 Attrib x2 16.29321643413999 Attrib z2 -57.993879671734675 Attrib y2 47.92321093161082 Attrib x3 -1.7771907686225783 Attrib y3 -20.396633250550853 Attrib z3 17.80234487822599 Attrib x4 -29.84603946012577 Attrib y4 -18.242051426318678 Attrib z4 46.547628526702205 Sigmoid Node 6 Inputs Weights Threshold 11.56464426136934 Attrib user=debora -7.328246150150925 Attrib user=jose_carlos -1.7314607834545637 Attrib user=katia 3.889163585022455 Attrib user=wallace -18.098785322539218 Attrib gender 8.179505946527563 Attrib age -0.5139265537452701 Attrib how_tall_in_meters -9.891783335871434 Attrib weight -10.718367325086918 Attrib body_mass_index -10.56701181138882 Attrib x1 13.064953043846687 Attrib y1 -32.78356353421618 Attrib z1 -16.3880768207111 Attrib x2 52.354621035337956 Attrib z2 -10.11466715573438 Attrib y2 18.345074310682946 Attrib x3 51.47575623493374 Attrib y3 -106.60334534327856 Attrib z3 177.50352291074003 Attrib x4 -29.487969655596256 Attrib y4 -11.12292836846039 Attrib z4 20.12178920079397 Sigmoid Node 7 Inputs Weights Threshold -8.620627842963321 Attrib user=debora 7.528029871101559 Attrib user=jose_carlos 3.884916796995432 Attrib user=katia 4.249933046265468 Attrib user=wallace 1.3593809561926153 Attrib gender 3.233336522893292 Attrib age 3.06612513609017 Attrib how_tall_in_meters -2.1139675590714444 Attrib weight -1.3213784259801653 120 Attrib body_mass_index -0.8152057557861236 Attrib x1 98.80108360506425 Attrib y1 -85.78307937075985 Attrib z1 -29.71455783799528 Attrib x2 68.10775970681483 Attrib z2 -25.33378152922037 Attrib y2 -26.02172157828904 Attrib x3 -94.79085275990577 Attrib y3 292.3608329055315 Attrib z3 -0.25796173021036134 Attrib x4 15.729018046433655 Attrib y4 -3.495975782903051 Attrib z4 -35.01712726987229 Sigmoid Node 8 Inputs Weights Threshold 11.247359697549845 Attrib user=debora -4.752313911952602 Attrib user=jose_carlos -3.979846040115852 Attrib user=katia -6.5532338576630105 Attrib user=wallace -7.193302322461092 Attrib gender -0.09397100830201763 Attrib age -1.2417605220365024 Attrib how_tall_in_meters -0.19940039739744084 Attrib weight 0.5542033845336282 Attrib body_mass_index 1.437935280990012 Attrib x1 7.706370263177724 Attrib y1 -65.83544242986503 Attrib z1 -31.216445607727604 Attrib x2 12.867358849704562 Attrib z2 -34.3946356654257 Attrib y2 21.918788383976526 Attrib x3 174.46900948902075 Attrib y3 -37.90603826008359 Attrib z3 -161.4060676033865 Attrib x4 14.376212188917334 Attrib y4 -30.887609880860367 Attrib z4 -35.78603796320915 Sigmoid Node 9 Inputs Weights Threshold 2.092877422736484 Attrib user=debora -9.06418746305242 Attrib user=jose_carlos -5.825848689304906 Attrib user=katia 3.984972453981996 Attrib user=wallace 6.691833384845007 Attrib gender -2.977456112627843 Attrib age -7.910994069864904 Attrib how_tall_in_meters 1.9825294390011379 Attrib weight 0.1767767878536586 Attrib body_mass_index -1.5752543984051242 Attrib x1 -53.083431951084414 Attrib y1 86.70317620269444 Attrib z1 84.99508007398745 Attrib x2 39.177410006602585 Attrib z2 22.46111456248101 Attrib y2 -37.71598098257903 Attrib x3 18.210876776508105 Attrib y3 -7.680692211972329 Attrib z3 -0.1520355652739342 Attrib x4 -16.90569647136799 Attrib y4 21.076147745193207 Attrib z4 -40.754943120059814 121 Sigmoid Node 10 Inputs Weights Threshold 5.964312905761431 Attrib user=debora 0.7628554725604546 Attrib user=jose_carlos -1.6336817983894976 Attrib user=katia -8.959213172131863 Attrib user=wallace -2.012220099624981 Attrib gender -2.326730243057048 Attrib age 1.1595747460731256 Attrib how_tall_in_meters 3.0531155462069455 Attrib weight 4.6266213646295125 Attrib body_mass_index 5.797060778075241 Attrib x1 -111.96944571114109 Attrib y1 33.38059646134454 Attrib z1 75.62598714176299 Attrib x2 1.3020570366728499 Attrib z2 -2.3877936151332917 Attrib y2 -9.46325569137039 Attrib x3 -72.71564805522975 Attrib y3 32.93561728458275 Attrib z3 11.071832563145428 Attrib x4 -92.10378856219211 Attrib y4 23.567418978040223 Attrib z4 -39.48352016042825 Sigmoid Node 11 Inputs Weights Threshold -17.044403738268713 Attrib user=debora 2.7472816582841615 Attrib user=jose_carlos 5.218117113259242 Attrib user=katia 0.9994293919792605 Attrib user=wallace 25.038717679880662 Attrib gender -13.240835373298166 Attrib age 0.2008090318885948 Attrib how_tall_in_meters 12.499746548185511 Attrib weight 9.852691949078862 Attrib body_mass_index 6.977188034525973 Attrib x1 -30.998061443331707 Attrib y1 48.25359419090799 Attrib z1 50.5912269532963 Attrib x2 -24.94478383774612 Attrib z2 -19.626366421454378 Attrib y2 -22.086582800480247 Attrib x3 37.20174465119008 Attrib y3 83.68519241204821 Attrib z3 -48.86435138682973 Attrib x4 -119.30532363405716 Attrib y4 -1.1904016545530445 Attrib z4 50.9798652691376 Sigmoid Node 12 Inputs Weights Threshold 16.156952529864633 Attrib user=debora -19.181383337885634 Attrib user=jose_carlos -22.698708023644777 Attrib user=katia -5.409887229114623 Attrib user=wallace 14.849235555507377 Attrib gender -8.275639497343194 Attrib age -21.79728474067061 Attrib how_tall_in_meters 9.391838328817666 Attrib weight 9.939241767480542 Attrib body_mass_index 8.9929382947288 Attrib x1 -54.37725231409236 122 Attrib y1 -8.307055920962238 Attrib z1 -35.41262880884935 Attrib x2 28.10626350988477 Attrib z2 -37.091330831440885 Attrib y2 20.07142557782967 Attrib x3 -13.409761537578543 Attrib y3 -18.623663437203646 Attrib z3 12.862011700017472 Attrib x4 -51.949931546259855 Attrib y4 -75.29572064477223 Attrib z4 47.61540523711876 Sigmoid Node 13 Inputs Weights Threshold -22.35968360560926 Attrib user=debora 12.400639469035895 Attrib user=jose_carlos 8.885176644496575 Attrib user=katia 11.461360587861222 Attrib user=wallace 11.99303417677125 Attrib gender 1.4160936021367652 Attrib age 4.405742196299415 Attrib how_tall_in_meters -0.39533035622461754 Attrib weight -0.8674070818673143 Attrib body_mass_index -1.7268002526246922 Attrib x1 36.8797108945654 Attrib y1 -6.113873027591634 Attrib z1 -36.51875937678659 Attrib x2 -80.31348580273801 Attrib z2 33.80873542362345 Attrib y2 29.666549423391 Attrib x3 -39.7517285291012 Attrib y3 -71.01103722967044 Attrib z3 -121.30033753721872 Attrib x4 35.51070955800568 Attrib y4 -26.900675929603203 Attrib z4 64.21700586579956 Sigmoid Node 14 Inputs Weights Threshold -0.743931328419406 Attrib user=debora 9.419073415187267 Attrib user=jose_carlos 2.79684929967185 Attrib user=katia -13.853437595594883 Attrib user=wallace 3.1791489551419416 Attrib gender -5.25096207471455 Attrib age 6.3119125386800246 Attrib how_tall_in_meters 7.235059006702716 Attrib weight 10.27218712694821 Attrib body_mass_index 12.365621421334568 Attrib x1 -10.66136632589756 Attrib y1 57.946296935572846 Attrib z1 16.895862263277223 Attrib x2 -35.951582887016805 Attrib z2 53.08957455772744 Attrib y2 8.199214571267975 Attrib x3 27.678910800623044 Attrib y3 -38.552194494086194 Attrib z3 -70.86838389466376 Attrib x4 -67.04037656226376 Attrib y4 16.42524469048786 Attrib z4 -9.08376937371856 Sigmoid Node 15 Inputs Weights 123 Threshold 0.699497521997481 Attrib user=debora 0.6905837736951697 Attrib user=jose_carlos -0.5349724758038014 Attrib user=katia 1.2279660762697049 Attrib user=wallace -2.7734650013436952 Attrib gender 2.618102959100831 Attrib age -0.14531284284075655 Attrib how_tall_in_meters -2.239641759989894 Attrib weight -1.6596518193769207 Attrib body_mass_index -1.309512369983224 Attrib x1 -79.17836997902496 Attrib y1 24.075972270242357 Attrib z1 4.030853066285621 Attrib x2 -13.385804908725826 Attrib z2 -1.06247149197232 Attrib y2 -2.457688583683359 Attrib x3 37.47632109991746 Attrib y3 99.1069022497299 Attrib z3 95.22947660991824 Attrib x4 -11.319556782042925 Attrib y4 20.974978226563312 Attrib z4 -99.32909633338804 Sigmoid Node 16 Inputs Weights Threshold -7.471186135867267 Attrib user=debora 2.617946634616803 Attrib user=jose_carlos 6.88792545643891 Attrib user=katia 2.207871479032105 Attrib user=wallace 3.3300276715977932 Attrib gender -2.723120396550134 Attrib age 4.712814608588026 Attrib how_tall_in_meters 1.378521570791294 Attrib weight -0.43981117941694764 Attrib body_mass_index -1.5718537134408526 Attrib x1 -13.170389344367052 Attrib y1 -107.33366970300389 Attrib z1 120.59877306361317 Attrib x2 -7.370854638397083 Attrib z2 5.078633738894854 Attrib y2 1.7615636463795088 Attrib x3 5.3361206836542525 Attrib y3 -20.638143283168304 Attrib z3 22.610626119537994 Attrib x4 7.6826802742167475 Attrib y4 -24.149931461100728 Attrib z4 -7.676258451180327 Sigmoid Node 17 Inputs Weights Threshold -29.919129688797536 Attrib user=debora 17.955280464689285 Attrib user=jose_carlos 4.470777988114927 Attrib user=katia 21.758442860236244 Attrib user=wallace 15.640914493996759 Attrib gender 9.84833220809294 Attrib age -1.0213706157376783 Attrib how_tall_in_meters -5.66413530306185 Attrib weight -3.8161858883631536 Attrib body_mass_index -3.6346439999677767 Attrib x1 82.32394025989228 Attrib y1 103.78285818415517 Attrib z1 -66.96682301566649 124 Attrib x2 -20.0985004801105 Attrib z2 43.17915815646177 Attrib y2 45.05848140216905 Attrib x3 8.165176122629916 Attrib y3 118.41859153300065 Attrib z3 81.1099598039545 Attrib x4 52.76550993676347 Attrib y4 -28.029929422544583 Attrib z4 -13.96872985771189 Class sitting Input Node 0 Class sittingdown Input Node 1 Class standing Input Node 2 Class standingup Input Node 3 Class walking Input Node 4 Time taken to build model: 2004.31 seconds === Evaluation on test split === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 54864 1451 0.9654 0.0145 0.0938 4.8539 % 24.3104 % 56315 97.4234 % 2.5766 % === Detailed Accuracy By Class === Weighted Avg. TP Rate 0.997 0.93 0.984 0.89 0.973 0.974 FP Rate 0.001 0.005 0.012 0.006 0.008 0.007 Precision 0.997 0.937 0.969 0.917 0.979 0.974 Recall 0.997 0.93 0.984 0.89 0.973 0.974 F-Measure 0.997 0.934 0.977 0.903 0.976 0.974 === Confusion Matrix === a 17161 16 0 36 4 b c 7 0 3707 86 23 15728 156 160 63 251 d e 35 4 121 54 88 148 3711 109 90 14557 | | | | | <-- classified as a = sitting b = sittingdown c = standing d = standingup e = walking ROC Area 0.998 0.989 0.995 0.984 0.996 0.995 Class sitting sittingdown standing standingup walking 125 APÊNDICE D – RESULTADOS PROGRAMA JAVA NA REDE BAYESIANA Em relação aos dados obtidos com o programa Java, neste item são mostrados os resultados completos obtidos para Rede Bayesiana. [ TESTE 1 ] ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Load data - Validation Technique LEAVE_ONE_PERSON_OUT ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Number of Instances = 165632 LEAVE_ONE_PERSON_OUT_NAME = katia Found the Person's name from the attribute declaration = katia The index of the desired Person's name from the attribute declaration = 2 Train data number of instances = 115835 Test data number of instances = 49797 --------------------------------BAYES NET ----------------------------------------------------------------WEKA Classfier - BAYES NET ----------------------------------------------------------------TRAIN DATA --------------------------------SEARCH ALGORITHM (Learner) = HillClimber Simple Estimator - alpha=0.5 Warning: discretizing data set [PERFORMANCE] Build Classifier using TRAIN data: 46.426 seconds --------------------------------TEST DATA --------------------------------[PERFORMANCE] Validating using TEST data: 0.424 seconds Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 14944 34853 0.1288 0.2811 0.4573 93.7064 % 118.0861 % 49797 --------------------------------Confusion Matrix --------------------------------confusion matrix ::::: | 682.0 2041.0 1548.0 4862.0 5147.0 | | 85.0 954.0 613.0 926.0 1439.0 | | 0.0 1555.0 2048.0 4716.0 5915.0 | | 138.0 1167.0 459.0 639.0 1307.0 | | 7.0 2755.0 78.0 95.0 10621.0 | [ TESTE 2 ] 30.0098 % 69.9902 % 126 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Load data - Validation Technique HOLDOUT ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Number of Instances = 165632 HOLDOUT Instances TRAIN_DATA data (66.0%) = 127409 instances. HOLDOUT Instances TEST_DATA data (34.0%) = 38223 instances. --------------------------------BAYES NET ----------------------------------------------------------------WEKA Classfier - BAYES NET ----------------------------------------------------------------TRAIN DATA --------------------------------SEARCH ALGORITHM (Learner) = HillClimber Simple Estimator - alpha=0.5 Warning: discretizing data set [PERFORMANCE] Build Classifier using TRAIN data: 56.589 seconds --------------------------------TEST DATA --------------------------------[PERFORMANCE] Validating using TEST data: 0.29 seconds Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 33199 5024 0.822 0.0798 0.195 26.7712 % 50.4943 % 38223 86.8561 % 13.1439 % --------------------------------Confusion Matrix --------------------------------confusion matrix ::::: | 11502.0 110.0 0.0 68.0 3.0 | | 381.0 1476.0 204.0 177.0 491.0 | | 5.0 67.0 10431.0 95.0 334.0 | | 296.0 425.0 394.0 1395.0 355.0 | | 83.0 349.0 897.0 290.0 8395.0 | [ TESTE 3 ] ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Load data - Validation Technique HOLDOUT ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Number of Instances = 165632 HOLDOUT Instances TRAIN_DATA data (66.0%) = 127409 instances. HOLDOUT Instances TEST_DATA data (34.0%) = 38223 instances. --------------------------------BAYES NET ----------------------------------------------------------------WEKA Classfier - BAYES NET 127 ----------------------------------------------------------------TRAIN DATA --------------------------------SEARCH ALGORITHM (Learner) = HillClimber Simple Estimator - alpha=0.5 Warning: discretizing data set [PERFORMANCE] Build Classifier using TRAIN data: 55.861 seconds --------------------------------TEST DATA --------------------------------Warning: discretizing data set Warning: discretizing data set Warning: discretizing data set Warning: discretizing data set Warning: discretizing data set Warning: discretizing data set Warning: discretizing data set Warning: discretizing data set Warning: discretizing data set Warning: discretizing data set [PERFORMANCE] Validating using TEST data: 0.283 seconds Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 67822 8624 0.8477 0.0682 0.1812 22.8617 % 46.9418 % 76446 88.7188 % 11.2812 % --------------------------------Confusion Matrix --------------------------------confusion matrix ::::: | 23011.0 180.0 7.0 143.0 25.0 | | 581.0 3475.0 297.0 398.0 707.0 | | 12.0 126.0 20798.0 180.0 748.0 | | 451.0 789.0 690.0 3240.0 560.0 | | 151.0 583.0 1483.0 513.0 17298.0 | [ TESTE 4 ] ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Load data - Validation Technique LEAVE_ONE_PERSON_OUT ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Number of Instances = 165632 pLeaveOnePersonOut_name = katia Found the Person's name from the attribute declaration = katia The index of the desired Person's name from the attribute declaration = 2 Train data number of instances = 115835 Test data number of instances = 49797 --------------------------------BAYES NET ----------------------------------------------------------------WEKA Classfier - BAYES NET 128 ----------------------------------------------------------------TRAIN DATA --------------------------------SEARCH ALGORITHM (Learner) = 'LOCAL_HILLCLIMBER' Simple Estimator - alpha=0.5 [PERFORMANCE] Build Classifier using TRAIN data: 4787.289 seconds --------------------------------TEST DATA --------------------------------[PERFORMANCE] Validating using TEST data: 0.416 seconds Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances --------------------------------Confusion Matrix --------------------------------confusion matrix ::::: | 39.0 191.0 31.0 5325.0 8694.0 | 316.0 948.0 581.0 1169.0 1003.0 | 0.0 148.0 6373.0 1855.0 5858.0 | 273.0 1140.0 359.0 718.0 1220.0 | 82.0 3333.0 272.0 522.0 9347.0 17425 32372 0.1726 0.264 0.4712 88.0004 % 121.6814 % 49797 34.9921 % 65.0079 % | | | | | [ TESTE 5 ] Number of Instances = 165632 pLeaveOnePersonOut_name = wallace Found the Person's name from the attribute declaration = wallace The index of the desired Person's name from the attribute declaration = 3 Train data number of instances = 114534 Test data number of instances = 51098 --------------------------------BAYES NET ----------------------------------------------------------------WEKA Classfier - BAYES NET ----------------------------------------------------------------TRAIN DATA --------------------------------SEARCH ALGORITHM (Learner) = 'LOCAL_HILLCLIMBER' Simple Estimator - alpha=0.5 [PERFORMANCE] Build Classifier using TRAIN data: 4129.986 seconds --------------------------------TEST DATA --------------------------------[PERFORMANCE] Validating using TEST data: 0.336 seconds Correctly Classified Instances Incorrectly Classified Instances Kappa statistic 16604 34494 0.0911 32.4944 % 67.5056 % 129 Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 0.2681 0.4736 89.6973 % 122.5072 % 51098 --------------------------------Confusion Matrix --------------------------------confusion matrix ::::: | 4524.0 29.0 3.0 11.0 10426.0 | | 54.0 57.0 75.0 583.0 2717.0 | | 1412.0 59.0 1201.0 1349.0 10446.0 | | 205.0 109.0 311.0 797.0 2693.0 | | 693.0 141.0 985.0 2193.0 10025.0 | [ TESTE 6 ] ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Load data - Validation Technique HOLDOUT ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Number of Instances = 165632 HOLDOUT Instances TRAIN_DATA data (66.0%) = 127409 instances. HOLDOUT Instances TEST_DATA data (34.0%) = 38223 instances. --------------------------------BAYES NET ----------------------------------------------------------------WEKA Classfier - BAYES NET ----------------------------------------------------------------TRAIN DATA --------------------------------SEARCH ALGORITHM (Learner) = 'LOCAL_HILLCLIMBER' Simple Estimator - alpha=0.5 [PERFORMANCE] Build Classifier using TRAIN data: 4322.115 seconds --------------------------------TEST DATA --------------------------------[PERFORMANCE] Validating using TEST data: 0.246 seconds Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances --------------------------------Confusion Matrix --------------------------------confusion matrix ::::: | 11611.0 25.0 0.0 45.0 2.0 | | 8.0 2519.0 12.0 156.0 34.0 | | 0.0 50.0 10694.0 88.0 100.0 | | 4.0 170.0 83.0 2574.0 34.0 | 37250 973 0.9659 0.0119 0.0901 3.988 % 23.3396 % 38223 97.4544 % 2.5456 % 130 | 0.0 37.0 66.0 59.0 9852.0 | [ TESTE 7 ] ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Load data - Validation Technique CROSS_VALIDATION ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Number of Instances = 165632 --------------------------------BAYES NET ----------------------------------------------------------------WEKA Classfier - BAYES NET ----------------------------------------------------------------TRAIN DATA --------------------------------SEARCH ALGORITHM (Learner) = 'LOCAL_HILLCLIMBER' Simple Estimator - alpha=0.5 [PERFORMANCE] Build Classifier using TRAIN data: 5540.887 seconds --------------------------------TEST DATA --------------------------------[PERFORMANCE] Validating using TEST data: 51458.738 seconds Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 324401 6863 0.9722 0.0099 0.0808 3.3097 % 20.9142 % 331264 --------------------------------Confusion Matrix --------------------------------confusion matrix ::::: | 100745.0 173.0 2.0 299.0 43.0 | | 46.0 22335.0 158.0 888.0 227.0 | | 2.0 213.0 93072.0 499.0 954.0 | | 25.0 1257.0 513.0 22723.0 310.0 | | 3.0 259.0 618.0 374.0 85526.0 | 97.9282 % 2.0718 % 131 APÊNDICE E – RESULTADOS PROGRAMA JAVA NA REDE NEURAL Em relação aos dados obtidos com o programa Java, neste item são mostrados os resultados completos obtidos na íntegra da interface gráfica para Rede Neural (Perceptron Multicamadas). [ TESTE 1 ] ----------------------------------------NEURAL NETWORK - Multilayer Perceptron ----------------------------------------Number of Instances = 165632 HOLDOUT Instances TRAIN_DATA data (66.0%) = 127409 instances. HOLDOUT Instances TEST_DATA data (34.0%) = 38223 instances. --------------------------------TRAIN DATA --------------------------------[PERFORMANCE] Build Classifier using TRAIN data: 781.849 seconds --------------------------------TEST DATA --------------------------------[PERFORMANCE] Validating using TEST data: 782.084 seconds Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances 36507 1716 0.9396 0.038 0.1235 12.7297 % 31.981 % 38223 95.5106 % 4.4894 % --------------------------------Confusion Matrix --------------------------------confusion matrix ::::: | 11627.0 19.0 0.0 27.0 10.0 | | 70.0 2294.0 158.0 137.0 70.0 | | 1.0 8.0 10712.0 58.0 153.0 | | 50.0 174.0 221.0 2324.0 96.0 | | 11.0 44.0 351.0 58.0 9550.0 | [ TESTE 2 ] ----------------------------------------NEURAL NETWORK - Multilayer Perceptron ----------------------------------------Number of Instances = 165632 HOLDOUT Instances TRAIN_DATA data (66.0%) = 127409 instances. HOLDOUT Instances TEST_DATA data (34.0%) = 38223 instances. --------------------------------TRAIN DATA 132 --------------------------------[PERFORMANCE] Build Classifier using TRAIN data: 3894.841 seconds --------------------------------TEST DATA --------------------------------[PERFORMANCE] Validating using TEST data: 3895.117 seconds Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances --------------------------------Confusion Matrix --------------------------------confusion matrix ::::: | 11653.0 1.0 0.0 27.0 2.0 | | 45.0 2422.0 70.0 145.0 47.0 | | 2.0 15.0 10773.0 71.0 71.0 | | 60.0 158.0 132.0 2421.0 94.0 | | 7.0 45.0 269.0 83.0 9610.0 | 36879 1344 0.9527 0.0282 0.1104 9.4636 % 28.5853 % 38223 96.4838 % 3.5162 %