Programmering

Nyd maskinindlæring med Mahout på Hadoop

"Mahout" er et hindi-udtryk for en person, der kører på en elefant. Elefanten er i dette tilfælde Hadoop - og Mahout er et af de mange projekter, der kan sidde oven på Hadoop, selvom du ikke altid har brug for MapReduce for at køre det.

Mahout lægger stærke matematiske værktøjer i hænderne på de blotte dødelige udviklere, der skriver InterWebs. Det er en pakke med implementeringer af de mest populære og vigtige maskinlæringsalgoritmer, hvor størstedelen af ​​implementeringerne er designet specielt til at bruge Hadoop til at muliggøre skalerbar behandling af enorme datasæt. Nogle algoritmer er kun tilgængelige i en ikke-parallelliserbar "seriel" form på grund af algoritmens art, men alle kan drage fordel af HDFS for nem adgang til data i din Hadoop-behandlingsrørledning.

[Kend dette lige nu om Hadoop | Arbejd smartere, ikke hårdere - download Developers 'Survival Guide for alle de tip og trends, som programmører har brug for at vide. | Opdag hvad der er nyt i forretningsapplikationer med 's Technology: Applications-nyhedsbrev. ]

Maskinindlæring er sandsynligvis den mest praktiske delmængde af kunstig intelligens (AI) med fokus på probabilistiske og statistiske læringsteknikker. For alle dine AI-nørder er her nogle af maskinlæringsalgoritmerne inkluderet i Mahout: K-betyder klyngedannelse, fuzzy K-betyder klyngedannelse, K-betyder, latent Dirichlet-allokering, nedbrydning af entalværdi, logistisk regression, naive Bayes og tilfældig skove. Mahout har også abstraktioner på højere niveau til generering af "anbefalinger" (à la populære e-handelswebsteder eller sociale netværk).

Jeg ved, når nogen begynder at tale maskinindlæring, AI og Tanimoto-koefficienter, laver du sandsynligvis popcorn og frynser op, ikke? Heller ikke mig. Mærkeligt nok, på trods af matematikkens kompleksitet, har Mahout et brugervenligt API. Her er en smag:

// indlæs vores datafil på en eller anden måde

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

ItemSimilarity sim = ny LogLikelihoodSimilarity (model);

GenericItemBasedRecommender r = ny GenericItemBasedRecommender (model, sim);

LongPrimitiveIterator-poster = dm.getItemIDs ();

while (items.hasNext ()) {

lang itemId = items.nextLong ();

Listeanbefalinger = r.mostSimilarItems (itemId, 10);

// gør noget med disse anbefalinger

}

Hvad dette lille klip ville gøre er at indlæse en datafil, forbande gennem emnerne og derefter få 10 anbefalede emner baseret på deres lighed. Dette er en almindelig e-handelsopgave. Men bare fordi to ting er ens, betyder det ikke, at jeg vil have dem begge. Faktisk vil jeg sandsynligvis ikke købe to lignende varer i mange tilfælde. Jeg mener, jeg købte for nylig en cykel - jeg vil ikke have den mest lignende vare, som ville være en anden cykel. Imidlertid købte andre brugere, der købte cykler, også dækpumper, så Mahout tilbyder også brugerbaserede anbefalinger.

Begge eksempler er meget enkle anbefalere, og Mahout tilbyder mere avancerede anbefalere, der tager mere end et par faktorer ind og kan afbalancere brugersmag mod produktfunktioner. Ingen af ​​disse kræver avanceret distribueret computing, men Mahout har andre algoritmer, der gør.

Ud over anbefalinger

Mahout er langt mere end en fancy e-handels-API. Faktisk giver andre algoritmer forudsigelser, klassifikationer (såsom de skjulte Markov-modeller, der styrer det meste af tale- og sproggenkendelse på Internettet). Det kan endda hjælpe dig med at finde klynger eller rettere, gruppere ting som celler ... af mennesker eller noget, så du kan sende dem .... gavekurve til en enkelt adresse.

Selvfølgelig er djævelen i detaljerne, og jeg har glanset over den virkelig vigtige del, som er den allerførste linje:

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

Hej, hvis du kunne få nogle matematiske nørder til at udføre alt arbejdet og reducere al computing ned til de omkring 10 linjer, der sammensætter algoritmen, ville vi alle være ude af et job. Men hvordan kom disse data i det format, vi havde brug for til anbefalingerne? At være i stand til at designe implementeringen af ​​denne algoritme er grunden til, at udviklere tjener store penge, og selvom Mahout ikke har brug for Hadoop for at implementere mange af sine maskinlæringsalgoritmer, skal du muligvis have Hadoop for at sætte dataene i de tre kolonner det enkle anbefaling krævet.

Mahout er en fantastisk måde at udnytte en række funktioner fra anbefalingsmotorer til mønstergenkendelse til datamining. Når vi som industri er færdige med den store, fede Hadoop-implementering, vil interessen for maskinindlæring og muligvis AI mere generelt eksplodere, som en indsigtsfuld kommentator til min Hadoop-artikel observerede. Mahout vil være der for at hjælpe.

Denne artikel, "Nyd maskinindlæring med Mahout på Hadoop", blev oprindeligt offentliggjort på .com. Fortsæt med de seneste nyheder inden for applikationsudvikling, og læs mere om Andrew Olivers Strategic Developer-blog på .com. For at få de seneste nyheder om forretningsteknologi, følg .com på Twitter.