Dela via


SMOTE

Den här artikeln beskriver hur du använder SMOTE-komponenten i Azure Machine Learning-designern för att öka antalet underrepresenterade fall i en datauppsättning som används för maskininlärning. SMOTE är ett bättre sätt att öka antalet sällsynta fall än att helt enkelt duplicera befintliga fall.

Du ansluter SMOTE-komponenten till en datauppsättning som är obalanserad. Det finns många orsaker till varför en datauppsättning kan vara obalanserad. Till exempel kan den kategori som du riktar in dig på vara sällsynt i populationen, eller så kan data vara svåra att samla in. Vanligtvis använder du SMOTE när klassen som du vill analysera är underrepresenterad.

Komponenten returnerar en datauppsättning som innehåller de ursprungliga exemplen. Den returnerar också ett antal syntetiska minoritetsprover, beroende på den procentandel som du anger.

Mer om SMOTE

SmOTE (Synthetic Minority Oversampling Technique) är en statistisk teknik för att öka antalet fall i datamängden på ett balanserat sätt. Komponenten fungerar genom att generera nya instanser från befintliga minoritetsfall som du anger som indata. Denna implementering av SMOTE ändrar inte antalet majoritetsfall.

De nya instanserna är inte bara kopior av befintliga minoritetsfall. I stället tar algoritmen exempel på funktionsutrymmet för varje målklass och dess närmaste grannar. Algoritmen genererar sedan nya exempel som kombinerar funktioner i målfallet med funktioner hos grannarna. Den här metoden ökar de funktioner som är tillgängliga för varje klass och gör exemplen mer allmänna.

SMOTE tar hela datamängden som indata, men den ökar bara procentandelen av minoritetsfallen. Anta till exempel att du har en obalanserad datauppsättning där bara 1 procent av fallen har målvärdet A (minoritetsklassen) och 99 procent av fallen har värdet B. Om du vill öka procentandelen minoritetsfall till dubbelt så mycket som den föregående procentandelen anger du 200 för SMOTE-procent i komponentens egenskaper.

Exempel

Vi rekommenderar att du provar att använda SMOTE med en liten datamängd för att se hur det fungerar. I följande exempel används datamängden Blodgivning som är tillgänglig i Azure Machine Learning-designern.

Om du lägger till datauppsättningen i en pipeline och väljer Visualisera på datauppsättningens utdata kan du se att av de 748 raderna eller fallen i datauppsättningen är 570 fall (76 procent) av klass 0 och 178 fall (24 procent) av klass 1. Även om det här resultatet inte är särskilt obalanserat representerar klass 1 de personer som donerade blod, så dessa rader innehåller det funktionsutrymme som du vill modellera.

Om du vill öka antalet ärenden kan du ange värdet för SMOTE-procent genom att använda multiplar på 100 enligt följande:

Klass 0 Klass 1 totalt
Ursprunglig datamängd

(motsvarar SMOTE-procent = 0)
570

76%
178

24%
748
SMOTE-procent = 100 570

62%
356

38%
926
SMOTE-procent = 200 570

52 %
534

48%
1 104
SMOTE-procent = 300 570

44%
712

56%
1,282

Varning

Att öka antalet fall med hjälp av SMOTE är inte garanterat att producera mer exakta modeller. Prova att pipelining med olika procentandelar, olika funktionsuppsättningar och olika antal närmaste grannar för att se hur tillägg av ärenden påverkar din modell.

