Programovanie

Strojové učenie pre vývojárov Java, 1. časť: Algoritmy pre strojové učenie

Autá s vlastným pohonom, softvér na detekciu tváre a hlasom ovládané reproduktory sú postavené na technológiách a rámcoch strojového učenia - a to je iba prvá vlna. V nasledujúcom desaťročí nová generácia produktov zmení náš svet a zavedie nové prístupy k vývoju softvéru a k aplikáciám a produktom, ktoré vytvárame a používame.

Ako vývojár v prostredí Java sa chcete dostať pred túto krivku, najmä preto, že technologické spoločnosti začínajú vážne investovať do strojového učenia. Na čom sa dnes dozviete, môžete stavať na nasledujúcich piatich rokoch, musíte však niekde začať.

Tento článok vás naštartuje. Začnete prvým dojmom o tom, ako funguje strojové učenie, nasledovaným krátkym sprievodcom implementáciou a školením algoritmu strojového učenia. Po preštudovaní vnútorných častí algoritmu učenia a funkcií, ktoré môžete použiť na trénovanie, skórovanie a výber najvhodnejšej predikčnej funkcie, získate prehľad o použití rámca JVM Weka na vytváranie riešení strojového učenia. Tento článok sa zameriava na kontrolované strojové učenie, ktoré je najbežnejším prístupom k vývoju inteligentných aplikácií.

Strojové učenie pre vývojárov Java, 2. časť

Ste pripravení na ďalší krok? Druhá polovica tohto tutoriálu vám ukáže, ako vyvinúť a nasadiť dátový kanál strojového učenia.

Strojové učenie a umelá inteligencia

Strojové učenie sa vyvinulo z oblasti umelej inteligencie, ktorá sa snaží vyrábať stroje schopné napodobňovať ľudskú inteligenciu. Aj keď je strojové učenie sa novým trendom v informatike, umelá inteligencia nie je novým vedeckým odborom. Turingov test, ktorý vyvinul Alan Turing na začiatku 50. rokov, bol jedným z prvých testov vytvorených s cieľom zistiť, či počítač môže mať skutočnú inteligenciu. Podľa Turingovho testu mohol počítač dokázať ľudskú inteligenciu podvádzaním človeka, aby veril, že to tiež je človek.

Mnoho najmodernejších prístupov k strojovému učeniu je založených na desaťročiach starých koncepciách. Za posledné desaťročie sa zmenilo to, že počítače (a distribuované výpočtové platformy) majú teraz výpočtový výkon potrebný pre algoritmy strojového učenia. Väčšina algoritmov strojového učenia vyžaduje na spracovanie obrovské množstvo násobení matíc a ďalších matematických operácií. Výpočtová technológia na správu týchto výpočtov neexistovala ani pred dvoma desaťročiami, ale je tomu tak dnes.

Strojové učenie umožňuje programom vykonávať procesy zlepšovania kvality a rozširovať ich schopnosti bez ľudskej účasti. Program zostavený pomocou strojového učenia je schopný aktualizovať alebo rozšíriť svoj vlastný kód.

Učenie pod dohľadom vs. Učenie pod dohľadom

Učenie pod dohľadom a učenie bez dozoru sú najobľúbenejšie prístupy k strojovému učeniu. Oboje vyžaduje, aby bolo do stroja vložené obrovské množstvo dátových záznamov, z ktorých je možné korelovať a z ktorých sa dá poučiť. Takto zhromaždené dátové záznamy sú všeobecne známe ako a vektory funkcií. V prípade jednotlivého domu môže vektor funkcií pozostávať z prvkov, ako je celková veľkosť domu, počet izieb a vek domu.

V učenie pod dohľadom, je algoritmus strojového učenia trénovaný tak, aby správne odpovedal na otázky spojené s vektormi funkcií. Na vycvičenie algoritmu je stroju dodaná sada vektorov funkcií a priradený štítok. Štítky zvyčajne poskytuje ľudský anotátor a predstavujú správnu „odpoveď“ na danú otázku. Algoritmus učenia analyzuje vektory prvkov a ich správne štítky, aby zistil vnútorné štruktúry a vzťahy medzi nimi. Stroj sa tak naučí správne reagovať na dotazy.

Napríklad môže byť inteligentná realitná aplikácia trénovaná s vektormi funkcií vrátane veľkosti, počtu izieb a príslušného veku pre rad domov. Ľudský označovač by označil každý dom správnou cenou domu na základe týchto faktorov. Analýzou týchto údajov by bola aplikácia pre nehnuteľnosti vyškolená tak, aby odpovedala na otázku: „Koľko peňazí by som mohol dostať za tento dom?"

Po ukončení procesu školenia nebudú nové vstupné údaje označené. Zariadenie bude schopné správne odpovedať na dotazy, a to aj pre neviditeľné, neoznačené vektory funkcií.

