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!

1
resposta

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
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans, AgglomerativeClustering
from sklearn.decomposition import PCA

from scipy.cluster.hierarchy import dendrogram, linkage
iris = load_iris()
df = pd.DataFrame(
iris.data,
columns=iris.feature_names
)
df["species"] = iris.target
df["species"] = df["species"].map({
0: "setosa",
1: "versicolor",
2: "virginica"
})

print("Primeiras linhas do dataset:")
print(df.head())

print("\nInformações gerais:")
print(df.info())

print("\nEstatísticas descritivas:")
print(df.describe())
X = df.drop("species", axis=1)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

print("\nDados padronizados com sucesso!")
kmeans = KMeans(
n_clusters=3,
random_state=42,
n_init=10
)

clusters_kmeans = kmeans.fit_predict(X_scaled)

df["Cluster_KMeans"] = clusters_kmeans

print("\nResultado K-Means:")
print(df[["species", "Cluster_KMeans"]].head())
hierarchical = AgglomerativeClustering(
n_clusters=3
)

clusters_hierarchical = hierarchical.fit_predict(X_scaled)

df["Cluster_Hierarchical"] = clusters_hierarchical

print("\nResultado Hierarchical Clustering:")
print(df[["species", "Cluster_Hierarchical"]].head())
pca = PCA(n_components=2)

X_pca = pca.fit_transform(X_scaled)

print("\nVariância explicada pelos componentes principais:")
print(pca.explained_variance_ratio_)

print(
f"\nVariância total explicada: "
f"{sum(pca.explained_variance_ratio_):.2%}"
)
plt.figure(figsize=(8, 6))

plt.scatter(
X_pca[:, 0],
X_pca[:, 1],
c=clusters_kmeans
)

plt.title("K-Means com PCA")
plt.xlabel("Componente Principal 1")
plt.ylabel("Componente Principal 2")

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

plt.scatter(
X_pca[:, 0],
X_pca[:, 1],
c=clusters_hierarchical
)

plt.title("Hierarchical Clustering com PCA")
plt.xlabel("Componente Principal 1")
plt.ylabel("Componente Principal 2")

plt.show()
linked = linkage(
X_scaled,
method="ward"
)

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

dendrogram(linked)

plt.title("Dendrograma - Clusterização Hierárquica")
plt.xlabel("Amostras")
plt.ylabel("Distância")

plt.show()
print("\nDistribuição dos clusters K-Means:")
print(df["Cluster_KMeans"].value_counts())

print("\nDistribuição dos clusters Hierárquicos:")
print(df["Cluster_Hierarchical"].value_counts())

print("\nTabela final:")
print(df.head())
print("\nAnálise concluída com sucesso!")
print(
"Foram aplicadas técnicas de K-Means, "
"Hierarchical Clustering e PCA ao dataset Iris."
)

1 resposta

Primeiras linhas do dataset:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2

species
0 setosa
1 setosa
2 setosa
3 setosa
4 setosa

Informações gerais:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 150 entries, 0 to 149
Data columns (total 5 columns):


0 sepal length (cm) 150 non-null float64
1 sepal width (cm) 150 non-null float64
2 petal length (cm) 150 non-null float64
3 petal width (cm) 150 non-null float64
4 species 150 non-null object
dtypes: float64(4), object(1)
memory usage: 6.0+ KB
None

Estatísticas descritivas:
sepal length (cm) sepal width (cm) petal length (cm)
count 150.000000 150.000000 150.000000
mean 5.843333 3.057333 3.758000
std 0.828066 0.435866 1.765298
min 4.300000 2.000000 1.000000
25% 5.100000 2.800000 1.600000
50% 5.800000 3.000000 4.350000
75% 6.400000 3.300000 5.100000
max 7.900000 4.400000 6.900000

   petal width (cm)  

count 150.000000
mean 1.199333
std 0.762238
min 0.100000
25% 0.300000
50% 1.300000
75% 1.800000
max 2.500000

Dados padronizados com sucesso!

Resultado K-Means:
species Cluster_KMeans
0 setosa 1
1 setosa 1
2 setosa 1
3 setosa 1
4 setosa 1

Resultado Hierarchical Clustering:
species Cluster_Hierarchical
0 setosa 1
1 setosa 1
2 setosa 1
3 setosa 1
4 setosa 1

Variância explicada pelos componentes principais:
[0.72962445 0.22850762]

Variância total explicada: 95.81%

Distribuição dos clusters K-Means:
Cluster_KMeans
0 53
1 50
2 47
Name: count, dtype: int64

Distribuição dos clusters Hierárquicos:
Cluster_Hierarchical
0 71
1 49
2 30
Name: count, dtype: int64

Tabela final:
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
3 4.6 3.1 1.5 0.2
4 5.0 3.6 1.4 0.2

species Cluster_KMeans Cluster_Hierarchical
0 setosa 1 1
1 setosa 1 1
2 setosa 1 1
3 setosa 1 1
4 setosa 1 1

Análise concluída com sucesso!
Foram aplicadas técnicas de K-Means, Hierarchical Clustering e PCA ao dataset Iris.

![](Insira aqui a descrição dessa imagem para ajudar na acessibilidade )
Insira aqui a descrição dessa imagem para ajudar na acessibilidade