DEV Community

Guilherme Rodrigues
Guilherme Rodrigues

Posted on • Updated on

GEAM-Básico, Iris classification

O problema

Nessa semana nós vamos resolver esse problema que é bastante recorrente aos iniciantes em ciência de dados e áreas afins que é o tal do reconhecimento de diferentes tipos de flores (Iris). Esse problema se caracteriza por ser de classificação e supervisionado.
Tipos de Flores
Nós vamos resolver ele utilizando o Orange. Recomendo a leitura desse excelente artigo que mostra os primeiros passos com a ferramenta.

Carregando e Visualizando os dados

Assim como visto no encontro anterior, vamos carregar o dataset referente ao problema e verificar o que esses dados têm a dizer. Ao carregar o dataset (simplesmente arrastando o widget file e selecionando o arquivo) temos acesso à algumas informações relevantes sobre o problema:

Abrindo o arquivo

A própria ferramenta nos mostra que esse dataset contém 150 instâncias (linhas) dos três diferentes tipos de flores.
Além disso, o Orange automaticamente indentificou que temos quatro features numéricas, ou variáveis, e o target (categórico) que é o valor que estamos tentando prever. Outra informação relevante que o Orange nos mostra é que no dataset não há dados faltando, assim não será necessário a tartar os dados faltantes.

Explorando os dados

Utilizando o widget de visuzalização dos dados em tabela, temos uma noção melhor de como são esses dados:
Dados em tabela

Podemos utilizar alguns gráficos no processo de exporação para compreendermos melhor as relações entre esses dados.
Uma forma interessante de visualizar esses dados é utilizando o widget de Scatter Plot (Gráfico de disperção) encontrado na aba Visualize para termos uma noção melhor da distribuição desses dados. Aplicando esse widget, conseguimos observar que ao relacionarmos as features petal length com a petal width, assim como em outras combinações de features, nós encontramos um certo agrupamento:
Scatter Plot
Eu sugiro fortemente você ir testando com outras combinações das features e observar como fica a distribuição dos dados.

Testar e avaliar o modelo

Ao visualizarmos as disperções dos dados, conseguimos observar que dadas as combinações das features, nós temos que os dados similares (mesma categoria de flor), tendem a se concentrarem numa mesma região no espaço da disperção dos dados.
Desse modo, nós podemos utilizar o kNN (k-Nearest Neighbors, ou os k vizinhos mais próximos) que é um algorítimo de classificação simples e bastante utilizado. O kNN é uma técnica não paramétrica, ou seja, ele não vai fazer nemhuma suposição sobre a distribuição dos dados.

De maneira geral, o funcionamento do kNN é relativamente simples, imagine o seguinte cenário:
Funcionamento kNN
Imagem retirada desse artigo.

Imagine que as esferas amarelas representam um tipo de flor A e as roxas um tipo B. A esfera em vermelho representa um novo elemento e você não sabe ao certo se é do tipo A ou B.

Para identificarmos o tipo desse novo elemento, podemos utilizar o kNN e verificar a que grupo ele pertence.
O que o kNN vai fazer é calcular a distância entre o novo objeto e os k objetos mais próximos a ele (vizinhos) dispersos no plano cartesiano. Essa distância é obtida pelo cálculo da Distância Euclidiana (ou outras distâncias: Hamming, Manhattan...) entre os objetos. A variável k representa a quantidade de vizinhos do novo objeto. Após definirmos um certo k (3, por exemplo), o algorítimo irá verficar a distância entre o novo elemento e os três elementos mais próximos para assim obtermos a classe a qual o novo objeto é mais similar.
No exemplo da imagem, se considerarmos o k como três, temos que a esfera vermelha está mais próxima das esferas roxas, sendo assim classificada como pertencente à classe roxa. Porém se aumentarmos o "raio" de abrangência e definirmos k como seis, temos que na verdade esse novo objeto é mais similar à classe amarela. Segundo o autor dos vídeos que eu coloquei no final desse texto, o ideal é utilizarmos o k = Logn para obtermos uma maior precisão. Onde n é o tamanho da base. Ideal k deve ser ímpar.

Aplicando o kNN

kNN widget

Vamos pegar o widget kNN na aba Model e definirmos algumas características para a resolução do nosso problema:

  • Primeiro nós definimos o k, a quantidade de vizinhos:
  • Em seguida definimos a métrica, o tipo de cálculo da distância:
    • Euclidiana que calcula a distância entre dois pontos no plano cartesiano (o que vamos usar).
    • Manhattan, Maximal e Mahalanobis; (você encontra aqui essas métricas)
  • Por fim, o peso (weight) que será usado:
    • Uniform, que aplica um mesmo peso a todos os vizinhos (o que vamos usar);
    • Distance, quanto mais próximo o vizinho, maior sua influência, seu peso;

Em seguida, vamos conectar o resultado da aplicação do kNN com os dados do arquivo usando a feature Test & Score da aba Evaluate.
Vamos escolher a opção Random sampling. Assim, vamos randomicamente dividir os dados em uma amostra de treino e uma de teste dada a proporção definida, por exemplo: 70:30. E acima dessa opção, nós escolhemos a quantas vezes esse processo será repetido.
Ao definirmos essas configurações, temos acesso ao resultado do modelo.
Test & Score widget

Finalizando

  • Experimente alterar o número k de vizinhos para identificar a variação das informações em Test & Score;
  • Em Test & Score você pode alterar a classe que está analisando, por padrão o Orange analisa a média de todas as classes. Se alterar para Iris-setosa verá que teve uma precisão incrível por estar presente em uma região mais restrita.
  • Altere as configurações dos widgets de visualização como o Linear Projection e Scatter Plot para ter uma noção de como os dados estão distribuídos;
  • No final acrescentei o widget ROC Analysis para mostrar graficamente a acurácia do modelo nas diferentes classes;

Resultado final

Resultado final

Referências

Top comments (0)