Programiranje

Strojno učenje za razvijalce Java, 1. del: Algoritmi za strojno učenje

Samovozeči avtomobili, programska oprema za zaznavanje obrazov in zvočniki z glasovnim nadzorom so zgrajeni na tehnologijah in okvirih strojnega učenja - in to je le prvi val. V naslednjem desetletju bo nova generacija izdelkov spremenila naš svet in sprožila nove pristope k razvoju programske opreme ter aplikacij in izdelkov, ki jih ustvarjamo in uporabljamo.

Kot razvijalec Jave bi radi prehiteli to krivuljo, še posebej zato, ker tehnološka podjetja začenjajo resno vlagati v strojno učenje. Kar se naučite danes, lahko nadgradite v naslednjih petih letih, vendar morate nekje začeti.

Ta članek vas bo začel. Začeli boste s prvim vtisom o delovanju strojnega učenja, ki mu bo sledil kratek vodnik za izvajanje in usposabljanje algoritma strojnega učenja. Po preučitvi notranjosti učnega algoritma in funkcij, ki jih lahko uporabite za treniranje, ocenjevanje in izbiro najustreznejše funkcije predvidevanja, boste dobili pregled uporabe ogrodja JVM, Weka, za izdelavo rešitev strojnega učenja. Ta članek se osredotoča na nadzorovano strojno učenje, ki je najpogostejši pristop k razvoju inteligentnih aplikacij.

Strojno učenje za razvijalce Java, 2. del

Ste pripravljeni na naslednji korak? V drugi polovici te vadnice je razvidno, kako razviti in uvesti svoj cevovod podatkov o strojnem učenju.

Strojno učenje in umetna inteligenca

Strojno učenje se je razvilo s področja umetne inteligence, ki skuša izdelati stroje, ki lahko posnemajo človeško inteligenco. Čeprav je strojno učenje naraščajoč trend v računalništvu, umetna inteligenca ni novo znanstveno področje. Turingov test, ki ga je v zgodnjih petdesetih letih razvil Alan Turing, je bil eden prvih testov, ki so ga ustvarili, da bi ugotovili, ali ima računalnik resnično inteligenco. Po Turingovem testu bi računalnik lahko dokazal človeško inteligenco tako, da bi človeka prevaral, da je prepričan, da je tudi človek.

Številni najsodobnejši pristopi strojnega učenja temeljijo na desetletjih starih konceptih. V zadnjem desetletju se je spremenilo, da imajo računalniki (in porazdeljene računalniške platforme) zdaj procesorsko moč, potrebno za algoritme strojnega učenja. Večina algoritmov strojnega učenja zahteva ogromno množenja matrik in drugih matematičnih operacij za obdelavo. Računalniške tehnologije za upravljanje teh izračunov pred dvema desetletjema ni bilo, danes pa obstaja.

Strojno učenje omogoča programom izvajanje postopkov za izboljšanje kakovosti in razširitev njihovih zmožnosti brez človekovega sodelovanja. Program, zgrajen s strojnim učenjem, lahko posodablja ali razširja lastno kodo.

Nadzorovano učenje v primerjavi z nenadzorovanim učenjem

Nadzorovano učenje in nenadzorovano učenje sta najbolj priljubljena pristopa k strojnemu učenju. Oba zahtevata, da stroj pošlje ogromno število podatkovnih zapisov, s katerimi se lahko ujemajo in se iz njih učijo. Takšni zbrani podatki so splošno znani kot vektorji funkcij. V primeru posamezne hiše lahko vektor značilnosti sestavljajo lastnosti, kot so skupna velikost hiše, število sob in starost hiše.

V nadzorovano učenje, algoritem strojnega učenja je usposobljen za pravilno odzivanje na vprašanja, povezana z vektorji funkcij. Za urjenje algoritma ima naprava nabor vektorjev funkcij in s tem povezano oznako. Oznake običajno da človeški opomnik in predstavljajo pravi "odgovor" na dano vprašanje. Učni algoritem analizira vektorje funkcij in njihove pravilne oznake, da bi našel notranje strukture in odnose med njimi. Tako se naprava nauči pravilno odzivati ​​na poizvedbe.

Kot primer bi lahko inteligentno nepremičninsko aplikacijo usposobili z vektorji funkcij, vključno z velikostjo, številom sob in starostjo za vrsto hiš. Človeški etiket bi na podlagi teh dejavnikov vsako hišo označil s pravilno ceno hiše. Z analizo teh podatkov bi se nepremičninska aplikacija usposobila za odgovor na vprašanje: "Koliko denarja bi lahko dobil za to hišo?"

Po končanem treningu novi vhodni podatki ne bodo več označeni. Naprava se bo lahko pravilno odzvala na poizvedbe, tudi za nevidne, neoznačene vektorje funkcij.

