Prévia do material em texto
12/09/2018 K Nearest Neighbor : Step by Step Tutorial
https://www.listendata.com/2017/12/k-nearest-neighbor-step-by-step-tutorial.html 1/19
SEARCH... GO
ABOUT INDEX WRITE FOR US
HOME SAS R PYTHON DATA SCIENCE SQL EXCEL VBA SPSS RESOURCES
INFOGRAPHICS MORE
Home » Data Science » knn » Machine Learning » R » K Nearest Neighbor :
Step by Step Tutorial
Deepanshu Bhalla 2 Comments
Data Science, knn, Machine Learning, R
Neste artigo, abordaremos como funciona o algoritmo de
K-vizinhos mais próximos (KNN) e como executar o k-
vizinho mais próximo em R. É um dos algoritmos mais
amplamente utilizados para problemas de classificação.
Introdução ao K-Nearest Neighbor
K NEAREST NEIGHBOR : STEP BY STEP TUTORIAL
K-vizinho mais próximo simplificado
Join us with 5000+ Subscr
Subscribe to Free Updates
Enter your email... Su
Follow us on Facebook
12/09/2018 K Nearest Neighbor : Step by Step Tutorial
https://www.listendata.com/2017/12/k-nearest-neighbor-step-by-step-tutorial.html 2/19
(KNN)
Knn é uma técnica de aprendizagem supervisionada não
paramétrica na qual tentamos classificar o ponto de dados
para uma determinada categoria com a ajuda do conjunto
de treinamento. Em palavras simples, ele captura
informações de todos os casos de treinamento e classifica
novos casos com base em uma semelhança.
As previsões são feitas para uma nova
instância (x) pesquisando todo o conjunto de
treinamento para os K casos mais
semelhantes (vizinhos) e resumindo a
variável de saída para esses K casos. Na
classificação, esse é o valor de classe do
modo (ou mais comum).
Como o algoritmo KNN funciona
Suponha que temos altura, peso e tamanho de camiseta
de alguns clientes e precisamos prever o tamanho da
camiseta de um novo cliente, considerando apenas as
informações de altura e peso que temos. Os dados,
incluindo altura, peso e informações sobre o tamanho da
camiseta, são mostrados abaixo -
Altura em
centímetros)
Peso (em
kgs)
Tamanho da camisa
de t
158 58 M
158 59 M
158 63 M
160 59 M
160 60 M
12/09/2018 K Nearest Neighbor : Step by Step Tutorial
https://www.listendata.com/2017/12/k-nearest-neighbor-step-by-step-tutorial.html 3/19
163 60 M
163 61 M
160 64 eu
163 64 eu
165 61 eu
165 62 eu
165 65 eu
168 62 eu
168 63 eu
168 66 eu
170 63 eu
170 64 eu
170 68 eu
Etapa 1: Calcular a similaridade com base na
função de distância
Há muitas funções de distância, mas Euclidean é a medida
mais usada. É usado principalmente quando os dados são
contínuos. A distância de Manhattan também é muito
comum para variáveis contínuas.
Funções de distância
12/09/2018 K Nearest Neighbor : Step by Step Tutorial
https://www.listendata.com/2017/12/k-nearest-neighbor-step-by-step-tutorial.html 4/19
A idéia de usar a medida de distância é encontrar a
distância (semelhança) entre a nova amostra e os casos
de treinamento e, em seguida, encontrar os clientes k-mais
próximos para o novo cliente em termos de altura e peso.
Novo cliente chamado 'Monica' tem altura 161cm
e peso 61kg.
A distância euclidiana entre a primeira observação e a
nova observação (monica) é a seguinte -
= SQRT ((161-158) ^ 2 + (61-58) ^ 2)
Da mesma forma, calcularemos a distância de todos os
casos de treinamento com o novo caso e calcularemos a
classificação em termos de distância. O menor valor de
distância será classificado como 1 e considerado como o
vizinho mais próximo.
Passo 2: Encontre K-Nearest Neighbors
Seja k 5. Em seguida, o algoritmo procura os 5 clientes
mais próximos da Monica, ou seja, mais semelhantes a
Monica em termos de atributos, e veja em que categorias
esses 5 clientes estavam. Se 4 deles tivessem "Tamanhos
médios de camiseta" e 1 "tamanho de camiseta grande",
então seu melhor palpite para Monica é "camiseta média".
Veja o cálculo mostrado no instantâneo abaixo -
12/09/2018 K Nearest Neighbor : Step by Step Tutorial
https://www.listendata.com/2017/12/k-nearest-neighbor-step-by-step-tutorial.html 5/19
No gráfico abaixo, a variável dependente binária (tamanho
da camiseta) é exibida na cor azul e laranja. 'Médio
tamanho de t-shirt' é na cor azul e 'grande tamanho de t-
shirt' na cor laranja. A nova informação do cliente é exibida
no círculo amarelo. Quatro pontos de dados destacados
em azul e um ponto de dados em destaque laranja estão
próximos do círculo amarelo. Portanto, a previsão para o
novo caso é o ponto de dados em destaque azul, que é o
tamanho médio da camiseta.
Calcular KNN manualmente
12/09/2018 K Nearest Neighbor : Step by Step Tutorial
https://www.listendata.com/2017/12/k-nearest-neighbor-step-by-step-tutorial.html 6/19
Suposições do KNN 1.
Padronização Quando variáveis independentes
em dados de treinamento são medidas em unidades
diferentes, é importante padronizar variáveis antes de
calcular a distância. Por exemplo, se uma variável é
baseada na altura em cms e a outra é baseada no peso
em kgs, a altura influenciará mais o cálculo da distância.
Para torná-los comparáveis, precisamos padronizá-los, o
que pode ser feito por qualquer um dos seguintes
métodos:
KNN: representação visual
12/09/2018 K Nearest Neighbor : Step by Step Tutorial
https://www.listendata.com/2017/12/k-nearest-neighbor-step-by-step-tutorial.html 7/19
Após a padronização, o 5º valor mais próximo foi alterado,
já que a altura estava dominando antes da padronização.
Portanto, é importante padronizar os preditores antes de
executar o algoritmo K-neighbor neighbor.
2. Outlier
O valor-k baixo é sensível a outliers e um valor-K mais alto
é mais resistente a outliers, uma vez que considera mais
eleitores para decidir a previsão.
estandardização
Knn após padronização
12/09/2018 K Nearest Neighbor : Step by Step Tutorial
https://www.listendata.com/2017/12/k-nearest-neighbor-step-by-step-tutorial.html 8/19
Por que a KNN é não paramétrica?
Não-paramétrico significa não fazer nenhuma suposição
sobre a distribuição de dados subjacente. Métodos não
paramétricos não possuem números fixos de parâmetros
no modelo. Da mesma forma, no KNN, os parâmetros do
modelo aumentam com o conjunto de dados de
treinamento - você pode imaginar cada caso de
treinamento como um "parâmetro" no modelo. KNN x
K-mean Muitas pessoas se confundem entre essas
duas técnicas estatísticas - K-mean e K-vizinho mais
próximo. Veja algumas das diferenças abaixo -
1. K-mean é uma técnica de aprendizado não
supervisionada (sem variável dependente),
enquanto o KNN é um algoritmo de aprendizado
supervisionado (existe uma variável dependente)
2. K-mean é uma técnica de clustering que tenta dividir
pontos de dados em clusters-K, de modo que os
pontos de cada cluster tendem a ficar próximos,
enquanto o vizinho mais próximo tenta determinar a
classificação de um ponto, combinando a
classificação do K pontos mais próximos
O KNN pode ser usado para
regressão?
Sim, o vizinho K mais próximo pode ser
usado para regressão. Em outras palavras, o
algoritmo do vizinho K mais próximo pode
ser aplicado quando a variável dependente é
12/09/2018 K Nearest Neighbor : Step by Step Tutorial
https://www.listendata.com/2017/12/k-nearest-neighbor-step-by-step-tutorial.html 9/19
contínua. Nesse caso, o valor previsto é a
média dos valores de seus k vizinhos mais
próximos.
Prós e contras de KNN Pros
1. Fácil de entender
2. Nenhuma suposição sobre dados
3. Pode ser aplicado tanto à classificação quanto à
regressão
4. Funciona facilmente em problemas de várias
classes
Contras
1. Memória Intensiva / Computacionalmente cara
2. Sensível à escala de dados
3. Não funciona bem em uma variável de destino de
evento raro (inclinado)
4. Luta quando alto número de variáveis
independentesPara qualquer problema, um pequeno valor
de k levará a uma grande variação nas
previsões. Alternativamente, definir k para
um valor maior pode levar a um grande viés
do modelo.
Como lidar com variáveis
categóricas no KNN?
12/09/2018 K Nearest Neighbor : Step by Step Tutorial
https://www.listendata.com/2017/12/k-nearest-neighbor-step-by-step-tutorial.html 10/19
Crie variáveis dummy fora de uma variável categórica e
inclua-as em vez da variável categórica original. Ao
contrário da regressão, crie k dummies em vez de (k-1).
Por exemplo, uma variável categórica chamada
"Departamento" tem 5 níveis / categorias exclusivas. Então
vamos criar 5 variáveis dummy. Cada variável dummy tem
1 contra seu departamento e outro 0.
Como encontrar o melhor valor K?
A validação cruzada é uma maneira inteligente de
descobrir o valor K ideal. Ele estima a taxa de erro de
validação mantendo um subconjunto do conjunto de
treinamento do processo de construção do modelo.
A validação cruzada (digamos 10 vezes a validação)
envolve dividir aleatoriamente o conjunto de treinamento
em 10 grupos, ou dobras, de tamanho aproximadamente
igual. 90% dos dados são usados para treinar o modelo e
10% restantes para validá-lo. A taxa de erro de
classificação é então calculada nos 10% de dados de
validação. Este procedimento é repetido 10 vezes.
Diferentes grupos de observações são tratados como um
conjunto de validação cada uma das 10 vezes. Isso resulta
em 10 estimativas do erro de validação que são então
calculadas.
K vizinho mais próximo em R
Vamos usar dados históricos de estatísticas passadas de
ganhos / perdas e os discursos correspondentes. Este
conjunto de dados compreende 1524 observações em 14
variáveis. Variável dependente é win / loss onde 1 indica
win e 0 indica loss. As variáveis independentes são:
1. Proporção de palavras no discurso mostrando
12/09/2018 K Nearest Neighbor : Step by Step Tutorial
https://www.listendata.com/2017/12/k-nearest-neighbor-step-by-step-tutorial.html 11/19
uma. Otimismo
b. Pessimismo
c. o uso de Past
d. o uso do presente
e. o uso do futuro
2. Número de vezes que ele / ela menciona sua própria
festa
3. Número de vezes que ele / ela menciona suas partes
opostas.
4. Alguma medida indicando o conteúdo da fala
mostrando
uma. Abertura
b. conscienciosidade
c. Extroversão
d. Agradabilidade
e. Neuroticism
f. emotividade
Link para Download: Arquivo de Dados
Ler dados
# Read data
data1 = read.csv ("US Presidential
Data.csv")
Visualizar (data1)
Nós lemos o arquivo CSV com a ajuda do comando
read.csv . Aqui, o primeiro argumento é o nome do
conjunto de dados. O segundo argumento - Header =
TRUE ou T implica que a primeira linha em nosso arquivo
csv denota os cabeçalhos enquanto header = FALSE ou F
12/09/2018 K Nearest Neighbor : Step by Step Tutorial
https://www.listendata.com/2017/12/k-nearest-neighbor-step-by-step-tutorial.html 12/19
indica que os dados devem ser lidos da primeira linha e
não envolvem quaisquer cabeçalhos.
# biblioteca de
biblioteca de carregamento (circunflexo)
(e1071)
# Transformando a variável dependente em
um fator
data1 $ Win.Loss = as.factor (data1 $
Win.Loss)
Aqui vamos usar o pacote caret para rodar o knn. Como
minha variável dependente é numérica aqui, precisamos
transformá-la em fator usando as.factor ().
#Particionando os dados em treinamento e
dados de validação
set.seed (101)
index = createDataPartition (data1 $
Win.Loss, p = 0.7, lista = F)
train = data1 [índice,]
validação = data1 [-index,]
Para particionar os dados em conjuntos de treinamento e
validação, usamos a função createDataPartition () no
cursor.
Em primeiro lugar, definimos a semente como sendo 101,
para que os mesmos resultados possam ser obtidos. No
createDataPartition () o primeiro argumento é a variável
dependente, p denota quantos dados queremos no
conjunto de treinamento; aqui pegamos 70% dos dados no
conjunto de treinamento e descansamos no conjunto de
validação cruzada, list = F denota que os índices que
obtemos devem estar na forma de um vetor.
12/09/2018 K Nearest Neighbor : Step by Step Tutorial
https://www.listendata.com/2017/12/k-nearest-neighbor-step-by-step-tutorial.html 13/19
# Explorar dados
dim (train)
dim (validação)
nomes (train)
head (train)
head (validação)
As dimensões dos conjuntos de treinamento e validação
são verificadas via dim (). Veja as primeiras 6 linhas do
conjunto de dados de treinamento -
Pessimismo do Otimismo Win.Loss FutureUsed
FutureUsed PresentUsed OwnPartyCount
1 X1 0,10450450 0,05045045 0,4381443 0,4948454
0,06701031 2
3 X1 0,11257190 0,04930156 0,4159664 0,5168067
0,06722689 1
5 X 1 0,10582640 0,05172414 0,3362618 0,5821727
0,08356546 3
7 X1 0,09838275 0,06401617 0,3240741 0,6018519
0,07407407 6
9 X 1 0,10610734 0,04688464 0,3633540 0,5372671
0,09937888 2
10 X1 0,10066128 0,05951506 0,3554817 0,5382060
0,10631229 1
OppPartyCount NumericContent Extra Emoti Agree
Consc Openn
1 2 0.001877543 4.041 4.049 3.469
2.450 2.548
3 1 0.002131163 3.463 4.039 3.284
2.159 2.465
5 4 0.002229220 4.658 4.023 3.283
2.415 2.836
7 4 0.002251985 3.727 4.108 3.357
2.128 2.231
9 5 0.002446440 4.119 4.396 3.661
2.572 2.599
10 2 0.002107436 3.800 4.501 3.624
2.117 2.154
By default, levels of dependent variable in this dataset is
"0" "1". Later when we will do prediction, these levels will
be used as variable names for prediction so we need to
make it valid variable names.
# Setting levels for both training and
validation data
levels(train$Win.Loss) <-
12/09/2018 K Nearest Neighbor : Step by Step Tutorial
https://www.listendata.com/2017/12/k-nearest-neighbor-step-by-step-tutorial.html 14/19
make.names(levels(factor(train$Win.Loss)))
levels(validation$Win.Loss) <-
make.names(levels(factor(validation$Win.Lo
ss)))
Here we are using repeated cross validation method using
trainControl . Number denotes either the number of folds
and ‘repeats’ is for repeated ‘r’ fold cross validation. In this
case, 3 separate 10-fold validations are used.
# Setting up train controls
repeats = 3
numbers = 10
tunel = 10
set.seed(1234)
x = trainControl(method = "repeatedcv",
number = numbers,
repeats = repeats,
classProbs = TRUE,
summaryFunction =
twoClassSummary)
Using train() function we run our knn; Win.Loss is
dependent variable, the full stop after tilde denotes all the
independent variables are there. In ‘data=’ we pass our
training set, ‘method=’ denotes which technique we want to
deploy, setting preProcess to center and scale tells us that
we are standardizing our independent variables
center : subtract mean from values.
scale : divide values by standard deviation.
trControl demands our ‘x’ which was obtained via train( )
and tunelength is always an integer which is used to tune
our algorithm.
12/09/2018 K Nearest Neighbor : Step by Step Tutorial
https://www.listendata.com/2017/12/k-nearest-neighbor-step-by-step-tutorial.html 15/19
model1 <- train(Win.Loss~. , data = train,
method = "knn",
preProcess = c("center","scale"),
trControl = x,
metric = "ROC",
tuneLength = tunel)
# Summary of model
model1
plot(model1)
k-Nearest Neighbors
1068 samples
13 predictor
2 classes: 'X0', 'X1'
Pre-processing: centered (13), scaled (13)
Resampling: Cross-Validated (10 fold, repeated 3
times)
Summary of sample sizes: 961, 962, 961, 962, 961,
962, ...
Resampling results across tuning parameters:
k ROC Sens Spec
5 0.8440407 0.69101820.8382051
7 0.8537506 0.6847658 0.8520513
9 0.8575183 0.6712350 0.8525796
11 0.8588422 0.6545296 0.8592152
13 0,8585478 0,6560976 0,8556333
15 0,8570397 0,6432249 0,8648329
17 0,8547545 0,6448509 0,8627894
19 0,8520574 0,6336043 0,8632867
21 0,8484632 0,6215447 0,8627894
23 0,8453320 0,6071622 0,8658664
O ROC foi usado para selecionar o modelo ideal usando
o maior valor.
O valor final usado para o modelo foi k = 11.
12/09/2018 K Nearest Neighbor : Step by Step Tutorial
https://www.listendata.com/2017/12/k-nearest-neighbor-step-by-step-tutorial.html 16/19
Finalmente, para fazer previsões em nosso conjunto de
validação, usamos a função predict na qual o primeiro
argumento é a fórmula a ser aplicada e o segundo
argumento são os novos dados nos quais queremos as
previsões.
# Validation
valid_pred <- predict(model1,validation, type
= "prob")
#Storing Model Performance Scores
library(ROCR)
pred_val <-
prediction(valid_pred[,2],validation$Win.Loss
)
# Calculating Area under Curve (AUC)
perf_val <- performance(pred_val,"auc")
perf_val
# Plot AUC
perf_val <- performance(pred_val, "tpr", "fpr")
plot(perf_val, col = "green", lwd = 1.5)
Validação Cruzada: Ajuste Fino
12/09/2018 K Nearest Neighbor : Step by Step Tutorial
https://www.listendata.com/2017/12/k-nearest-neighbor-step-by-step-tutorial.html 17/19
#Calculating KS statistics
ks <- max(attr(perf_val, "y.values")[[1]] -
(attr(perf_val, "x.values")[[1]]))
ks
A Área sob Curva (AUC) no conjunto de dados de
validação é 0.8642 . Agradecimentos especiais a Ekta
Aggarwal por sua contribuição neste artigo. Ela é coautora
deste artigo. Ela é uma entusiasta da Data Science,
atualmente no último ano de sua pós-graduação em
estatística pela Universidade de Delhi.
Love this Post? Espalhe a palavra
Sobre o autor:
Deepanshu founded ListenData with a simple objective - Make analytics easy to
understand and follow. He has over 7 years of experience in data science and
predictive modeling. During his tenure, he has worked with global clients in
various domains like banking, Telecom, HR and Health Insurance.
While I love having friends who agree, I only learn from those who don't.
Let's Get Connected: Email | LinkedIn
Get Free Email Updates :
Enter your email address
*Please confirm your email address by clicking on the link
sent to your Email*
Tutoriais R: 75 Tutoriais R Livre
Facebook LinkedIn
Twitter
Submit
12/09/2018 K Nearest Neighbor : Step by Step Tutorial
https://www.listendata.com/2017/12/k-nearest-neighbor-step-by-step-tutorial.html 18/19
Related Posts:
Understanding Bias-Variance Tradeoff
Ensemble Methods in R : Practical Guide
GBM (Boosted Models) Tuning Parameters
Dimensionality Reduction with R
Take Screenshot of Webpage using R
Run Python from R
15 Types of Regression you should know
Web Scraping Website with R
Tutorial : Build Webapp in R using Shiny
K Nearest Neighbor : Step by Step Tutorial
Python for Data Science : Learn in 3 Days
2 Responses to "K Nearest Neighbor : Step by Step
Tutorial"
Enter your comment...
Comment as: sallette.leite@g
PublishPublish PreviewPreview
Mashetty Aman 29 January 2018 at 09:40
Really you explained it where well u deserve my salute u
clear my all doubt with best example us president
Reply
harsha 2 September 2018 at 08:31
In the R code, what if I wanted to use some other
distance method other than Eucledian?
Reply
12/09/2018 K Nearest Neighbor : Step by Step Tutorial
https://www.listendata.com/2017/12/k-nearest-neighbor-step-by-step-tutorial.html 19/19
Copyright 2017 ListenData
NEXT →← PREV