Caracterização de dados no machine learning automatizado

APLICA-SE A:Python SDK azureml v1

Saiba mais sobre as definições de caracterização de dados no Azure Machine Learning e como personalizar essas funcionalidades para experimentações de machine learning automatizadas.

Engenharia e caracterização de funcionalidades

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

Embora muitos dos campos de dados não processados possam ser utilizados diretamente para preparar um modelo, muitas vezes é necessário criar funcionalidades adicionais (concebidas) que forneçam informações que melhor diferenciam padrões nos dados. Este processo chama-se engenharia de funcionalidades, onde a utilização do conhecimento de domínio dos dados é aproveitada para criar funcionalidades que, por sua vez, ajudam os algoritmos de machine learning a aprender melhor.

No Azure Machine Learning, são aplicadas técnicas de dimensionamento de dados e normalização para facilitar a engenharia de funcionalidades. Coletivamente, estas técnicas e esta engenharia de funcionalidades são denominadas caracterização em experimentações de ML automatizadas.

Pré-requisitos

Este artigo pressupõe que já sabe como configurar uma experimentação de ML automatizada.

Importante

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

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

Configurar a caracterização

Em todas as experimentações de machine learning automatizadas, as técnicas automáticas de dimensionamento e normalização são aplicadas aos seus dados por predefinição. Estas técnicas são tipos de caracterização que ajudam determinados algoritmos sensíveis às funcionalidades em escalas diferentes. Pode ativar mais caracterização, como imputação de valores em falta, codificação e transformações.

Nota

Os passos para a caracterização automática de machine learning (como a normalização de funcionalidades, o processamento de dados em falta ou a conversão de texto em numérico) tornam-se parte do modelo subjacente. Quando utiliza o modelo para predições, os mesmos passos de caracterização aplicados durante a preparação são aplicados automaticamente aos dados de entrada.

Para experimentações configuradas com o SDK python, pode ativar ou desativar a definição de caracterização e especificar ainda mais os passos de caracterização a utilizar para a sua experimentação. Se estiver a utilizar o estúdio do Azure Machine Learning, veja os passos para ativar a caracterização.

A tabela seguinte mostra as definições aceites para featurization na classe AutoMLConfig:

Configuração de caracterização Description
"featurization": 'auto' Especifica que, como parte do pré-processamento, as proteções de dados e os passos de caracterização devem ser feitos automaticamente. Esta é a predefinição.
"featurization": 'off' Especifica que os passos de caracterização não devem ser feitos automaticamente.
"featurization": 'FeaturizationConfig' Especifica que os passos de caracterização personalizados devem ser utilizados. Saiba como personalizar a caracterização.

Caracterização automática

A tabela seguinte resume as técnicas que são aplicadas automaticamente aos seus dados. Estas técnicas são aplicadas a experimentações configuradas com o SDK ou a IU do estúdio. Para desativar este comportamento, defina "featurization": 'off' no objeto AutoMLConfig .

Nota

Se planear exportar os modelos criados por AutoML para um modelo ONNX, apenas as opções de caracterização indicadas com um asterisco ("*") são suportadas no formato ONNX. Saiba mais sobre como converter modelos em ONNX.

Passos de caracterização Description
Remover cardinalidade elevada ou sem funcionalidades de variância* Remova estas funcionalidades dos conjuntos de preparação 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).
Impute missing values (Impute missing values)* Para funcionalidades numéricas, impute com a média dos valores na coluna.

Para funcionalidades categóricas, impute com o valor mais frequente.
Gerar mais funcionalidades* Para funcionalidades DateTime: Ano, Mês, Dia, Dia da Semana, Dia do Ano, Trimestre, Semana do ano, Hora, Minuto, Segundo.

Para as tarefas de previsão, estas funcionalidades adicionais dateTime são criadas: ANO ISO, Metade - meio ano, Mês do calendário como cadeia, Semana, Dia da semana como cadeia, Dia do trimestre, Dia do ano, AM/PM (0 se hora for antes do meio-dia (12:00), 1 caso contrário), AM/PM como cadeia, Hora do dia (base 12 horas)

Para Funcionalidades de texto: frequência de termos com base em unigramas, bigrams e trigramas. Saiba mais sobre como isto é feito com o BERT.
Transformar e codificar* Transforme funcionalidades numéricas que têm poucos valores exclusivos em funcionalidades categóricas.

A codificação única é utilizada para funcionalidades categóricas de baixa cardinalidade. A codificação one-hot-hash é utilizada para funcionalidades categóricas com elevada cardinalidade.
incorporações de Word Um caracterizador de texto converte vetores de tokens de texto em vetores de frases com um modelo pré-preparado. O vetor de incorporação de cada palavra num documento é agregado com o resto para produzir um vetor de funcionalidade de documento.
Distância do Cluster Prepara um modelo de clustering k-means em todas as colunas numéricas. Produz k novas funcionalidades (uma nova funcionalidade numérica por cluster) que contêm a distância de cada exemplo para o centroid de cada cluster.

