Programmering

Maskinlæringsalgoritmer forklart

Maskinlæring og dyp læring har blitt bredt omfavnet, og enda mer misforstått. I denne artikkelen vil jeg gå tilbake og forklare både maskinlæring og dyp læring i grunnleggende termer, diskutere noen av de vanligste maskinlæringsalgoritmene, og forklare hvordan disse algoritmene forholder seg til de andre brikkene i puslespillet for å lage prediktive modeller fra historiske data.

Hva er maskinlæringsalgoritmer?

Husk at maskinlæring er en klasse metoder for automatisk å lage modeller fra data. Maskinlæringsalgoritmer er motorene til maskinlæring, noe som betyr at det er algoritmene som gjør et datasett til en modell. Hvilken algoritme som fungerer best (overvåket, uten tilsyn, klassifisering, regresjon osv.), Avhenger av hva slags problem du løser, tilgjengelige databehandlingsressurser og dataenes art.

Hvordan maskinlæring fungerer

Vanlige programmeringsalgoritmer forteller datamaskinen hva de skal gjøre på en grei måte. For eksempel gjør sorteringsalgoritmer uordnede data til data bestilt etter noen kriterier, ofte den numeriske eller alfabetiske rekkefølgen til ett eller flere felt i dataene.

Lineære regresjonsalgoritmer passer til en rett linje, eller en annen funksjon som er lineær i parametrene, for eksempel et polynom, til numeriske data, vanligvis ved å utføre matriseinversjoner for å minimere den kvadratiske feilen mellom linjen og dataene. Kvadratfeil brukes som beregning fordi du ikke bryr deg om regresjonslinjen er over eller under datapunktene. du bryr deg bare om avstanden mellom linjen og punktene.

Ikke-lineære regresjonsalgoritmer, som passer kurver som ikke er lineære i parametrene til data, er litt mer kompliserte, fordi de, i motsetning til lineære regresjonsproblemer, ikke kan løses med en deterministisk metode. I stedet implementerer de ikke-lineære regresjonsalgoritmene en slags iterativ minimeringsprosess, ofte noe variasjon på metoden med bratteste nedstigning.

Bratteste nedstigning beregner i utgangspunktet den kvadratiske feilen og gradienten til gjeldende parameterverdier, velger en trinnstørrelse (aka læringsfrekvens), følger retningen til gradienten "ned bakken", og beregner deretter den kvadrerte feilen og dens gradient ved den nye parameterverdier. Til slutt, med hell, konvergerer prosessen. Variantene på bratteste nedstigning prøver å forbedre konvergensegenskapene.

Maskinlæringsalgoritmer er enda mindre greie enn ikke-lineær regresjon, delvis fordi maskinlæring dispenserer med begrensningen for å passe til en bestemt matematisk funksjon, for eksempel et polynom. Det er to hovedkategorier av problemer som ofte løses ved maskinlæring: regresjon og klassifisering. Regresjon er for numeriske data (f.eks. Hva er den sannsynlige inntekten for noen med en gitt adresse og et yrke?) Og klassifisering er for ikke-numeriske data (f.eks. Vil søkeren misligholde dette lånet?).

Forutsigelsesproblemer (f.eks. Hva vil åpningskursen være for Microsoft-aksjer i morgen?) Er en delmengde av regresjonsproblemer for tidsseriedata. Klassifiseringsproblemer er noen ganger delt inn i binære (ja eller nei) og flerkategoriproblemer (dyr, grønnsaker eller mineraler).

Overvåket læring kontra uten tilsyn læring

Uavhengig av disse divisjonene er det to andre typer maskinlæringsalgoritmer: overvåket og uten tilsyn. I veiledet læring, gir du et treningsdatasett med svar, for eksempel et sett med bilder av dyr sammen med navnene på dyrene. Målet med denne treningen ville være en modell som korrekt kunne identifisere et bilde (av et slags dyr som var inkludert i treningssettet) som det ikke tidligere hadde sett.

I uten tilsyn læring, går algoritmen gjennom selve dataene og prøver å komme med meningsfulle resultater. Resultatet kan for eksempel være et sett med klynger av datapunkter som kan være relatert i hver klynge. Det fungerer bedre når klyngene ikke overlapper hverandre.

Opplæring og evaluering gjør overvåkede læringsalgoritmer til modeller ved å optimalisere parametrene for å finne det verdisettet som best samsvarer med dataene dine. Algoritmene er ofte avhengige av varianter av bratteste avstamning for deres optimaliserere, for eksempel stokastisk gradientnedstigning (SGD), som egentlig er den bratteste nedstigningen utført flere ganger fra randomiserte startpunkter. Vanlige forbedringer på SGD legger til faktorer som korrigerer retningen på gradienten basert på momentum eller justerer læringsgraden basert på fremgang fra en passering gjennom dataene (kalt en epoke) til den neste.

