Detectando câncer de mama com KNN

Entre para nossa lista e receba conteúdos exclusivos!

cancer de mama com KNN

No artigo anterior, conhecemos o KNN, o algoritmo de IA mais simples. Hoje, iremos usar esse algoritmo para detectar câncer de mama. Ou seja, na prática, iremos fazer um “robô doutor” bem simples, que será capaz de dizer se uma biópsia de massa mamária é maligna ou benigna. Dito isso, vamos começar.

Detectando câncer de mama com KNN: Dataset

O conjunto de dados dispõe de 569 amostras de massas mamárias. Desse total, 357 são benignas e 212 são malignas. cada amostra possui 32 atributos, sendo alguns desses atributos medidas de:

  • raio da massa
  • textura da massa
  • perímetro da massa
  • área superficial da massa
  • simetria da massa

Além, é claro, de outros atributos que não entrarei em detalhe.

Detectando câncer de mama com KNN: Obtendo conjunto de treino e teste

Iremos separar o nosso conjunto de dados em conjunto de treino e teste. Falaremos sobre isso melhor em outra ocasião, mas, de forma resumida, o conjunto de treino serão os dados que o algoritmo de fato vai “treinar”. Já o conjunto de teste vai ser o conjunto que iremos fazer os testes de acerto do KNN. 

Não faz sentido usar o mesmo conjunto para treino e teste, pois há uma tendência maior de o algoritmo acertar, nesse caso. Mas não necessariamente ele acertaria em outras situações. Podemos ler os dados no seguinte código:

#importando os pacotes importantes

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#modelo knn
from sklearn.neighbors import KNeighborsClassifier as knn

#lendo dataset com pandas
df = pd.read_csv('wdbc.csv')

#convertendo dados para array numpy
data = df.to_numpy()

Agora, podemos selecionar as 100 primeiras amostras do conjunto de dados para teste, e as demais para treino.

#separando os dados para teste

atributosTeste = data[0:100,2:]
atributosTreino = data[100:,2:]

classesTeste = data[0:100,1]
classesTreino = data[100:,1]

  Detectando câncer de mama com KNN: Otimizando o K

Feito isso, vamos tentar otimizar o K do nosso KNN. No post sobre KNN, discutimos sobre como diferentes K’s podem mudar os resultados das classificações. Faremos, então, o teste de acurácia do modelo para vários K’s, de 1  a 50, para ser mais exato.

#encontrando melhor k para o knn de entre 1 e 50
k_acuracia = np.zeros((50))
#calcula acuracia para knn com 1 a 50 vizinhos mais proximos 
for i in range(1,50):
  modeloKnn = knn(n_neighbors = i)
  modeloKnn.fit(atributosTreino, classesTreino)
  k_acuracia[i] = modeloKnn.score(atributosTeste,classesTeste)

Vamos, agora, plotar as acurácias para cada valor de K e observar o melhor K.

#criando o gráfico
#plotando cada acurácia, para cada k
plt.figure(figsize = (10,6))
plt.plot( range(1,50), k_acuracia[1:50], label = 'Acurácia')
plt.plot(k_acuracia.argmax(),k_acuracia.max(), 'go')
plt.xlabel('K')
plt.ylabel('Acurácia média')
plt.legend()
plt.title('Desempenho dos para cada K')

Output:

Fonte: O autor

Podemos observar que para K igual a 1, a acurácia foi a maior, cerca de 84%. O KNN com k igual a 1 se trata do algoritmo de distância mínima, ou seja, classificamos uma amostra em relação a amostra mais próxima. 

Conclusão

Em suma, podemos concluir que o KNN conseguiu acertar a malignidade de 84% das massas mamárias do conjunto de teste. Esse resultado é bem significativo, visto que esse algoritmo é muito simples de ser utilizado. Vale lembrar, também, que se utilizarmos outras partes do dataset como conjunto de teste, podemos ter acurácias diferentes. Por isso, o ideal é fazer uma validação cruzada. Falaremos sobre isso em posts futuros. Até a próxima.

Referências

https://archive.ics.uci.edu/ml/datasets/breast+cancer+wisconsin+(diagnostic)

Câncer de mama ícones criados por Freepik – Flaticon

Outros Artigos

Entre para nossa lista e receba conteúdos exclusivos!

contato@meuguru.com

CNPJ 42.269.770/0001-84

Nos siga nas redes!