Så här konfigurerar du SMOTE

  1. Lägg till SMOTE-komponenten i pipelinen. Du hittar komponenten under Datatransformeringskomponenter i kategorin Manipulation .

  2. Anslut den datauppsättning som du vill öka. Om du vill ange funktionsutrymmet för att skapa de nya ärendena, antingen genom att bara använda specifika kolumner eller genom att exkludera vissa, använder du komponenten Välj kolumner i datauppsättning . Du kan sedan isolera de kolumner som du vill använda innan du använder SMOTE.

    I annat fall baseras skapandet av nya ärenden via SMOTE på alla kolumner som du anger som indata. Minst en kolumn i funktionskolumnerna är numerisk.

  3. Kontrollera att kolumnen som innehåller etiketten, eller målklassen, är markerad. SMOTE accepterar endast binära etiketter.

  4. SMOTE-komponenten identifierar automatiskt minoritetsklassen i etikettkolumnen och hämtar sedan alla exempel för minoritetsklassen. Alla kolumner kan inte ha NaN-värden.

  5. I alternativet SMOTE-procent anger du ett heltal som anger målprocenten för minoritetsfall i utdatauppsättningen. Exempel:

    • Du anger 0. SMOTE-komponenten returnerar exakt samma datauppsättning som du angav som indata. Det lägger inte till några nya minoritetsfall. I den här datamängden har klassandelen inte ändrats.

    • Du anger 100. SMOTE-komponenten genererar nya minoritetsfall. Den lägger till samma antal minoritetsfall som fanns i den ursprungliga datamängden. Eftersom SMOTE inte ökar antalet majoritetsfall har andelen fall i varje klass ändrats.

    • Du anger 200. Komponenten fördubblar procentandelen minoritetsfall jämfört med den ursprungliga datamängden. Detta leder inte till dubbelt så många minoritetsfall som tidigare. I stället ökar datamängdens storlek på ett sådant sätt att antalet majoritetsfall förblir detsamma. Antalet minoritetsärende ökas tills det matchar det önskade procentvärdet.

    Anteckning

    Använd endast multiplar av 100 för SMOTE-procentandelen.

  6. Använd alternativet Antal närmaste grannar för att fastställa storleken på det funktionsutrymme som SMOTE-algoritmen använder för att skapa nya fall. En närmaste granne är en rad med data (ett ärende) som liknar ett målfall. Avståndet mellan två fall mäts genom att kombinera viktade vektorer för alla funktioner.

    • Genom att öka antalet närmaste grannar får du funktioner från fler fall.
    • Genom att hålla antalet närmaste grannar lågt använder du funktioner som liknar dem i det ursprungliga exemplet.
  7. Ange ett värde i rutan Slumpmässigt startvärde om du vill säkerställa samma resultat över körningar av samma pipeline, med samma data. Annars genererar komponenten ett slumpmässigt startvärde baserat på processorklockans värden när pipelinen distribueras. Genereringen av ett slumpmässigt frö kan orsaka något olika resultat över körningar.

  8. Skicka pipelinen.

    Komponentens utdata är en datauppsättning som innehåller de ursprungliga raderna plus ett antal tillagda rader med minoritetsfall.

Tekniska anteckningar

  • När du publicerar en modell som använder SMOTE-komponenten tar du bort SMOTE från den förutsägande pipelinen innan den publiceras som en webbtjänst. Anledningen är att SMOTE är avsett att förbättra en modell under träning, inte för bedömning. Du kan få ett fel om en publicerad förutsägelsepipeline innehåller SMOTE-komponenten.

  • Du kan ofta få bättre resultat om du rensar saknade värden eller tillämpar andra transformeringar för att åtgärda data innan du tillämpar SMOTE.

  • Vissa forskare har undersökt om SMOTE är effektivt på högdimensionella eller glesa data, till exempel data som används i textklassificering eller genomikdatauppsättningar. Detta dokument innehåller en bra sammanfattning av effekterna och den teoretiska giltigheten av att tillämpa SMOTE i sådana fall: Blagus och Lusa: SMOTE för högdimensionella klassobalanserade data.

  • Om SMOTE inte är effektivt i din datauppsättning kan du överväga andra metoder:

    • Metoder för att översampla minoritetsfallen eller undersampling av majoritetsfallen.
    • Ensembletekniker som hjälper användaren direkt genom att använda klustring, bagging eller anpassningsbara ökningar.

Nästa steg

Se den uppsättning komponenter som är tillgängliga för Azure Machine Learning.