Compartilhar via


SMOTE

Este artigo descreve como usar o componente SMOTE no designer do Azure Machine Learning para aumentar o número de casos sub-representados em um conjunto de dados usado para o aprendizado de máquina. O SMOTE é a melhor forma de ampliar o número de casos esparsos do que simplesmente duplicar os casos existentes.

Você conecta o componente SMOTE a um conjunto de dados que está desequilibrado. Existem muitos motivos pelos quais um conjunto de dados pode não estar equilibrado. Por exemplo, a categoria que você está visando pode ser rara na população ou os dados podem ser difíceis de coletar. Normalmente, você usa SMOTE quando a classe que você deseja analisar está sub-representada.

O componente retorna um conjunto de dados que contém os exemplos originais. Ele também retorna um número de amostras minoritárias sintéticas, dependendo da porcentagem que você especificar.

Mais sobre SMOTE

A SMOTE (técnica de sobreamostragem minoritária sintética) é uma técnica estatística para aumentar o número de casos em seu conjunto de um modo equilibrado. O componente funciona gerando novas instâncias de casos minoritários existentes que você fornece como entrada. Essa implementação de SMOTE não muda o número de casos majoritários.

As novas instâncias não são apenas cópias de casos minoritários existentes. Em vez disso, o algoritmo usa exemplos do espaço de recurso para cada classe de destino e seus vizinhos mais próximos. O algoritmo, em seguida, gera novos exemplos que combinam recursos do caso de destino com recursos de seus vizinhos. Essa abordagem aumenta os recursos disponíveis para cada classe e torna os exemplos mais gerais.

A SMOTE usa todo o conjunto de dados como uma entrada, mas aumenta a porcentagem apenas dos casos minoritários. Por exemplo, suponha que você tenha um conjunto de valores desequilibrado em que apenas 1% dos casos tem o valor de destino A (a classe minoritária) e 99% dos casos tenham o valor B. Para aumentar a porcentagem de casos minoritários para o dobro da porcentagem anterior, você digitaria 200 para o percentual de SMOTE nas propriedades do componente.

Exemplos

Recomendamos que você tente usar o SMOTE com um conjunto de dados menor para ver como funciona. O exemplo a seguir usa o conjunto de dados de doação de sangue disponível no designer do Azure Machine Learning.

Se você adicionar o conjunto de dados a um pipeline e escolher Visualizar na saída do conjunto de dados, poderá ver que, das 748 linhas ou casos no conjunto de dados, 570 casos (76%) são de Classe 0 e 178 casos (24%) são de Classe 1. Embora esse resultado não seja tão desequilibrado, a Classe 1 representa as pessoas que doaram sangue, portanto, essas linhas contêm o espaço de recurso que você deseja modelar.

Para aumentar o número de ocorrências, você pode definir o valor de porcentagem SMOTE em múltiplos de 100, da seguinte maneira:

Classe 0 Classe 1 total
Conjunto de dados original

(equivalente à porcentagem SMOTE = 0)
570

76%
178

24%
748
Porcentagem SMOTE = 100 570

62%
356

38%
926
Porcentagem SMOTE = 200 570

52%
534

48%
1.104
Porcentagem SMOTE = 300 570

44%
712

56%
1\.282

Aviso

Aumentar o número de casos usando SMOTE não é garantia de gerar modelos mais precisos. Tente executar o pipeline com diferentes percentuais, conjuntos de dados de recursos diferentes e diferentes números de vizinhos próximos para ver como a adição de casos influencia seu modelo.

