Seleção de Modelos: Escolhendo Estimadores e seus Parâmetros

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Em aprendizagem de máquina, a seleção de modelos é o processo de escolha do melhor modelo para um conjunto de dados específico. Envolve a seleção do estimador apropriado e a afinação dos seus parâmetros para alcançar um desempenho ótimo. Este tutorial irá guiá-lo através do processo de seleção de modelos no scikit-learn.

Dicas da Máquina Virtual

Após o arranque da máquina virtual, clique no canto superior esquerdo para mudar para a aba Notebook para aceder ao Jupyter Notebook para praticar.

Por vezes, pode ser necessário esperar alguns segundos para o Jupyter Notebook terminar de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se tiver problemas durante a aprendizagem, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos prontamente o problema para si.

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 87%. Recebeu uma taxa de avaliações positivas de 88% dos estudantes.

Pontuação e Pontuações Validadas Cruzadamente

Os estimadores no scikit-learn expõem um método score que pode ser usado para avaliar a qualidade do ajuste do modelo ou a previsão em novos dados. Este método retorna uma pontuação, onde um valor mais alto indica um melhor desempenho.

from sklearn import datasets, svm

## Carregar o conjunto de dados dígitos
X_digits, y_digits = datasets.load_digits(return_X_y=True)

## Criar um classificador SVM com núcleo linear
svc = svm.SVC(C=1, kernel='linear')

## Ajustar o classificador nos dados de treino e calcular a pontuação nos dados de teste
score = svc.fit(X_digits[:-100], y_digits[:-100]).score(X_digits[-100:], y_digits[-100:])

Para obter uma melhor medida da precisão da previsão, podemos usar a validação cruzada. A validação cruzada envolve dividir os dados em múltiplos folds, usando cada fold como conjunto de teste e os folds restantes como conjuntos de treino. Este processo é repetido várias vezes, e as pontuações são médias para obter o desempenho geral.

import numpy as np

## Dividir os dados em 3 folds
X_folds = np.array_split(X_digits, 3)
y_folds = np.array_split(y_digits, 3)

## Executar validação cruzada
scores = []
for k in range(3):
    X_train = list(X_folds)
    X_test = X_train.pop(k)
    X_train = np.concatenate(X_train)
    y_train = list(y_folds)
    y_test = y_train.pop(k)
    y_train = np.concatenate(y_train)
    scores.append(svc.fit(X_train, y_train).score(X_test, y_test))

print(scores)

Geradores de Validação Cruzada

O scikit-learn fornece uma coleção de classes que podem ser usadas para gerar índices de treino/teste para estratégias populares de validação cruzada. Estas classes têm um método split que aceita o conjunto de dados de entrada e gera os índices de conjunto de treino/teste para cada iteração do processo de validação cruzada.

from sklearn.model_selection import KFold

## Dividir os dados em K folds usando a validação cruzada KFold
k_fold = KFold(n_splits=5)
for train_indices, test_indices in k_fold.split(X_digits):
    print(f'Treino: {train_indices} | teste: {test_indices}')

A função auxiliar cross_val_score pode ser usada para calcular a pontuação de validação cruzada diretamente. Ela divide os dados em conjuntos de treino e teste para cada iteração da validação cruzada, treina o estimador no conjunto de treino e calcula a pontuação com base no conjunto de teste.

from sklearn.model_selection import cross_val_score

## Calcular a pontuação de validação cruzada para o classificador SVM
scores = cross_val_score(svc, X_digits, y_digits, cv=k_fold, n_jobs=-1)
print(scores)

Busca em Grade

A busca em grade é uma técnica que pode ser usada para encontrar a melhor combinação de valores de parâmetros para um estimador. Envolve especificar uma grade de valores de parâmetros, ajustar o estimador nos dados de treino para cada combinação de parâmetros e selecionar os parâmetros que resultam na maior pontuação de validação cruzada.

from sklearn.model_selection import GridSearchCV

## Define uma grade de valores de parâmetros
Cs = np.logspace(-6, -1, 10)

## Cria um objeto GridSearchCV com o classificador SVM e a grade de parâmetros
clf = GridSearchCV(estimator=svc, param_grid=dict(C=Cs), n_jobs=-1)

## Ajusta o objeto GridSearchCV nos dados de treino
clf.fit(X_digits[:1000], y_digits[:1000])

print(clf.best_score_)
print(clf.best_estimator_.C)

Estimadores Validados Cruzadamente

Alguns estimadores no scikit-learn possuem capacidades de validação cruzada incorporadas. Estes estimadores validados cruzadamente selecionam automaticamente seus parâmetros por meio de validação cruzada, tornando o processo de seleção do modelo mais eficiente.

from sklearn import linear_model, datasets

## Cria um objeto LassoCV
lasso = linear_model.LassoCV()

## Carrega o conjunto de dados de diabetes
X_diabetes, y_diabetes = datasets.load_diabetes(return_X_y=True)

## Ajusta o objeto LassoCV no conjunto de dados
lasso.fit(X_diabetes, y_diabetes)

print(lasso.alpha_)

Resumo

Neste tutorial, aprendemos sobre o processo de seleção de modelos no scikit-learn. Exploramos métodos de pontuação, validação cruzada, busca em grade e estimadores validados cruzadamente. Seguindo essas etapas, você pode escolher o melhor estimador para um conjunto de dados específico e ajustar seus parâmetros para alcançar o desempenho ideal.