Datarengjøring for maskinlæring

Det er ikke noe som heter rene data i naturen. For å være nyttig for maskinlæring, må data filtreres aggressivt. For eksempel vil du:

  1. Se på dataene og ekskluder kolonner som mangler mye data.
  2. Se på dataene igjen og velg kolonnene du vil bruke til å forutsi. (Dette er noe du kanskje vil variere når du gjentar det.)
  3. Ekskluder rader som fremdeles mangler data i de gjenværende kolonnene.
  4. Korriger åpenbare skrivefeil og slå sammen tilsvarende svar. For eksempel bør USA, USA, USA og Amerika slås sammen til en enkelt kategori.
  5. Ekskluder rader som har data som er utenfor området. For eksempel, hvis du analyserer drosjeturer i New York City, vil du filtrere ut rader med pick-up eller drop-off breddegrader og lengdegrader som er utenfor grensen for hovedstadsområdet.

Det er mye mer du kan gjøre, men det vil avhenge av dataene som samles inn. Dette kan være kjedelig, men hvis du setter opp et datarensingstrinn i maskinlæringsrørledningen din, kan du endre og gjenta det etter eget ønske.

Datakoding og normalisering for maskinlæring

For å bruke kategoriske data for maskinklassifisering, må du kode tekstetikettene i et annet skjema. Det er to vanlige kodinger.

En er merkekoding, som betyr at hver tekstetikettverdi erstattes med et tall. Den andre er en-hot-koding, som betyr at hver tekstetikettverdi blir omgjort til en kolonne med en binær verdi (1 eller 0). De fleste maskinlæringsrammer har funksjoner som gjør konverteringen for deg. Generelt foretrekkes én-hot-koding, ettersom koding av etiketter noen ganger kan forvirre maskinlæringsalgoritmen til å tro at den kodede kolonnen er bestilt.

For å bruke numeriske data for maskinregresjon må du vanligvis normalisere dataene. Ellers kan tallene med større områder ha en tendens til å dominere den euklidiske avstanden mellom funksjonvektorer, deres effekter kan forstørres på bekostning av de andre feltene, og den bratteste nedstigningsoptimaliseringen kan ha problemer med å konvergere. Det er en rekke måter å normalisere og standardisere data for ML, inkludert min-max normalisering, gjennomsnittlig normalisering, standardisering og skalering til enhetslengde. Denne prosessen kalles ofte funksjonskalering.

Hva er maskinlæringsfunksjoner?

Siden jeg nevnte funksjonsvektorer i forrige avsnitt, bør jeg forklare hva de er. Først av alt, a trekk er en individuell målbar egenskap eller karakteristikk av et fenomen som observeres. Begrepet "funksjon" er relatert til begrepet til en forklarende variabel, som brukes i statistiske teknikker som lineær regresjon. Funksjonsvektorer kombinerer alle funksjonene for en enkelt rad i en numerisk vektor.

En del av kunsten å velge funksjoner er å velge et minimumssett av uavhengig variabler som forklarer problemet. Hvis to variabler er sterkt korrelert, må de enten kombineres til en enkelt funksjon, eller så bør en bli droppet. Noen ganger utfører folk hovedkomponentanalyse for å konvertere korrelerte variabler til et sett med lineært ukorrelerte variabler.

Noen av transformasjonene som folk bruker for å konstruere nye funksjoner eller redusere dimensjonaliteten til funksjonsvektorer, er enkle. Trekk for eksempel fra Fødselsår fra Dødsåret og du konstruerer Alder ved døden, som er en primær uavhengig variabel for livstids- og dødelighetsanalyse. I andre tilfeller funksjonskonstruksjon er kanskje ikke så opplagt.

Vanlige maskinlæringsalgoritmer

Det er dusinvis av maskinlæringsalgoritmer, alt fra kompleksitet fra lineær regresjon og logistisk regresjon til dype nevrale nettverk og ensembler (kombinasjoner av andre modeller). Noen av de vanligste algoritmene inkluderer imidlertid:

  • Lineær regresjon, aka minste kvadratregresjon (for numeriske data)
  • Logistisk regresjon (for binær klassifisering)
  • Lineær diskriminantanalyse (for klassifisering i flere kategorier)
  • Beslutningstrær (for både klassifisering og regresjon)
  • Naïve Bayes (for både klassifisering og regresjon)
  • K-nærmeste naboer, aka KNN (for både klassifisering og regresjon)
  • Learning Vector Quantization, aka LVQ (for både klassifisering og regresjon)
  • Support Vector Machines, aka SVM (for binær klassifisering)
  • Tilfeldige skoger, en type "bagging" ensemblealgoritme (for både klassifisering og regresjon)
  • Boosting-metoder, inkludert AdaBoost og XGBoost, er ensemblealgoritmer som lager en serie modeller der hver nye modell prøver å korrigere feil fra forrige modell (for både klassifisering og regresjon)

