Preparação de dados para classificação
Saiba como usar o AutoML para preparar seus dados para classificação.
Este artigo descreve como o AutoML prepara dados para treinamento de classificação e descreve as configurações de dados configuráveis. Você pode ajustar essas opções durante a configuração do experimento na interface de usuário do AutoML.
Para definir essas configurações usando a API do AutoML), consulte a referência da API Python do AutoML.
Tipos de recursos de dados com suporte
Somente os tipos de recursos listados abaixo são suportados. Por exemplo, não há suporte para imagens.
Há suporte para os seguintes tipos de recursos:
- Numérico (
ByteType
,ShortType
,IntegerType
,LongType
,FloatType
eDoubleType
) - Boolean
- Cadeia de caracteres (texto categórico ou inglês)
- Carimbos de data/hora (
TimestampType
,DateType
) - ArrayType[Numeric] (Databricks Runtime 10.4 LTS ML e superior)
- DecimalType (Databricks Runtime 11.3 LTS ML e posterior)
Acrescentar valores ausentes
No Databricks Runtime 10.4 LTS ML e superior, você pode especificar como valores nulos são imputados. Na interface do usuário, selecione um método na lista suspensa no Impute com coluna no esquema de tabela. Na API, use o parâmetro imputers
. Para obter mais informações, consulte Referência da API do AutoML Python.
Por padrão, o AutoML seleciona um método de imputação com base no tipo de coluna e no conteúdo.
Observação
Se você especificar um método de imputação não padrão, o AutoML não executará a detecção de tipo semântico.
Suporte de conjunto de dados desbalanceado para problemas de classificação
No Databricks Runtime 11.3 LTS ML e superior, se o AutoML detectar que um conjunto de dados está desequilibrado, ele tentará reduzir o desequilíbrio do conjunto de dados de treinamento diminuindo a resolução das classes principais e adicionando pesos de classe. O AutoML equilibra apenas o conjunto de dados de treinamento, e não os conjuntos de dados de teste e validação. Isso garante que o desempenho do modelo seja sempre avaliado no conjunto de dados não enriquecido com a distribuição de classe de entrada verdadeira.
Para equilibrar um conjunto de dados de treinamento desequilibrado, o AutoML usa pesos de classe que estão inversamente relacionados ao grau pelo qual uma determinada classe é reduzida. Por exemplo, se um conjunto de dados de treinamento com 100 amostras tem 95 amostras pertencentes à classe A e cinco amostras pertencentes à classe B, o AutoML reduz esse desequilíbrio subamostrando a classe A para 70 amostras, ou seja, subamostrando a classe A por uma proporção de 70/95 ou 0,736, enquanto mantém o número de amostras na classe B em 5. Para garantir que o modelo final seja calibrado corretamente e a distribuição de probabilidade da saída do modelo seja a mesma da entrada, o AutoML escala o peso da classe A pela taxa 1/0,736 ou 1,358, mantendo o peso da classe B como 1. Em seguida, o AutoML usa esses pesos de classe no treinamento de modelo como um parâmetro para garantir que as amostras de cada classe sejam devidamente ponderadas no treinamento do modelo.
Seleção de coluna
No Databricks Runtime 10.3 ML e superior, você pode especificar quais colunas o 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 Referência da API do AutoML Python.
Não é possível soltar a coluna selecionada como o destino de previsão ou como a coluna de tempo para dividir os dados.
Por padrão, todas as colunas já estão incluídas.
Dividir os dados em conjuntos de treinamento, 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, você 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 conjunto de dados será dividido aleatoriamente em 60% de divisão de treinamento, 20% de divisão de validação e 20% de divisão de teste. Para 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: no Databricks Runtime 10.4 LTS ML e superior, você pode selecionar uma coluna de tempo para criar treinamento cronológico, validar e testar divisões. As divisões cronológicas usam os primeiros pontos de dados para treinamento, os próximos para validação e os últimos pontos para teste. A coluna de tempo pode ser um carimbo de data/hora, um inteiro ou uma coluna de cadeia de caracteres.
Divisão manual: no Databricks Runtime 15.3 ML e superior, você pode usar a API para configurar uma divisão manual. Especifique uma coluna dividida e use os valores train
, validate
ou test
para identificar as linhas que você deseja usar para conjuntos de dados de treinamento, validação e teste. As linhas com os valores da 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 avaliações de ajuste de hiperparâmetro nos nós de trabalho de um cluster, cada modelo é treinado em apenas um nó de trabalho.
O AutoML estima automaticamente a memória necessária para carregar e treinar o conjunto de dados e faz a amostragem do 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 nós de trabalho com mais memória por núcleo. Para aumentar o tamanho da amostra: - Use um tipo de instância com otimização de memória. - Ajuste spark.task.cpus na configuração do Spark. O padrão é 1 e o valor máximo é o número de CPUs no nó de trabalho. O valor máximo é o número de CPUs no nó de trabalho. Quando você aumenta esse valor, o tamanho da amostra é maior, mas menos avaliações são executadas em paralelo.Exemplo: Em uma máquina com 4 núcleos e 64 GB de RAM: - Com spark.task.cpus=1 o , quatro testes são executados por trabalhador, cada um usando 16 GB de RAM.- Com spark.task.cpus=4 o , uma versão de avaliação é executada por trabalhador, usando todos os 64 GB de RAM. |
11.3 LTS ML e superior | Se o AutoML fizer uma amostragem do conjunto de dados, a fração de amostragem será mostrada na guia Visão geral na interface do usuário. |
12.2 LTS ML e superior | O AutoML pode lidar com conjuntos de dados maiores alocando mais núcleos de CPU por tarefa de treinamento. Aumente o tamanho da amostra selecionando uma instância com mais memória total. |
Para problemas de classificação, o AutoML usa o PySpark sampleBy
método para amostragem estratificada a fim de preservar a distribuição do rótulo de destino.
Para problemas de regressão, o AutoML usa o sample
método PySpark.
Detecção de tipo semântico
Observação
- O AutoML não executa a detecção de tipo semântico para colunas que têm métodos imputação personalizados especificados.
Com o Databricks Runtime 9.1 LTS ML e superior, o 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 não detectar a existência de tipos semânticos. Você também pode definir manualmente o tipo semântico de uma coluna ou informar AutoML para não aplicar a detecção de tipo semântico a uma coluna usando anotações.
Especificamente, o AutoML faz esses ajustes:
- As colunas de cadeias de caracteres e inteiros que representam dados de data ou de carimbo de data/hora serão tratadas como um tipo de carimbo de data/hora.
- Colunas de cadeia de caracteres que representam dados numéricos são tratadas como um tipo numérico.
Com o Databricks Runtime 10.1 ML e superior, o AutoML também faz esses ajustes:
- Colunas numéricas que contêm IDs categóricas são tratadas como um recurso categórico.
- Colunas de cadeia de caracteres que contêm texto em inglês são tratadas como um recurso de texto.
Anotações de tipo semântico
Com o Databricks Runtime 10.1 ML e superior, 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 de 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 cadeia de caracteres que podem ser analisados em números).datetime
: A coluna contém valores de carimbo de data/hora (cadeia de caracteres, numéricos ou valores de datas que podem ser convertidos em carimbos de hora).text
: A coluna de cadeia de caracteres contém texto em inglês.
Para desabilitar a detecção de tipo semântico em uma coluna, use a anotação native
especial de palavra-chave.