Compartilhar via


Definição de recursos de dados no machine learning automatizado

APLICA-SE A: SDK do Python azureml v1

Este artigo explica como personalizar as configurações de definição de recursos de dados no Azure Machine Learning para seus experimentos de machine learning automatizado (AutoML).

Engenharia de recursos e definição de recursos

Os dados de treinamento consistem em linhas e colunas. Cada linha é uma observação ou um 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 de previsão.

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

No Azure Machine Learning, técnicas de dimensionamento de dados e normalização são aplicadas para tornar mais fácil a engenharia de recursos. Coletivamente, essas técnicas e essa engenharia de recursos são chamadas de definição de recursos em experimentos de machine learning (ML) automatizado.

Pré-requisitos

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

Importante

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

Para saber mais sobre configuração, veja os seguintes artigos:

Configurar a definição de recursos

Em cada experimento automatizado de aprendizado de máquina, técnicas de dimensionamento automático e de normalização são aplicadas aos seus dados por padrão. Essas técnicas são tipos de definição de recursos que ajudam certos algoritmos que são sensíveis a recursos em escalas diferentes. Você pode habilitar mais definição de recursos, como a imputação de valores ausentes, a codificação e transformações.

Observação

As etapas para a definição de recursos do machine learning automatizado (como a normalização de recursos, tratamento de dados ausentes ou conversão de texto em números) tornam-se parte do modelo subjacente. Ao usar o modelo para previsões, as mesmas etapas de definição de recursos aplicadas durante o treinamento são aplicadas aos dados de entrada automaticamente.

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

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

Configuração de definição de recursos Descrição
"featurization": 'auto' Especifica que, como parte do pré-processamento, os verificadores de integridade dos dados e etapas de definição de recursos são executados automaticamente. Essa é a configuração padrão.
"featurization": 'off' Especifica que as etapas da definição de recursos não devem ser feitas automaticamente.
"featurization": 'FeaturizationConfig' Especifica que as etapas de definição de recursos personalizadas devem ser usadas. Saiba como personalizar a definição de recursos.

Personalizaçã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 que são configurados por meio do SDK ou da interface do usuário do estúdio. Para desabilitar esse comportamento, defina "featurization": 'off' em seu objeto AutoMLConfig.

Observação

Se você planeja exportar seus modelos criados de AutoML para um modelo de ONNX, somente as opções de definição de recursos marcadas com um asterisco (“*”) têm suporte no formato ONNX. Saiba mais sobre conversão de modelos para ONNX.

Etapas de personalização Descrição
Remover alta cardinalidade ou nenhum recurso de variação* Remover esses recursos para definições de treinamento e validação. Isso se aplica a recursos com todos os valores ausentes, com o mesmo valor em todas as linhas ou com cardinalidade alta (por exemplo, hashes, IDs ou GUIDs).
Acrescentar valores ausentes* Para recursos numéricos, atribua com a média dos valores na coluna.

Para recursos categóricos, atribua com o valor mais frequente.
Gerar 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, esses recursos de DateTime adicionais são criados: ano ISO, metade de semestre, mês como cadeia de caracteres, semana, dia da semana como cadeia de caracteres, dia de trimestre, dia do ano, AM/PM (0 se a hora for anterior ao meio-dia (12h00) e 1 caso contrário), AM/PM como cadeia de caracteres, hora do dia (baseado em 12 horas)

Para recursos de texto: a frequência do termo com base 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 recursos categóricos de baixa cardinalidade. A codificação One-Hot-hash é usada para recursos categóricos de alta cardinalidade.
Inserções de palavras Um definidor de recursos de texto converte vetores de tokens de texto em vetores de sentença usando um modelo pré-treinado. O vetor de inserção de cada palavra em um documento é agregado com o resto para produzir um vetor de recurso de documento.
Distância do cluster Treina um modelo de clustering k-means em todas as colunas numéricas. Produz novos recursos de k (um novo recurso numérico por cluster) contendo a distância de cada amostra para o centroide de cada cluster.

Em todo experimento de machine learning automatizado, seus dados são dimensionados ou normalizados automaticamente para ajudar os algoritmos a ter um bom desempenho. Durante o treinamento de modelo, uma das técnicas de escala ou normalização a seguir é aplicada a cada modelo.

