Featurização de dados em machine learning automatizado

APLICA-SE A:Python SDK azureml v1

Saiba mais sobre as configurações de featurização de dados no Aprendizado de Máquina do Azure e como personalizar esses recursos para experimentos automatizados de aprendizado de máquina.

Engenharia de recursos e featurização

Os dados de treinamento consistem em linhas e colunas. Cada linha é uma observação ou registro, e as colunas de cada linha são os recursos que descrevem cada registro. Normalmente, os recursos que melhor caracterizam os padrões nos dados são selecionados para criar modelos preditivos.

Embora muitos dos campos de dados brutos possam ser usados diretamente para treinar um modelo, muitas vezes é necessário criar recursos adicionais (projetados) que forneçam informações que diferenciem melhor os padrões nos dados. Esse processo é chamado de engenharia de recursos, onde o uso do conhecimento de domínio dos dados é aproveitado para criar recursos que, por sua vez, ajudam os algoritmos de aprendizado de máquina a aprender melhor.

No Azure Machine Learning, as técnicas de dimensionamento e normalização de dados são aplicadas para facilitar a engenharia de recursos. Coletivamente, essas técnicas e essa engenharia de recursos são chamadas de featurização em experimentos automatizados de ML.

Pré-requisitos

Este artigo pressupõe que você já saiba como configurar um experimento de ML automatizado.

Importante

Os comandos Python neste artigo requerem a versão mais recente azureml-train-automl do pacote.

Para obter informações sobre configuração, consulte os seguintes artigos:

Configurar featurização

Em todos os experimentos automatizados de aprendizado de máquina, as técnicas de dimensionamento e normalização automáticas são aplicadas aos seus dados por padrão. Estas técnicas são tipos de featurização que ajudam certos algoritmos que são sensíveis a características em diferentes escalas. Você pode habilitar mais featurização, como imputação de valores ausentes, codificação e transformações.

Nota

As etapas para a featurização automatizada do aprendizado de máquina (como normalização de recursos, manipulação de dados ausentes ou conversão de texto em numérico) tornam-se parte do modelo subjacente. Quando você usa o modelo para previsões, as mesmas etapas de featurização que são aplicadas durante o treinamento são aplicadas aos seus dados de entrada automaticamente.

Para experimentos que você configura com o SDK do Python, você pode habilitar ou desabilitar a configuração de featurização e especificar ainda mais as etapas de featurização a serem usadas para seu experimento. Se você estiver usando o estúdio do Azure Machine Learning, consulte as etapas para habilitar a featurização.

A tabela a seguir mostra as configurações aceitas para featurization na classe AutoMLConfig:

Configuração de featurização Description
"featurization": 'auto' Especifica que, como parte do pré-processamento, as proteções de dados e as etapas de featurização devem ser feitas automaticamente. Esta é a predefinição.
"featurization": 'off' Especifica que as etapas de featurização não devem ser feitas automaticamente.
"featurization": 'FeaturizationConfig' Especifica que as etapas de featurização personalizadas devem ser usadas. Saiba como personalizar a featurização.

Featurização automática

A tabela a seguir resume as técnicas que são aplicadas automaticamente aos seus dados. Essas técnicas são aplicadas para experimentos configurados usando o SDK ou a interface do usuário do estúdio. Para desativar esse comportamento, defina "featurization": 'off' em seu AutoMLConfig objeto.

Nota

Se você planeja exportar seus modelos criados pelo AutoML para um modelo ONNX, somente as opções de featurização indicadas com um asterisco ("*") são suportadas no formato ONNX. Saiba mais sobre como converter modelos para ONNX.

Etapas de featurização Description
Queda de alta cardinalidade ou sem recursos de variância* Elimine esses recursos dos conjuntos de treinamento e validação. Aplica-se a funcionalidades com todos os valores em falta, com o mesmo valor em todas as linhas ou com elevada cardinalidade (por exemplo, hashes, IDs ou GUIDs).
Imputar valores em falta* Para características numéricas, imputar com a média dos valores na coluna.

Para características categóricas, imputar com o valor mais frequente.
Gere mais recursos* Para recursos DateTime: Ano, Mês, Dia, Dia da semana, Dia do ano, Trimestre, Semana do ano, Hora, Minuto, Segundo.

