Este documento explora funções essenciais do scikit-learn para geração de dados, pré-processamento, validação cruzada e implementação de árvores de decisão, com exemplos práticos.
Geração de Datasets para Classificação
A função make_blobs permite criar conjuntos de dados sintéticos para tarefas de agrupamento e classificação. O exemplo abaixo gera 150 amostras com 3 centros distintos e 2 características.
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
features, targets = make_blobs(n_samples=150, centers=3, n_features=2, random_state=17, cluster_std=1.2)
plt.scatter(features[:, 0], features[:, 1], c=targets, cmap='viridis', edgecolor='k')
plt.xlabel('Característica 1')
plt.ylabel('Característica 2')
plt.show()
É possível ajustar parâmetros como random_state para garantir a reprodutibilidade e cluster_std para controlar a dispersão dos clusters.
Escala e Normalização de Dados
O MinMaxScaler transforma as características para um entervalo específico, como (0, 1). O MaxAbsScaler escala os dados pelo seu valor máximo absoluto, resultando em valores no intervalo [-1, 1].
from sklearn.preprocessing import MinMaxScaler, MaxAbsScaler, normalize
import numpy as np
# Escala usando MinMaxScaler
scaler = MinMaxScaler(feature_range=(-2, 2))
data_scaled = scaler.fit_transform(np.array([[20, 2], [30, 4], [40, 6]]))
# Normalização L2 (vetor unitário)
samples = [[3, 4], [1, 2], [5, 0]]
normalized_data, norms = normalize(samples, norm='l2', return_norm=True)
Para dados com outliers, o RobustScaler utiliza mediana e intervalo interquartil, tornando-o mais resistente a valores extremos.
Validação Cruzada para Avaliação de Modelos
Os dados são particionados em conjuntos de treino e teste usando train_test_split. É crucial garantir a aleatoriedade para evitar viés.
from sklearn.model_selection import train_test_split, cross_val_score, cross_validate
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
import numpy as np
boston = load_boston()
X, y = boston.data, boston.target
# Embaralhamento dos índices para uma divisão aleatória
idx = np.random.permutation(len(y))
X_shuffled, y_shuffled = X[idx], y[idx]
# Divisão treino/teste
X_train, X_test, y_train, y_test = train_test_split(X_shuffled, y_shuffled, test_size=0.25)
# Validação cruzada com 10 folds
model = LinearRegression()
scores = cross_val_score(model, X_shuffled, y_shuffled, cv=10, scoring='neg_mean_squared_error')
# Validação cruzada com múltiplas métricas
metrics = ['r2', 'neg_mean_absolute_error']
detailed_scores = cross_validate(model, X_shuffled, y_shuffled, cv=10, scoring=metrics)
Outras abordagens incluem K-Fold estratificado (para preservar a proporção de classes) e Leave-One-Out para datasets muito pequenos.
Classificação com Árvores de Decisão
O DecisionTreeClassifier é um modelo poderoso para tarefas de classificação. A parametrização adequada é essencial para evitar overfitting.
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.datasets import load_iris
import seaborn as sns
import matplotlib.pyplot as plt
iris = load_iris()
X_iris, y_iris = iris.data, iris.target
# Divisão e treino
X_tr, X_te, y_tr, y_te = train_test_split(X_iris, y_iris, test_size=0.3, stratify=y_iris, random_state=42)
clf = DecisionTreeClassifier(criterion='entropy', max_depth=4, min_samples_leaf=5)
clf.fit(X_tr, y_tr)
# Avaliação
predictions = clf.predict(X_te)
print(classification_report(y_te, predictions))
# Matriz de confusão
cm = confusion_matrix(y_te, predictions, labels=clf.classes_)
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=iris.target_names, yticklabels=iris.target_names)
plt.xlabel('Previsto')
plt.ylabel('Verdadeiro')
plt.show()
# Exportar a árvore para visualização (requer Graphviz)
export_graphviz(clf, out_file='arvore.dot', feature_names=iris.feature_names, class_names=iris.target_names, filled=True, rounded=True)
A importância das características pode ser acessada via clf.feature_importances_, ajudando na interpretação do modelo.