SMOTE

Este artigo descreve como utilizar o componente SMOTE no estruturador do Azure Machine Learning para aumentar o número de casos sub-representados num conjunto de dados utilizado para machine learning. O SMOTE é uma forma melhor de aumentar o número de casos raros do que simplesmente duplicar casos existentes.

Pode ligar o componente SMOTE a um conjunto de dados desequilibrado. Existem muitas razões pelas quais um conjunto de dados pode estar desequilibrado. Por exemplo, a categoria que está a filtrar pode ser rara na população ou os dados podem ser difíceis de recolher. Normalmente, utiliza SMOTE quando a classe que pretende analisar está sub-representada.

O componente devolve um conjunto de dados que contém os exemplos originais. Também devolve uma série de amostras minoritárias sintéticas, consoante a percentagem que especificar.

Mais informações sobre SMOTE

A Técnica de Sobreamplamento de Minoria Sintética (SMOTE) é uma técnica estatística para aumentar o número de casos no conjunto de dados de uma forma equilibrada. O componente funciona ao gerar novas instâncias a partir de casos minoritários existentes que fornece como entrada. Esta implementação de 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 tira amostras do espaço de funcionalidades para cada classe de destino e os respetivos vizinhos mais próximos. Em seguida, o algoritmo gera novos exemplos que combinam as funcionalidades do caso de destino com as funcionalidades dos respetivos vizinhos. Esta abordagem aumenta as funcionalidades disponíveis para cada classe e torna os exemplos mais gerais.

O SMOTE utiliza todo o conjunto de dados como uma entrada, mas aumenta a percentagem de apenas os casos minoritários. Por exemplo, suponha que tem um conjunto de dados desequilibrado em que apenas 1% dos casos têm o valor de destino A (a classe minoritária) e 99% dos casos têm o valor B. Para aumentar a percentagem de casos minoritários para o dobro da percentagem anterior, introduza 200 para percentagem de SMOTE nas propriedades do componente.

Exemplos

Recomendamos que tente utilizar o SMOTE com um pequeno conjunto de dados para ver como funciona. O exemplo seguinte utiliza o conjunto de dados Doação de Sangue disponível no estruturador do Azure Machine Learning.

Se adicionar o conjunto de dados a um pipeline e selecionar Visualizar na saída do conjunto de dados, pode ver que das 748 linhas ou casos no conjunto de dados, 570 casos (76 por cento) são da Classe 0 e 178 casos (24 por cento) são da Classe 1. Embora este resultado não seja terrivelmente desequilibrado, a Classe 1 representa as pessoas que doaram sangue, pelo que estas linhas contêm o espaço de características que pretende modelar.

Para aumentar o número de casos, pode definir o valor da percentagem SMOTE ao utilizar múltiplos de 100, da seguinte forma:

Classe 0 Classe 1 total
Conjunto de dados original

(equivalente à percentagem = de SMOTE0)
570

76%
178

24%
748
Percentagem = de SMOTE100 570

62%
356

38%
926
Percentagem = de SMOTE200 570

52%
534

48%
1,104
Percentagem = de SMOTE300 570

44%
712

56%
1,282

Aviso

Não é garantido que o aumento do número de casos através de SMOTE produza modelos mais precisos. Experimente fazer pipelining com percentagens diferentes, conjuntos de funcionalidades diferentes e diferentes números de vizinhos mais próximos para ver como adicionar casos influencia o seu modelo.

Como configurar o SMOTE

  1. Adicione o componente SMOTE ao pipeline. Pode encontrar o componente em Componentes de Transformação de Dados, na categoria Manipulação .

  2. Ligue o conjunto de dados que pretende aumentar. Se quiser especificar o espaço de funcionalidades para criar os novos casos, utilizando apenas colunas específicas ou excluindo algumas, utilize o componente Selecionar Colunas no Conjunto de Dados . Em seguida, pode isolar as colunas que pretende utilizar antes de utilizar o SMOTE.

    Caso contrário, a criação de novos casos através de SMOTE baseia-se em todas as colunas que fornecer como entradas. Pelo menos uma coluna das colunas da funcionalidade é numérica.

  3. Certifique-se de que a coluna que contém a etiqueta ou a classe de destino está selecionada. O SMOTE só aceita etiquetas binárias.

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

  5. Na opção percentagem SMOTE , introduza um número inteiro que indique a percentagem de destino de casos minoritários no conjunto de dados de saída. Por exemplo:

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

    • Introduza 100. O componente SMOTE gera novos casos minoritários. Adiciona o mesmo número de casos minoritários que estavam no conjunto de dados original. Uma vez que o SMOTE não aumenta o número de casos maioritários, a proporção de casos de cada classe foi alterada.

    • Introduza 200. O 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 dos casos minoritários que antes. Pelo contrário, o tamanho do conjunto de dados é aumentado de forma a que o número de casos maioritários permaneça igual. O número de casos minoritários é aumentado até corresponder ao valor de percentagem pretendido.

    Nota

    Utilize apenas múltiplos de 100 para a percentagem SMOTE.

  6. Utilize a opção Número de vizinhos mais próximos para determinar o tamanho do espaço de funcionalidades que o algoritmo SMOTE utiliza 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 dois casos é medida ao combinar os vetores ponderados de todas as funcionalidades.

    • Ao aumentar o número de vizinhos mais próximos, obtém funcionalidades de mais casos.
    • Ao manter o número de vizinhos mais próximos baixo, utiliza funcionalidades mais semelhantes às do exemplo original.
  7. Introduza um valor na caixa Sementes aleatórias 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 do relógio do processador quando o pipeline é implementado. A geração de uma semente aleatória pode causar resultados ligeiramente diferentes ao longo das execuções.

  8. Submeta o pipeline.

    O resultado do componente é um conjunto de dados que contém as linhas originais e várias linhas adicionadas com casos minoritários.

Notas técnicas

  • Quando estiver a publicar um modelo que utiliza o componente SMOTE , remova o SMOTE do pipeline preditivo antes de ser publicado como um serviço Web. O motivo é que o SMOTE se destina a melhorar um modelo durante a preparação, não para classificação. Poderá obter um erro se um pipeline preditivo publicado contiver o componente SMOTE.

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

  • Alguns investigadores investigaram se o SMOTE é eficaz em dados altamente dimensionais ou dispersos, como dados utilizados na classificação de texto ou conjuntos de dados genomics. Este documento tem um bom resumo dos efeitos e da validade teórica da aplicação de SMOTE nestes casos: Blagus e Lusa: SMOTE para dados de classe altamente dimensionais desequilibrados.

  • Se o SMOTE não for eficaz no seu conjunto de dados, outras abordagens que poderá considerar incluem:

    • Métodos para sobrecarregar os casos minoritários ou subamplar os casos maioritários.
    • Técnicas de conjunto que ajudam o formando diretamente através do clustering, do empacotamento ou do reforço adaptável.

Passos seguintes

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