Para tarefas de previsão, estes recursos adicionais do DateTime são criados: ano ISO, meio a semestre, mês do calendário como string, semana, dia da semana como string, dia do trimestre, dia do ano, AM/PM (0 se a hora for antes do meio-dia (12 pm), 1 caso contrário), AM/PM como string, hora do dia (base de 12 horas)

Para recursos de texto: frequência de termos baseada em unigramas, bigramas e trigramas. Saiba mais sobre como isso é feito com o BERT.
Transformar e codificar* Transforme recursos numéricos que têm poucos valores exclusivos em recursos categóricos.

A codificação one-hot é usada para características categóricas de baixa cardinalidade. A codificação one-hot-hash é utilizada para funcionalidades categóricas com elevada cardinalidade.
Incorporações de palavras Um featurizer de texto converte vetores de tokens de texto em vetores de frase usando um modelo pré-treinado. O vetor de incorporação de cada palavra em um documento é agregado com o restante para produzir um vetor de recurso de documento.
Distância do cluster Treina um modelo de agrupamento k-means em todas as colunas numéricas. Produz k novos recursos (um novo recurso numérico por cluster) que contêm a distância de cada amostra ao centróide de cada cluster.

Em cada experimento automatizado de aprendizado de máquina, seus dados são automaticamente dimensionados ou normalizados para ajudar os algoritmos a terem um bom desempenho. Durante o treinamento do modelo, uma das seguintes técnicas de dimensionamento ou normalização é aplicada a cada modelo.

Dimensionamento e processamento Description
StandardScaleWrapper Padronize os recursos removendo a média e dimensionando para a variância da unidade
MinMaxEscalar Transforma recursos dimensionando cada recurso pelo mínimo e máximo dessa coluna
MaxAbsScaler Dimensionar cada recurso pelo seu valor absoluto máximo
RobustScalar Dimensiona características por seu intervalo quantílico
APC Redução da dimensionalidade linear usando a Decomposição de Valor Singular dos dados para projetá-los para um espaço dimensional inferior
TruncatedSVDWrapper Este transformador realiza a redução da dimensionalidade linear por meio da decomposição de valor singular truncado (SVD). Ao contrário da ACP, este estimador não centraliza os dados antes de calcular a decomposição do valor singular, o que significa que pode trabalhar com matrizes esparsas scipy.sparse de forma eficiente
SparseNormalizer Cada amostra (ou seja, cada linha da matriz de dados) com pelo menos um componente diferente de zero é redimensionada independentemente de outras amostras para que sua norma (l1 ou l2) seja igual a uma

Guardrails de dados

As proteções de dados ajudam a identificar possíveis problemas com seus dados (por exemplo, valores ausentes ou desequilíbrio de classe). Eles também ajudam você a tomar ações corretivas para melhorar os resultados.

As proteções de dados são aplicadas:

  • Para experimentos SDK: Quando os parâmetros "featurization": 'auto' ou validation=auto são especificados em seu AutoMLConfig objeto.
  • Para experiências em estúdio: Quando a featurização automática está ativada.

Você pode revisar os guardrails de dados para seu experimento:

  • Definindo show_output=True quando você envia um experimento usando o SDK.

  • No estúdio, na guia Guardrails de dados da sua execução automatizada de ML.

Estados do guardrail de dados

As proteções de dados exibem um dos três estados:

Condição Description
Aprovado Nenhum problema de dados foi detetado e nenhuma ação é necessária por você.
Concluído As alterações foram aplicadas aos seus dados. Recomendamos que você revise as ações corretivas que o AutoML tomou, para garantir que as alterações estejam alinhadas com os resultados esperados.
Alertado Um problema de dados foi detetado, mas não pôde ser corrigido. Encorajamo-lo a rever e corrigir o problema.

Guardrails de dados suportados

A tabela a seguir descreve os guardrails de dados com suporte no momento e os status associados que você pode ver ao enviar seu experimento:

Guarda-corpo Status Condição para o gatilho
Imputação de valores de funcionalidade em falta Aprovado


Concluído
Nenhum valor de recurso ausente foi detetado em seus dados de treinamento. Saiba mais sobre a imputação de valor em falta.

