Escolar Documentos
Profissional Documentos
Cultura Documentos
Aprendizagem computacional
Este relatório vem no âmbito da disciplina de aprendizagem computacional. Neste projeto foi
estudado um dataset público sobre ataques cardíacos. Foram analisados todos os dados do dataset
com objetivo de verificar a sua relevância para o problema. Após isso foram eliminados alguns
atributos, devido à sua irrelevância. Foram também eliminados todos os outliers necessários.
No fim da análise de todos os dados, recorrendo a dois modelos, sendo eles decision trees model
e K-Nearest Neighbors model, foram calculadas as accuracy do problema.
O dataset utilizado é público e é o seguinte:
h ps://www.kaggle.com/datasets/rashikrahmanpritom/heart-a ack-analysis-predic on-
dataset?search=slp
Esse documento foi guardado na nossa drive pessoal numa pasta denominada AC.
Introdução
Na aplicação deste modelo define-se um valor para K, tendo em conta que quanto menor o k mais
instáveis serão as variações dos vizinhos. Neste caso é sugerido que o número seja ímpar, e por
isso usou-se K=1, achando os K vizinhos mais próximos sendo que a maioria ganha e quanto mais
longe menos pesam os exemplos (por norma).
Neste modelo pequenas alterações no espaço de entrada geram grandes alterações no espaço de
saída. Este algoritmo é simples e faz todo o seu trabalho em teste, não sendo ensinado de nenhuma
forma previamente.
Quanto ao método de árvores de decisão, mais conhecido por Decision Trees, este é um método
que tem o objetivo de resolver problemas complexos de uma forma mais simples.
Basicamente, como uma árvore de decisão é um método muito simples de entender, em que cada
quadrado da árvore responde à questão “se tal acontece tal terá de acontecer”, pode-se dizer que
uma árvore de decisão é uma função recursiva.
Para a representação de uma árvore de decisão são usados nós de decisão que contêm um teste
relativo a um certo atributo, cada ramo descendente corresponde a um valor possível desse
atributo, cada folha está associada a uma classe e cada caminho na árvore corresponde a uma
classificação.
Existem vários critérios de implementação do método das árvores de decisão, porém, neste
trabalho iremos usar o critério da entropia. A entropia mede o nível de homogeneidade de um
conjunto de dados de treino. O nível de entropia deverá diminuir à medida que se desce da árvore,
chegando até zero, de modo que o método seja bem implementado e a homogeneidade aumente.
Para o cálculo da entropia recorre-se à seguinte formula:
No método de árvores de decisão é importante ter em conta que não podem existir dados vazios
ou não numéricos, nesse caso se tal acontecer deve-se eliminar o dado, ou então substituir pelo
valor mais comum. Na aplicação do método, para resolver esse problema iremos sempre optar
por eliminar os dados.
Com o objetivo de verificar o bom desempenho e se os métodos foram bem aplicados, no fim da
aplicação de cada método são calculados 4 parâmetros, sendo eles: precision, recall, f1 e accuracy.
Estes parâmetros regem basicamente uma tabela de verdadeiros/falsos positivos/negativos.
Precision diz respeito aos verdadeiros positivos, ou seja, de todos os dados que eram positivos,
quais é que foram declarados como tal. Sendo assim o valor da precision deverá ser um valor
elevado, porém, apenas o facto da precision ser elevada não quer dizer que o método esteja na sua
melhor adaptação.
Isto porque recall é o parâmetro que diz a percentagem dos dados relevantes para a questão que
foram acertados tendo em conta todos os que deveriam ter sido, ou seja, numa situação hipotética
em que há uma precision alta, se o recall for baixo, não estamos perante uma boa implementação.
Quanto ao valor de f1 não há muito a acrescentar pois esse é a média dos dois valores
anteriormente referidos.
Finalmente a accuracy corresponde à métrica base geralmente usada para verificar e qualificar a
avaliação dos métodos, que será a que iremos ter mais em consideração pois essa indica a
percentagem das previsões corretas de todas elas.
Algo que é de habitual uso quando se trabalha com estes métodos é a apresentação de uma matriz
de Confusão (Confusion Matrix) essa que se baseia nos quatro valores já referidos (TP, TN, FP,
FN).
Análise de dados
O dataset usado foi guardado numa variável declarada ‘df’ e é chamando essa variável que vamos
poder fazer as mudanças necessárias no nosso dataset ao longo do relatório.
Para isso inicialmente foram importadas todas as bibliotecas que achamos necessárias.
De seguida verificou-se se em algum dos atributos existia algum dado vazio que fosse necessário
eliminar, como não existia não foi necessário alterar a nossa tabela de dados.
Sendo assim foram verificados todos os atributos (um a um) com o objetivo de conferir a sua
relevância para o dataset em questão.
Daí retirou-se que, as idades das pessoas que participaram nos dados do dataset variam entre 29
e 77 sendo mais acentuadas entre os 54 e 59.
Fig.5 – Tabela com contagem de todas as idades
Deste modo, como a idade é um atributo com vários dados diferentes e tem vários casos de cada
dado assume-se que a idade é um bom atributo para se usar.
Quanto ao sexo, verificou-se que existem muitas mais pessoas do sexo feminino do que
masculino, o que poderá afetar no desenvolvimento do código, porém como existem vários dados
do sexo masculino achou-se por bem manter este atributo.
Fig.6 – Tabela com contagem de pessoas do sexo feminino e masculino (0- masculino, 1- feminino)
Quanto ao trtbps que é o atributo que indica a pressão arterial, verificou-se que os valores variam
de 94 a 200, sendo que 120, 130 e 140 são os valores mais frequentes.
Como a pressão arterial é um dado importante para o nosso objetivo e existem vários exemplos,
embora existam mais casos de alguns dos exemplos, achou-se por bem manter esse atributo, sem
fazer qualquer alteração.
No que diz respeito aos níveis do colesterol, esses estão explícitos no atributo chol, fez-se uma
contagem desses valores e percebeu-se que não existem dados suficientes de cada caso para que
esse atributo fosse importante ou relevante, sendo assim eliminou-se a coluna que diz respeito aos
níveis de colesterol.
Foram feitos exames eletrocardiográficos e desses resultados todos os que apresentam como
resultado 0 significa que não têm nenhuma anormalidade ou hipertrofia, se apresentam resultado
1 têm uma anormalidade da onda ST-T e no caso de apresentarem um resultado de valor 2 têm
uma hipertrofia ventricular esquerda. Sendo assim foram feitas as contagens dos 3 casos, que
foram armazenados no atributo restecg.
Após a contagem verificou-se que existem muito poucos casos em que o resultado é 2, no total
apenas 4 pessoas tinhas esse resultado, sendo assim, como havia tão poucos casos para quando o
resultado era 2 estava-se quase perante um outlier, deste modo, achou-se por bem eliminar esses
casos. De forma que na coluna do restecg passasse a haver apenas 2 casos (quando o valor é 0 ou
quando o valor é 1).
Fig.9 – Tabela nova com contagem de todos os casos de restecg sem outlier
Foi medida também a frequência máxima cardíaca alcançada sendo ela representada no atributo
thalachh, porém após a contagem de todos os casos chegou-se ao consentimento que esse atributo
não era o mais favorável para o objetivo, devido à sua irregularidade de resultados, sendo assim
eliminou-se o atributo.
Quanto ao caa que é o atributo que indica o número de artérias principais, foi também feita uma
contagem, mas embora os casos não fossem a nível quantitativo iguais, decidiu-se manter esse
atributo.
Foi feita também a contagem do atributo thall, sendo ele o atributo que indica um distúrbio
genético sanguíneo hereditário que tem 4 casos possíveis (0,1,2,3). Em que no caso de o resultado
ser 0 não há presença do distúrbio, no caso de thall=1 o defeito provocado não é reversível, no
caso de ser 2 trata-se de um problema normal, e no caso de ser 3 tem-se presente um problema
que poderá ser resolvido.
Percebeu-se que o caso em que thall tem o valor 0 é praticamente um outlier. Desta forma, achou-
se por bem eliminar esse caso.
Fig.10– Tabela com contagem de todos os casos de thall com e sem outlier
Quanto ao oldpeak após a contagem de todos os casos percebeu-se que não era um bom atributo.
No que diz respeito ao slp, ou seja, ao atributo que indica a inclinação do pico de segmento ST,
divide-se em 3 casos possíveis, correspondendo cada um a um tipo de inclinação da curva que
representa o atributo.
Após uma análise dos dados achou-se por bem não alterar nem eliminar nenhum dado desse
atributo.
Quanto ao output, ou seja, ao atributo que indica se a pessoa tem ou não a doença, após a contagem
dos dados chegou-se à conclusão que é um bom atributo de saída pois existem vários dados para
os dois casos possíveis e a diferença entre eles não é muito acentuada.
Fig.13 – Tabela com contagem final do atributo se saída (0-não tem doença, 1-tem doença)
Por fim, apos a análise individual de cada atributo achou-se necessário ver qual a relação de todos
os atributos entre eles, para isso recorreu-se ao comando corr():
Fig.14– Tabela com a relação entre todos os atributos antes e depois de serem feitas alterações
Árvores de decisão:
Em geral são bons resultados, embora que as percentagens de precision e recall sejam inferiores
no que diz respeito à previsão de que a pessoa não tenha doença em comparação com a que tem,
mas tal acontece porque, como foi analisado previamente, existem mais casos de doença do que
não doença, portanto, embora a diferença fosse praticamente irrisória era de esperar que a precisão
não fosse tão alta nesse caso.
É também dado o valor da média pesada e da média macro, estes valores não são iguais pois, ao
contrario da média macro, a média pesada, tal como o nome indica, tem em conta o peso de cada
dado, ou seja, se há mais valores de um certo dado então isso ter-se-á em conta, já a média macro
vê todos os dados com o mesmo peso. No entanto é também notável que a diferença entre as
medias é mínima.
Como anteriormente foi abordado é de bom uso fazer uma matriz de confusão para ter em conta
os resultados.
Geralmente assume-se que a acurácia tem um bom valor acima dos 60%, sendo que o melhor
valor possível é os 100%, ou então 1. Neste caso a acurácia ronda os 80, portanto pode-se afirmar
que é uma boa precisão para o problema.
Foi também feita a árvore de decisão para se ter uma noção de como ela funciona em termos
práticos.
É necessário ressaltar que para todo o processo descrito neste método foi necessário acrescentar
algumas bibliotecas às inicialmente referidas.
Para a implementação do método de decisão foi aproveitado o código do método anterior, pelo
que todas as variáveis criadas e detalhadas anteriormente são também aplicadas neste método.
Como anteriormente referido foram assumidos K=1 vizinhos.
Aplicando-se o método consegue-se de seguida os valores da precision e recall de modo a
averiguar se o método foi bem aplicado ou se deverá ser necessário ajustar alguns valores ou
parâmetros.
Daqui verifica-se novamente que os valores de precision e recall para os casos em que não é
detetada doença são mais baixos. Neste método a percentagem do recall não é baixa mas já está
quase no limiar no que diz respeito ao caso 0, algo que é muito importante para a avaliação do
método e da sua aplicação.
Mais uma vez são apresentadas as médias pesadas e macro, porém, neste caso, a nível de precisão
a média macro apresenta o mesmo valor da média pesada.
Neste caso os valores de precisão são em geral mais baixos dos valores calculados no método
anterior pelo que se prevê que pelo menos uma das acurácias também seja menor.
Para isso vamos confirmar se a nossa previsão está correta calculando os valores da acurácia:
E como foi previsto a acurácia de teste apresenta um valor menor neste método. No entanto, a
acurácia de treino obteve o maior valor possível (100%). Embora a acurácia de teste não tenha
um valor tão elevado como o método anterior não quer dizer que seja um mau valor, pelo
contrário, o método dos KNN con nua a apresentar valores da acurácia de teste dentro do
intervalo desejado. Contudo embora se tenha ob do o valor máximo da acurácia de treino, é a
acurácia de teste que tem mais peso na precisão de um método, sendo assim, neste dataset, as
árvores de decisão são o melhor método a implementar, dos dois abordados (knn não é um mau
método, mas também não é o melhor).
Referências: