Um micro projeto de machine learning

Card com fundo claro e barra roxa no topo. Texto central diz “Drop semanal de dados: Um micro projeto de machine learning” em fonte pixelada roxa e preta. No canto inferior direito aparece o logotipo circular da Cumbuca Dev em tons de roxo e lilás.

|

3–4 minutos

Quando pensamos em machine learning pode ser que para muitos isto envolva sistemas extremamente complexos escritos em uma mistura de linguagem de programação e matemática. Bom, se formos entender a fundo a lógica por trás dos algoritmos de IA, talvez seja realmente bastante complexo (pelo menos para mim, que entendo apenas o básico da matemática).Porém, se quisermos criar um projeto simples de machine learning, isto não requer mais do que algumas poucas linhas de código.

É importante ser honesto e deixar claro que este é um projeto introdutório, totalmente distante do mundo real onde os dados costumam ser muito mais complexos e caóticos. Porém, utilizando a linguagem Python e a biblioteca Scikit Learn, podemos criar um modelo de machine learning capaz de realizar a classificação de três diferentes tipos de flor Íris. Para isto, vamos utilizar um dataset criado por Ronald Fisher que em 1936 realizou a medição das estruturas de diversos exemplares destas flores, classificando-as entre as espécies setosa, versicolor e virginiana. Para treinar um modelo capaz de classificar qual a espécie de cada flor Íris será utilizada a técnica de KNN (K-Nearest Neighbor).

Para este micro projeto, vamos assumir que o leitor já possua uma instalação do Python e um ambiente de desenvolvimento configurado. Vamos utilizar apenas três bibliotecas: Numpy, Matplotlib e SciKit Learn (vamos apresentar o projeto em um Jupyter Notebook, mas a sua instalação é opcional). Após executarmos a instalação das bibliotecas vamos importar algumas funções que usaremos em nosso algoritmo.

Captura de tela de um notebook Python mostrando um bloco de código com imports das bibliotecas NumPy, Matplotlib e Scikit-learn. O código importa ferramentas para manipulação de dados, visualização gráfica e classificação usando K-Nearest Neighbors.

Agora devemos realizar o download do dataset Íris e a divisão das medidas da estrutura das flores (X) e da classificação da espécie de cada flor (Y). Além disso, vamos separar 80% do dataset para realizar o treino e 20% para realizar o teste do modelo. Utilizando o parâmetro test_size na função train_test_split, podemos inserir um valor de 0.0 à 1.0 para indicar a porcentagem do dataset que será dedicada ao teste, finalizando a divisão no nosso dataset em quatro variáveis. A partir do momento que o dataset é lido e está em memória passamos a chamá-lo de dataframe.

Captura de tela de um notebook Python mostrando código que carrega o dataset Iris usando Scikit-learn e divide os dados em conjuntos de treino e teste usando a função train_test_split, com separação de 20% para teste.

Podemos visualizar os valores no dataframe original a seguir.

Agora vamos realizar o treinamento do nosso modelo.

Tabela com cinco colunas: comprimento da sépala (cm), largura da sépala (cm), comprimento da pétala (cm), largura da pétala (cm) e coluna de classe alvo. As linhas mostram valores numéricos de medições de flores, com exemplos de comprimentos de sépala entre aproximadamente 4,8 e 6,4 cm e classes alvo representadas por números como 0, 1 e 2.

Sim, apenas com estas poucas linhas de código nós já possuímos um modelo de machine learning treinado. Utilizando a função score podemos verificar a acurácia média do modelo que foi de 96% (vou falar sobre isto na conclusão do artigo).

Para entendermos um pouco mais sobre o dataframe com o qual nós estamos trabalhando, podemos gerar dois gráficos. No primeiro é mostrada a divisão dos de cada tipo de flor pelo tamanho da sépala, no segundo é mostrada a divisão pelo tamanho da pétala.

Gráfico de classificação mostrando três regiões coloridas que representam classes diferentes em um modelo de machine learning. O eixo horizontal e vertical representam medidas de partes da flor (sépala). As áreas são divididas em blocos de cores diferentes (amarelo, azul claro e verde), indicando como o modelo separa visualmente as três classes ao usar o algoritmo K-Nearest Neighbors com k igual a 15.
Gráfico de classificação com três regiões coloridas representando classes diferentes em um modelo de machine learning baseado em medidas de pétala. O gráfico mostra áreas contínuas em três cores distintas (amarelo, azul claro e verde), indicando como o algoritmo K-Nearest Neighbors, com k igual a 15 e ponderação por distância, separa visualmente as três classes no espaço de características das pétalas. Os eixos representam medidas numéricas relacionadas às pétalas das flores.

Este artigo foi pensado com dois objetivos principais. O primeiro era demonstrar que algumas técnicas de machine learning são simples e podem ser executadas com poucas linhas de código. A segunda era demonstrar que, em alguns raros casos, um simples modelo de machine learning é o suficiente para criarmos um modelo extremamente eficiente. Este modelo possui 96% de acurácia média e parece ser uma solução mais que suficiente para identificar este tipo de flor. Obviamente que existem outras questões a serem verificadas, como a dificuldade de se ter um dataset organizado como este no mundo real e a possibilidade do modelo estar viciado. Porém, o ponto é que, às vezes, uma técnica simples de IA é mais que o suficiente para criar uma solução eficiente. Então, por que não começarmos pelo simples?

Para escrever este artigo eu me baseei na minha própria palestra realizada para o PET Matemática da UFSC e o código utilizado está disponível no meu Github.


Deixe um comentário

Assinar

Digite seu e-mail abaixo e fique por dentro das nossas novidades e atualizações!