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 %

Documentos relacionados