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).
Visão unidimensional: cada feature individualmente. Note que nem o tamanho sozinho nem o brilho sozinho separa perfeitamente as espécies.
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.
| 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 |
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) 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
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.
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()
-
Fisher, R. A. (1936). Iris. UCI Machine Learning Repository. ↩
-
Duda, R. O., Hart, P. E., & Stork, D. G. (2000). Pattern Classification, 2ª Edição. Wiley. ↩
