<jupyter_start><jupyter_text>Exemplo de aplicação do algoritmo kNN (para classificação) Por: <NAME> O K-Nearest Neighbor (kNN) é um dos algoritmos de classificação mais simples. É utilizado para classificar objetos com base em exemplos de treinamento (modelo supervisionado) que estão mais próximos no espaço de características. Para que seja possível a sua utilização, se faz necessário:- a) Um conjunto de exemplos de treinamento; - b) Definir uma métrica para o cálculo das distâncias entre os elementos e- c) Definir o valor de K (número de vizinhos mais próximos a serem considerados no algoritmo.) No exemplo a seguir, foram utilizados os módulos:- a) train_test_split: para selecionar aleatoriamente os elementos para treinamento e teste.- b) KNeighborsClassifier: implementação do algoritmo do kNN- c) pandas: módulo para análise de dados em Python- d) numpy: módulo que contém uma coleção de funções matemáticas para trabalhar com estas estruturas.<jupyter_code># Importando as biblitecas necessárias
from sklearn.model_selection import train_test_split # Modulo utilizado para selecionar dados de treino e teste randomizados
from sklearn.neighbors import KNeighborsClassifier # Modulo para utilização do kNN 
from sklearn.metrics import accuracy_score # Análise de acurancia
import pandas as pd
import numpy as np
# Importando o dataset
df = pd.read_csv('../Dados/bancoCMI.csv', delimiter=';')
df.head() # Mostra os 5 primeiros registros
# Criando dados para treinamento e teste
# Foram removidas as colunas CMI (porque tem relação direta com CMI_binario e fundamental)
x_treino, x_teste, y_treino, y_teste  = train_test_split(df[['prenatal','renda', 'saneamento', 'desemprego', 'Gini', 'PIB_per_capita']], df['CMI_binario'], test_size=0.3, random_state=1000) # test_size (quanto será utilizado para teste), random_state (semente utilizada)
print(x_treino.shape)
print(x_teste.shape)
print(y_treino.shape)
print(y_teste.shape)
# Treinar o modelo
knn = KNeighborsClassifier(n_neighbors=10, p=2) # Determina a vizinhança. p = 2 > Dist. Euclidiana; p=1 > Dist. Manhattan 
knn.fit(x_treino, y_treino) # Realiza o treinamento
# Realizar a classificação
resultado = knn.predict(x_teste) # Cria modelo de predição
# Analisando os resultados de acordo com o modelo treinado
acertos = np.sum(resultado == y_teste)
# Resultados
print ('Total da amostras: %d' % (len(x_treino)+ len(x_teste)))
print ('Total utilizados para treinamento: %d' % len(x_treino))
print ('Total utilizados para teste: %d' % len(x_teste))
print ('Total de acertos %d' % acertos)
print ('Total de erros %d' % ( len(x_teste) - acertos))
print ('Porcentagem de acertos: %.2f' % (100 * acertos/ len(x_teste)) ,'%')<jupyter_output>Total da amostras: 5565
Total utilizados para treinamento: 3895
Total utilizados para teste: 1670
Total de acertos 962
Total de erros 708
Porcentagem de acertos: 57.60 %
Acurácia do teste: 0
{'fraction_non_alphanumeric': 0.08442906574394464, 'fraction_numerical': 0.013494809688581315, 'mean_word_length': 5.7546728971962615, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '425878', 'license': 'MIT', 'n_tokens_mistral': 1063, 'n_tokens_neox': 1026, 'n_words': 352, 'path': 'scripts/Introd. ciencia de dados - Parte 6.ipynb', 'repo_name': 'adrianosantospb/jatic2017', 'size': '2898'}