V učenie bez dozoru, je algoritmus naprogramovaný tak, aby predpovedal odpovede bez ľudského označenia alebo dokonca otázok. Namiesto predurčenia štítkov alebo toho, aké by mali byť výsledky, bezobslužné učenie využíva obrovské množiny údajov a výpočtovú silu na objavenie predtým neznámych korelácií. Napríklad v oblasti marketingu spotrebiteľských výrobkov by sa dalo nekontrolované učenie použiť na identifikáciu skrytých vzťahov alebo zoskupení spotrebiteľov, čo by nakoniec mohlo viesť k novým alebo vylepšeným marketingovým stratégiám.

Tento článok sa zameriava na kontrolované strojové učenie, ktoré je dnes najbežnejším prístupom k strojovému učeniu.

Kontrolované strojové učenie

Celé strojové učenie je založené na dátach. Pre projekt strojového učenia pod dohľadom budete musieť údaje zmysluplne označiť pre požadovaný výsledok. V tabuľke 1 si všimnite, že každý riadok záznamu o dome obsahuje štítok pre „cenu domu“. Koreláciou údajov o riadkoch so štítkom ceny domu bude algoritmus nakoniec schopný predpovedať trhovú cenu domu, ktorý sa nenachádza v množine údajov (veľkosť domu je založená na štvorcových metroch a cena domu je založená na eurách).

Tabuľka 1. Domové záznamy

FUNKCIAFUNKCIAFUNKCIAŠTÍTOK
Veľkosť domuČíslo iziebVek domuOdhadované náklady na dom
90 m2 / 295 stôp2 izby23 rokov249,000 €
101 m2 / 331 stôp3 izbyn / a338,000 €
1330 m2 / 4363 ft11 izieb12 rokov6,500,000 €

V počiatočných fázach budete pravdepodobne označovať dátové záznamy ručne, ale nakoniec by ste mohli svoj program vyškoliť na automatizáciu tohto procesu. Pravdepodobne ste to už videli v e-mailových aplikáciách, kde presunutie e-mailu do priečinka nevyžiadanej pošty vedie k dotazu „Je to spam? Keď odpoviete, trénujete program tak, aby rozpoznal poštu, ktorú nechcete vidieť. Spamový filter aplikácie sa naučí označovať budúcu poštu z rovnakého zdroja alebo s podobným obsahom a zlikvidovať ju.

Súbory označených údajov sa požadujú iba na účely školenia a testovania. Po skončení tejto fázy algoritmus strojového učenia pracuje na inštanciách neoznačených údajov. Môžete napríklad vložiť predikčný algoritmus do nového, neoznačeného záznamu domu a na základe údajov o školení by automaticky predpovedal očakávanú cenu domu.

Ako sa stroje učia predpovedať

Výzvou kontrolovaného strojového učenia je nájsť správnu predikčnú funkciu pre konkrétnu otázku. Matematicky je úlohou nájsť vstupno-výstupnú funkciu, ktorá prevezme vstupné premenné X a vráti predikčnú hodnotu r. Toto funkcia hypotézy (hθ) je výstupom z tréningového procesu. Často sa nazýva aj funkcia hypotézy cieľ alebo predpoveď funkcia.

Gregor Roth

Väčšinou, X predstavuje bod viacerých údajov. V našom príklade by to mohol byť dvojrozmerný údajový bod jednotlivého domu definovaný znakom veľkosť domu hodnota a číslo izieb hodnotu. Pole týchto hodnôt sa označuje ako vektor funkcií. Vzhľadom na konkrétnu cieľovú funkciu je možné túto funkciu použiť na predikciu každého vektora funkcie X. Ak chcete predpovedať cenu jednotlivého domu, môžete cieľovú funkciu zavolať pomocou vektora funkcií {101.0, 3.0} obsahujúceho veľkosť domu a počet izieb:

 // cieľová funkcia h (ktorá je výstupom procesu učenia) Funkcia h = ...; // nastavíme vektor prvkov na veľkosť domu = 101 a počet izieb = 3 Double [] x = Nový Dvojité [] {101,0, 3,0}; // a predpokladaná cena domu (štítok) dvojitý y = h.použiť (x); 

V zozname 1 premenná poľa X hodnota predstavuje vektor znaku domu. The r hodnota vrátená cieľovou funkciou je predikovaná cena domu.

Výzvou strojového učenia je definovať cieľovú funkciu, ktorá bude pracovať čo najpresnejšie pre neznáme, neviditeľné dátové prípady. V strojovom učení je cieľová funkcia (hθ) sa niekedy nazýva a Model. Tento model je výsledkom procesu učenia sa.

Gregor Roth

Na základe označených príkladov tréningu vyhľadáva algoritmus učenia štruktúry alebo vzory v tréningových dátach. Z nich vyprodukuje model, ktorý sa z týchto údajov dobre zovšeobecňuje.

Proces učenia je zvyčajne prieskumný. Vo väčšine prípadov bude proces prebiehať viackrát s použitím rôznych variácií učebných algoritmov a konfigurácií.

Nakoniec budú všetky modely vyhodnotené na základe výkonnostných metrík a vyberie sa ten najlepší. Tento model sa potom použije na výpočet predpovedí pre budúce inštancie neoznačených údajov.