Valores de recursos ausentes foram detetados em seus dados de treinamento e foram imputados.
Deteção de recursos de alta cardinalidade Aprovado


Concluído
Suas entradas foram analisadas e nenhum recurso de alta cardinalidade foi detetado.

Recursos de alta cardinalidade foram detetados em suas entradas e foram manipulados.
Tratamento de divisão de validação Concluído A configuração de validação foi definida e 'auto' os dados de treinamento continham menos de 20.000 linhas.
Cada iteração do modelo treinado foi validada por meio de validação cruzada. Saiba mais sobre dados de validação.

A configuração de validação foi definida como 'auto', e os dados de treinamento continham mais de 20.000 linhas.
Os dados de entrada foram divididos em um conjunto de dados de treinamento e um conjunto de dados de validação para validação do modelo.
Deteção de balanceamento de classe Aprovado



Alertado


Concluído
Suas entradas foram analisadas e todas as aulas são equilibradas em seus dados de treinamento. Um conjunto de dados é considerado equilibrado se cada classe tiver uma boa representação no conjunto de dados, medida pelo número e proporção de amostras.

Classes desequilibradas foram detetadas em suas entradas. Para corrigir a distorção do modelo, corrija o problema de balanceamento. Saiba mais sobre dados desequilibrados.

Classes desequilibradas foram detetadas em suas entradas e a lógica de varredura determinou a aplicação do balanceamento.
Deteção de problemas de memória Aprovado



Concluído

Os valores selecionados (horizonte, atraso, janela rolante) foram analisados e nenhum problema potencial de falta de memória foi detetado. Saiba mais sobre as configurações de previsão de séries cronológicas.


Os valores selecionados (horizonte, atraso, janela rolante) foram analisados e potencialmente farão com que seu experimento fique sem memória. As configurações de atraso ou janela rolante foram desativadas.
Deteção de frequência Aprovado



Concluído

As séries temporais foram analisadas e todos os pontos de dados estão alinhados com a frequência detetada.

As séries temporais foram analisadas e foram detetados pontos de dados que não se alinham com a frequência detetada. Esses pontos de dados foram removidos do conjunto de dados.
Validação cruzada Concluído Para avaliar com precisão o(s) modelo(s) treinado(s) pelo AutoML, aproveitamos um conjunto de dados no qual o modelo não é treinado. Assim, se o usuário não fornecer um conjunto de dados de validação explícito, uma parte do conjunto de dados de treinamento será usada para conseguir isso. Para conjuntos de dados menores (menos de 20.000 amostras), a validação cruzada é aproveitada, caso contrário, um único conjunto de retenção é dividido dos dados de treinamento para servir como o conjunto de dados de validação. Assim, para seus dados de entrada, aproveitamos a validação cruzada com 10 dobras, se o número de amostras de treinamento for inferior a 1000, e 3 dobras em todos os outros casos.
Divisão de dados Train-Test Concluído Para avaliar com precisão o(s) modelo(s) treinado(s) pelo AutoML, aproveitamos um conjunto de dados no qual o modelo não é treinado. Assim, se o usuário não fornecer um conjunto de dados de validação explícito, uma parte do conjunto de dados de treinamento será usada para conseguir isso. Para conjuntos de dados menores (menos de 20.000 amostras), a validação cruzada é aproveitada, caso contrário, um único conjunto de retenção é dividido dos dados de treinamento para servir como o conjunto de dados de validação. Assim, seus dados de entrada foram divididos em um conjunto de dados de treinamento e um conjunto de dados de validação de holdout.
Deteção de ID de série temporal Aprovado



Fixo

O conjunto de dados foi analisado e nenhum índice de tempo duplicado foi detetado.

Várias séries temporais foram encontradas no conjunto de dados e os identificadores de séries temporais foram criados automaticamente para seu conjunto de dados.
Agregação de séries cronológicas Aprovado



Fixo

A frequência do conjunto de dados é alinhada com a frequência especificada pelo utilizador. Não foi realizada agregação.

Os dados foram agregados de acordo com a frequência fornecida pelo usuário.
Manuseamento em séries curtas Aprovado



Fixo

O ML automatizado detetou pontos de dados suficientes para cada série nos dados de entrada para continuar com o treinamento.