Dimensionamento e processamento Descrição
StandardScaleWrapper Padronize recursos removendo a média e escalando para a variância da unidade.
MinMaxScalar Transforme os recursos escalando cada recurso pelo mínimo e máximo dessa coluna.
MaxAbsScaler Dimensione cada recurso pelo valor absoluto máximo dele.
RobustScalar Dimensiona os recursos por seu intervalo de quantil.
PCA Redução de dimensionalidade linear usando a Decomposição de Valor Singular dos dados para projetá-los para um espaço dimensional inferior.
TruncatedSVD Esse transformador executa a redução da dimensionalidade linear usando a decomposição de valor singular truncado (SVD). Ao contrário do PCA, esse avaliador não centraliza os dados antes de calcular a decomposição de valor singular, o que significa que ele pode trabalhar com matrizes scipy.sparse de forma eficiente.
SparseNormalizer Cada amostra (ou seja, cada linha da matriz de dados) com pelo menos um componente diferente de zero é reescalado independentemente de outras amostras para que a norma (l1 ou l2) seja igual a um.

Verificadores de integridade dos dados

Os verificador de integridade dos 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 medidas corretivas para resultados aprimorados.

Os verificador de integridade dos dados são aplicados:

  • Para experimentos do SDK: quando os parâmetros "featurization": 'auto' ou validation=auto forem especificados em seu objeto AutoMLConfig
  • Para experimentos do estúdio: quando a definição de recursos automática estiver habilitada

Você pode revisar os verificador de integridade dos dados para seu experimento:

  • Definindo show_output=True quando você envia um experimento usando o SDK.
  • No estúdio, na guia verificador de integridade dos dados da execução de ML automatizado.

Estados dos verificadores de integridade dos dados

Os verificadores de integridade dos dados exibirem um de três estados:

Estado Descrição
Aprovado Nenhum problema de dados foi detectado e nenhuma ação é necessária da sua parte.
Concluído As alterações foram aplicadas aos seus dados. Incentivamos a revisão das ações corretivas que o AutoML tomou para garantir que as alterações estejam alinhadas aos resultados esperados.
Alertado Um problema de dados foi detectado, mas não foi possível remediá-lo. Incentivamos a revisão e a correção do problema.

Verificadores de integridade dos dados com suporte

A tabela a seguir descreve os verificadores de integridade dos dados que têm suporte no momento e os status associados que você pode ver ao enviar seu experimento:

Verificador de integridade Status Condição para gatilho
Imputação de valores de recurso ausente Passado


Concluído
Não foram detectados valores de recursos ausentes em seus dados de treinamento. Saiba mais sobre a imputação de valores ausentes.

Foram detectados valores de recursos ausentes em seus dados de treinamento e eles foram imputados.
Detecção de recursos de alta cardinalidade Passado


Concluído
As entradas foram analisadas e nenhum recurso de alta cardinalidade foi detectado.

Foram detectados recursos de alta cardinalidade nas suas entradas e eles foram tratados.
Tratamento de divisão de validação Concluído A configuração de validação foi definida como 'auto' e os dados de treinamento continham menos de 20.000 linhas.
Cada iteração do modelo treinado foi validada usando a validação cruzada. Saiba mais sobre os 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 a validação do modelo.
Detecção de equilíbrio de classe Passado




Alertado



Concluído
Suas entradas foram analisadas, e todas as classes estão equilibradas nos dados de treinamento. Um conjunto de dados é considerado como equilibrado caso cada classe tenha uma boa representação no conjunto de dados, conforme medido pela quantidade e proporção de exemplos.

Foram detectadas classes desequilibradas nas suas entradas. Para corrigir o desvio de modelo, corrija o problema de equilíbrio. Saiba mais sobre dados desequilibrados.

Classes desequilibradas foram detectadas nas suas entradas e a lógica de varredura determinou a aplicação de balanceamento.
Detecção de problemas de memória Passado



Concluído
Os valores selecionados (horizonte, retardo, janela sem interrupção) foram analisados e nenhum problema de falta de memória potencial foi detectado. Saiba mais sobre as configurações de previsão de série temporal.

