• Nenhum resultado encontrado

K-Vizinhos K-Vizinhos Próximos Próximos (KNN) (KNN)

No documento Machine learning (páginas 32-34)

3. Aprendizado de Máquina Supervisionado Aprendizado de Máquina Supervisionado

3.2 Modelos Modelos de de Classificação Classificação

3.2.4 K-Vizinhos K-Vizinhos Próximos Próximos (KNN) (KNN)

3.2.4

K-Vizinhos K-Vizinhos Próximos Próximos (KNN)(KNN)

O método K-Vizinhos próximos -

O método K-Vizinhos próximos - K-Nearest Neighbours KNN  K-Nearest Neighbours KNN  - pode ser utilizado para resolver - pode ser utilizado para resolver

um problema de classificaçã

um problema de classificação. o. Esse modelo é um Esse modelo é um dos mais simples e intuitidos mais simples e intuitivos: seu vos: seu treinametreinamentonto consiste em armazenar cada uma das instâncias (ou exemplos) da base de treino e, através de uma consiste em armazenar cada uma das instâncias (ou exemplos) da base de treino e, através de uma função de distância

função de distância 14 14 e do número de vizinhos mais próximos, é capaz de predizer qual a classe dee do número de vizinhos mais próximos, é capaz de predizer qual a classe de um novo indivíduo.

um novo indivíduo.

A simplicidade desse método tem um preço:

A simplicidade desse método tem um preço: ele é ele é sensívsensível a el a ruídos (aleatoriedruídos (aleatoriedade dos dados) eade dos dados) e

outliers

outliers, não possui uma capacidade alta de generalização e é altamente sensível a seu hiperparâmetro:, não possui uma capacidade alta de generalização e é altamente sensível a seu hiperparâmetro:

o número de vizinhos mais próximos. Em situação de alta dimensionalidade não é muito efetivo o número de vizinhos mais próximos. Em situação de alta dimensionalidade não é muito efetivo e pouco eficiente. Seu tempo de treino costuma ser rápido, porém o tempo para predição envolve e pouco eficiente. Seu tempo de treino costuma ser rápido, porém o tempo para predição envolve calcular a distância entre a instância (indivíduo) nova e todas as outras instâncias, sendo assim, em calcular a distância entre a instância (indivíduo) nova e todas as outras instâncias, sendo assim, em bases de dados muito grandes, esse método pode ter um tempo de execução alto. Em bases de dados bases de dados muito grandes, esse método pode ter um tempo de execução alto. Em bases de dados balanceadas e representativ

balanceadas e representativas, esse as, esse modelo costuma ter modelo costuma ter bons resultados.bons resultados.

Agora trazendo um exemplo mais concreto: imagine a seguinte situação,uma exposição de Agora trazendo um exemplo mais concreto: imagine a seguinte situação,uma exposição de veiculos antigos está ocorrendo em sua cidade e é informado em uma placa próxima a cada veículo, veiculos antigos está ocorrendo em sua cidade e é informado em uma placa próxima a cada veículo, se este foi fabricado nos Estados Unidos, Japão ou Europa. Os carros estão espalhados pelo salão sem se este foi fabricado nos Estados Unidos, Japão ou Europa. Os carros estão espalhados pelo salão sem uma lógica aparente e em algum lugar existe um veículo que não tem uma placa de nacionalidade e uma lógica aparente e em algum lugar existe um veículo que não tem uma placa de nacionalidade e você quer descobrir onde este carro foi

você quer descobrir onde este carro foi fabricadofabricado. . SeguindSeguindo a o a lógica do KNN lógica do KNN você faria o seguinte:você faria o seguinte: olharia os vizinhos mais próximos a este carro e veria onde eles foram fabricados, digamos que olharia os vizinhos mais próximos a este carro e veria onde eles foram fabricados, digamos que você decidiu olhar os cinco carros mais próximos, três deles eram dos Estados Unidos, um do Japão você decidiu olhar os cinco carros mais próximos, três deles eram dos Estados Unidos, um do Japão e por fim um da Europa e como existem mais carros fabricados nos Estados Unidos próximos ao e por fim um da Europa e como existem mais carros fabricados nos Estados Unidos próximos ao seu, você induzir

