Video: S1 - #6-4 - Lineær optimering 2024
Att kunna validera en maskininlärningssituation möjliggör ytterligare optimering av din valda algoritm. Algoritmen ger det mesta av den prediktiva prestandan på dina data, med tanke på dess förmåga att detektera signaler från data och passar den sanna funktionella formen av den prediktiva funktionen utan övermontering och genererar stor variation av uppskattningarna. Inte alla maskininlärningsalgoritmer passar bäst för dina data, och ingen enskild algoritm passar alla problem. Det är upp till dig att hitta den rätta för ett specifikt problem.
En andra källa till prediktiv prestanda är själva dataen när den är lämpligt transformerad och vald för att förbättra inlärningsförmågan hos den valda algoritmen.
Den slutliga källan till prestanda härstammar från finjustering av algoritmens hyperparametrar, vilka parametrar du bestämmer innan du lär dig händer och som inte lärs ut från data. Deras roll är att definiera a priori en hypotes, medan andra parametrar anger det a posteriori, efter att algoritmen interagerar med data och, genom att använda en optimeringsprocess, finner att vissa parametervärden arbeta bättre för att få bra förutsägelser.
Inte alla maskininlärningsalgoritmer kräver mycket inställning av hyperparametrar, men några av de mest komplexa gör det, och även om sådana algoritmer fortfarande fungerar ut ur lådan, kan dra av de högra spakarna göra stor skillnad i förutsägelsens korrekthet. Även om hyperparametrarna inte lärs ut från data, bör du överväga de data du arbetar med när du bestämmer hyperparametrar, och du bör göra valet baserat på korsvalidering och noggrann utvärdering av möjligheter.
Komplexa maskininlärningsalgoritmer, de som är mest utsatta för variationer av uppskattningar, presenterar många val uttryckta i ett stort antal parametrar. Twiddling med dem gör att de anpassar mer eller mindre till de data de lär sig från. Ibland kan för mycket hyperparameter twiddling till och med göra algoritmen detektera falska signaler från data. Det gör hyperparametrarna till sig själv som en oupptäckt variantkälla om du börjar manipulera dem för mycket baserat på en viss fast referens som en testuppsättning eller ett upprepat korsvalideringsschema.
Både R och Python erbjuder skivfunktioner som skär din ingående matris i tåg-, test- och valideringsdelar. Speciellt, för mer komplicerade testprocedurer, såsom kryssvalidering eller bootstrapping, erbjuder Scikit-learn-paketet en hel modul och R har en specialiserad paket, som erbjuder funktioner för datasplittning, förbehandling och testning.Detta paket heter caret.
De möjliga kombinationerna av värden som hyperparametrar kan bilda bestämmer var man ska leta efter optimeringar hårt. Som beskrivs när man diskuterar gradient nedstigning kan ett optimeringsutrymme innehålla värdekombinationer som fungerar bättre eller sämre. Även efter att du har hittat en bra kombination, är du inte säker på att det är det bästa alternativet. (Detta är problemet att fastna i lokala minima vid minimering av felet.)
Som ett praktiskt sätt att lösa detta problem är det bästa sättet att verifiera hyperparametrar för en algoritm som tillämpas på specifika data att testa dem alla av kryssvalidering och att välja den bästa kombinationen. Detta enkla tillvägagångssätt, som kallas grid-sökning, erbjuder obestridliga fördelar genom att du kan prova utbudet av möjliga värden för att systematiskt mata in i algoritmen och att upptäcka när det allmänna miniminivået händer.
Å andra sidan har grid-sökning också allvarliga nackdelar eftersom det är beräkningsintensivt (du kan enkelt utföra denna uppgift parallellt på moderna multicore-datorer) och ganska tidskrävande. Dessutom förbättrar systematiska och intensiva tester möjligheten att påverka fel eftersom vissa bra men falska valideringsresultat kan orsakas av brus närvarande i datasetet.
Några alternativ till grid-sökning finns tillgängliga. I stället för att testa allt kan du försöka utforska utrymmet för möjliga hyperparametervärden som styrs av beräkningsmässigt tunga och matematiskt komplexa olinjära optimeringstekniker (som Nelder-Mead-metoden), med hjälp av en Bayesian-metod (där antalet test minimeras genom att ta fördel av tidigare resultat) eller med hjälp av slumpmässig sökning.
Det är överraskande att slumpmässig sökning fungerar otroligt bra, är lätt att förstå, och bygger inte bara på blind luck, men det kan i första hand tyckas vara. Faktum är att huvudpunkten i tekniken är att om du väljer tillräckligt slumpmässiga tester, har du faktiskt tillräckligt med möjligheter att upptäcka rätt parametrar utan att slösa på energi när du testar lite olika kombinationer av liknande utförande kombinationer.
Den grafiska representationen nedan förklarar varför slumpmässig sökning fungerar bra. En systematisk utforskning, men användbar, tenderar att testa varje kombination, vilket förvandlas till slöseri med energi om vissa parametrar inte påverkar resultatet. En slumpmässig sökning testar faktiskt färre kombinationer men mer inom varje hyperparameter, en strategi som visar sig vinna om det, som ofta händer, vissa parametrar är viktigare än andra.
Jämförelse av nätverkssökning med slumpmässig sökning.För att randomiserad sökning ska fungera bra bör du göra från 15 till högst 60 test. Det är vettigt att tillgripa slumpmässig sökning om en gridsökning kräver ett större antal experiment.