Os valores selecionados (horizonte, retardo, janela sem interrupção) foram analisados e, potencialmente, farão com que o teste fique sem memória. As configurações de retardo ou de janela sem interrupção foram desativadas.
Detecção de frequência Passado


Concluído
A série temporal foi analisada e todos os pontos de dados estão alinhados com a frequência detectada.

A série temporal foi analisada e foram detectados pontos de dados que não estão alinhados com a frequência detectada. Esses pontos de dados foram removidos do conjunto de dados.
Validação cruzada Concluído Para avaliar com precisão o(s) modelo(s) treinados pelo AutoML, usamos um conjunto de dados em que o modelo não é treinado. Portanto, 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 isso. Para conjuntos de dados menores (menos de 20.000 amostras), a validação cruzada será usada, caso contrário, um único conjunto de controle é dividido nos dados de treinamento para servir como o conjunto de dados de validação. Portanto, para seus dados de entrada, aproveitamos a validação cruzada com dez dobras, se o número de amostras de treinamento for menor que 1000, e três dobras em todos os outros casos.
Divisão de dados do Train-Test Concluído Para avaliar com precisão o(s) modelo(s) treinados pelo AutoML, usamos um conjunto de dados em que o modelo não é treinado. Portanto, 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 isso. Para conjuntos de dados menores (menos de 20.000 amostras), a validação cruzada será usada, caso contrário, um único conjunto de controle é dividido nos dados de treinamento para servir como o conjunto de dados de validação. Portanto, os dados de entrada foram divididos em um conjunto de dados de treinamento e um conjunto de dados de validação de controle.
Detecção da ID da Série Temporal Passado


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

Várias séries temporais foram encontradas no conjunto de dados, e os identificadores de série temporal foram criados automaticamente para o seu conjunto de dados.
Agregação de série temporal Passado


Fixo
A frequência do conjunto de dados está alinhada com a frequência especificada pelo usuário. Nenhuma agregação foi realizada.

Os dados foram agregados para cumprir a frequência fornecida pelo usuário.
Manipulação de séries curtas Passado


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

O ML automatizado detectou que algumas séries não continham pontos de dados suficientes para treinamento de um modelo. Para continuar com o treinamento, essas séries curtas foram descartadas ou preenchidas.

Personalizar a definição de recursos

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

Para personalizar definições de recursos, especifique "featurization": FeaturizationConfig em seu objetoAutoMLConfig. Se você estiver usando o Estúdio do Azure Machine Learning para seu experimento, consulte o artigo de instruções. Para personalizar a definição de recursos para os tipos de tarefa previsão, consulte a instruções de previsão.

As personalizações com suporte incluem:

Personalização Definição
Atualização de finalidade de coluna Substituir o tipo de recurso de autodetecção para a coluna especificada.
Atualização de parâmetro do transformador Atualizar os parâmetros para o transformador especificado. Atualmente, dá suporte a Insertor (média, mais frequente e mediano) e HashOneHotEncoder.
Remover colunas Especifica colunas a serem removidas da definição de recursos.
Bloquear transformadores Especifica os transformadores de bloqueio a serem usados no processo de definição de recursos.

Observação

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

Criar o objeto FeaturizationConfig usando chamadas de 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 definição de recursos

Cada modelo de AutoML tem a definição de recursos aplicada automaticamente. O definição de recursos inclui engenharia automatizada de recursos (quando "featurization": 'auto') e dimensionamento e normalização, que impacta o algoritmo selecionado e seus valores de hiperparâmetro. O AutoML dá suporte a métodos diferentes para garantir que você tenha visibilidade do que foi aplicado ao seu modelo.

Considere esse 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 foi removido porque é uma coluna de ID com todos os valores exclusivos.
  • Os recursos numéricos A e B têm valores ausentes e, portanto, são imputados pela média.
  • O recurso datetime D é destacado em 11 recursos diferentes de engenharia.

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

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

Engenharia de recursos automatizada

A get_engineered_feature_names() retorna uma lista de nomes de recursos de engenharia.

Observação

Use “timeseriestransformer” para task=”forecasting”, caso contrário, use “datatransformer” para a tarefa “regression” ou “classification”.

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

Essa lista inclui todos os nomes de recursos de engenharia.