O ML automatizado detetou que algumas séries não continham pontos de dados suficientes para treinar um modelo. Para continuar com os treinos, estas séries curtas foram abandonadas ou acolchoadas.

Personalizar featurização

Você pode personalizar suas configurações de featurização para garantir que os dados e recursos usados para treinar seu modelo de ML resultem em previsões relevantes.

Para personalizar featurizações, especifique "featurization": FeaturizationConfig em seu AutoMLConfig objeto. Se você estiver usando o estúdio do Azure Machine Learning para seu experimento, consulte o artigo de instruções. Para personalizar a featurização para tipos de tarefas de previsão, consulte o tutorial de previsão.

As personalizações suportadas incluem:

Personalização Definição
Atualização da finalidade da coluna Substitua o tipo de recurso detetado automaticamente para a coluna especificada.
Atualização dos parâmetros do transformador Atualize os parâmetros para o transformador especificado. Atualmente, suporta os parâmetros Imputer (médio, mais frequente e mediano) e HashOneHotEncoder.
Soltar colunas Especifica as colunas a serem soltas de serem featurizadas.
Transformadores de bloco Especifica os transformadores de bloco a serem usados no processo de featurização.

Nota

A funcionalidade de soltar colunas foi preterida a partir da versão 1.19 do SDK. Solte colunas do conjunto de dados como parte da limpeza de dados, antes de consumi-las em seu experimento automatizado de ML.

Crie o objeto usando chamadas de FeaturizationConfig API:

featurization_config = FeaturizationConfig()
featurization_config.blocked_transformers = ['LabelEncoder']
featurization_config.drop_columns = ['aspiration', 'stroke']
featurization_config.add_column_purpose('engine-size', 'Numeric')
featurization_config.add_column_purpose('body-style', 'CategoricalHash')
#default strategy mean, add transformer param for 3 columns
featurization_config.add_transformer_params('Imputer', ['engine-size'], {"strategy": "median"})
featurization_config.add_transformer_params('Imputer', ['city-mpg'], {"strategy": "median"})
featurization_config.add_transformer_params('Imputer', ['bore'], {"strategy": "most_frequent"})
featurization_config.add_transformer_params('HashOneHotEncoder', [], {"number_of_bits": 3})

Transparência de featurização

Todos os modelos AutoML têm featurização aplicada automaticamente. A featurização inclui engenharia de recursos automatizada (quando "featurization": 'auto') e dimensionamento e normalização, o que afeta o algoritmo selecionado e seus valores de hiperparâmetro. O AutoML suporta diferentes métodos para garantir que você tenha visibilidade do que foi aplicado ao seu modelo.

Considere este exemplo de previsão:

  • Há quatro recursos de entrada: A (numérico), B (numérico), C (numérico), D (DateTime).
  • O recurso numérico C é descartado porque é uma coluna ID com todos os valores exclusivos.
  • As características numéricas A e B têm valores ausentes e, portanto, são imputadas pela média.
  • O recurso DateTime D é dividido em 11 recursos de engenharia diferentes.

Para obter essas informações, use a saída da execução do experimento fitted_model de ML automatizado.

automl_config = AutoMLConfig(…)
automl_run = experiment.submit(automl_config …)
best_run, fitted_model = automl_run.get_output()

Engenharia automatizada de recursos

O get_engineered_feature_names() retorna uma lista de nomes de recursos projetados.

Nota

Use 'timeseriestransformer' para task='forecasting', caso contrário, use 'datatransformer' para 'regression' ou 'classification' task.

fitted_model.named_steps['timeseriestransformer']. get_engineered_feature_names ()

Esta lista inclui todos os nomes de recursos projetados.

['A', 'B', 'A_WASNULL', 'B_WASNULL', 'year', 'half', 'quarter', 'month', 'day', 'hour', 'am_pm', 'hour12', 'wday', 'qday', 'week']

O get_featurization_summary() obtém um resumo de featurização de todos os recursos de entrada.

fitted_model.named_steps['timeseriestransformer'].get_featurization_summary()

Saída