Em todas as experimentações de machine learning automatizadas, os seus dados são dimensionados ou normalizados automaticamente para ajudar os algoritmos a funcionarem bem. Durante a preparação de modelos, é aplicada uma das seguintes técnicas de dimensionamento ou normalização a cada modelo.

Processamento de dimensionamento & Description
StandardScaleWrapper Uniformizar as funcionalidades ao remover a média e o dimensionamento para a variância de unidades
MinMaxScalar Transforma as funcionalidades ao dimensionar cada funcionalidade pelo mínimo e máximo dessa coluna
MaxAbsScaler Dimensionar cada funcionalidade pelo valor absoluto máximo
RobustScalar Dimensiona as funcionalidades pelo intervalo quantile
PCA Redução da dimensionalidade linear com a Decomposição de Valor Singular dos dados para projectá-la num espaço dimensional inferior
TruncatedSVDWrapper Este transformador executa a redução da dimensionalidade linear através da decomposição de valor singular truncado (SVD). Ao contrário do PCA, este avaliador não centra os dados antes de calcular a decomposição do valor singular, o que significa que pode funcionar com matrizes scipy.dispersas de forma eficiente
Normalizador Disperso Cada exemplo (ou seja, cada linha da matriz de dados) com pelo menos um componente não zero é redimensionado independentemente de outros exemplos, de modo a que a respetiva norma (l1 ou l2) seja igual a uma

Proteções de dados

Os proteções de dados ajudam-no a identificar potenciais problemas com os seus dados (por exemplo, valores em falta ou desequilíbrio de classe). Também o ajudam a tomar medidas corretivas para obter resultados melhorados.

São aplicadas proteções de dados:

  • Para experimentações do SDK: quando os parâmetros "featurization": 'auto' ou validation=auto são especificados no objeto AutoMLConfig .
  • Para experimentações de estúdio: quando a caracterização automática está ativada.

Pode rever as proteções de dados para a sua experimentação:

  • Ao definir show_output=True quando submete uma experimentação com o SDK.

  • No estúdio, no separador Proteção de dados da execução automatizada do ML.

Estados de proteção de dados

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

Estado Descrição
Aprovado Não foram detetados problemas de dados e não é necessária nenhuma ação por si.
Concluído Foram aplicadas alterações aos seus dados. Recomendamos que reveja as ações corretivas que o AutoML tomou, para garantir que as alterações estão alinhadas com os resultados esperados.
Alertado Foi detetado um problema de dados, mas não foi possível remediar. Recomendamos que reveja e corrija o problema.

Proteções de dados suportadas

A tabela seguinte descreve as proteções de dados atualmente suportadas e os estados associados que poderá ver quando submeter a experimentação:

Proteção Estado Condição para o acionador
Imputação de valores de funcionalidades em falta Aprovado


Concluído
Não foram detetados valores de funcionalidade em falta nos dados de preparação. Saiba mais sobre a imputação de valor em falta.

Foram detetados valores de funcionalidade em falta nos dados de preparação e foram imputados.
Deteção de funcionalidades de cardinalidade elevada Aprovado


Concluído
As entradas foram analisadas e não foram detetadas funcionalidades de cardinalidade elevada.

Foram detetadas funcionalidades de cardinalidade elevada nas entradas e processadas.
Processamento de divisões de validação Concluído A configuração de validação foi definida como 'auto' e os dados de preparação continham menos de 20 000 linhas.
Cada iteração do modelo preparado foi validada com 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 preparação continham mais de 20 000 linhas.
Os dados de entrada foram divididos num conjunto de dados de preparação e num conjunto de dados de validação para validação do modelo.
Deteção de balanceamento de classes Aprovado



Alertado


Concluído
As suas entradas foram analisadas e todas as classes estão equilibradas nos seus dados de preparação. Considera-se que um conjunto de dados é equilibrado se cada classe tiver uma boa representação no conjunto de dados, medida por número e proporção de amostras.

Foram detetadas classes desequilibradas nas entradas. Para corrigir o desvio do modelo, corrija o problema de balanceamento. Saiba mais sobre dados desequilibrados.

Foram detetadas classes desequilibradas nas entradas e a lógica de varrimento determinou a aplicação do balanceamento.
Deteção de problemas de memória Aprovado



Concluído

Os valores selecionados (horizonte, atraso, janela sem interrupção) foram analisados e não foram detetados potenciais problemas fora da memória. Saiba mais sobre as configurações de previsão de série temporal.


