Scikit-Learn - Taxa de erros no KNN

Comparando a taxa de erros com o valor K no KNN

Link do meu Github com o script dessa aula:

Download do script da aula

Link da documentação oficial do Sklearn:

https://scikit-learn.org/stable/

Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no Facebook

Link do código fluente no Pinterest

Meus links de afiliados:

Hostinger

Digital Ocean

One.com

Na seção de treinamento e previsão, dissemos que não há como saber de antemão qual valor de K produz os melhores resultados. Nós escolhemos aleatoriamente 5 como o valor de K, e em uma primeira tentativa não teve 100% de acertividade, depois mudamos para 9 e aí o resultado foi 100%. Como as amostras são escolhidas aleatoriamente na divisão de conjunto de treino e de teste, durante o teste na aula, mesmo com o K = 5, o resultado foi 100%. Por isso, o ideal é testar vários valores para K e ver qual é o que produz o melhor resultado. Vamos a um script que testa valores para K de 1 até 40. Antes vamos importar o dataset, o pandas e construir o dataframe.

#Importa os datasets que vem com o scikit learn
from sklearn import datasets
#importa a biblioteca pandas como pd
import pandas as pd
iris = datasets.load_iris()
irs = pd.DataFrame(iris.data, columns = iris.feature_names)
irs['class'] = iris.target
Divida o conjunto de dados em seus atributos e rótulos.

x = irs.iloc[:, :-1].values
y = irs.iloc[:, 4].values
Crie as divisões de treinamento e teste:

from sklearn.model_selection import train_test_split  
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.20)
Redimensione as features.

from sklearn.preprocessing import StandardScaler  
scaler = StandardScaler()  
scaler.fit(x_train)

x_train = scaler.transform(x_train)  
x_test = scaler.transform(x_test) 

Agora sim, vamos calcular a média de erro para todos os valores previstos, onde K varia de 1 até 40.


#importa o numpy como np
import numpy as np
from sklearn.neighbors import KNeighborsClassifier  
error = []

# Calculando erro para valores de K entre 1 e 40
for i in range(1, 40):  
    knn = KNeighborsClassifier(n_neighbors=i)
    knn.fit(x_train, y_train)
    pred_i = knn.predict(x_test)
    error.append(np.mean(pred_i != y_test))
O script acima executa um loop de 1 a 40. Em cada iteração, o erro médio dos valores previstos do conjunto de teste é calculado e o resultado é anexado à lista de erros. O próximo passo é plotar os valores de erro em relação aos valores de K.

Execute o seguinte script para plotar o gráfico:


#importa o matplotlib como plt
import matplotlib.pyplot as plt  
plt.figure(figsize=(12, 6))  
plt.plot(range(1, 40), error, color='red', linestyle='dashed', marker='o',  
         markerfacecolor='blue', markersize=10)
plt.title('Error Rate K Value')  
plt.xlabel('K Value')  
plt.ylabel('Mean Error')
#Para mostrar o gráfico
plt.show()

O gráfico de saída

K Value Error Rate Olhando a saída, podemos ver que o erro médio é zero quando o valor do K está entre 5 e 18. Façam testes com o valor de K para ver como isso afeta a precisão das previsões.

Conclusão

KNN é um algoritmo de classificação simples, mas poderoso. Não requer treinamento para fazer previsões, que é tipicamente uma das partes mais difíceis de um algoritmo de aprendizado de máquina. O algoritmo KNN tem sido amplamente utilizado para encontrar similaridade de documentos e reconhecimento de padrões. Também tem sido empregado para desenvolver sistemas de recomendação e para redução de dimensionalidade em etapas de pré-processamento para visão computacional, particularmente tarefas de reconhecimento facial. Tentem implementar o algoritmo KNN em outro conjunto de dados diferente. Varie o tamanho do teste e do treinamento junto com o valor K para ver como seus resultados diferem e como você pode melhorar a precisão do seu algoritmo.

Valeu, ficamos por aqui e nos vemos na próxima aula.

Link do meu Github com o script dessa aula:

Download do script da aula

Se gostarem do conteúdo dêem um joinha 👍 na página do Código Fluente no Facebook

Link do código fluente no Pinterest

Novamente deixo meus link de afiliados:

Hostinger

Digital Ocean

One.com

Obrigado, até a próxima e bons estudos. ;)