[{'RawFeatureName': 'A',
  'TypeDetected': 'Numeric',
  'Dropped': 'No',
  'EngineeredFeatureCount': 2,
  'Tranformations': ['MeanImputer', 'ImputationMarker']},
 {'RawFeatureName': 'B',
  'TypeDetected': 'Numeric',
  'Dropped': 'No',
  'EngineeredFeatureCount': 2,
  'Tranformations': ['MeanImputer', 'ImputationMarker']},
 {'RawFeatureName': 'C',
  'TypeDetected': 'Numeric',
  'Dropped': 'Yes',
  'EngineeredFeatureCount': 0,
  'Tranformations': []},
 {'RawFeatureName': 'D',
  'TypeDetected': 'DateTime',
  'Dropped': 'No',
  'EngineeredFeatureCount': 11,
  'Tranformations': ['DateTime','DateTime','DateTime','DateTime','DateTime','DateTime','DateTime','DateTime','DateTime','DateTime','DateTime']}]
Saída Definição
RawFeatureName Nome do recurso/coluna de entrada do conjunto de dados fornecido.
TypeDetected Tipo de dados detetado do recurso de entrada.
Caiu Indica se o recurso de entrada foi descartado ou usado.
EngineeringFeatureCount Número de recursos gerados por meio de transformações automatizadas de engenharia de recursos.
Transformações Lista de transformações aplicadas a recursos de entrada para gerar recursos projetados.

Dimensionamento e normalização

Para entender o dimensionamento/normalização e o algoritmo selecionado com seus valores de hiperparâmetro, use fitted_model.steps.

A saída de exemplo a seguir é de execução para uma execução fitted_model.steps escolhida:

