Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

0
respostas

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

K-Means

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

iris = load_iris()

# Criação do DataFrame para facilitar a análise
df = pd.DataFrame( iris.data,  columns=iris.feature_names)
display(df)

X = df[["petal length (cm)", "petal width (cm)"]]

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

# Adiciona o cluster encontrado ao DataFrame
df["Cluster"] = clusters
display(df)

# Coordenadas dos centróides
centroides = kmeans.cluster_centers_

plt.figure(figsize=(8, 6))

plt.scatter(
    X["petal length (cm)"],
    X["petal width (cm)"],
    c=clusters,
    cmap="viridis",
    s=60,
    alpha=0.8,
    label="Flores"
)

# Desenha os centróides
plt.scatter(
    centroides[:, 0],
    centroides[:, 1],
    marker="X",
    s=250,
    color="red",
    label="Centróides"
)

plt.title("Clusterização do Dataset Iris com K-Means")
plt.xlabel("Comprimento da Pétala (cm)")
plt.ylabel("Largura da Pétala (cm)")
plt.legend()
plt.grid(True)
plt.show()

print(df["Cluster"].value_counts().sort_index())

Agrupamento HIerarquico

rom sklearn.datasets import load_iris
import scipy.cluster.hierarchy as sch
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler

# Carregar o dataset Iris
iris = load_iris()
X = iris.data

# Normalizar os dados para melhorar a performance do clustering
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# Criar o dendrograma
plt.figure(figsize=(10, 5))
sch.dendrogram(sch.linkage(X_scaled, method='ward'))
plt.title("Dendrograma do Agrupamento Hierárquico")
plt.xlabel("Amostras")
plt.ylabel("Distância Euclidiana")
plt.show()
from sklearn.cluster import AgglomerativeClustering

# Aplicar Hierarchical Clustering definindo 3 grupos
hc = AgglomerativeClustering(n_clusters=3, metric='euclidean', linkage='ward')
clusters = hc.fit_predict(X_scaled)

# Visualizar os clusters
plt.scatter(X[:, 0], X[:, 1], c=clusters, cmap='viridis')
plt.title("Agrupamento com Hierarchical Clustering")
plt.xlabel("Característica 1")
plt.ylabel("Característica 2")
plt.show()

PCA

from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# Carregar dados
iris = load_iris()
X = iris.data

# Padronizar
X_scaled = StandardScaler().fit_transform(X)

# Reduzir de 4 para 2 dimensões
X_pca = PCA(n_components=2).fit_transform(X_scaled)

# Aplicar K-Means nos dados reduzidos
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(X_pca)

# Visualizar clusters
plt.figure(figsize=(8,5))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=clusters)
plt.scatter(
    kmeans.cluster_centers_[:, 0],
    kmeans.cluster_centers_[:, 1],
    marker='X',
    s=200
)
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.title("K-Means após PCA")
plt.show()