['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 definição de recursos 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',ateTime','DateTime','DateTime']}]
Saída Definição
RawFeatureName Nome de recurso/coluna de entrada do conjunto de dados fornecido.
TypeDetected Tipo de dados detectado do recurso de entrada.
Dropped Indica se o recurso de entrada foi removido 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 aos recursos de entrada para gerar recursos de engenharia.

Colocação em escala e normalização

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

A seguinte saída de exemplo é de execução fitted_model.steps para uma execução 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()   

Essa função auxiliar retorna a saída a seguir 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

Os modelos produzidos usando o ML automatizado têm objetos wrapper que espelham a funcionalidade de sua classe de origem open-source. A maioria dos objetos do wrapper do modelo de classificação retornados pelo ML automatizado implementam a função predict_proba(), que aceita uma amostra de dados de matriz ou de matriz esparsa dos seus recursos (valores X) e retorna uma matriz n-dimensional de cada amostra e sua respectiva probabilidade de classe.

Supondo que você tenha recuperado a melhor execução e o modelo ajustado usando as mesmas chamadas, você pode chamar predict_proba() diretamente do modelo ajustado, fornecendo uma amostra de X_test 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 oferecer suporte à função predict_proba() ou o formato estiver incorreto, uma exceção específica para classe de modelo será lançada. Consulte os documentos de referência de RandomForestClassifier e XGBoost para obter exemplos de como essa função é implementada para diferentes tipos de modelo.

Integração do BERT no ML automatizado

O BERT é usado na camada de definição de recursos do ML automatizado. Nessa camada, se uma coluna contiver texto livre ou outros tipos de dados como carimbos de data/hora ou números simples, a definição de recursos será aplicada de acordo.

Para o BERT, o modelo é bem ajustado e treinado utilizando os rótulos fornecidos pelo usuário. A partir daqui, as incorporações de documentos são geradas como recursos ao lado de outros, como recursos baseados em carimbo de data/hora, dia da semana.

Saiba como Configurar o AutoML para treinamento de um modelo de processamento de linguagem natural com o Python.

Etapas para invocar o BERT

Para invocar o BERT, defina enable_dnn: True em seu automl_settings e use uma computação de GPU (vm_size = "STANDARD_NC6" ou uma GPU superior). Se uma computação de CPU for usada, em vez do BERT, o AutoML habilitará o featurizer BiLSTM DNN.

O ML automatizado executa as seguintes etapas para o BERT.

  1. Pré-processamento e geração de tokens de todas as colunas de texto. Por exemplo, o transformador de StringCast pode ser encontrado no resumo de definição de recursos do modelo final. Um exemplo de como produzir o resumo da definição de recursos do modelo pode ser encontrado neste notebook.

  2. Concatenar todas as colunas de texto em uma única coluna de texto, portanto, StringConcatTransformer no modelo final.

    Nossa implementação do BERT limita o tamanho de texto total de um exemplo de treinamento a tokens de 128. Isso significa que, o ideal é que todas as colunas de texto quando concatenadas tenham, no máximo, 128 tokens de comprimento. Se várias colunas estiverem presentes, cada coluna deverá ser removida para que essa condição seja atendida. Caso contrário, para colunas concatenadas com o comprimento de >128 a camada de criador de tokens de BERT trunca essa entrada para 128 tokens.

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

O BERT geralmente é executado por mais tempo do que outros featurizers. Para melhorar o desempenho, recomendamos usar STANDARD_NC24r ou STANDARD_NC24rs_V3 para seus recursos RDMA.

O AutoML distribuirá o treinamento do 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 objeto AutoMLConfig definindo o parâmetro max_concurrent_iterations como superior a 1.

Idiomas com suporte para o BERT no AutoML

Atualmente, o AutoML dá suporte a 100 idiomas e, dependendo do idioma do conjunto de dados, ele escolhe o modelo apropriado do BERT. Para dados em alemão, usamos o modelo alemão do BERT. Para o inglês, usamos o modelo em inglês do BERT. Para todos os outros idiomas, usamos o modelo do BERT multilíngue.

No código a seguir, o modelo alemão do BERT é disparado, uma vez que o idioma do conjunto de dados é especificado como deu, o código de três letras do idioma para o alemã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
}