Os valores selecionados (horizonte, atraso, janela sem interrupção) foram analisados e poderão fazer com que a experimentação fique sem memória. As configurações de desfasamento ou de janela pendente foram desativadas.
Deteção de frequência Aprovado



Concluído

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

A série temporal foi analisada e foram detetados pontos de dados que não estão alinhados com a frequência detetada. Estes pontos de dados foram removidos do conjunto de dados.
Validação cruzada Concluído Para avaliar com precisão os modelos preparados pela AutoML, tiramos partido de um conjunto de dados no qual o modelo não está preparado. Assim, se o utilizador não fornecer um conjunto de dados de validação explícito, é utilizada uma parte do conjunto de dados de preparação para o conseguir. Para conjuntos de dados mais pequenos (menos de 20 000 amostras), a validação cruzada é aproveitada, caso contrário, um único conjunto de retenção é dividido dos dados de preparação para servir de conjunto de dados de validação. Assim, para os seus dados de entrada, tiramos partido da validação cruzada com 10 pastas, se o número de amostras de preparação 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 os modelos preparados pela AutoML, tiramos partido de um conjunto de dados no qual o modelo não está preparado. Assim, se o utilizador não fornecer um conjunto de dados de validação explícito, é utilizada uma parte do conjunto de dados de preparação para o conseguir. Para conjuntos de dados mais pequenos (menos de 20 000 amostras), a validação cruzada é aproveitada, caso contrário, um único conjunto de retenção é dividido dos dados de preparação para servir de conjunto de dados de validação. Assim, os dados de entrada foram divididos num conjunto de dados de preparação e num conjunto de dados de validação de retenção.
Deteção de ID da Série Temporal Aprovado



Fixo

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

Foram encontradas várias séries de tempo no conjunto de dados e os identificadores da série temporal foram criados automaticamente para o conjunto de dados.
Agregação de série temporal Aprovado



Fixo

A frequência do conjunto de dados está alinhada com a frequência especificada pelo utilizador. Não foi efetuada nenhuma agregação.

Os dados foram agregados para cumprir a frequência fornecida pelo utilizador.
Processamento de séries curtas Aprovado



Fixo

O ML automatizado detetou pontos de dados suficientes para cada série nos dados de entrada para continuar com a preparação.

O ML automatizado detetou que algumas séries não continham pontos de dados suficientes para preparar um modelo. Para continuar o treino, estas séries curtas foram removidas ou acolchoadas.

Personalizar a caracterização

Pode personalizar as definições de caracterização para garantir que os dados e funcionalidades que são utilizados para preparar o modelo de ML resultam em predições relevantes.

Para personalizar as caracterizações, especifique "featurization": FeaturizationConfig no objeto AutoMLConfig . Se estiver a utilizar o estúdio do Azure Machine Learning para a sua experimentação, veja o artigo de procedimentos. Para personalizar a caracterização para tipos de tarefas de previsão, veja as instruções de previsão.

As personalizações suportadas incluem:

Personalização Definição
Atualização para fins de coluna Substitua o tipo de funcionalidade detetada automaticamente para a coluna especificada.
Atualização de parâmetros do Transformador Atualize os parâmetros do transformador especificado. Atualmente, suporta os parâmetros Imputer (médio, mais frequente e mediano) e HashOneHotEncoder.
Remover colunas Especifica as colunas a deixar de estar em destaque.
Transformadores de blocos Especifica os transformadores de blocos a serem utilizados no processo de caracterização.

Nota

A funcionalidade de colunas de remoção foi preterida a partir da versão 1.19 do SDK. Remova as colunas do conjunto de dados como parte da limpeza de dados, antes de as consumir na sua experimentação de ML automatizada.

Crie o FeaturizationConfig objeto com chamadas à 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 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 caracterização

Cada modelo de AutoML tem a caracterização aplicada automaticamente. A caracterização inclui engenharia automatizada de funcionalidades (quando "featurization": 'auto') e dimensionamento e normalização, o que afeta o algoritmo selecionado e os respetivos valores de hiperparâmetros. O AutoML suporta diferentes métodos para garantir que tem visibilidade sobre o que foi aplicado ao seu modelo.

Considere este exemplo de previsão:

  • Existem quatro funcionalidades de entrada: A (Numérico), B (Numérico), C (Numérico), D (DateTime).
  • A funcionalidade numérica C é removida porque é uma coluna de ID com todos os valores exclusivos.
  • As funcionalidades numéricas A e B têm valores em falta e, por conseguinte, são imputadas pela média.
  • A funcionalidade DateTime D está em destaque em 11 funcionalidades de engenharia diferentes.