seu, você induziria que o ia que o carro também foi fabricado lá. carro também foi fabricado lá. É importante dizer que a distância entreÉ importante dizer que a distância entre os carros pode ser física ou algo que mede similaridade entre atributos levando em consideração os carros pode ser física ou algo que mede similaridade entre atributos levando em consideração características dos carros. Vemos que a lógica do modelo é bem simples, porém bastante poderosa, características dos carros. Vemos que a lógica do modelo é bem simples, porém bastante poderosa, com isso em mente podemos agora partir para codificação.

com isso em mente podemos agora partir para codificação.

Continuando com a situação acima em mente, vamos aplicar nosso nosso modelo em forma Continuando com a situação acima em mente, vamos aplicar nosso nosso modelo em forma de código.Vamos fazer apenas algumas modificações para que o método faça mais sentido - na de código.Vamos fazer apenas algumas modificações para que o método faça mais sentido - na situação acima informamos que os caros

situação acima informamos que os caros estavam dispostestavam dispostos sem uma lógica os sem uma lógica aparente e para aparente e para o métodoo método fazer sentido vamos imaginar que os carros estejam dipostos segundo as seguintes variáveis: Milhas fazer sentido vamos imaginar que os carros estejam dipostos segundo as seguintes variáveis: Milhas por litros (

por litros (mpgmpg), Número de cilindros (), Número de cilindros (cylinderscylinders), Volume nos pistões (), Volume nos pistões (cubicinescubicines, Cavalos no, Cavalos no

motor(

motor(hphp), Peso em libras (), Peso em libras (weigthlbsweigthlbs), Tempo de aceleração até 60 milhas por hora (), Tempo de aceleração até 60 milhas por hora (time-for-60time-for-60) e) e

por fim o ano do carro (

por fim o ano do carro (yearyear).).

Escolhidas as variáveis, vamos continuar primeiramente importando as bibliotecas que vamos Escolhidas as variáveis, vamos continuar primeiramente importando as bibliotecas que vamos usar:

usar:

import

import  pandas  pandas asas pdpd

import

import  numpy  numpy asas npnp

import

import  seaborn  seaborn asas snssns  #Us  #Usaremaremos os estesta a bibbibliotlioteca eca parpara a ploplotar tar destdesta a vez vez 

from

from  sklearn.model_selection  sklearn.model_selection  import  import  train_test_split  train_test_split# # crcriaiar r grgrupupo o de de trtreieino no e e teteststee

from

from  sklearn.preprocessing  sklearn.preprocessing  import  import  StandardScaler  StandardScaler  #   # nornormamalizlizar ar os os daddadosos 14

33..2 2 MMooddeelloos s dde e CCllaassssiifificcaaççãão o 3333

from

from  sklearn.neighbors  sklearn.neighbors  import  import  KNeighborsClassifier  KNeighborsClassifier  #   # bibiblibliototeca eca do do memetodtodoo

from

from  sklearn.metrics  sklearn.metrics  import  import classifclassification_ication_report, report, confusioconfusion_matrixn_matrix  #   # acacururacacia do métia do métododo.o.

Então podemos importar nosso dataset e separar as classes de cada carro para facilitar a manipu- Então podemos importar nosso dataset e separar as classes de cada carro para facilitar a manipu- lação dos dados:

lação dos dados:

dataset

dataset== pdpd..read_csv(read_csv("cars_.csv""cars_.csv")) classe

classe==  dataset[  dataset[brandbrand]]

dataset

dataset..drop([drop([brandbrand],axis],axis=1=1,inplace,inplace==  True  True))

Uma vez separadas as classes das variáveis, temos que criar nosso grupo de treino e nosso grupo Uma vez separadas as classes das variáveis, temos que criar nosso grupo de treino e nosso grupo de teste, para isso utilizamos uma função do python que é

de teste, para isso utilizamos uma função do python que é muito útil:muito útil:

X_tr

X_trainain, , X_tX_test, est, y_try_train, ain, y_tey_testst == train_test_splitrain_test_split(dataset(dataset,classt,classe, e, test_sitest_sizeze=0.20=0.20,random_s,random_s

Com os dados separados, só

Com os dados separados, só precisamos normalizáprecisamos normalizá-los antes de -los antes de aplicar o KNN:aplicar o KNN:

scaler

scaler ==  StandardScaler()  StandardScaler() scaler

scaler..fit(X_train)fit(X_train) X_train

X_train ==  scaler  scaler..transform(X_train)transform(X_train) X_test

X_test ==  scaler  scaler..transform(X_test)transform(X_test)

Como foi dito no

Como foi dito no exempexemplo o lo o método induz qual a método induz qual a classe do elemento olhando as classes dosclasse do elemento olhando as classes dos seus vizinhos próximos, então é muito importante definir qual é o numero de vizinhos que se deve seus vizinhos próximos, então é muito importante definir qual é o numero de vizinhos que se deve olhar para conseguir chegar a um número no qual o

olhar para conseguir chegar a um número no qual o erro é minimizado. erro é minimizado. Para isso utilizamos o códigoPara isso utilizamos o código abaixo para ver a média dos erros e usar o K (número de vizinho próximos) que gera menor número abaixo para ver a média dos erros e usar o K (número de vizinho próximos) que gera menor número de erros na base de teste:

de erros na base de teste:

error

error==[][]

for

for ii inin  range  range((11, 40, 40):): knn

knn ==  KNeighborsClassifier(n_neighbors  KNeighborsClassifier(n_neighbors==i)i) knn

knn..fit(X_tfit(X_train, rain, y_train)y_train) pred_i

pred_i == knnknn..predict(X_test)predict(X_test) error

error..append(npappend(np.. mean(pred_i mean(pred_i !=!=  y_test))  y_test)) plt

plt..figure(figsizefigure(figsize==((1212,, 66)))) plt

plt..plot(plot(rangerange((11, 40, 40), er), errorror, , colcoloror==redred, , linlinestyestylele==dasheddashed, mark, markerer==oo,,

 markerfacecolor

 markerfacecolor==blueblue, , marmarkerskersizeize=10=10))

plt

plt..title(title(EErrrro o ddo o KK))

plt

plt..xlabel(xlabel(ValValor or KK))

plt

plt..ylabel(ylabel(MédMédia ia do do errerroo))

Com isso temos o

Com isso temos o seguintseguinte gráfico:e gráfico:

Nele fica bem claro os números que geram os menores erros para o método.

Nele fica bem claro os números que geram os menores erros para o método. Neste caso usaremosNeste caso usaremos 6 como o número de vizinhos próximos, porém poderíamos usar o outro número com tranquilidade. 6 como o número de vizinhos próximos, porém poderíamos usar o outro número com tranquilidade. Com o melhor K

Figura 3.5:

Figura 3.5: Grafico de Erros para K Grafico de Erros para K vizinhos Proximvizinhos Proximosos

classif

classif ==  KNeighborsClassifier(n_neighbors  KNeighborsClassifier(n_neighbors=6=6)) classif

classif..fit(X_tfit(X_train, rain, y_train)y_train) y_pred

y_pred ==  classif  classif..predict(X_test)predict(X_test) classif

classif..score(X_test,y_test)score(X_test,y_test)

Com o modelo apresen

Com o modelo apresentado temos uma precitado temos uma precisão de 75% em nosso grupo de testsão de 75% em nosso grupo de teste. e. Porém,Porém, para validarmos o método precisamos de mais informações e para isso iremos usar uma matriz de para validarmos o método precisamos de mais informações e para isso iremos usar uma matriz de confusã

confusão: o: ela nos permite ver se ela nos permite ver se nosso método está acertandnosso método está acertando bem o bem em todas as em todas as classes de nossoclasses de nosso dataset, por exemplo.

dataset, por exemplo. VVocê pode entender melhor ocê pode entender melhor este topico clicando aquieste topico clicando aqui1515. Além da matriz vamos. Além da matriz vamos

utilizar um reporte de classificação que o sklearn nos oferece: utilizar um reporte de classificação que o sklearn nos oferece:

print

print(confus(confusion_matrion_matrix(y_tesix(y_test, t, y_pred))y_pred))

print

print(classi(classificationfication_report(_report(y_test, y_test, y_pred))y_pred))

Com esses métodos vemos que nosso modelo conseguiu acertar muito bem para os veículos dos Com esses métodos vemos que nosso modelo conseguiu acertar muito bem para os veículos dos Estados Unidos e Europa e

Estados Unidos e Europa e acertando um pouco menos para acertando um pouco menos para veículoveículos do s do Japão.Japão.

No documento Machine learning (páginas 32-34)