1
resposta

from sklearn.datasets import load_iris
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

Carregar Dataset

iris = load_iris()
X = iris.data

Aplicar K-Means

kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(X)

Visualizar os clusters

plt.scatter(X[:, 0], X[:, 1], c=clusters, cmap='viridis')
plt.title("Agrupamento com K-Means")
plt.xlabel("Característica 1")
plt.ylabel("Característica 2")
plt.show()

1 resposta

Olá, Ronaldo. Como vai?

Sua implementação do algoritmo K-Means no dataset Iris está correta e segue muito bem o fluxo do aprendizado não supervisionado. Este tipo de abordagem é fundamental quando queremos que o modelo identifique agrupamentos naturais nos dados sem a necessidade de rótulos prévios.

Para complementar sua atividade e tornar sua análise técnica ainda mais profunda, deixo algumas sugestões práticas:

  • Visualização dos Centroides: No seu gráfico, você plotou a distribuição dos pontos. Uma boa prática é plotar também os centroides finais de cada cluster (usando kmeans.cluster_centers_), o que ajuda a visualizar o "centro" de cada categoria identificada.
  • Método do Cotovelo (Elbow Method): No dataset Iris, já sabemos que existem 3 classes, mas em problemas reais essa informação é desconhecida. Utilizar a métrica de Inércia para criar um gráfico de cotovelo ajuda a justificar tecnicamente a escolha do número de clusters.
  • Padronização: O K-Means baseia-se em distâncias euclidianas. Em outros datasets onde as escalas das colunas são muito diferentes, é recomendável aplicar um StandardScaler antes do treinamento para evitar que uma variável influencie o modelo mais do que as outras.

Veja como você poderia implementar o teste para validar a quantidade de clusters:

wcss = []
for i in range(1, 11):
    kmeans_teste = KMeans(n_clusters=i, random_state=42)
    kmeans_teste.fit(X)
    wcss.append(kmeans_teste.inertia_)

plt.plot(range(1, 11), wcss)
plt.title('Método do Cotovelo')
plt.xlabel('Número de Clusters')
plt.ylabel('Inércia')
plt.show()

Espero que possa ter lhe ajudado!