Preparação de dados para classificação

Saiba como usar o AutoML para preparar seus dados para classificação.

Este artigo descreve como o site AutoML prepara os dados para o treinamento de classificação e descreve as definições de dados configuráveis. O senhor pode ajustar essas opções durante a configuração do experimento na UI do AutoML.

Para definir essas configurações usando a API do AutoML, consulte a referência da API do AutoML Python.

Tipos de recursos de dados compatíveis

Somente os tipos de recurso listados abaixo são compatíveis. Por exemplo, imagens não são suportadas.

Os seguintes tipos de recursos são compatíveis:

  • Numérico (ByteType, ShortType, IntegerType, LongType, FloatType e DoubleType)

  • Booleana

  • Cadeia de caracteres (texto categórico ou em inglês)

  • Carimbos de data e hora (TimestampType, DateType)

  • ArrayType[Numérico] (Databricks Runtime 10.4 LTS MLe acima)

  • DecimalType (Databricks Runtime 11.3 LTS MLe acima)

Impute valores faltantes

Em Databricks Runtime 10.4 LTS ML e acima, o senhor pode especificar como os valores nulos são imputados. Na interface do usuário, selecione um método no menu suspenso da coluna Impute with no esquema da tabela. Na API, use o parâmetro imputers. Para obter mais informações, consulte AutoML Python API reference.

Em default, AutoML seleciona um método de imputação com base no tipo e no conteúdo da coluna.

Observação

Se o senhor especificar um método de imputação que não seja odefault, o AutoML não realizará a detecção do tipo semântico.

Suporte de conjunto de dados desbalanceado para problemas de classificação

Em Databricks Runtime 11.3 LTS ML e acima, se o AutoML detectar que um dataset está desequilibrado, ele tentará reduzir o desequilíbrio do treinamento dataset reduzindo a amostragem da(s) classe(s) principal(is) e adicionando pesos de classe. AutoML equilibra apenas o treinamento dataset e não equilibra o conjunto de dados de teste e validação. Isso garante que o desempenho do modelo seja sempre avaliado no site dataset não enriquecido com a verdadeira distribuição da classe de entrada.

Para equilibrar um treinamento desequilibrado dataset, o AutoML usa pesos de classe que são inversamente relacionados ao grau de redução da amostragem de uma determinada classe. Por exemplo, se um treinamento dataset com 100 amostras tiver 95 amostras pertencentes à classe A e cinco amostras pertencentes à classe B, o site AutoML reduzirá esse desequilíbrio reduzindo a amostragem da classe A para 70 amostras, ou seja, reduzindo a amostragem da classe A em uma proporção de 70/95 ou 0,736, mantendo o número de amostras na classe B em 5. Para garantir que o modelo final seja calibrado corretamente e que a distribuição de probabilidade da saída do modelo seja a mesma da entrada, o site AutoML aumenta o peso da classe A na proporção de 1/0,736, ou 1,358, enquanto mantém o peso da classe B em 1. AutoML usa esses pesos de classe no treinamento do modelo como um parâmetro para garantir que as amostras de cada classe sejam ponderadas adequadamente ao treinar o modelo.

Seleção de coluna

Em Databricks Runtime 10.3 ML e acima, o senhor pode especificar quais colunas AutoML deve usar para treinamento. Para excluir uma coluna na interface do usuário, desmarque-a na coluna Incluir. Na API, use o parâmetro exclude_cols. Para obter mais informações, consulte AutoML Python API reference.

O senhor não pode soltar a coluna selecionada como Alvo de previsão ou como coluna de tempo para dividir os dados.

Em default, todas as colunas são incluídas.

Dividir os dados em conjuntos de ensino, validação e teste

O AutoML divide seus dados em três divisões para treinamento, validação e teste. Dependendo do tipo de problema de ML, o senhor tem diferentes opções para dividir os dados.

Use os seguintes métodos para dividir os dados em conjuntos de treinamento, validação e teste:

(padrão) Divisão aleatória: Se uma estratégia de divisão de dados não for especificada, o site dataset será dividido aleatoriamente em 60% de divisão de ensino, 20% de divisão de validação e 20% de divisão de teste. Para a classificação, uma divisão aleatória estratificada garante que cada classe seja adequadamente representada nos conjuntos de treinamento, validação e teste.

Divisão cronológica: Em Databricks Runtime 10.4 LTS ML e acima, o senhor pode selecionar uma coluna de tempo para criar divisões cronológicas de ensino, validação e teste. As divisões cronológicas usam os pontos de dados mais antigos para treinamento, os próximos mais antigos para validação e os pontos mais recentes para teste. A coluna de tempo pode ser um carimbo de data/hora, um número inteiro ou uma coluna de cadeias de caracteres.

