Ir para o conteúdo

Distributions

Distribuições de Dados e Visualização

Antes de construir qualquer modelo, você deve entender seus dados visualmente. A distribuição das features informa qual pré-processamento é necessário, quais problemas esperar e se os dados podem suportar uma determinada tarefa.


Por que a Distribuição Importa

O mesmo algoritmo aplicado à mesma tarefa pode falhar ou ter sucesso dependendo da distribuição dos dados. Um classificador linear funciona perfeitamente em dados linearmente separáveis, mas não consegue aprender XOR. A normalização é crítica para aprendizado baseado em gradiente, mas irrelevante para árvores de decisão.


O Problema do Salmão vs Robalo

Um dataset introdutório clássico: classificar peixes em uma esteira como "salmão" ou "robalo" com base em dois sensores — tamanho (cm) e brilho (0–10).

\[ \mathbf{x} = \begin{bmatrix} x_1 \text{ (tamanho)} \\ x_2 \text{ (brilho)} \end{bmatrix} \longrightarrow f(\mathbf{x}) \in \{\text{salmão}, \text{robalo}\} \]
2026-05-16T22:19:09.576149 image/svg+xml Matplotlib v3.10.9, https://matplotlib.org/

Visão unidimensional: cada feature individualmente. Note que nem o tamanho sozinho nem o brilho sozinho separa perfeitamente as espécies.

2026-05-16T22:19:09.628271 image/svg+xml Matplotlib v3.10.9, https://matplotlib.org/

Visão bidimensional: combinar ambas as features permite que uma fronteira de decisão linear separe a maioria das amostras.

Lição

Mais features = espaço de features mais rico = maior potencial de separação. Mas adicionar features irrelevantes pode prejudicar. A seleção de features importa.


O Dataset Iris

UCI Machine Learning Repository: introduzido por Ronald A. Fisher em 1936, este dataset de 150 amostras de três espécies de Íris é um benchmark fundamental de AM.

Partes da flor Iris

Feature Unidade Intervalo
Comprimento da sépala cm 4,3–7,9
Largura da sépala cm 2,0–4,4
Comprimento da pétala cm 1,0–6,9
Largura da pétala cm 0,1–2,5

Editor (session: default) Run
import pandas as pd
from sklearn.datasets import load_iris

# Carregar o conjunto de dados Iris
iris = load_iris()

# Transforma em DataFrame
df = pd.DataFrame(
    data=iris.data,
    columns=['sepal_l', 'sepal_w', 'petal_l', 'petal_w']
)
df['class'] = iris.target_names[iris.target]

# Imprime os dados
print(df)
Output Clear

2026-05-16T22:19:11.190210 image/svg+xml Matplotlib v3.10.9, https://matplotlib.org/

Pairplot do dataset Iris. Note: comprimento da pétala vs. largura da pétala separa claramente as três espécies. Comprimento da sépala vs. largura da sépala mostra sobreposição — nem todos os pares de features são igualmente discriminativos.


Formas Comuns de Distribuição

2026-05-16T22:19:11.607721 image/svg+xml Matplotlib v3.10.9, https://matplotlib.org/

Quatro distribuições 2D comuns de dados. A fronteira de decisão que um modelo precisa aprender depende inteiramente de como os dados estão distribuídos.

Distribuição Características Modelos adequados
Linear Classes separadas por um hiperplano Regressão Logística, SVM Linear, Perceptron
Circular / radial Estrutura concêntrica não-linear SVM com RBF, Redes Neurais, KNN
Clusters Grupos em múltiplas localizações GMM, Redes Neurais, CNN
Espiral / complexa Altamente não-linear Redes Neurais Profundas, SVM com kernel

Interativo: Explore uma Distribuição

Ajuste os parâmetros abaixo para ver como diferentes distribuições gaussianas se parecem e se sobrepõem.

Classe A (azul)
Média X:
Média Y:
Desvio:
Classe B (laranja)
Média X:
Média Y:
Desvio:

Técnicas Principais de Visualização

Técnica Melhor para Biblioteca
Scatter plot Relações de features 2D matplotlib, seaborn
Pairplot Todos os pares de features de uma vez seaborn.pairplot
Histograma Distribuição de uma feature matplotlib.hist
Box plot Distribuição + outliers seaborn.boxplot
Heatmap (correlação) Correlações entre features seaborn.heatmap
t-SNE / UMAP Dados de alta dimensão em 2D sklearn, umap-learn
Violin plot Distribuição por classe seaborn.violinplot
import seaborn as sns
import matplotlib.pyplot as plt

# Heatmap de correlação
corr = df.corr()
sns.heatmap(corr, annot=True, cmap='coolwarm', center=0)
plt.title('Matriz de Correlação de Features')
plt.show()

# t-SNE para dados de alta dimensão
from sklearn.manifold import TSNE
X_2d = TSNE(n_components=2, random_state=42).fit_transform(X_scaled)
plt.scatter(X_2d[:,0], X_2d[:,1], c=y, cmap='tab10')
plt.title('Visualização t-SNE')
plt.show()

  1. Fisher, R. A. (1936). Iris. UCI Machine Learning Repository. 

  2. Duda, R. O., Hart, P. E., & Stork, D. G. (2000). Pattern Classification, 2ª Edição. Wiley.