Programmering

Kos deg med maskinlæring med Mahout på Hadoop

"Mahout" er et hindi-begrep for en person som rir på en elefant. Elefanten, i dette tilfellet, er Hadoop - og Mahout er et av de mange prosjektene som kan sitte på toppen av Hadoop, selv om du ikke alltid trenger MapReduce for å kjøre den.

Mahout legger kraftige matematiske verktøy i hendene på de dødelige utviklerne som skriver InterWebs. Det er en pakke med implementeringer av de mest populære og viktige maskinlæringsalgoritmene, med flertallet av implementeringene designet spesielt for å bruke Hadoop for å muliggjøre skalerbar behandling av store datasett. Noen algoritmer er bare tilgjengelige i en ikke-parallelliserbar "seriell" form på grunn av algoritmens natur, men alle kan dra nytte av HDFS for enkel tilgang til data i Hadoop-prosesseringsrørledningen.

[Vet dette akkurat nå om Hadoop | Arbeid smartere, ikke vanskeligere - last ned utviklerens overlevelsesguide for alle tips og trender som programmerere trenger å vite. | Oppdag hva som er nytt i forretningsapplikasjoner med 's Technology: Applications newsletter. ]

Maskinlæring er trolig den mest praktiske delmengden av kunstig intelligens (AI), med fokus på sannsynlighets- og statistiske læringsteknikker. For alle dere AI-geeks, her er noen av maskinlæringsalgoritmene som følger med Mahout: K-betyr klynging, uklar K-betyr klynging, K-betyr, latent Dirichlet-allokering, dekomponering av enestående verdi, logistisk regresjon, naive Bayes og tilfeldig skoger. Mahout har også abstraksjoner på høyere nivå for å generere "anbefalinger" (à la populære e-handelsnettsteder eller sosiale nettverk).

Jeg vet at når noen begynner å snakke maskinlæring, AI og Tanimoto-koeffisienter, lager du sannsynligvis popcorn og fordeler deg, ikke sant? Ikke jeg heller. Merkelig, til tross for matematikkens kompleksitet, har Mahout et brukervennlig API. Her er en smak:

// laste datafilen vår på en eller annen måte

DataModel-modell = ny FileDataModel (ny fil ("data.txt"));

ItemSimilarity sim = ny LogLikelihoodSimilarity (modell);

GenericItemBasedRecommender r = ny GenericItemBasedRecommender (modell, sim);

LongPrimitiveIterator items = dm.getItemIDs ();

while (items.hasNext ()) {

lang itemId = items.nextLong ();

Listeanbefalinger = r.mostSimilarItems (itemId, 10);

// gjør noe med disse anbefalingene

}

Hva dette lille snippet ville gjort er å laste inn en datafil, forbanne elementene og deretter få 10 anbefalte varer basert på deres likhet. Dette er en vanlig e-handelsoppgave. Imidlertid, bare fordi to ting er like, betyr ikke det at jeg vil ha dem begge. Faktisk, i mange tilfeller vil jeg sannsynligvis ikke kjøpe to lignende varer. Jeg mener, jeg har nylig kjøpt en sykkel - jeg vil ikke ha den mest lignende varen, som ville være en annen sykkel. Imidlertid kjøpte andre brukere som kjøpte sykler også dekkpumper, så Mahout tilbyr også brukerbaserte anbefalinger.

Begge eksemplene er veldig enkle anbefalere, og Mahout tilbyr mer avanserte anbefalere som tar inn mer enn noen få faktorer og kan balansere brukersmak mot produktfunksjoner. Ingen av disse krever avansert distribuert databehandling, men Mahout har andre algoritmer som gjør det.

Utover anbefalingene

Mahout er langt mer enn en fancy e-handels-API. Faktisk gir andre algoritmer spådommer, klassifiseringer (for eksempel de skjulte Markov-modellene som driver mesteparten av tale- og språkgjenkjenning på Internett). Det kan til og med hjelpe deg med å finne klynger eller, rettere sagt, gruppere ting, som celler ... av mennesker eller noe, slik at du kan sende dem ... gavekurver til en enkelt adresse.

Selvfølgelig er djevelen i detaljene, og jeg har glanset over den virkelig viktige delen, som er den aller første linjen:

DataModel-modell = ny FileDataModel (ny fil ("data.txt"));

Hei, hvis du kunne få noen matte-geeks til å gjøre alt arbeidet og redusere all databehandling ned til de ti linjene som komponerer algoritmen, ville vi alle være ute av en jobb. Men hvordan kom dataene i det formatet vi trengte for anbefalingene? Å kunne designe implementeringen av den algoritmen er grunnen til at utviklere tjener store penger, og selv om Mahout ikke trenger Hadoop for å implementere mange av maskinlæringsalgoritmene, trenger du kanskje Hadoop for å sette dataene i de tre kolonnene, det enkle anbefaling kreves.

Mahout er en fin måte å utnytte en rekke funksjoner fra anbefalingsmotorer til mønstergjenkjenning til datautvinning. Når vi som industri er ferdig med den store, fete Hadoop-distribusjonen, vil interessen for maskinlæring og muligens AI mer generelt eksplodere, slik en innsiktsfull kommentator på Hadoop-artikkelen min observerte. Mahout vil være der for å hjelpe.

Denne artikkelen, "Enjoy machine learning with Mahout on Hadoop", ble opprinnelig publisert på .com. Hold deg oppdatert på de siste nyhetene innen applikasjonsutvikling og les mer av Andrew Olivers Strategic Developer-blogg på .com. For de siste nyhetene om forretningsteknologi, følg .com på Twitter.

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