Imputação de Valores Ausentes

Beginner

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

Introdução

Muitos conjuntos de dados do mundo real contêm valores ausentes, o que pode causar problemas ao usar algoritmos de aprendizado de máquina que assumem dados completos e numéricos. Nesses casos, é importante lidar adequadamente com os valores ausentes para aproveitar ao máximo os dados disponíveis. Uma estratégia comum é a imputação, que envolve preencher os valores ausentes com base na parte conhecida dos dados.

Neste tutorial, exploraremos diferentes estratégias para imputar valores ausentes usando o scikit-learn, uma popular biblioteca de aprendizado de máquina em Python.

Dicas da Máquina Virtual

Após o término da inicialização da máquina virtual, clique no canto superior esquerdo para mudar para a aba Notebook para acessar o Jupyter Notebook para praticar.

Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação de operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se você encontrar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão e resolveremos prontamente o problema para você.

Importar os módulos necessários

Primeiro, precisamos importar os módulos necessários da biblioteca scikit-learn. Usaremos a classe SimpleImputer para imputação de recursos univariados e a classe IterativeImputer para imputação de recursos multivariados.

import numpy as np
from sklearn.impute import SimpleImputer, IterativeImputer

Imputação de recursos univariados usando SimpleImputer

A classe SimpleImputer fornece estratégias básicas para imputar valores ausentes de forma univariada. Podemos escolher entre diferentes estratégias, como substituir valores ausentes por um valor constante ou usar a média, mediana ou valor mais frequente de cada coluna para imputar os valores ausentes.

Vamos começar considerando a estratégia da média. Criaremos uma instância de SimpleImputer e a ajustaremos aos nossos dados para aprender a estratégia de imputação. Em seguida, podemos usar o método transform para imputar os valores ausentes com base na estratégia aprendida.

imp = SimpleImputer(strategy='mean')
X = [[1, 2], [np.nan, 3], [7, 6]]
imp.fit(X)
X_test = [[np.nan, 2], [6, np.nan], [7, 6]]
imputed_X_test = imp.transform(X_test)

Imputação de recursos multivariados usando IterativeImputer

A classe IterativeImputer é uma abordagem mais avançada para imputar valores ausentes. Ela modela cada recurso com valores ausentes como uma função de outros recursos e usa essa estimativa para a imputação. Ela aprende iterativamente as relações entre os recursos e imputa os valores ausentes com base nessas relações.

imp = IterativeImputer()
X = [[1, 2], [3, 6], [4, 8], [np.nan, 3], [7, np.nan]]
imp.fit(X)
X_test = [[np.nan, 2], [6, np.nan], [np.nan, 6]]
imputed_X_test = imp.transform(X_test)

Imputação de vizinhos mais próximos usando KNNImputer

A classe KNNImputer fornece imputação para preencher valores ausentes usando a abordagem de k-vizinhos mais próximos. Ela encontra os vizinhos mais próximos para cada amostra com valores ausentes e imputa os valores de recursos ausentes com base nos valores dos vizinhos.

from sklearn.impute import KNNImputer
nan = np.nan
X = [[1, 2, nan], [3, 4, 3], [nan, 6, 5], [8, 8, 7]]
imputer = KNNImputer(n_neighbors=2)
imputed_X = imputer.fit_transform(X)

Mantendo o número de recursos constante

Por padrão, os imputadores do scikit-learn removem colunas contendo apenas valores ausentes. No entanto, em alguns casos, é necessário manter os recursos vazios para preservar a forma dos dados. Podemos conseguir isso definindo o parâmetro keep_empty_features como True.

imputer = SimpleImputer(keep_empty_features=True)
X = np.array([[np.nan, 1], [np.nan, 2], [np.nan, 3]])
imputed_X = imputer.fit_transform(X)

Marcação de valores imputados usando MissingIndicator

O transformador MissingIndicator é útil para indicar a presença de valores ausentes em um conjunto de dados. Ele pode ser usado em conjunto com a imputação para preservar informações sobre quais valores foram imputados. Este transformador retorna uma matriz binária indicando a presença de valores ausentes no conjunto de dados.

from sklearn.impute import MissingIndicator
X = np.array([[-1, -1, 1, 3], [4, -1, 0, -1], [8, -1, 1, 0]])
indicator = MissingIndicator()
mask_missing_values_only = indicator.fit_transform(X)

Resumo

Neste tutorial, aprendemos diferentes estratégias para imputar valores ausentes usando o scikit-learn. Exploramos a imputação de recursos univariados com SimpleImputer, a imputação de recursos multivariados com IterativeImputer, a imputação de vizinhos mais próximos com KNNImputer, a manutenção do número de recursos constante e a marcação de valores imputados com MissingIndicator. Essas técnicas podem ser ferramentas valiosas para lidar com dados ausentes e garantir que algoritmos de aprendizado de máquina possam ser aplicados a conjuntos de dados incompletos.