Programmering

Machine learning algoritmer forklaret

Maskinindlæring og dyb læring er blevet bredt omfavnet og endnu mere misforstået. I denne artikel vil jeg gerne gå tilbage og forklare både maskinindlæring og dyb læring i grundlæggende termer, diskutere nogle af de mest almindelige maskinindlæringsalgoritmer og forklare, hvordan disse algoritmer relaterer til de andre brikker i puslespillet om at skabe forudsigelige modeller fra historiske data.

Hvad er maskinindlæringsalgoritmer?

Husk at maskinlæring er en klasse af metoder til automatisk at oprette modeller fra data. Maskinindlæringsalgoritmer er motorerne til maskinindlæring, hvilket betyder, at det er algoritmerne, der gør et datasæt til en model. Hvilken type algoritme der fungerer bedst (overvåget, ikke-overvåget, klassificering, regression osv.) Afhænger af, hvilken type problem du løser, de tilgængelige databehandlingsressourcer og dataens art.

Sådan fungerer maskinlæring

Almindelige programmeringsalgoritmer fortæller computeren, hvad de skal gøre på en ligetil måde. For eksempel omdanner sorteringsalgoritmer uordnede data til data bestilt efter nogle kriterier, ofte den numeriske eller alfabetiske rækkefølge af et eller flere felter i dataene.

Lineære regressionsalgoritmer passer til en lige linje, eller en anden funktion, der er lineær i sine parametre, såsom et polynom, til numeriske data, typisk ved at udføre matrixinversioner for at minimere den kvadrerede fejl mellem linjen og dataene. Kvadratfejl bruges som metric, fordi du er ligeglad med, om regressionslinjen er over eller under datapunkterne; du holder kun af afstanden mellem linjen og punkterne.

Ikke-lineære regressionsalgoritmer, som passer til kurver, der ikke er lineære i deres parametre, til data, er lidt mere komplicerede, fordi de i modsætning til lineære regressionsproblemer ikke kan løses med en deterministisk metode. I stedet implementerer de ikke-lineære regressionsalgoritmer en eller anden form for iterativ minimeringsproces, ofte en vis variation på metoden med den stejleste nedstigning.

Stejleste nedstigning beregner dybest set den kvadratiske fejl og dens gradient med de aktuelle parameterværdier, vælger en trinstørrelse (aka læringshastighed), følger retningen af ​​gradienten "ned ad bakken" og beregner derefter den kvadrerede fejl og dens gradient ved den nye parameterværdier. Til sidst konvergerer processen med held. Varianterne på den stejleste nedstigning forsøger at forbedre konvergensegenskaberne.

Maskinindlæringsalgoritmer er endnu mindre ligetil end ikke-lineær regression, dels fordi maskinindlæring undgår begrænsningen af ​​at passe til en bestemt matematisk funktion, såsom et polynom. Der er to hovedkategorier af problemer, der ofte løses ved maskinindlæring: regression og klassificering. Regression er for numeriske data (f.eks. Hvad er den sandsynlige indkomst for en person med en given adresse og et erhverv?), Og klassificering er for ikke-numeriske data (f.eks. Vil ansøgeren misligholde dette lån?).

Forudsigelsesproblemer (f.eks. Hvad vil åbningskursen være for Microsoft-aktier i morgen?) Er en delmængde af regressionsproblemer for tidsseriedata. Klassificeringsproblemer er undertiden opdelt i binære (ja eller nej) og multikategoriproblemer (dyr, grøntsager eller mineraler).

Overvåget læring versus ikke-overvåget læring

Uafhængigt af disse divisioner er der yderligere to slags maskinindlæringsalgoritmer: overvåget og uden tilsyn. I overvåget læring, giver du et træningsdatasæt med svar, såsom et sæt billeder af dyr sammen med navnene på dyrene. Målet med denne træning ville være en model, der korrekt kunne identificere et billede (af en slags dyr, der var inkluderet i træningssættet), som det ikke tidligere havde set.

I uden opsyn læring, går algoritmen igennem selve dataene og forsøger at komme med meningsfulde resultater. Resultatet kan for eksempel være et sæt klynger af datapunkter, der kan relateres inden for hver klynge. Det fungerer bedre, når klyngerne ikke overlapper hinanden.

Uddannelse og evaluering forvandler overvågede læringsalgoritmer til modeller ved at optimere deres parametre for at finde det sæt værdier, der bedst matcher jordens sandhed i dine data. Algoritmerne er ofte afhængige af varianter af stejleste afstamning for deres optimeringsmidler, for eksempel stokastisk gradientafstamning (SGD), som i det væsentlige er den stejleste afstamning, der udføres flere gange fra randomiserede startpunkter. Almindelige forbedringer af SGD tilføjer faktorer, der korrigerer retningen af ​​gradienten baseret på momentum eller justerer læringshastigheden baseret på fremskridt fra en gennemgang gennem dataene (kaldet en epoke) til den næste.