V nenadzorovano učenje, algoritem je programiran za napovedovanje odgovorov brez označevanja ljudi ali celo vprašanj. Nenadzorovano učenje namesto da bi vnaprej določili oznake ali kakšni bi morali biti rezultati, izkoristi ogromne nabore podatkov in procesorsko moč za odkrivanje prej neznanih korelacij. Na primer pri trženju potrošniških izdelkov se lahko nenadzorovano učenje uporablja za prepoznavanje skritih odnosov ali združevanje potrošnikov, kar sčasoma vodi do novih ali izboljšanih tržnih strategij.

Ta članek se osredotoča na nadzorovano strojno učenje, ki je danes najpogostejši pristop k strojnemu učenju.

Nadzorovano strojno učenje

Vse strojno učenje temelji na podatkih. Za projekt nadzorovanega strojnega učenja boste morali podatke smiselno označiti za rezultat, ki ga iščete. V tabeli 1 upoštevajte, da ima vsaka vrstica hišnega zapisa oznako »cena hiše«. S povezavo podatkov vrstic z oznako cene hiše bo algoritem sčasoma lahko napovedal tržno ceno hiše, ki ni v njenem naboru podatkov (upoštevajte, da velikost hiše temelji na kvadratnih metrih, cena hiše pa na evrih).

Tabela 1. Hiša evidence

LASTNOSTLASTNOSTLASTNOSTLABEL
Velikost hišeŠtevilo sobStarost hišePredvideni stroški hiše
90 m2 / 295 čevljev2 sobi23 let249,000 €
101 m2 / 331 čevljev3 soben / a338,000 €
1330 m2 / 4363 ft11 sob12 let6,500,000 €

V zgodnjih fazah boste zapise podatkov verjetno označevali ročno, vendar bi lahko sčasoma usposobili svoj program za avtomatizacijo tega postopka. Verjetno ste to že videli pri e-poštnih aplikacijah, pri katerih premikanje e-pošte v mapo z neželeno pošto povzroči poizvedbo "Ali je to neželena pošta?" Ko se odzovete, program usposobite za prepoznavanje pošte, ki je ne želite videti. Filter neželene pošte aplikacije se nauči označevati prihodnjo pošto iz istega vira ali s podobno vsebino in jo odstraniti.

Označeni nabori podatkov so potrebni samo za usposabljanje in testiranje. Po koncu te faze algoritem strojnega učenja deluje na neoznačenih podatkovnih primerkih. Na primer, lahko algoritmu napovedovanja pošljete nov, neoznačen hišni zapis in samodejno napove pričakovano ceno hiše na podlagi podatkov o usposabljanju.

Kako se stroji naučijo predvidevati

Izziv nadzorovanega strojnega učenja je najti ustrezno funkcijo predvidevanja za določeno vprašanje. Matematično je izziv najti vhodno-izhodno funkcijo, ki sprejme vhodne spremenljivke x in vrne napovedno vrednost y. To funkcija hipoteze (hθ) je rezultat procesa treninga. Pogosto se imenuje tudi funkcija hipoteze cilj ali napoved funkcijo.

Gregor Roth

V večini primerov, x predstavlja točko z več podatki. V našem primeru je to lahko dvodimenzionalna podatkovna točka posamezne hiše, ki jo definira velikosti hiše vrednost in število sob vrednost. Matrika teh vrednosti se imenuje funkcijski vektor. Glede na konkretno ciljno funkcijo lahko funkcijo uporabimo za napovedovanje vsakega vektorja značilnosti x. Če želite napovedati ceno posamezne hiše, lahko prikličete ciljno funkcijo z uporabo vektorja lastnosti {101.0, 3.0}, ki vsebuje velikost hiše in število sob:

 // ciljna funkcija h (ki je rezultat procesa učenja) Funkcija h = ...; // nastavimo vektor značilnosti z velikostjo hiše = 101 in številom sob = 3 Double [] x = novo Dvojno [] {101,0, 3,0}; // in predvidena cena hiše (oznaka) dvojno y = h.apply (x); 

V seznamu 1 spremenljivka polja x vrednost predstavlja vektor značilnosti hiše. The y vrednost, ki jo vrne ciljna funkcija, je predvidena cena hiše.

Izziv strojnega učenja je določiti ciljno funkcijo, ki bo delovala čim bolj natančno za neznane, nevidne primerke podatkov. Pri strojnem učenju ciljna funkcija (hθ) se včasih imenuje a model. Ta model je rezultat učnega procesa.

Gregor Roth

Na podlagi označenih primerov treninga učni algoritem išče strukture ali vzorce v podatkih o usposabljanju. Iz njih ustvari model, ki dobro posplošuje iz teh podatkov.

Značilno je, da je učni proces raziskovalno. V večini primerov bo postopek izveden večkrat z uporabo različnih različic učnih algoritmov in konfiguracij.

Sčasoma bodo vsi modeli ocenjeni na podlagi meritev uspešnosti in izbran bo najboljši. Ta model bo nato uporabljen za izračun napovedi za prihodnje neoznačene primerke podatkov.