Hvor er nevrale nettverk og dype nevrale nettverk som vi hører så mye om? De har en tendens til å være beregningskrevende til det punktet at de trenger GPU-er eller annen spesialisert maskinvare, så du bør bare bruke dem til spesialiserte problemer, for eksempel bildeklassifisering og talegjenkjenning, som ikke egner seg til enklere algoritmer. Merk at "dyp" betyr at det er mange skjulte lag i nevrale nettverk.

For mer om nevrale nettverk og dyp læring, se "Hva dyp læring egentlig betyr."

Hyperparametere for maskinlæringsalgoritmer

Maskinlæringsalgoritmer trener på data for å finne det beste settet med vekter for hver uavhengige variabel som påvirker den forventede verdien eller klassen. Algoritmene i seg selv har variabler, kalt hyperparametere. De kalles hyperparametere, i motsetning til parametere, fordi de styrer algoritmens drift i stedet for at vektene blir bestemt.

Det viktigste hyperparameteret er ofte læringsgraden, som bestemmer trinnstørrelsen som brukes når du skal finne neste sett med vekter å prøve når du optimaliserer. Hvis læringsgraden er for høy, kan gradientnedgangen raskt konvergere på et platå eller suboptimalt punkt. Hvis læringsgraden er for lav, kan gradientnedgangen stanse og aldri konvergere helt.

Mange andre vanlige hyperparametere avhenger av algoritmene som brukes. De fleste algoritmer har stoppparametere, for eksempel maksimalt antall epoker, eller maksimal tid å løpe, eller minimum forbedring fra epoke til epoke. Spesifikke algoritmer har hyperparametere som styrer formen på søket. For eksempel har en Random Forest Classifier hyperparametere for minimum prøver per blad, maks dybde, minimum prøver ved en splittelse, minimum vektfraksjon for et blad og ca. 8 til.

Innstilling av hyperparameter

Flere maskinlæringsplattformer for produksjon tilbyr nå automatisk innstilling av hyperparameter. I hovedsak forteller du systemet hvilke hyperparametere du vil variere, og muligens hvilken beregning du vil optimalisere, og systemet feier de hyperparametrene over så mange løp som du tillater. (Google Cloud-hyperparameterjustering trekker ut riktig beregning fra TensorFlow-modellen, slik at du ikke trenger å spesifisere den.)

Det er tre søkealgoritmer for feiende hyperparametere: Bayesian optimalisering, rutenett søk og tilfeldig søk. Bayesian optimalisering har en tendens til å være den mest effektive.

Du vil tro at innstilling av så mange hyperparametere som mulig vil gi deg det beste svaret. Men med mindre du kjører på din egen personlige maskinvare, kan det være veldig dyrt. Det er uansett avtagende avkastning. Med erfaring vil du oppdage hvilke hyperparametere som betyr mest for dataene dine og valg av algoritmer.

Automatisert maskinlæring

Når du snakker om å velge algoritmer, er det bare en måte å vite hvilken algoritme eller ensemble av algoritmer som gir deg den beste modellen for dataene dine, og det er å prøve dem alle. Hvis du også prøver alle mulige normaliseringer og valg av funksjoner, står du overfor en kombinasjonseksplosjon.

Å prøve alt er upraktisk å gjøre manuelt, så selvfølgelig har maskinlæringsverktøyleverandører lagt mye arbeid i å gi ut AutoML-systemer. De beste kombinerer funksjonsteknikk med sveip over algoritmer og normaliseringer. Hyperparameterjustering av den beste modellen eller modellene blir ofte igjen for senere. Funksjonsteknikk er imidlertid et vanskelig problem å automatisere, og ikke alle AutoML-systemer takler det.

Oppsummert er maskinlæringsalgoritmer bare ett stykke av maskinlæringspuslespillet. I tillegg til valg av algoritmer (manuell eller automatisk), må du håndtere optimaliserere, datarengjøring, funksjonsvalg, funksjonsnormalisering og (valgfritt) innstilling av hyperparameter.

Når du har håndtert alt dette og bygget en modell som fungerer for dataene dine, er det på tide å distribuere modellen, og deretter oppdatere den når forholdene endres. Å administrere maskinlæringsmodeller i produksjonen er imidlertid en helt annen ormekanne.

$config[zx-auto] not found$config[zx-overlay] not found