Lineárna regresia

Ak chcete trénovať stroj na premýšľanie, prvým krokom je výber algoritmu učenia, ktorý použijete. Lineárna regresia je jeden z najjednoduchších a najpopulárnejších algoritmov učenia pod dohľadom. Tento algoritmus predpokladá, že vzťah medzi vstupnými vlastnosťami a výstupným štítkom je lineárny. Všeobecná lineárna regresná funkcia uvedená nižšie vráti predpokladanú hodnotu zhrnutím každého prvku z vektor funkcií vynásobené a parameter theta (θ). Parametre theta sa v rámci tréningového procesu používajú na prispôsobenie alebo „vyladenie“ regresnej funkcie na základe tréningových údajov.

Gregor Roth

Vo funkcii lineárnej regresie sa parametre theta a parametre funkcií spočítajú podľa čísla predplatného. Predplatné číslo označuje polohu parametrov theta (9) a parametrov funkcií (x) vo vektore. Všimnite si, že funkcia x0 je konštantný offsetový termín nastavený na hodnotu 1 na výpočtové účely. Vo výsledku bude index funkcie špecifickej pre doménu, ako je veľkosť domu, začínať znakom x1. Ako príklad, ak x1 sa nastavuje na prvú hodnotu vektora funkcie Dom, veľkosť domu, potom x2 nastaví sa na ďalšiu hodnotu, počet izieb atď.

Zoznam 2 zobrazuje implementáciu tejto lineárnej regresnej funkcie v jazyku Java, ktorá je matematicky znázornená ako hθ(X). Pre jednoduchosť sa výpočet vykonáva pomocou dátového typu dvojitý. V rámci použiť () metóda, očakáva sa, že prvý prvok poľa bol mimo tejto funkcie nastavený na hodnotu 1,0.

Zoznam 2. Lineárna regresia v prostredí Java

 verejná trieda LinearRegressionFunction implementuje funkciu {private final double [] thetaVector; LinearRegressionFunction (double [] thetaVector) {this.thetaVector = Arrays.copyOf (thetaVector, thetaVector.length); } public Double apply (Double [] featureVector) {// z výpočtových dôvodov musí byť prvý prvok 1,0 asert featureVector [0] == 1,0; // jednoduchá, postupná implementácia dvojitá predpoveď = 0; pre (int j = 0; j <thetaVector.length; j ++) {predikcia + = thetaVector [j] * featureVector [j]; } predikcia návratu; } public double [] getThetas () {return Arrays.copyOf (thetaVector, thetaVector.length); }} 

S cieľom vytvoriť novú inštanciu súboru LinearRegressionFunction, musíte nastaviť parameter theta. Parameter theta alebo vektor sa používa na prispôsobenie funkcie všeobecnej regresie podkladovým tréningovým údajom. Parametre theta programu budú počas procesu výučby vyladené na základe príkladov tréningu. Kvalita trénovanej cieľovej funkcie môže byť iba taká dobrá ako kvalita daných tréningových údajov.

V príklade nižšie LinearRegressionFunction sa vytvorí inštancia na predpovedanie ceny domu na základe veľkosti domu. Ak vezmeme do úvahy, že x0 musí mať konštantnú hodnotu 1,0, cieľová funkcia je inštancovaná pomocou dvoch parametrov theta. Parametre theta sú výstupom z procesu učenia. Po vytvorení novej inštancie bude cena domu s veľkosťou 1330 metrov štvorcových predpovedaná nasledovne:

 // tu použitý vektor theta bol výstupom procesu vlaku double [] thetaVector = new double [] {1.004579, 5.286822}; LinearRegressionFunction targetFunction = new LinearRegressionFunction (thetaVector); // vytvoríme vektorovú funkciu s x0 = 1 (z výpočtových dôvodov) a x1 = veľkosť domu Double [] featureVector = new Double [] {1.0, 1330.0}; // predikcia sa zdvojnásobí predikciouPrice = targetFunction.apply (featureVector); 

Predikčná čiara cieľovej funkcie je v nasledujúcom grafe zobrazená ako modrá čiara. Riadok bol vypočítaný vykonaním cieľovej funkcie pre všetky hodnoty veľkosti domu. Graf obsahuje aj páry ceny a veľkosti používané na tréning.

Gregor Roth

Zatiaľ sa zdá, že predikčný graf sedí dosť dobre. Súradnice grafu (priesečník a sklon) sú definované vektorom theta { 1.004579, 5.286822 }. Ako však viete, že tento vektor theta je pre vašu aplikáciu najvhodnejší? Hodila by sa funkcia lepšie, keby ste zmenili prvý alebo druhý parameter theta? Na identifikáciu najlepšie vyhovujúceho vektora parametrov theta potrebujete a úžitková funkcia, ktorá vyhodnotí výkonnosť cieľovej funkcie.

Bodovanie cieľovej funkcie

V strojovom učení sa a nákladová funkcia (J (θ)) sa používa na výpočet strednej chyby alebo „ceny“ danej cieľovej funkcie.

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