Treinamento e Implantação de um Modelo de Aprendizado Não Supervisionado com K-means e Flask

Ricardo Baltazar
Juntos Somos Mais
Published in
3 min readApr 2, 2023
Photo by Possessed Photography on Unsplash

Neste artigo, vamos explorar o treinamento de um modelo de aprendizado de máquina não supervisionado usando o algoritmo K-means e, em seguida, expor esse modelo através de uma API Flask. O foco deste artigo é o público que já trabalha com tecnologia, mas não é especialista em aprendizado de máquina.

Aprendizado Não Supervisionado

O aprendizado não supervisionado é um conjunto de técnicas de aprendizado de máquina que analisam e agrupam dados sem um “gabarito” pré-definido. Os algoritmos não supervisionados buscam padrões e estruturas nos dados sem usar rótulos de saída prévios. O objetivo é encontrar agrupamentos naturais, relações ou padrões nos dados.

Algoritmo K-means

O algoritmo K-means é uma técnica popular de aprendizado não supervisionado que se baseia em agrupar os dados em K grupos distintos, onde K é um número pré-definido de clusters. O algoritmo tenta minimizar a soma das distâncias entre os pontos de dados e os centroides dos clusters, ajustando iterativamente a posição dos centroides até que os clusters se estabilizem.

Conjunto de Dados Iris

O conjunto de dados Iris é um conjunto de dados popular que consiste em 150 amostras de flores de íris de três espécies diferentes: Iris setosa, Iris versicolor e Iris virginica. Cada amostra contém quatro características (comprimento e largura das sépalas e pétalas). Nosso objetivo é usar o algoritmo K-means para agrupar as amostras em três clusters, correspondendo às três espécies de íris.

Treinamento do Modelo K-means

Vamos começar treinando nosso modelo K-means no conjunto de dados Iris. Usaremos a biblioteca scikit-learn em Python para treinar o modelo. Primeiro, carregamos o conjunto de dados Iris, criamos um DataFrame e treinamos o modelo K-means com K=3.

# Importar bibliotecas necessárias
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris

# Carregar o conjunto de dados Iris
iris = load_iris()
data = iris.data
target = iris.target

# Criar um DataFrame com os dados e as colunas
iris_df = pd.DataFrame(data, columns=iris.feature_names)

# Treinar o modelo K-means com K=3
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(iris_df)

Exportando o Modelo Treinado

Para salvar e carregar o modelo treinado, usaremos a biblioteca joblib. Primeiro, salvamos o modelo treinado em um arquivo.

import joblib

# Salvar o modelo treinado em um arquivo
joblib.dump(kmeans, 'kmeans_model.joblib')

Criando uma API Flask

Agora que treinamos e salvamos nosso modelo, podemos criar uma API Flask para expor o modelo e fazer previsões.

from flask import Flask, request, jsonify
import numpy as np
import joblib

app = Flask(__name__)

# Carregar o modelo treinado
kmeans = joblib.load('kmeans_model.joblib')

@app.route('/predict', methods=['POST'])
def predict():
input_data = request.json
features = [input_data['sepal_length'], input_data['sepal_width'], input_data['petal_length'], input_data['petal_width']]
features = np.array(features).reshape(1, -1)
cluster = kmeans.predict(features)
return jsonify({'cluster': int(cluster[0])})

if name == 'main':
app.run(debug=True)

Em seguida, iniciamos o servidor Flask executando o arquivo app.py.

python app.py

Agora, a API está disponível em `http://localhost:5000/predict`. Podemos fazer solicitações POST para essa URL com um JSON contendo os valores das características do Iris (comprimento e largura das sépalas e pétalas) e obter o cluster previsto como resposta.

Exemplo de requisição POST usando o curl no Linux

Aqui está um exemplo de como fazer uma solicitação POST para a API usando o comando curl.

curl -X POST -H "Content-Type: application/json" -d '{"sepal_length": 5.1, "sepal_width": 3.5, "petal_length": 1.4, "petal_width": 0.2}' http://localhost:5000/predict

Este comando envia uma solicitação POST para a API com o cabeçalho Content-Type: application/json e os dados no formato JSON.

Conclusão

Neste artigo, exploramos o treinamento e a implantação de um modelo de aprendizado não supervisionado usando o algoritmo K-means e o conjunto de dados Iris. Demonstramos como treinar o modelo, exportá-lo e criar uma API Flask para expor o modelo e fazer previsões.

--

--