Você está na página 1de 13

Universidade De Coimbra

Faculdade de Ciências e Tecnologia

Aprendizagem computacional

Hélder Oliveira 2020212140


Joana Saraiva 2020248339
Sumário

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

O infarto do miocárdio, ou mais vulgarmente conhecido como ataque cardíaco é a morte de


células de uma região do coração por conta da formação de um coagulo que interrompe a corrente
sanguínea de forma inesperada e violenta.
Embora que nas últimas duas décadas o número de mortes por causa de doenças cardiovasculares
tenha tido uma redução significativa em Portugal, continua a ser a causa principal de óbitos no
país. Desta forma o nosso projeto vem ajudar na deteção de ataques cardíacos, com o objetivo de
minimizar o problema, para isso vamos recorrer a uma tabela de dados sobre a idade, sexo, tipo
de dor no peito, pressão arterial em repouso, colesterol, açúcar no sangue, frequência cardíaca
máxima alcançada, entre outros.
Deste modo vamos recorrer a dois métodos de previsão, e com as respetivas precisões de cada
método, vamos obter a probabilidade de uma certa pessoa, com os seus próprios dados, ter um
ataque cardíaco. Sendo eles as arvores de decisão e os KNN.
KNN ou K Nearest Neighbors, tal como o nome indica, é um modelo que interage com os dados
vizinhos mais próximos. Este modelo é um modelo de memória perfeita, ou seja, tem a capacidade
de armazenar infinitos dados. Para isso são utilizados valores de teste e de treino. Sendo assim a
definição do modelo KNN divide-se em dois parâmetros (Training e Test).
Training refere-se à memoria perfeita do modelo, pois ele guarda todos os exemplos de treino
necessários. Test corresponde ao valor ou classe prevista através dos exemplos de treino
armazenados, tendo em conta as suas “distâncias”.

Fig.1 – Exemplo do método KNN

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:

Fig.2 – Fórmula da entropia

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).

Fig.3 – Matriz de confusão

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.

Fig.4 – Bibliotecas utilizadas

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.

Fig.7 – Tabela com contagem de todos os casos de trtbps

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.

Fig.8 – Tabela com contagem de todos os casos de 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.

Fig.11 – Tabela com contagem de todos os casos de oldpeak

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.

Fig.12 – Tabela com contagem de todos os casos de slp

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

Aplicação dos métodos

Árvores de decisão:

Para a implementação do método de decisão inicialmente foram guardados todos os atributos na


variável X exceto os que anteriormente foram eliminados e o atributo pretendido de saída (output).
Sendo assim na variável y foi armazenado o atributo output.
De seguida foram criadas as variáveis de treino e teste para os atributos de entrada (x) e o atributo
de saída (y), sendo definida uma percentagem de 80% para treino.
Neste momento já é possível utilizar o método, e como referido anteriormente o critério utilizado
para a elaboração da árvore foi a entropia, definiu-se também que a profundidade máxima da
árvore será 3 e o número mínimo de amostras que cada nó poderá possuir será 6. Estes dois valores
foram alterados várias vezes de modo a verificar qual o melhor conjunto de valores para uma
melhor acurácia.
Neste momento obteve-se os valores das percentagens importantes abordadas na introdução.

Fig.15– Precision, recall e f1 da árvore 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.

Fig.16–Matriz de confusão da árvore de decisão


Agora sim calculou-se a acurácia de teste e treino do método implementado:

Fig.17–Acurácia de teste e treino

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.

KNN (K-Nearest Neighbors):

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.

Fig.18–– Precision, recall e f1 de KNN

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:

Fig.19–Acurácia de teste e treino

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).

Mais uma vez vamos fazer uso da matriz de confusão:

Fig.20– Matriz de confusão

Referências:

1. Accuracy, Precicion , Recall and F1


2. Slides disponibilizados nas aulas teóricas de Aprendizagem Computacional
3. scikit learn
4. kaggle

Você também pode gostar