Divisão manual: Em Databricks Runtime 15.3 ML e acima, o senhor pode usar o API para configurar uma divisão manual. Especifique uma coluna dividida e use os valores train, validate, ou test para identificar as linhas que o senhor deseja usar para treinamento, validação e teste do conjunto de dados. Todas as linhas com valores de coluna dividida diferentes de train, test ou validate são ignoradas e um alerta correspondente é gerado.

Amostragem de grandes conjuntos de dados

Embora o AutoML distribua testes de ajuste de hiperparâmetros entre os nós de trabalho de um cluster, cada modelo é treinado em um único nó de trabalho.

O AutoML calcula automaticamente a memória necessária para carregar e treinar seu conjunto de dados e amostra o conjunto de dados, se necessário.

Versão do Databricks Runtime

Comportamento de amostragem

9,1 LTS ML - 10,4 LTS ML

A fração de amostragem é constante e não depende do tipo de nó do cluster ou da memória por nó.

11.x ML

A fração de amostragem aumenta para worker nós com mais memória por núcleo. Para aumentar o tamanho da amostra:

  • Use um tipo de instância com memória otimizada.

  • Ajuste spark.task.cpus na configuração do Spark. O default é 1 e o valor máximo é o número de CPUs no nó worker. O valor máximo é o número de CPUs no nó worker. Quando o senhor aumenta esse valor, o tamanho da amostra é maior, mas menos tentativas são executadas em paralelo.

Exemplo: Em uma máquina com 4 núcleos e 64 GB de RAM:

  • Com spark.task.cpus=1, quatro tentativas são executadas por worker, cada uma usando 16 GB de RAM.

  • Com spark.task.cpus=4, uma execução de teste por worker, usando toda a RAM de 64 GB.

11.3 LTS ML e acima

Se o site AutoML fizer uma amostragem do site dataset, a fração de amostragem será mostrada em Overview tab na UI.

12.2 LTS ML e acima

AutoML pode lidar com conjuntos de dados maiores alocando mais núcleos de CPU por treinamento tarefa. Aumente o tamanho da amostra selecionando uma instância com mais memória total.

Para problemas de classificação, o AutoML usa o método PySpark sampleBy para amostragem estratificada a fim de preservar a distribuição do rótulo de destino.

Para problemas de regressão, o AutoML usa o método PySpark sample.

Detecção de tipo semântico

Observação

Com Databricks Runtime 9.1 LTS ML e acima, AutoML tenta detectar se as colunas têm um tipo semântico diferente do tipo de dados Spark ou Pandas no esquema da tabela. O AutoML trata essas colunas como o tipo semântico detectado. Essas detecções são o melhor esforço e, às vezes, podem ignorar a existência de tipos semânticos. O senhor também pode definir manualmente o tipo semântico de uma coluna ou informar ao site AutoML para não aplicar a detecção de tipo semântico a uma coluna usando a anotação.

Especificamente, o AutoML faz estes ajustes:

  • As colunas de strings e inteiros que representam dados de data ou carimbo de data/hora são tratadas como um tipo de carimbo de data/hora.

  • Colunas de string que representam dados numéricos são tratadas como um tipo numérico.

Com Databricks Runtime 10,1 MLe acima, o AutoML também faz estes ajustes:

  • Colunas numéricas que contêm IDs categóricas são tratadas como uma feição categórica.

  • Colunas de string que contêm texto em inglês são tratadas como uma feição de texto.

Anotações de tipo semântico

Com o Databricks Runtime 10.1 MLe acima, você pode controlar manualmente o tipo semântico atribuído, colocando uma anotação de tipo semântico em uma coluna. Para anotar manualmente o tipo semântico da coluna <column-name> como <semantic-type>, use a seguinte sintaxe:

metadata_dict = df.schema["<column-name>"].metadata
metadata_dict["spark.contentAnnotation.semanticType"] = "<semantic-type>"
df = df.withMetadata("<column-name>", metadata_dict)

<semantic-type> pode ser um dos seguintes:

  • categorical: A coluna contém valores categóricos (por exemplo, valores numéricos que devem ser tratados como IDs).

  • numeric: A coluna contém valores numéricos (por exemplo, valores de string que podem ser analisados em números).

  • datetimeA coluna contém valores de marca de tempo (string, numéricos ou valores de data que podem ser convertidos em marcas de tempo).

  • text: a coluna string contém texto em inglês.

Para desabilitar a detecção de tipo semântico em uma coluna, use a anotação de palavra-chave especial native.