Datarengøring til maskinindlæring

Der er ikke sådan noget som rene data i naturen. For at være nyttigt til maskinindlæring skal data filtreres aggressivt. For eksempel vil du gerne:

  1. Se på dataene og udelukk alle kolonner, der har mange manglende data.
  2. Se på dataene igen, og vælg de kolonner, du vil bruge til din forudsigelse. (Dette er noget, du måske vil variere, når du gentager.)
  3. Ekskluder rækker, der stadig mangler data i de resterende kolonner.
  4. Ret indlysende typografier og flet svar svarende. F.eks. Skal USA, USA, USA og Amerika slås sammen i en enkelt kategori.
  5. Ekskluder rækker, der har data, der er uden for området. For eksempel, hvis du analyserer taxaturer i New York City, skal du filtrere rækker med pick-up eller drop-off breddegrader og længdegrader, der ligger uden for hovedstadsområdet.

Der er meget mere, du kan gøre, men det afhænger af de indsamlede data. Dette kan være kedeligt, men hvis du opretter et datarensningstrin i din maskinlæringsrørledning, kan du ændre og gentage det efter ønske.

Datakodning og normalisering til maskinindlæring

For at bruge kategoriske data til maskinklassificering skal du kode tekstetiketterne i en anden form. Der er to almindelige kodninger.

Den ene er etiketkodning, hvilket betyder, at hver tekstetiketværdi erstattes med et tal. Den anden er en-hot kodning, hvilket betyder, at hver tekstetiketværdi omdannes til en kolonne med en binær værdi (1 eller 0). De fleste maskinlæringsrammer har funktioner, der konverterer for dig. Generelt foretrækkes en-hot-kodning, da etiketkodning undertiden kan forvirre maskinindlæringsalgoritmen til at tro, at den kodede kolonne er bestilt.

For at bruge numeriske data til maskinregression skal du normalt normalisere dataene. Ellers kan tallene med større intervaller have en tendens til at dominere den euklidiske afstand mellem funktionsvektorer, deres effekter kan forstørres på bekostning af de andre felter, og den stejleste nedstigningsoptimering kan have svært ved at konvergere. Der er en række måder til at normalisere og standardisere data for ML, herunder min-max normalisering, gennemsnitlig normalisering, standardisering og skalering til enhedslængde. Denne proces kaldes ofte funktion skalering.

Hvad er maskinindlæringsfunktioner?

Da jeg nævnte funktionsvektorer i det foregående afsnit, skulle jeg forklare, hvad de er. Først og fremmest en funktion er en individuel målbar egenskab eller egenskab ved et fænomen, der observeres. Begrebet "funktion" er relateret til begrebet en forklarende variabel, der bruges i statistiske teknikker såsom lineær regression. Funktionsvektorer kombinerer alle funktionerne til en enkelt række i en numerisk vektor.

En del af kunsten at vælge funktioner er at vælge et minimumssæt af uafhængig variabler, der forklarer problemet. Hvis to variabler er stærkt korrelerede, skal de enten kombineres til en enkelt funktion, ellers skal den ene droppes. Nogle gange udfører folk hovedkomponentanalyse for at konvertere korrelerede variabler til et sæt lineært ukorrelerede variabler.

Nogle af de transformationer, som folk bruger til at konstruere nye funktioner eller reducere dimensionaliteten af ​​funktionsvektorer, er enkle. Træk for eksempel Fødsels år fra Dødsår og du konstruerer Alder ved døden, som er en primær uafhængig variabel til livstids- og dødelighedsanalyse. I andre tilfælde funktionskonstruktion er måske ikke så indlysende.

Almindelige algoritmer til maskinindlæring

Der er snesevis af maskinlæringsalgoritmer, der spænder i kompleksitet fra lineær regression og logistisk regression til dybe neurale netværk og ensembler (kombinationer af andre modeller). Nogle af de mest almindelige algoritmer inkluderer dog:

  • Lineær regression, aka mindste kvadraters regression (for numeriske data)
  • Logistisk regression (til binær klassificering)
  • Lineær diskriminerende analyse (til klassificering i flere kategorier)
  • Beslutningstræer (både for klassificering og regression)
  • Naïve Bayes (til både klassificering og regression)
  • K-nærmeste naboer, også kendt som KNN (til både klassificering og regression)
  • Learning Vector Quantization, aka LVQ (til både klassificering og regression)
  • Support Vector Machines, også kaldet SVM (til binær klassificering)
  • Tilfældige skove, en type "bagging" ensemble-algoritme (til både klassificering og regression)
  • Boosting-metoder, herunder AdaBoost og XGBoost, er ensemblealgoritmer, der skaber en række modeller, hvor hver ny model forsøger at rette fejl fra den tidligere model (til både klassificering og regression)

