När ska jag balansera klasser i en träningsdatamängd?

Jag hade en onlinekurs där jag lärde mig att obalanserade klasser i träningsdata kan leda till problem eftersom klassificeringsalgoritmer går för majoritetsregeln, som det ger bra resultat om obalansen är för mycket. I ett uppdrag var man tvungen att balansera uppgifterna genom att undermåla majoritetsklassen.

I den här bloggen hävdar dock någon att balanserad data är ännu värre:

https://matloff.wordpress.com/2015/09/29/unbalanced-data-is-a-problem-no-balanced-data-is-worse/

Så vilken är det? Ska jag balansera data eller inte? Beror det på algoritmen som används, eftersom vissa kanske kan klara de obalanserade proportionerna i klasserna? Om ja, vilka är tillförlitliga för obalanserade data?

Svar

Den intuitiva resonemanget har förklarats i blogginlägget:

Om vårt mål är förutsägelse, kommer detta att orsaka en bestämd partiskhet. Och värre kommer det att vara en permanent bias, i den meningen att vi inte kommer att ha konsekventa uppskattningar när provstorleken växer.

Så utan tvekan är problemet med (artificiellt) balanserade data värre än det obalanserade fallet .

Balanserade data är bra för klassificering, men du tappar uppenbarligen information om utseendefrekvenser, vilket kommer att påverka själva noggrannhetsmätvärdena samt produktionsprestanda .

Låt oss säga att du känner igen handskrivna bokstäver från engelska alfabetet (26 bokstäver). Att överväga varje bokstavsutseende kommer att ge varje bokstav en sannolikhet att klassificeras (korrekt eller inte) ungefär 1/26, så klassificeraren kommer att glömma den faktiska fördelningen av bokstäver i originalprovet. Och det är ok när klassificeraren kan generalisera och känna igen varje bokstav med hög noggrannhet .

Men om noggrannhet och framför allt generalisering inte är ”t” så hög ”(jag kan inte ge dig en definition – du kan tänka på det precis som ett” värsta fall ”) – de felklassificerade punkterna kommer mest -fördelar sannolikt lika mellan alla bokstäver, något som:

"A" was misclassified 10 times "B" was misclassified 10 times "C" was misclassified 11 times "D" was misclassified 10 times ...and so on 

Till skillnad från utan att balansera (förutsatt att ”A” och ”C” har mycket högre sannolikheter för utseende i text)

"A" was misclassified 3 times "B" was misclassified 14 times "C" was misclassified 3 times "D" was misclassified 14 times ...and so on 

Så ofta fall kommer att få färre felklassificeringar. Om det är bra eller inte beror på din uppgift. För naturlig textigenkänning kan man argumentera för att bokstäver med högre frekvenser är mer livskraftiga, eftersom de skulle bevara semantiken i originaltexten och föra igenkänningsuppgiften närmare förutsägelsen (där semantik representerar tendenser ). Men om du försöker känna igen något som en skärmdump av ECDSA-nyckel (mer entropi -> mindre förutsägelse) – skulle det vara till hjälp att hålla data obalanserad. Återigen beror det på.

Den viktigaste skillnaden är att noggrannhetsberäkningen i sig själv blir partisk (som du kan se i exemplet med det balanserade alfabetet), så du vet inte hur modellens beteende påverkas av de mest sällsynta eller vanligaste punkterna.

PS Du kan alltid spåra prestanda för obalanserad klassificering med Precision / Recall -mätvärden först och bestämma om du behöver lägga till balansering eller inte.


EDIT : Det finns ytterligare förvirring som ligger i uppskattningsteori exakt i skillnaden mellan provmedelvärde och populationsmedelvärde. Till exempel kanske du känner till (utan tvekan) faktisk fördelning av engelska bokstäver i alfabetet $ p (x_i | \ theta) $ , men ditt prov (träningssats) är inte tillräckligt stor för att uppskatta den korrekt (med $ p (x_i | \ hat \ theta) $ ). För att kompensera för en $ \ hat \ theta_i – \ theta_i $ rekommenderas det ibland att balansera klasser beroende på antingen befolkningen själv eller parametrar kända från ett större urval (därmed bättre uppskattning). I praktiken finns det dock ingen garanti för att ”större urval” distribueras identiskt på grund av risken för att få partisk data i varje steg (låt oss säga engelska bokstäver samlade från teknisk litteratur vs fiktion mot hela biblioteket) så balansering kan fortfarande vara skadlig .

Detta svar bör också klargöra tillämplighetskriterier för balansering:

Klassobalansproblemet orsakas av att det inte finns tillräckligt med mönster som tillhör minoritetsklassen, inte av förhållandet mellan positiva och negativa mönster i sig.Generellt om du har tillräckligt med data uppstår inte ”klassobalansproblemet”

Som en slutsats är konstgjord balansering sällan användbart om träningsuppsättningen är tillräckligt stor. Frånvaro av statistiska data från en större distribueras identiskt -prov antyder inte heller något behov av konstgjord balansering (speciellt för förutsägelse), annars är uppskattarens kvalitet lika bra som ”sannolikhet att möta en dinosaurie”:

Vad är sannolikheten för att möta en dinosaurie ute på gatan?

1/2 möter du antingen en dinosaurie eller så möter du inte en dinosaurie

