Utilizando Machine Learning para detectar câncer de mama
Freepik

Utilizando Machine Learning para detectar câncer de mama

Este artigo foi escrito com o objetivo de analisar dados de exames de pacientes diagnosticadas com câncer de mamas e utilizar algoritmos para prever o tipo de câncer (benigno ou maligno) de acordo com os valores de teste.

Também conhecido como neoplasia, o câncer de mama é caracterizado pelo crescimento de células cancerígenas na mama. Segundo dados do Instituto Nacional do Câncer (INCA), é o segundo tumor mais comum entre as mulheres, atrás apenas para o câncer de pele, e o primeiro em letalidade.


Algumas medidas preventivas podem ser tomadas, de acordo com o Ministério da Saúde:

Segundo o Instituto Nacional do Câncer (Inca), as formas mais eficazes para detecção precoce do câncer de mama são o exame clínico da mama e a mamografia. Para o controle do câncer de mama, é recomendado que as mulheres realizem exames periodicamente, mesmo que não tenham alterações. É necessário que a mulher conheça o próprio corpo e caso veja alguma alteração, já procure atendimento médico, pois o exame das mamas realizado pela própria mulher não substitui o exame físico realizado por profissional de saúde em atendimento hospitalar qualificado para essa atividade. O diagnóstico precoce aumenta a chance de cura do câncer de mama.

O dataset foi retirado do Kaggle e faz parte do repositório da UCI Machine Learning. As colunas são cálculos feitos a partir de uma imagem digitalizada do exame fine needle aspirate (FNA) de uma massa mamária. Elas descrevem as características dos núcleos celulares presentes na imagem.

Os valores computados são:

a) raio (média das distâncias do centro aos pontos do perímetro)

b) textura (desvio padrão dos valores da escala de cinza)

c) perímetro

d) área

e) suavidade (variação local nos comprimentos dos raios)

f) compactação (perímetro ^ 2 / área — 1,0)

g) concavidade (severidade das porções côncavas do contorno)

h) pontos côncavos (número de porções côncavas do contorno)

i) simetria

j) dimensão fractal (“aproximação da linha costeira” — 1)

Iremos começar o nosso projeto importando a biblioteca Pandas, para ler os dados e realizar um pré-processamento.

Não foi fornecido texto alternativo para esta imagem

Estas são as 5 primeiras linhas do nosso dataset:

OBS: há mais colunas adiante

Em seguida, iremos buscar por valores nulos.

Não foi fornecido texto alternativo para esta imagem

De todas as colunas, apenas uma possui:

Não foi fornecido texto alternativo para esta imagem

Portanto, podemos excluí-la do nosso dataset. Isso só é possível pois há uma grande quantidade de valores "perdidos" e em apenas uma coluna. Caso ocorresse em outras, teríamos que realizar um tratamento diferenciado para tentar preencher estas lacunas.

Seguindo adiante, excluiremos a coluna e criaremos um novo DataFrame:

Não foi fornecido texto alternativo para esta imagem
Não foi fornecido texto alternativo para esta imagem

A coluna que excluímos é a última no nosso dataset.

Agora, podemos utilizar uma função chamada de Label Encoder a fim de fazer um "encode" na nossa variável target, a qual pretendemos utilizar para o diagnóstico e transformar seus valores em 0 e 1.

Não foi fornecido texto alternativo para esta imagem
Não foi fornecido texto alternativo para esta imagem

Com isto, temos que o benigno será 0 e o maligno 1.

A matriz de confusão abaixo indica as métricas de perfomance do nosso algoritmo, cruzando os resultados preditos com as classes originais observadas.

Não foi fornecido texto alternativo para esta imagem

Essa matriz de confusão nos diz que nosso algoritmo acertou 88 Verdadeiros Positivos (no nosso caso, malignos), 8 Falsos Positivos (previu malignos, porém são benignos), 3 Falsos Negativos (previu benignos, mas são malignos) e 44 Verdadeiros Negativos (benignos).

Esta é a métrica de perfomance do nosso algoritmo, descrito logo abaixo.

Após concluir nosso pré-processamento e análise inicial, partiremos para o algoritmo de Machine Learning.

O escolhido foi o SVM. Iremos utilizar o train test split, um método de dividir arrays ou matrizes em conjuntos de treino e subconjuntos de teste aleatórios.

Não foi fornecido texto alternativo para esta imagem

Separamos o nosso dataset em dados de treino e de teste, o x indica as colunas das características do exame, enquanto o y é o nosso valor alvo, ou seja, o diagnóstico.

Com isso, o algoritmo irá se "adaptar" a estes dados e fazer a predição.

Não foi fornecido texto alternativo para esta imagem

A acurácia deste modelo é:

Não foi fornecido texto alternativo para esta imagem

Obrigada por ter chegado até aqui, espero que tenha gostado!

Github: https://bit.ly/3oKANuv

Portfólio: https://bit.ly/3vh4PIO





Entre para ver ou adicionar um comentário

Outros artigos de Yane Sarmento

Outras pessoas também visualizaram

Conferir tópicos