[('RobustScaler', 
  RobustScaler(copy=True, 
  quantile_range=[10, 90], 
  with_centering=True, 
  with_scaling=True)), 

  ('LogisticRegression', 
  LogisticRegression(C=0.18420699693267145, class_weight='balanced', 
  dual=False, 
  fit_intercept=True, 
  intercept_scaling=1, 
  max_iter=100, 
  multi_class='multinomial', 
  n_jobs=1, penalty='l2', 
  random_state=None, 
  solver='newton-cg', 
  tol=0.0001, 
  verbose=0, 
  warm_start=False))

Para obter mais detalhes, use esta função auxiliar:

from pprint import pprint

def print_model(model, prefix=""):
    for step in model.steps:
        print(prefix + step[0])
        if hasattr(step[1], 'estimators') and hasattr(step[1], 'weights'):
            pprint({'estimators': list(e[0] for e in step[1].estimators), 'weights': step[1].weights})
            print()
            for estimator in step[1].estimators:
                print_model(estimator[1], estimator[0]+ ' - ')
        elif hasattr(step[1], '_base_learners') and hasattr(step[1], '_meta_learner'):
            print("\nMeta Learner")
            pprint(step[1]._meta_learner)
            print()
            for estimator in step[1]._base_learners:
                print_model(estimator[1], estimator[0]+ ' - ')
        else:
            pprint(step[1].get_params())
            print()   

Esta função auxiliar retorna a seguinte saída para uma execução específica usando LogisticRegression with RobustScalar como o algoritmo específico.

RobustScaler
{'copy': True,
'quantile_range': [10, 90],
'with_centering': True,
'with_scaling': True}

LogisticRegression
{'C': 0.18420699693267145,
'class_weight': 'balanced',
'dual': False,
'fit_intercept': True,
'intercept_scaling': 1,
'max_iter': 100,
'multi_class': 'multinomial',
'n_jobs': 1,
'penalty': 'l2',
'random_state': None,
'solver': 'newton-cg',
'tol': 0.0001,
'verbose': 0,
'warm_start': False}

Prever probabilidade de classe

Todos os modelos produzidos usando ML automatizado têm objetos wrapper que espelham a funcionalidade de sua classe de origem de código aberto. A maioria dos objetos de wrapper de modelo de classificação retornados pelo ML automatizado implementa a função, que aceita uma amostra de dados de matriz esparsa ou semelhante a predict_proba() uma matriz de seus recursos (valores X) e retorna uma matriz n-dimensional de cada amostra e sua respetiva probabilidade de classe.

Supondo que você tenha recuperado o melhor modelo executado e ajustado usando as mesmas chamadas de cima, você pode ligar predict_proba() diretamente do modelo ajustado, fornecendo uma X_test amostra no formato apropriado, dependendo do tipo de modelo.

best_run, fitted_model = automl_run.get_output()
class_prob = fitted_model.predict_proba(X_test)

Se o modelo subjacente não suportar a predict_proba() função ou o formato estiver incorreto, uma exceção específica da classe do modelo será lançada. Consulte os documentos de referência RandomForestClassifier e XGBoost para obter exemplos de como essa função é implementada para diferentes tipos de modelo.

Integração BERT em ML automatizado

O BERT é usado na camada de featurização do ML automatizado. Nesta camada, se uma coluna tiver texto livre ou outros tipos de dados, como carimbos de data/hora ou números simples, a caracterização será aplicada em conformidade.

No BERT, o modelo é otimizado e preparado com as etiquetas proporcionadas pelo utilizador. A partir daqui, as incorporações de documentos são saídas como funcionalidades ao lado de outras, como funcionalidades baseadas no carimbo de data/hora ou dia da semana.

Saiba como configurar experimentos de processamento de linguagem natural (NLP) que também usam BERT com ML automatizado.

Etapas para invocar o BERT

Para invocar o BERT, defina enable_dnn: True o seu automl_settings e use um cálculo de GPU (vm_size = "STANDARD_NC6" ou uma GPU superior). Se um cálculo de CPU for usado, em vez de BERT, o AutoML habilita o featurizer DNN BiLSTM.

O ML automatizado executa as seguintes etapas para o BERT.

  1. Pré-processamento e tokenização de todas as colunas de texto. Por exemplo, o transformador "StringCast" pode ser encontrado no resumo de featurização do modelo final. Um exemplo de como produzir o resumo de featurização do modelo pode ser encontrado neste caderno.

  2. Concatene todas as colunas de texto em uma única coluna de texto, daí o StringConcatTransformer no modelo final.

    Nossa implementação do BERT limita o comprimento total do texto de uma amostra de treinamento a 128 tokens. Isso significa que, idealmente, todas as colunas de texto, quando concatenadas, devem ter, no máximo, 128 tokens de comprimento. Se estiverem presentes várias colunas, cada coluna deve ser removida para que esta condição seja satisfeita. Caso contrário, para colunas concatenadas de comprimento >128 tokens, a camada tokenizadora do BERT trunca essa entrada para 128 tokens.

  3. Como parte da varredura de recursos, o AutoML compara o BERT com a linha de base (recursos de saco de palavras) em uma amostra dos dados. Esta comparação determina se o BERT proporcionaria melhorias de precisão. Se o BERT tiver um desempenho melhor do que a linha de base, o AutoML usará o BERT para a featurização de texto para todos os dados. Nesse caso, você verá o PretrainedTextDNNTransformer no modelo final.

O BERT geralmente é mais longo do que outros featurizers. Para um melhor desempenho, recomendamos o uso de "STANDARD_NC24r" ou "STANDARD_NC24rs_V3" para seus recursos RDMA.

O AutoML distribuirá o treinamento BERT em vários nós se eles estiverem disponíveis (até um máximo de oito nós). Isso pode ser feito em seu AutoMLConfig objeto definindo o max_concurrent_iterations parâmetro como superior a 1.

Idiomas suportados para BERT no AutoML

Atualmente, o AutoML suporta cerca de 100 idiomas e, dependendo do idioma do conjunto de dados, o AutoML escolhe o modelo BERT apropriado. Para dados alemães, usamos o modelo BERT alemão. Para o inglês, usamos o modelo BERT em inglês. Para todas as outras línguas, utilizamos o modelo BERT multilingue.

No código a seguir, o modelo BERT alemão é acionado, uma vez que o idioma do conjunto de dados é especificado para , o código de idioma de três letras para deualemão de acordo com a classificação ISO:

from azureml.automl.core.featurization import FeaturizationConfig

featurization_config = FeaturizationConfig(dataset_language='deu')

automl_settings = {
    "experiment_timeout_minutes": 120,
    "primary_metric": 'accuracy',
# All other settings you want to use
    "featurization": featurization_config,
    
    "enable_dnn": True, # This enables BERT DNN featurizer
    "enable_voting_ensemble": False,
    "enable_stack_ensemble": False
}

Próximos passos