Kommentarer

  • Jag tror att förutom förklaringen till frågan är det viktiga svaret från detta svar att man bör försök först med obalans och kontrollera dess resultat och bara om det behövs gör balanseringen och kontrollera resultatet. +1
  • Så, med andra ord, med jämnt fördelade klasser till träningsundern kommer modellen att förlora sin noggrannhet i osedda data, eller hur? Men i motsatt fall, där du försöker slumpmässigt extrahera poster i en dataset för dina tränings- / testundersättningar, kommer din klassificerare att fungera bättre?
  • @ChristosK. Som många har sagt är det svårt att resonera om förutsägelse när du ser problemet som klassificering. I vilket fall som helst, om du tar bort bias (prov ”slumpmässigt”) – behöver du ett större prov för att förbättra prestanda. Det är bara ”vanligtvis” att provet är tillräckligt stort för att bevara semantik, så överbalansering skulle bara skada och fungera som att reglera en hammare som ”plattar” allt utan ordentlig övervägande. Som dinosauriemetafor antyder betyder inte ”balanserad” inte ”jämnt” – du gör korrekt balansering bara när du vet att vissa sannolikheter är felaktiga i ett ”slumpmässigt” urval.
  • @ChristosK. Tack för några förtydliganden. Det är inte samma sak som jag menade men metoden är väldigt lik. Vanlig rekommendation för tillämpning av k-fold är att göra det när ditt ursprungliga prov är ”ganska litet”. Inte säker, men vikning ska inte göra ont i alla fall – det tar bara fler körningar, och ju mindre du bryr dig om förutsägelse, desto mindre bryr du dig om generalisering / prestanda så tautologisk som det låter :). Men totalt sett betyder k-vikning i princip mindre förspänning.
  • @ChristosK. Åh, och som en varning kan spam / not-spam-förhållandet vara en icke-stationär slumpmässig variabel på egen hand. Med alla dessa ”falska nyheter”, ”ryska troll” och andra saker skulle jag vara försiktig med sådana antaganden – förhållandet kan också vara partiskt. Du kanske vill uppskatta PrecisionRecall på dina klassificeringsapparater, om något är underprover – jag vill hellre samla in / generera (?) Mer data.

Svar

I överensstämmelse med @ kjetil-b-halvorsens kommentar har den snabba antagandet av maskininlärning förvirrat forskare om förutsägelse kontra klassificering. Som jag beskrev mer detaljerat här är klassificering endast lämplig i ett fåtal fall. När resultatet är sällsynt (eller för vanligt) är sannolikheten allt för i så fall kan man bara med rimlighet tala om tendenser , inte om att förutsäga enskilda händelser.

I statistiken lärde vi oss ett tag sedan att varje metod som kräver att en utesluter en del av data är mycket misstänkt. Så målet att balansera resultaten är felplacerat. Förutsägelse av tendenser (sannolikheter) kräver inte det. Och när du uppskattar en sannolikhet kan du fatta ett optimalt beslut genom att tillämpa Funktionen verktyg / kostnad / förlust till den förutsagda risken.

Svar

Beror på vad du vill uppnå från klassificeringen?

Säg att det inte är cancer utan cancer, då är det viktigt att upptäcka cancer. Men eftersom icke-cancer kommer att utgöra majoriteten av dina uppgifter kan klassificatorn i huvudsak skicka alla fall till icke-cancerklass och få mycket hög noggrannhet. Men vi har inte råd med det, så vi minskar i huvudsak fall utan cancer, vilket i huvudsak flyttar beslutsgränsen från cancerregionen till den icke-cancerregionen.

Även i användningsfall där noggrannhet är vår enda sikta, balansering kan vara avgörande om testtidsbalansen förväntas skilja sig från tågtiden.

Till exempel säg att du vill klassificera mango och apelsiner, du har en träningsdataset med 900 mango och 30 apelsiner, men du förväntar dig att distribuera den på en marknad med lika mango och apelsiner, helst bör du prova i det förväntade provförhållandet för att maximera noggrannheten.

Kommentarer

  • Det är vad jag förstod från föreläsningarna jag hade. Jag förstår dock inte ’ när balansering kan vara dålig, som detta blogginlägg antyder. Varför skulle det någonsin vara dåligt att balansera, om det finns tillräckligt med datapunkter för varje klass?
  • Tyvärr, men i din analogi, vad har marknadsfruktdistributionen att göra med modell ac curacy?Du lärde dig antingen att skilja mango från apelsiner eller inte. Med andra ord borde du kunna distribuera samma modell på en enda apelsin- eller mango-marknad.
  • Men problemet med cancerexemplet är att se det som klassificering , det bör behandlas som riskuppskattning . Då försvinner det uppenbara problemet med obalanserade klasser, se stats.stackexchange.com/questions/127042/…

Svar

När dina data är balanserade kan du föredra att kontrollera måttens noggrannhet. Men när en sådan situation är dina data obalanserade är din noggrannhet inte konsekvent för olika iterationer. Du måste koncentrera fler mätvärden som Precision (PPR), Recall (känslighet). Dessa två mätvärden bör balanseras när de jämförs. Du måste också kontrollera F1-Score vilket är harmoniskt medelvärde för Precision och återkallelse. Detta gäller för alla maskininlärningsalgoritmer

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *