Partilhar 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 aprendizado de máquina. O SMOTE é uma forma melhor de aumentar o número de casos raros do que simplesmente duplicar os casos existentes.

Você conecta o componente SMOTE a um conjunto de dados que está desequilibrado. Há muitas razões pelas quais um conjunto de dados pode ser desequilibrado. Por exemplo, a categoria que você está segmentando 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 de minorias sintéticas, dependendo da porcentagem que você especificar.

Mais sobre SMOTE

A Técnica de Superamostragem de Minorias Sintéticas (SMOTE) é uma técnica estatística para aumentar o número de casos em seu conjunto de dados de forma equilibrada. O componente funciona gerando novas instâncias a partir de casos minoritários existentes que você fornece como entrada. Esta implementação do SMOTE não altera o número de casos maioritários.

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

O SMOTE toma todo o conjunto de dados como entrada, mas aumenta a percentagem apenas dos casos minoritários. Por exemplo, suponha que você tenha um conjunto de dados desequilibrado onde apenas 1% dos casos têm o valor-alvo A (a classe minoritária) e 99% dos casos têm o valor B. Para aumentar a porcentagem de casos minoritários para o dobro da porcentagem anterior, você inseriria 200 para a porcentagem SMOTE nas propriedades do componente.

Exemplos

Recomendamos que você tente usar o SMOTE com um pequeno conjunto de dados para ver como ele 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 selecionar 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 muito desequilibrado, a Classe 1 representa as pessoas que doaram sangue, então essas linhas contêm o espaço de recurso que você deseja modelar.

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

Classe 0 Classe 1 total
Conjunto de dados original

(equivalente a Percentagem = de SMOTE 0)
570

76%
178

24%
748
Percentagem = SMOTE 100 570

62%
356

38%
926
Percentagem = SMOTE 200 570

52%
534

48%
1104
Percentagem = SMOTE 300 570

44%
712

56%
1,282

Aviso

Não é garantido que o aumento do número de casos usando SMOTE produza modelos mais precisos. Experimente pipelining com diferentes porcentagens, diferentes conjuntos de recursos e diferentes números de vizinhos mais próximos para ver como a adição de casos influencia seu modelo.

Como configurar o SMOTE

  1. Adicione o componente SMOTE ao seu 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 impulsionar. 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 o SMOTE.

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

  3. Verifique se a coluna que contém o rótulo ou a classe de destino está selecionada. 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 Percentagem SMOTE, introduza um número inteiro que indique a percentagem alvo de casos minoritários no conjunto de dados de saída. Por exemplo:

    • Você digita 0. O componente SMOTE retorna exatamente o mesmo conjunto de dados que você forneceu como entrada. Não acrescenta novos casos minoritários. Neste conjunto de dados, a proporção da classe não foi alterada.

    • Você digita 100. A componente SMOTE gera novos casos minoritários. Acrescenta o mesmo número de casos minoritários que constavam do conjunto de dados original. Como o SMOTE não aumenta o número de casos majoritários, a proporção de casos de cada classe mudou.

    • Você insere 200. A componente duplica a percentagem de casos minoritários em comparação com o conjunto de dados original. Isto não resulta em ter o dobro de casos minoritários do que antes. Em vez disso, a dimensão do conjunto de dados é aumentada de tal forma que o número de casos maioritários permanece inalterado. O número de casos minoritários é aumentado até corresponder ao valor percentual desejado.

    Nota

    Use apenas múltiplos de 100 para a porcentagem SMOTE.

  6. Use a opção Número de vizinhos mais próximos para determinar o tamanho do espaço de feição que o algoritmo SMOTE usa na criação de novos casos. Um vizinho mais próximo é uma linha de dados (um caso) semelhante a um caso de destino. A distância entre quaisquer dois casos é medida pela combinação dos vetores ponderados de todas as características.

    • Ao aumentar o número de vizinhos mais próximos, você obtém recursos de mais casos.
    • Ao manter o número de vizinhos mais próximos baixo, você usa recursos que são mais parecidos com os da amostra original.
  7. Insira um valor na caixa Semente aleatória se quiser garantir os mesmos resultados em execuções do mesmo pipeline, com os mesmos dados. Caso contrário, o componente gera uma semente aleatória com base nos valores de clock do processador quando o pipeline é implantado. A geração de uma semente aleatória pode causar resultados ligeiramente diferentes ao longo das corridas.

  8. Envie o pipeline.

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

Notas técnicas

  • Quando você estiver publicando um modelo que usa o componente SMOTE , remova o SMOTE do pipeline preditivo antes de ser publicado como um serviço Web. A razão é que o SMOTE se destina a melhorar um modelo durante o treino, não a pontuar. Você pode receber um erro se um pipeline preditivo publicado contiver o componente SMOTE.

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

  • Alguns pesquisadores investigaram se o 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 tem um bom resumo dos efeitos e da validade teórica da aplicação do SMOTE nesses casos: Blagus e Lusa: SMOTE para dados de classe desequilibrada de alta dimensão.

  • Se o SMOTE não for eficaz em seu conjunto de dados, outras abordagens que você pode considerar incluem:

    • Métodos de sobreamostragem dos casos minoritários ou subamostragem dos casos maioritários.
    • Técnicas de conjunto que ajudam o aluno diretamente usando clustering, bagging ou impulsionamento adaptativo.

Próximos passos

Consulte o conjunto de componentes disponíveis para o Azure Machine Learning.