Linearna regresija

Če želite stroj usposobiti za razmišljanje, morate najprej izbrati učni algoritem, ki ga boste uporabili. Linearna regresija je eden najpreprostejših in najbolj priljubljenih algoritmov nadzorovanega učenja. Ta algoritem predpostavlja, da je razmerje med vhodnimi značilnostmi in izpisano oznako linearno. Splošna linearna regresijska funkcija spodaj vrne predvideno vrednost s seštevanjem vsakega elementa funkcijski vektor pomnoženo z a theta parameter (θ). Parametri theta se v vadbenem procesu uporabljajo za prilagoditev ali "uglasitev" regresijske funkcije na podlagi podatkov o vadbi.

Gregor Roth

V funkciji linearne regresije so parametri theta in parametri značilnosti oštevilčeni s številko naročnine. Številka naročnine označuje položaj parametrov theta (θ) in parametrov značilnosti (x) znotraj vektorja. Upoštevajte, da funkcija x0 je konstanten odmični izraz, nastavljen z vrednostjo 1 za računske namene. Posledično se bo indeks funkcije, značilne za domeno, kot je velikost hiše, začel z x1. Kot primer, če x1 je nastavljena za prvo vrednost vektorja značilnosti hiše, velikost hiše, nato x2 bo nastavljena za naslednjo vrednost, število sob itd.

Seznam 2 prikazuje implementacijo te linearne regresijske funkcije v Java, ki je matematično prikazana kot hθ(x). Zaradi enostavnosti se izračun izvede z uporabo podatkovnega tipa dvojno. Znotraj uporabi () Pričakuje se, da je bil prvi element polja nastavljen z vrednostjo 1,0 zunaj te funkcije.

Seznam 2. Linearna regresija v Javi

 javni razred LinearRegressionFunction izvaja funkcijo {private final double [] thetaVector; LinearRegressionFunction (dvojni [] thetaVector) {this.thetaVector = Arrays.copyOf (thetaVector, thetaVector.length); } public Double apply (Double [] featureVector) {// iz računskih razlogov mora biti prvi element 1.0 uveljaviti featureVector [0] == 1.0; // preprosta, zaporedna izvedba dvojna napoved = 0; for (int j = 0; j <thetaVector.length; j ++) {napoved + = thetaVector [j] * featureVector [j]; } napoved vrnitve; } public double [] getThetas () {return Arrays.copyOf (thetaVector, thetaVector.length); }} 

Da bi ustvarili nov primerek datoteke LinearRegressionFunction, morate nastaviti theta parameter. Parameter theta ali vektor se uporablja za prilagoditev generične regresijske funkcije osnovnim podatkom vadbe. Parametri theta programa bodo nastavljeni med učnim procesom na podlagi primerov usposabljanja. Kakovost usposobljene ciljne funkcije je lahko tako dobra kot kakovost danih podatkov o vadbi.

V spodnjem primeru LinearRegressionFunction bo primerno napovedal ceno hiše glede na velikost hiše. Glede na to, da x0 mora biti konstantna vrednost 1,0, ciljna funkcija se ustvari z uporabo dveh theta parametrov. Parametri theta so rezultat učnega procesa. Po ustvarjanju novega primerka bo cena hiše velikosti 1330 kvadratnih metrov predvidena na naslednji način:

 // tu uporabljeni vektor theta je bil rezultat postopka vlaka double [] thetaVector = new double [] {1.004579, 5.286822}; LinearRegressionFunction targetFunction = nova LinearRegressionFunction (thetaVector); // ustvarimo funkcijo vektorja značilnosti z x0 = 1 (iz računskih razlogov) in x1 = hišna velikost Double [] featureVector = new Double [] {1.0, 1330.0}; // naredimo napoved dvojno predvidenoPrice = targetFunction.apply (featureVector); 

Črta napovedi ciljne funkcije je v spodnjem grafikonu prikazana kot modra črta. Vrstica je bila izračunana z izvajanjem ciljne funkcije za vse vrednosti velikosti hiše. Grafikon vključuje tudi pare cena-velikost, ki se uporabljajo za trening.

Gregor Roth

Zaenkrat se zdi, da se graf napovedi dovolj dobro prilega. Koordinate grafa (presek in naklon) so določene s teta vektorjem { 1.004579, 5.286822 }. Kako pa veste, da je ta theta vektor najbolj primeren za vašo aplikacijo? Bi se funkcija bolje prilegala, če bi spremenili prvi ali drugi parameter theta? Za identifikacijo najbolj primernega vektorja theta parametrov potrebujete a uporabnost, ki bo ocenil, kako dobro deluje ciljna funkcija.

Točkovanje ciljne funkcije

Pri strojnem učenju a stroškovna funkcija (J (θ)) se uporablja za izračun srednje napake ali "stroškov" dane ciljne funkcije.

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