Underanpassning och överanpassning vid maskininlärning
Tro det eller ej, i den verkliga världen kommer vi aldrig att ha en ren och perfekt datamängd. Varje dataset kommer att ha några konstiga eller saknade delar eller obalanserade data. Eller så kommer vi som utvecklare av maskininlärning att införa vissa fel eller brister i vår modell. En av de viktigaste orsakerna till detta är att vi vill att vår modell ska kunna beskriva ett underliggande mönster. Tyvärr är det så att data från det verkliga livet innehåller en viss nivå av brus och outliers, och för det mesta vill vi att modellen ska fånga signalen i data och inte bruset.
För att fånga det underliggande mönstret i data på ett korrekt sätt kan modellen behöva inkorporera bruset. Innebörden är att den härledda modellen passar bra till modelleringsdata men inte generaliserar tillräckligt bra till andra prover som inte har inkluderats i modelleringsprocessen.
Det finns terminologi för att beskriva hur väl en maskininlärningsmodell lär sig och generaliserar till nya data, detta är overfitting och underfitting. Målet med en bra maskininlärningsmodell är att generalisera väl från träningsdatasetet till alla dataset från problemområdet. Detta gör det möjligt för oss att göra förutsägelser baserade på ett dataset som modellen aldrig har sett.
I statistiken kallas en passform för, hur nära din modell ligger målklassen/funktionen/värdet. Överanpassning och underanpassning är de två största orsakerna till dålig prestanda hos algoritmer eller modeller för maskininlärning.
Låt oss förstå vad bästa anpassning, överanpassning och underanpassning är. Följt av lite kod.
Vad är Overfitting & Underfitting?
Overfitting hänvisar till det scenario där en maskininlärningsmodell inte kan generalisera eller passa bra på osynliga dataset. Ett tydligt tecken på överanpassning av maskininlärning är om felet på test- eller valideringsdatasetet är mycket större än felet på träningsdatasetet.
Overfitting är en term som används inom statistiken och som hänvisar till ett modelleringsfel som uppstår när en funktion motsvarar ett dataset för nära. Som en följd av detta kan överanpassning misslyckas med att passa ytterligare data, vilket kan påverka noggrannheten i förutsägelsen av framtida observationer.
Overfitting inträffar när en modell lär sig detaljerna och bruset i träningsdatasetetet i en sådan utsträckning att det har en negativ inverkan på modellens prestanda på ett nytt dataset. Detta innebär att bruset eller de slumpmässiga fluktuationerna i träningsdatasetet fångas upp och inlärs som begrepp av modellen. Problemet är att dessa begrepp inte gäller för nya dataset och påverkar modellens förmåga att generalisera negativt.
Den motsatta delen av överanpassning är underanpassning.
Underanpassning avser en modell som varken kan modellera träningsdatasetetet eller generalisera till nya dataset. En underanpassad maskininlärningsmodell är inte en lämplig modell och kommer att vara uppenbar eftersom den har dålig prestanda på träningsdatasetetet.
Underanpassning diskuteras ofta inte eftersom det är lätt att upptäcka med tanke på att det finns ett bra prestandamått.
Förståelse med exempel
Exempel 1:
Vad sägs om tre studenter som har förberett sig för ett matematikprov.
Den första studenten har bara studerat matematiska operationer för addition och hoppat över andra matematiska operationer som subtraktion, division, multiplikation etc.
Den andra studenten har ett särskilt bra minne. Den andra eleven har alltså memorerat alla problem som presenteras i läroboken.
Och den tredje eleven har studerat alla matematiska operationer och är väl förberedd inför provet.
I provet kommer elev ett endast att kunna lösa de frågor som rör Addition och kommer att misslyckas med problem eller frågor som rör andra matematiska operationer.
Student två kommer endast att kunna besvara frågor om de råkade dyka upp i läroboken (eftersom han har memorerat den) och kommer inte att kunna besvara andra frågor.
Student tre kommer att kunna lösa alla tentamensproblem någorlunda bra.
Maskinininlärningsalgoritmer har ett liknande beteende som våra tre studenter, ibland liknar den modell som genereras av algoritmen den första studenten. De lär sig från endast en liten del av träningsdatasetet, i sådana fall är modellen Underfitting.
Ibland kommer modellen att memorera hela träningsdatasetetet, som den andra studenten. De presterar mycket bra på kända instanser, men misslyckas kraftigt med osynliga data eller okända instanser. I sådana fall sägs modellen vara överanpassad.
Och när modellen klarar sig bra både i träningsdatasetetet och på osynliga data eller okända instanser, som student tre, är den välanpassad.
Exempel 2:
Vi tar ett annat exempel och antar att du har besökt en stad ”X” och åkt taxi. När du talar med dina vänner inser du senare att taxichauffören tog ut två eller tre gånger mer än standardpriset. Detta inträffade eftersom du var ny i staden och taxichauffören bokstavligen tog dig på skoj.
Det hände också att du köpte några varor från en gatuförsäljare, och det slutade återigen med att du betalade mer än vad de var värda. Du bestämmer dig slutligen för att människorna i staden ”X” är oärliga. Vilket är ett mänskligt drag, människor generaliserar ofta. Maskininlärningsmodeller har också denna svaghet om vi inte är noga med att undvika fördomar under utvecklingsfaserna: modellering, val av algoritmer, funktioner, träningsdataset etc.
Antag att en annan taxichaufför i samma stad ”X” debiterade dig på ett rimligt sätt och enligt taxametern, men baserat på erfarenhet anser du att den här chauffören också har debiterat mer. Detta kallas överanpassning.
Från ovanstående två exempel kan vi säga att om modellen presterar bra på test- eller ovisst dataset så är det en modell som passar bäst eller är bra. Och om den inte presterade bra på test- eller ovisst dataset, men presterade bra på träningsdatasetet, är det en överanpassad modell. En modell som inte klarade sig bra i träningsdatasetet eller i testdatasetet är en underanpassad modell.
Nästan kommer vi att se ett exempel med pythonkod.
Exempel 3:
Detta exempel visar problemen med underanpassning och överanpassning och hur vi kan använda linjär regression med polynomfunktioner för att approximera icke-linjära funktioner.
Låt oss generera två variabler, till exempel X och y. X kommer att ha något slumptal/prov, där som y är en del av cosinusfunktionen.
Baserat på data kommer grafen att se ut som… enkel plottning av X och y.
Låt oss träna vår modell med hjälp av linjär regression, förutsäga och visualisera den.
Låt oss visualisera den predikterade modellen.
Vi kan se att den raka linjen inte kan fånga mönstren i data. Detta är ett exempel på underanpassning. Felet blir enormt i den här modellen.
Låt oss betrakta polynomfunktionen med vissa grader och träna vår modell.
Vi kan se att en linjär funktion (polynom med grad 1) inte räcker för att passa in på träningsmallarna. Detta kallas underfitting.
Ett polynom av grad 4 approximerar den sanna funktionen nästan perfekt. Detta kallas Best Fit eller Good Model.
För högre grader (med grad 15) kommer modellen dock att överanpassa träningsdatasetetet, dvs. den lär sig bruset i träningsdata.
Vi utvärderar kvantitativt överanpassning/underanpassning genom att använda korsvalidering.
Vi beräknar också medelkvadratfelet (MSE) på valideringsdatasetetet, ju högre desto mindre troligt är det att modellen generaliserar korrekt från träningsdatasetetet.
Fullständig kod kan refereras från
https://colab.research.google.com/drive/1XzngJPT8WUyHFW-JxhrawVhPurJlv1cA?usp=sharing
Detektering av över- eller underanpassning
En viktig utmaning när det gäller att detektera någon form av anpassning (vare sig det är underanpassning eller bästa anpassning eller överanpassning), är nästan omöjlig innan du testar data. Det kan hjälpa till att ta itu med de inneboende egenskaperna hos överanpassning, vilket är oförmågan att generalisera en datamängd. Data kan därför delas upp i olika delmängder för att underlätta träning och testning. Data delas upp i två huvuddelar, dvs. ett testdataset och ett träningsdataset.
Tekniken för uppdelning kan variera beroende på typen av dataset och man kan använda vilken uppdelningsteknik som helst.
Om vår modell klarar sig mycket bättre på träningsdatasetet än på testdataset är det troligt att vi överanpassar oss Till exempel har vår modell presterat med en 99-procentig noggrannhet på träningsdatasetetet, men bara med en noggrannhet på 50-55 procent på testdatasetetet. Det är överanpassning av modellen och presterade inte bra på osynliga dataset.
Om vår modell presterar mycket bättre på testdatasetetet än på träningsdatasetetet, då är vi troligen underanpassade.
Och om vår modell presterar bra på både tränings- och testdatasetetet, då har vi den bästa anpassningen. Vår modell har till exempel en noggrannhet på 90 % i träningsdatasetetet och en noggrannhet på 88-92 % i testdatasetetet. Det är den bäst passande modellen.
Ett annat enkelt sätt att upptäcka detta är att använda korsvalidering. Här försöker man undersöka den tränade modellen med en ny datamängd för att kontrollera dess prediktiva noggrannhet. Givet en datamängd hålls en del av denna tillbaka (säg 30 %) medan resten används för att träna modellen. När modellen har tränats används de reserverade uppgifterna för att kontrollera modellens noggrannhet jämfört med den noggrannhet som härrör från de uppgifter som användes vid träningen. En betydande avvikelse mellan dessa två flaggar för överanpassning.
Hur man förhindrar överanpassning eller underanpassning
Det är användbart att upptäcka överanpassning eller underanpassning, men det löser inte problemet. Som tur är har du flera alternativ att prova. Här är några av de mest populära lösningarna.
Hjälpen för Underfitting, är att gå vidare och prova alternativa algoritmer för maskininlärning. Det ger ändå en bra kontrast till problemet med överanpassning.
För att förhindra överanpassning finns det olika sätt och några av dem visas nedan.
- Korsvalidering:
- Korsvalidering är en kraftfull förebyggande åtgärd mot överanpassning.
- Använd dina initiala träningsdata för att generera flera minitränings-testuppdelningar. Använd dessa uppdelningar för att justera din modell.
- I vanlig k-fold korsvalidering delar vi upp data i k delmängder, så kallade folds. Sedan tränar vi algoritmen iterativt på k-1 vikar medan vi använder den återstående viken som testuppsättning (kallad ”holdout fold”).
- Korsvalidering gör det möjligt för dig att justera hyperparametrar med endast din ursprungliga träningsdatamängd. På så sätt kan du behålla ditt testdataset som ett verkligt osynligt dataset för att välja din slutliga modell.
- Träna med fler data
- Det kommer inte att fungera varje gång, men träning med fler data kan hjälpa algoritmerna att upptäcka signalen bättre.
- När användaren matar in fler träningsdata i modellen kommer den inte att kunna överanpassa alla prover och kommer att tvingas generalisera för att få resultat.
- Användare bör kontinuerligt samla in mer data som ett sätt att öka modellens noggrannhet.
- Den här metoden anses dock vara dyr, och därför bör användare se till att de data som används är relevanta och rena.
- Självklart är det inte alltid fallet. Om vi bara lägger till mer bullriga data kommer den här tekniken inte att hjälpa. Därför bör du alltid se till att dina data är rena och relevanta.
- Dataaugmentering
- Ett alternativ till att träna med fler data är dataaugmentering, som är mindre kostsamt jämfört med den förstnämnda metoden.
- Om du inte har möjlighet att kontinuerligt samla in fler data kan du få de tillgängliga datamängderna att se olika ut.
- Dataaugmentering gör att ett dataurval ser något annorlunda ut varje gång det behandlas av modellen. Processen gör att varje datamängd framstår som unik för modellen och hindrar modellen från att lära sig datamängdernas egenskaper.
- Reducera komplexitet eller dataförenkling
- Overfitting kan uppstå på grund av en modells komplexitet, så att modellen även med stora datamängder fortfarande lyckas överanpassa träningsdatamängden.
- Metoden för dataförenkling används för att minska överanpassning genom att minska modellens komplexitet så att den blir tillräckligt enkel för att inte överanpassas.
- Några av de åtgärder som kan genomföras är att beskära ett beslutsträd, minska antalet parametrar i ett neuralt nätverk och använda dropout på ett neuralt nätverk.
- En förenkling av modellen kan också göra modellen lättare och snabbare.
- Regularisering
- Regularisering hänvisar till ett brett spektrum av tekniker för att artificiellt tvinga modellen att bli enklare.
- Metoden beror på vilken typ av learner du använder. Du kan till exempel beskära ett beslutsträd, använda dropout på ett neuralt nätverk eller lägga till en straffparameter till kostnadsfunktionen vid regression.
- Ofta är regulariseringsmetoden också en hyperparameter, vilket innebär att den kan justeras genom korsvalidering.
- För att lära sig mer om regularisering hänvisas till artikeln https://datascience.foundation/datatalk/regularization-machine-learning-teacher skriven och mycket väl förklarad av Abhishek Mishra.
- Ensembling
- Ensembler är metoder för maskininlärning för att kombinera förutsägelser från flera separata modeller. Det finns några olika metoder för ensembling, men de två vanligaste är: Boosting och Bagging.
- Boosting fungerar genom att använda enkla basmodeller för att öka deras sammanlagda komplexitet. Den tränar ett stort antal svaga inlärare ordnade i en sekvens, så att varje inlärare i sekvensen lär sig av misstagen hos inläraren före den.
- Boosting försöker förbättra den prediktiva flexibiliteten hos enkla modeller.
- Boosting kombinerar alla svaga inlärare i sekvensen för att få fram en stark inlärare.
- Bagging fungerar genom att man tränar många starka inlärare ordnade i ett parallellt mönster och sedan kombinerar dem för att optimera deras prediktioner.
- Bagging försöker minska risken för överanpassning av komplexa modeller.
- Bagging kombinerar sedan alla starka inlärare tillsammans för att ”jämna ut” deras förutsägelser.
- Förtida stopp
- När du tränar en inlärningsalgoritm iterativt kan du mäta hur bra varje iteration av modellen presterar.
- Upp till ett visst antal iterationer förbättrar nya iterationer modellen. Efter den punkten kan dock modellens förmåga att generalisera försvagas eftersom den börjar överanpassa träningsdata.
- Med tidig stoppning avses att man stoppar träningsprocessen innan inläraren passerar den punkten.
- I dag används den här tekniken mest inom djupinlärning medan andra tekniker (t.ex. reglering) föredras för klassisk maskininlärning.
- Du måste lägga till reglering när det gäller linjära modeller och SVM-modeller.
- I beslutsträdsmodeller kan du minska det maximala djupet.
- Men i neurala nätverk kan du införa ett utfallsskikt för att minska överanpassning.
Snabb sammanfattning
Overfitting är ett modelleringsfel som introducerar bias i modellen eftersom den är för nära relaterad till datamängden.
Overfitting gör att modellen endast är relevant för sin datamängd och irrelevant för andra datamängder.
Några av metoderna som används för att förhindra överanpassning är bland annat ensemblering, dataförstärkning, dataförenkling och korsvalidering.