Para o exercício em questão, resolvi da seguinte forma:
# Importando as Bibliotecas
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from sklearn.cluster import AgglomerativeClustering
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import scipy.cluster.hierarchy as sch
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# Carregando o dataset Iris
iris = load_iris()
X = iris.data
# Normalizando os dados para melhorar a performance do clustering
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# --------- Hierarchical Clustering - HC ----------- #
# ----- Criando o Dendrograma ------- #
dendrogram = sch.dendrogram(sch.linkage(X_scaled, method='ward'))
plt.title('Dendrograma')
plt.xlabel('Amostras')
plt.ylabel('Distância Euclidiana')
plt.show()
# ---- Aplicando Hierarchical Clustering nos 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()
# ------ K-Means Algorithm ---------#
# ------ Aplicando K-Means ---------#
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(X)
# Visualizando 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()
# ------ Reduzindo a Dimensionalidade com PCA ------ #
y = iris.target # Rótulos das espécies de flores
pca = PCA(n_components=2) # Reduzindo para 2 dimensões
X_pca = pca.fit_transform(X_scaled)
# Visualização dos dados reduzidos
plt.figure(figsize=(8, 6))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis', alpha=0.7)
plt.xlabel("Componente Principal 1")
plt.ylabel("Componente Principal 2")
plt.title("Redução de Dimensionalidade com PCA")
plt.colorbar(label="Espécies de Flores")
plt.show()