Para obter estas informações, utilize a fitted_model saída da sua execução de experimentação de ML automatizada.

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

Engenharia de funcionalidades automatizada

A get_engineered_feature_names() devolve uma lista de nomes de funcionalidades concebidas.

Nota

Utilize "timeseriestransformer" para task='forecasting'; caso contrário, utilize "datatransformer" para a tarefa "regressão" ou "classificação".

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

Esta lista inclui todos os nomes de funcionalidades concebidas.

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

Obtém get_featurization_summary() um resumo de caracterização de todas as funcionalidades 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 da coluna/funcionalidade de entrada do conjunto de dados fornecido.
TypeDetected Foi detetado o tipo de dados da funcionalidade de entrada.
Largado Indica se a funcionalidade de entrada foi removida ou utilizada.
EngineeringFeatureCount Número de funcionalidades geradas através de transformações automatizadas de engenharia de funcionalidades.
Transformações Lista de transformações aplicadas às funcionalidades de entrada para gerar funcionalidades concebidas.

Dimensionamento e normalização

Para compreender o dimensionamento/normalização e o algoritmo selecionado com os respetivos valores de hiperparâmetros, utilize fitted_model.steps.

A seguinte saída de exemplo é da execução fitted_model.steps de 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, utilize 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 devolve a seguinte saída para uma determinada execução, utilizando LogisticRegression with RobustScalar como 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 a probabilidade da classe

Os modelos produzidos com ML automatizado têm todos objetos de wrapper que espelham a funcionalidade da respetiva classe de origem open source. A maioria dos objetos de wrapper do modelo de classificação devolvidos pelo ML automatizado implementam a predict_proba() função, que aceita uma amostra de dados de matriz ou matriz dispersa das suas funcionalidades (valores X) e devolve uma matriz ndimensional de cada amostra e a respetiva probabilidade de classe.

Partindo do princípio de que obteve a melhor execução e modelo ajustado com as mesmas chamadas acima, pode chamar predict_proba() diretamente a partir do modelo ajustado, fornecendo uma X_test amostra no formato adequado, 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, será gerada uma exceção específica da classe de modelo. Veja os documentos de referência RandomForestClassifier e XGBoost para obter exemplos de como esta função é implementada para diferentes tipos de modelo.

Integração do BERT no ML automatizado

O BERT é utilizado na camada de caracterizaçã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 experimentações de processamento de linguagem natural (NLP) que também utilizam BERT com ML automatizado.

Passos para invocar BERT

Para invocar BERT, defina enable_dnn: True no seu automl_settings e utilize uma computação de GPU (vm_size = "STANDARD_NC6" ou uma GPU superior). Se for utilizada uma computação da CPU, em vez do BERT, o AutoML ativa o featurizer DNN biLSTM.

O ML automatizado segue os seguintes passos para BERT.

  1. Pré-processamento e tokenização de todas as colunas de texto. Por exemplo, o transformador "StringCast" pode ser encontrado no resumo de caracterização do modelo final. Pode encontrar um exemplo de como produzir o resumo de caracterização do modelo neste bloco de notas.

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

    A nossa implementação do BERT limita o comprimento total de texto de uma amostra de preparação para 128 tokens. Isto significa que todas as colunas de texto quando concatenadas devem ter, idealmente, um máximo de 128 tokens de comprimento. Se estiverem presentes múltiplas colunas, cada coluna deve ser podada para que esta condição seja satisfeita. Caso contrário, para colunas concatenadas de comprimento >de 128 tokens, a camada de tokens do BERT trunca esta entrada para 128 tokens.

  3. Como parte da análise de funcionalidades, o AutoML compara o BERT com a linha de base (funcionalidades do conjunto de palavras) numa amostra dos dados. Esta comparação determina se BERT daria melhorias de precisão. Se BERT tiver um melhor desempenho do que a linha de base, a AutoML utiliza BERT para caracterização de texto para todos os dados. Nesse caso, verá o PretrainedTextDNNTransformer no modelo final.

O BERT geralmente é executado mais tempo do que outros caracterizadores. Para um melhor desempenho, recomendamos que utilize "STANDARD_NC24r" ou "STANDARD_NC24rs_V3" para as respetivas capacidades RDMA.

O AutoML distribuirá a preparação BERT por vários nós, se estiverem disponíveis (até um máximo de oito nós). Isto pode ser feito no objeto AutoMLConfig ao definir 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 da linguagem do conjunto de dados, o AutoML escolhe o modelo BERT adequado. Para dados alemães, utilizamos o modelo BERT alemão. Para inglês, utilizamos o modelo BERT inglês. Para todos os outros idiomas, utilizamos o modelo BERT multilingue.

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

Passos seguintes