ComeçarComece de graça

Estudo de caso sobre doença renal I: Imputação categórica

Agora você vai continuar sua exploração do uso de pipelines com um conjunto de dados que exige muito mais tratamento. O conjunto de dados de doença renal crônica contém recursos categóricos e numéricos, mas tem muitos valores ausentes. O objetivo aqui é prever quem tem doença renal crônica dados vários indicadores sanguíneos como recursos.

Como Sergey mencionou no vídeo, você será apresentado a uma nova biblioteca, sklearn_pandas, que permite encadear muito mais etapas de processamento dentro de um pipeline do que as atualmente suportadas no scikit-learn. Especificamente, você poderá usar a classe DataFrameMapper() para aplicar qualquer transformador compatível com sklearn em colunas de DataFrame, em que a saída resultante pode ser um array do NumPy ou um DataFrame.

Também criamos um transformador chamado Dictifier que encapsula a conversão de um DataFrame usando .to_dict("records") sem que você precise fazer isso explicitamente (e para que funcione em um pipeline). Por fim, também fornecemos a lista de nomes de recursos em kidney_feature_names, o nome do alvo em kidney_target_name, as variáveis preditoras em X e o alvo em y.

Neste exercício, sua tarefa é aplicar o SimpleImputer do sklearn para imputar todas as colunas categóricas do conjunto de dados. Você pode usar como referência o mapeador de imputação numérica que foi criado como modelo. Percebeu os argumentos nomeados input_df=True e df_out=True? Isso é para que você possa trabalhar com DataFrames em vez de arrays. Por padrão, os transformadores recebem um array do numpy das colunas selecionadas como entrada e, como resultado, a saída do DataFrame mapper também é um array. Os transformadores do scikit-learn foram historicamente projetados para funcionar com arrays do numpy, não com DataFrames do pandas, embora suas interfaces básicas de indexação sejam semelhantes.

Este exercício faz parte do curso

Extreme Gradient Boosting com XGBoost

Ver curso

Instruções do exercício

  • Aplique a imputação categórica usando DataFrameMapper() e SimpleImputer(). SimpleImputer() não precisa de nenhum argumento. As colunas estão em categorical_columns. Lembre-se de especificar input_df=True e df_out=True, e use category_feature como sua variável iteradora na list comprehension.

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

# Import necessary modules
from sklearn_pandas import DataFrameMapper
from sklearn.impute import SimpleImputer

# Check number of nulls in each feature column
nulls_per_column = X.isnull().sum()
print(nulls_per_column)

# Create a boolean mask for categorical columns
categorical_feature_mask = X.dtypes == object

# Get list of categorical column names
categorical_columns = X.columns[categorical_feature_mask].tolist()

# Get list of non-categorical column names
non_categorical_columns = X.columns[~categorical_feature_mask].tolist()

# Apply numeric imputer
numeric_imputation_mapper = DataFrameMapper(
                                            [([numeric_feature], SimpleImputer(strategy="median")) for numeric_feature in non_categorical_columns],
                                            input_df=True,
                                            df_out=True
                                           )

# Apply categorical imputer
categorical_imputation_mapper = ____(
                                                [(category_feature, ____) for ____ in ____],
                                                input_df=____,
                                                df_out=____
                                               )
Editar e executar o código