Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Faça como eu fiz: aplicando técnicas de aprendizado não supervisionado

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

# Carregando o dataset Iris
iris = load_iris()

# Criando um DataFrame
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['target'] = iris.target

print(df.head())

Neste primeiro momento, o dataset Iris foi carregado a partir da biblioteca sklearn.datasets e convertido em um DataFrame do Pandas, facilitando a visualização e a manipulação dos dados.
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

from sklearn.cluster import KMeans

# Selecionando apenas as features
X = iris.data

# Aplicando K-Means com 3 clusters
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans_labels = kmeans.fit_predict(X)

# Adicionando os clusters ao DataFrame
df['kmeans_cluster'] = kmeans_labels

print(df[['kmeans_cluster']].head())

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Foi aplicado o algoritmo K-Means com 3 clusters, buscando identificar agrupamentos naturais entre as amostras do dataset. O número 3 foi utilizado por sabermos que o Iris possui três grupos principais de flores, o que também ajuda na comparação dos resultados.

from sklearn.cluster import AgglomerativeClustering

# Aplicando agrupamento hierárquico
hierarchical = AgglomerativeClustering(n_clusters=3)
hierarchical_labels = hierarchical.fit_predict(X)

# Adicionando os clusters ao DataFrame
df['hierarchical_cluster'] = hierarchical_labels

print(df[['hierarchical_cluster']].head())

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Nesta etapa, foi utilizado o Hierarchical Clustering, por meio da abordagem aglomerativa. Esse método começa tratando cada ponto como um grupo isolado e vai unindo os mais próximos até formar os clusters finais.

from sklearn.decomposition import PCA

# Reduzindo para 2 dimensões
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

# Criando DataFrame com os componentes principais
df_pca = pd.DataFrame(X_pca, columns=['PC1', 'PC2'])
df_pca['kmeans_cluster'] = kmeans_labels
df_pca['hierarchical_cluster'] = hierarchical_labels
df_pca['target'] = iris.target

print(df_pca.head())

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Aqui foi aplicado o PCA para reduzir as 4 variáveis originais do Iris para apenas 2 componentes principais. Isso permite visualizar os dados em duas dimensões, preservando a maior parte possível da variabilidade presente no conjunto original.

plt.figure(figsize=(8, 5))
plt.scatter(df_pca['PC1'], df_pca['PC2'], c=df_pca['kmeans_cluster'])
plt.title('Clusters encontrados pelo K-Means')
plt.xlabel('Componente Principal 1')
plt.ylabel('Componente Principal 2')
plt.show()

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

plt.figure(figsize=(8, 5))
plt.scatter(df_pca['PC1'], df_pca['PC2'], c=df_pca['hierarchical_cluster'])
plt.title('Clusters encontrados pelo Hierarchical Clustering')
plt.xlabel('Componente Principal 1')
plt.ylabel('Componente Principal 2')
plt.show()

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Com os dados projetados em duas dimensões pelo PCA, foi possível visualizar os agrupamentos encontrados por cada algoritmo e observar como as amostras se organizam no espaço.

Com essa prática, foi possível observar como o aprendizado não supervisionado permite identificar padrões e agrupamentos naturais em um conjunto de dados, mesmo sem o uso de rótulos durante o treinamento. O K-Means e o Hierarchical Clustering mostraram maneiras diferentes de organizar os dados em grupos, enquanto o PCA ajudou a reduzir a dimensionalidade e tornar essa estrutura mais visível.

Dessa forma, a atividade demonstra como técnicas de agrupamento e redução de dimensionalidade podem ser utilizadas em conjunto para explorar melhor os dados, identificar relações entre amostras e apoiar análises mais claras e interpretáveis.

Eu pensei em colocar o código completo aqui, porém excedeu o limite de caracteres, porém é possível coletar o código bloco a bloco.

Respeitosamente.

2 respostas
solução!

Oii, Leandro.

Parabéns pela excelente estruturação do seu projeto! É muito gratificante ver como você conseguiu unir a teoria dos algoritmos de aprendizado não supervisionado com a prática de programação. Sua abordagem de carregar o dataset, aplicar diferentes métodos de agrupamento e, por fim, utilizar a redução de dimensionalidade para visualizar os resultados é o fluxo de trabalho ideal em Ciência de Dados.

Observações sobre os seus resultados

Ao comparar os dois gráficos de dispersão que você gerou, note que:

  1. Consistência: Provavelmente, um dos grupos (a espécie Setosa) apareceu bem isolado dos outros dois em ambos os algoritmos, pois ela possui características físicas muito distintas.
  2. Sobreposição: As outras duas espécies (Versicolor e Virginica) costumam apresentar uma leve sobreposição. É interessante observar como o K-Means e o Hierarchical Clustering decidiram a "fronteira" entre esses dois grupos.
  3. Importância da escala: No código do instrutor, foi utilizado o StandardScaler. No seu código, você aplicou o PCA diretamente no X original. Uma dica valiosa é que o PCA é sensível à escala dos dados. Se uma característica tiver valores muito maiores que outra, ela pode dominar o componente principal injustamente. Experimente aplicar a normalização antes do PCA para ver se a separação visual nos gráficos melhora.

Seu registro está muito organizado e demonstra um domínio claro das etapas de transformação de dados. Continue explorando essas fronteiras!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Obrigado pelo feedback Lorena Garcia, na próxima tomo o cuidado de utilizar esse StandardScaler, não me atentei a esse detalhe, confesso que sou novato em Python, sou nativo JAVA, mas estou gostando! sobre a organização é um vicio que tenho, respeitosamente obrigado mais uma vez.