Agora que entendi os conceitos de clustering e redução de dimensionalidade, apliquei na prática usando o dataset Iris.
No aprendizado não supervisionado, buscamos responder duas questões principais: como encontrar padrões naturais nos dados e como simplificar esses dados sem perder informações importantes.
Para isso, utilizei três técnicas: K-Means, Hierarchical Clustering e PCA.
No K-Means, os dados foram divididos em 3 grupos, onde o algoritmo organiza os pontos com base na semelhança entre eles, formando clusters automaticamente.
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
dados = load_iris()
X = dados.data
modelo_kmeans = KMeans(n_clusters=3, random_state=0, n_init=10)
labels = modelo_kmeans.fit_predict(X)
plt.figure()
plt.scatter(X[:, 2], X[:, 3], c=labels)
plt.title("Clusters gerados pelo K-Means")
plt.xlabel("Pétala comprimento")
plt.ylabel("Pétala largura")
plt.show()
No Hierarchical Clustering, foi gerado um dendrograma que mostra como os dados vão se agrupando aos poucos. Esse gráfico ajuda a entender melhor a estrutura dos dados e a definir o número ideal de clusters, observando onde faz sentido “cortar” a árvore.
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from scipy.cluster.hierarchy import linkage, dendrogram
import matplotlib.pyplot as plt
dados = load_iris()
X = dados.data
X_norm = StandardScaler().fit_transform(X)
plt.figure(figsize=(8,4))
dendrogram(linkage(X_norm, method='complete'))
plt.title("Agrupamento Hierárquico - Dendrograma")
plt.xlabel("Amostras")
plt.ylabel("Distância")
plt.show()
Já com o PCA, reduzi as 4 variáveis do dataset para 2 componentes principais, o que facilitou a visualização dos dados em um gráfico 2D, mantendo a maior parte das informações originais.
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
dados = load_iris()
X = dados.data
y = dados.target
X_padronizado = StandardScaler().fit_transform(X)
pca = PCA(n_components=2)
componentes = pca.fit_transform(X_padronizado)
plt.figure()
plt.scatter(componentes[:, 0], componentes[:, 1], c=y)
plt.title("PCA - Redução de Dimensão")
plt.xlabel("Componente 1")
plt.ylabel("Componente 2")
plt.show()
Com essas técnicas, foi possível identificar padrões escondidos, agrupar dados semelhantes e simplificar a análise visual do conjunto de dados.
Em resumo, o clustering ajuda a encontrar grupos naturais nos dados, enquanto o PCA ajuda a reduzir a complexidade sem perder informações importantes, tornando a análise mais eficiente e clara.