Como configurar a SMOTE

  1. Adicione o componente SMOTE ao pipeline. Você pode encontrar o componente em Componentes de transformação de dados, na categoria Manipulação.

  2. Conecte o conjunto de dados que você deseja aumentar. Se você quiser especificar o espaço de recurso para criar os novos casos, usando apenas colunas específicas ou excluindo algumas, use o componente Selecionar Colunas no Conjunto de Dados. Em seguida, você pode isolar as colunas que deseja usar antes de usar a SMOTE.

    Caso contrário, a criação de novos casos por meio da SMOTE é baseada em todas as colunas que você fornece como entradas. Pelo menos uma coluna das colunas de recurso é numérica.

  3. Verifique se a coluna que contém o rótulo ou a classe de destino está selecionada. A SMOTE aceita apenas rótulos binários.

  4. O componente SMOTE identifica automaticamente a classe minoritária na coluna de rótulo e, em seguida, obtém todos os exemplos para a classe minoritária. Todas as colunas não podem ter valores NaN.

  5. Na opção Porcentagem SMOTE, insira um número inteiro que indica a porcentagem de destino de casos minoritários no conjunto de saída. Por exemplo:

    • Você insere 0. O componente SMOTE retorna exatamente o mesmo conjunto de dados que você forneceu como entrada. Novos casos minoritários não são adicionados. Nesse conjunto de dados, a proporção de classe não foi alterada.

    • Você insere 100. O componente SMOTE gera novos casos minoritários. O mesmo número de casos minoritários que estavam no conjunto de dados original é adicionado. Como a SMOTE não aumenta o número de casos majoritários, a proporção de casos de cada classe foi alterada.

    • Você insere 200. O componente dobra a porcentagem de casos minoritários em comparação com o conjunto de dados original. Isso não resulta no dobro do número de casos minoritários que antes. Em vez disso, o tamanho do conjunto de dados é aumentado de forma que o número de casos majoritários permaneça o mesmo. O número de casos minoritários é aumentado até que corresponda ao valor de percentual desejado.

    Observação

    Use somente múltiplos de 100 para o porcentagem SMOTE.

  6. Use a opção Número de vizinhos mais próximos para determinar o tamanho do espaço do recurso que usa o algoritmo SMOTE na criação de novos casos. Um vizinho mais próximo é uma linha de dados (um caso) que é semelhante a um caso de destino. A distância entre duas ocorrências é medida pela combinação dos vetores de peso de todos os recursos.

    • Ao aumentar o número de vizinhos mais próximos, você obtém recursos de mais casos.
    • Mantendo o número de vizinhos mais próximos baixos, você usa recursos que são mais parecidos com os do exemplo original.
  7. Insira um valor na caixa Propagação aleatória se quiser garantir os mesmos resultados em relação às execuções do mesmo pipeline, com os mesmos dados. Caso contrário, o componente gerará uma propagação aleatória com base nos valores do relógio do processador quando o pipeline for implantado. A geração de uma propagação aleatória pode causar resultados ligeiramente diferentes em relação a execuções.

  8. Envie o pipeline.

    A saída do componente é um conjunto de registros que contém as linhas originais mais um número de linhas adicionadas com casos minoritários.

Observações técnicas

  • Quando você estiver publicando um modelo que usa o componente SMOTE, remova SMOTE do pipeline preditivo antes que ele seja publicado como um serviço Web. O motivo é que a SMOTE é destinada a melhorar um modelo durante o treinamento, e não para pontuação. Você poderá receber um erro se um pipeline de previsão publicado contiver o componente SMOTE.

  • Muitas vezes, você pode obter resultados melhores se limpar valores ausentes ou aplicar outras transformações para corrigir dados antes de aplicar a SMOTE.

  • Alguns pesquisadores investigaram se a SMOTE é eficaz em dados de alta dimensão ou esparsos, como dados usados em classificação de texto ou conjuntos de dados genômicos. Este artigo apresenta um bom resumo dos efeitos e da validade teórica da aplicação da SMOTE nesses casos: Blagus and Lusa: SMOTE for high-dimensional class-imbalanced data.

  • Se a SMOTE não estiver em vigor no seu conjunto de dados, outras abordagens que você pode considerar incluem:

    • Métodos para sobreamostrar os casos minoritários ou subamostrar os casos majoritários.
    • Técnicas de ensemble que ajudam o aluno diretamente usando agrupamento, bagging ou estímulo adaptativo.

Próximas etapas

Confira o conjunto de componentes disponíveis no Azure Machine Learning.