Hvor er de neurale netværk og dybe neurale netværk, som vi hører så meget om? De har tendens til at være beregningskrævende til det punkt, at de har brug for GPU'er eller anden specialiseret hardware, så du bør kun bruge dem til specialiserede problemer, såsom billedklassificering og talegenkendelse, der ikke er velegnet til enklere algoritmer. Bemærk, at "dyb" betyder, at der er mange skjulte lag i det neurale netværk.

For mere om neurale netværk og dyb læring, se "Hvad dyb læring virkelig betyder."

Hyperparametre til maskinlæringsalgoritmer

Maskinindlæringsalgoritmer træner på data for at finde det bedste sæt vægte for hver uafhængig variabel, der påvirker den forudsagte værdi eller klasse. Algoritmerne selv har variabler, kaldet hyperparametre. De kaldes hyperparametre i modsætning til parametre, fordi de styrer funktionen af ​​algoritmen snarere end vægten, der bestemmes.

Det vigtigste hyperparameter er ofte indlæringshastigheden, der bestemmer den anvendte trinstørrelse, når man finder det næste sæt vægte, man skal prøve, når man optimerer. Hvis læringshastigheden er for høj, kan gradientnedstigningen hurtigt konvergere på et plateau eller et suboptimalt punkt. Hvis læringshastigheden er for lav, kan gradientnedstigningen gå i stå og aldrig konvergere helt.

Mange andre almindelige hyperparametre afhænger af de anvendte algoritmer. De fleste algoritmer har stopparametre, såsom det maksimale antal epoker eller den maksimale kørselstid eller den mindste forbedring fra epoke til epoke. Specifikke algoritmer har hyperparametre, der styrer formen på deres søgning. For eksempel har en tilfældig skovklassifikator hyperparametre til mindsteprøver pr. Blad, maksimal dybde, mindsteprøver ved en opdeling, mindste vægtfraktion for et blad og ca. 8 mere.

Hyperparameter tuning

Flere maskinlæringsplatforme til produktion tilbyder nu automatisk hyperparameterindstilling. I det væsentlige fortæller du systemet, hvilke hyperparametre du vil variere, og muligvis hvilken måling du vil optimere, og systemet fejer disse hyperparametre over så mange kørsler, som du tillader. (Google Cloud-hyperparametertuning trækker den relevante metric ud af TensorFlow-modellen, så du ikke behøver at specificere den.)

Der er tre søgealgoritmer til fejning af hyperparametre: Bayesisk optimering, gittersøgning og tilfældig søgning. Bayesisk optimering har tendens til at være den mest effektive.

Du ville tro, at indstilling af så mange hyperparametre som muligt ville give dig det bedste svar. Men medmindre du kører på din egen personlige hardware, kan det være meget dyrt. Der er under alle omstændigheder faldende afkast. Med erfaring opdager du, hvilke hyperparametre der betyder mest for dine data og valg af algoritmer.

Automatiseret maskinindlæring

Når vi taler om at vælge algoritmer, er der kun en måde at vide, hvilken algoritme eller ensemble af algoritmer, der giver dig den bedste model til dine data, og det er at prøve dem alle. Hvis du også prøver alle mulige normaliseringer og valg af funktioner, står du over for en kombinatorisk eksplosion.

At prøve alt er upraktisk at gøre manuelt, så selvfølgelig har maskinlæringsværktøjsudbydere lagt en stor indsats i at frigive AutoML-systemer. De bedste kombinerer funktionsteknik med svejsning over algoritmer og normaliseringer. Hyperparameterindstilling af den eller de bedste modeller efterlades ofte til senere. Feature engineering er dog et svært problem at automatisere, og ikke alle AutoML-systemer håndterer det.

Sammenfattende er maskinlæringsalgoritmer kun et stykke af maskinlæringspuslespillet. Ud over algoritmevalg (manuel eller automatisk) skal du beskæftige dig med optimeringsmidler, datarensning, funktionsvalg, funktionsnormalisering og (valgfrit) hyperparameterindstilling.

Når du har håndteret alt dette og bygget en model, der fungerer til dine data, er det tid til at implementere modellen og derefter opdatere den, når forholdene ændres. Håndtering af maskinlæringsmodeller i produktionen er dog en helt anden dåse med orme.