Programavimas

Mašininis mokymasis „Java“ kūrėjams. 1 dalis. Mašininio mokymosi algoritmai

Savaeigiai automobiliai, veido aptikimo programinė įranga ir valdomi balsu garsiakalbiai yra sukurti remiantis mašininio mokymosi technologijomis ir sistemomis - ir tai tik pirmoji banga. Per ateinantį dešimtmetį naujos kartos produktai pakeis mūsų pasaulį, pradėdami naujus požiūrius į programinės įrangos kūrimą ir mūsų kuriamas bei naudojamas programas ir produktus.

Kaip „Java“ kūrėjas, jūs norite aplenkti šią kreivę, ypač todėl, kad technologijų kompanijos pradeda rimtai investuoti į mašininį mokymąsi. Tai, ko išmokote šiandien, galite remtis per ateinančius penkerius metus, tačiau turite pradėti nuo ko nors.

Šis straipsnis padės jums pradėti. Pradėsite nuo pirmo įspūdžio, kaip veikia mašininis mokymasis, po kurio bus pateiktas trumpas mašininio mokymosi algoritmo diegimo ir mokymo vadovas. Išstudijavę mokymosi algoritmo vidų ir funkcijas, kurias galite naudoti mokydami, įvertindami ir pasirinkdami geriausiai tinkančią prognozavimo funkciją, gausite JVM sistemos „Weka“ naudojimo mašininio mokymosi sprendimams kūrimo apžvalgą. Šiame straipsnyje pagrindinis dėmesys skiriamas prižiūrimam mašininiam mokymuisi, kuris yra labiausiai paplitęs požiūris į intelektualių programų kūrimą.

Mašininis mokymasis „Java“ kūrėjams, 2 dalis

Ar esate pasirengęs kitam žingsniui? Antroje šios mokymo programos pusėje parodoma, kaip kurti ir įdiegti mašininio mokymosi duomenų perdavimo liniją.

Mašinų mokymasis ir dirbtinis intelektas

Mašinų mokymasis išsivystė iš dirbtinio intelekto srities, kuri siekia pagaminti mašinas, galinčias imituoti žmogaus intelektą. Nors mašininis mokymasis yra ryški informatikos tendencija, dirbtinis intelektas nėra nauja mokslo sritis. 1950-ųjų pradžioje Alano Turingo sukurtas Tiuringo testas buvo vienas iš pirmųjų bandymų, sukurtų siekiant nustatyti, ar kompiuteris gali turėti tikrą intelektą. Remiantis Turingo testu, kompiuteris galėjo įrodyti žmogaus intelektą, apgaunėdamas žmogų manydamas, kad jis taip pat yra žmogus.

Daugybė moderniausių mašininio mokymosi metodų yra pagrįsti dešimtmečių senumo koncepcijomis. Per pastarąjį dešimtmetį pasikeitė tai, kad kompiuteriai (ir paskirstytos skaičiavimo platformos) dabar turi mašininio mokymosi algoritmams reikalingą apdorojimo galią. Daugeliui mašininio mokymosi algoritmų reikalingas didžiulis matricų daugybos ir kitų matematinių operacijų apdorojimas. Skaičiavimo technologija šiems skaičiavimams valdyti nebuvo dar prieš du dešimtmečius, tačiau ji egzistuoja ir šiandien.

Mašininis mokymasis leidžia programoms vykdyti kokybės gerinimo procesus ir išplėsti savo galimybes be žmogaus dalyvavimo. Mašininio mokymosi būdu sukurta programa gali atnaujinti arba išplėsti savo kodą.

Prižiūrėtas mokymasis, palyginti su neprižiūrimu mokymu

Prižiūrimas mokymasis ir neprižiūrimas mokymasis yra populiariausias požiūris į mašininį mokymąsi. Abiem atvejais reikia pateikti mašinai didžiulį duomenų įrašų skaičių, kad būtų galima susieti ir mokytis. Tokie surinkti duomenų įrašai paprastai vadinami a požymių vektoriai. Individualaus namo atveju objektų vektorių gali sudaryti tokios savybės kaip bendras namo dydis, kambarių skaičius ir namo amžius.

Į prižiūrimas mokymasis, mašininio mokymosi algoritmas yra išmokytas teisingai atsakyti į klausimus, susijusius su funkcijų vektoriais. Norint apmokyti algoritmą, mašinai tiekiamas funkcijų vektorių rinkinys ir susijusi etiketė. Etiketes paprastai pateikia žmogaus anotatorius ir jos reiškia teisingą „atsakymą“ į pateiktą klausimą. Mokymosi algoritmas analizuoja ypatybių vektorius ir jų teisingas etiketes, kad rastų vidines struktūras ir ryšius tarp jų. Taigi mašina išmoksta teisingai atsakyti į klausimus.

Pavyzdžiui, intelektualioji nekilnojamojo turto programa gali būti mokoma naudojant funkcijų vektorius, įskaitant namų dydį, kambarių skaičių ir atitinkamą amžių. Žmogaus etiketė, remdamasi šiais veiksniais, paženklintų kiekvieną namą teisinga būsto kaina. Analizuojant tuos duomenis, nekilnojamojo turto paraiška bus išmokyta atsakyti į klausimą: "Kiek galėčiau gauti pinigų už šį namą?"

Pasibaigus mokymo procesui, nauji įvesties duomenys nebus žymimi. Mašina galės teisingai atsakyti į užklausas, net už nematytus, nepažymėtus funkcijų vektorius.

Į neprižiūrimas mokymasis, algoritmas yra užprogramuotas numatyti atsakymus be žmogaus etiketės ar net klausimų. Užuot iš anksto nenurodžius etikečių ar kokių rezultatų turėtų būti, neprižiūrimas mokymasis panaudoja didžiulius duomenų rinkinius ir apdorojimo galią, kad atrastų anksčiau nežinomas koreliacijas. Pavyzdžiui, vartojimo prekių rinkodaroje neprižiūrimas mokymasis galėtų būti naudojamas paslėptiems santykiams ar vartotojų grupėms nustatyti, o tai galiausiai sukurs naujas ar patobulintas rinkodaros strategijas.

Šiame straipsnyje daugiausia dėmesio skiriama prižiūrimam mašininiam mokymuisi, kuris šiandien yra labiausiai paplitęs požiūris į mašininį mokymąsi.

Prižiūrimas mašininis mokymasis

Visas mašininis mokymasis pagrįstas duomenimis. Norėdami vykdyti prižiūrimą mašininio mokymosi projektą, turėsite prasmingai pažymėti duomenis siekiamam rezultatui. 1 lentelėje atkreipkite dėmesį, kad kiekvienoje namo įrašo eilutėje yra etiketė „namo kaina“. Koreliuojant eilutės duomenis su būsto kainos etikete, algoritmas galiausiai galės numatyti namo rinkos kainą, kurios nėra jo duomenų rinkinyje (atkreipkite dėmesį, kad namo dydis pagrįstas kvadratiniais metrais, o namo kaina - eurais).

1 lentelė. Namo įrašai

FUNKCIJAFUNKCIJAFUNKCIJALABEL
Namo dydisKambarių skaičiusNamo amžiusNumatoma namo kaina
90 m2 / 295 pėdos2 kambariai23 metai249,000 €
101 m2 / 331 pėda3 kambariainėra338,000 €
1330 m2 / 4363 pėdos11 kambarių12 metų6,500,000 €

Ankstyvose stadijose duomenų įrašus greičiausiai žymėsite ranka, bet galų gale galėtumėte išmokyti savo programą automatizuoti šį procesą. Tikriausiai matėte tai naudodamiesi el. Pašto programomis, kai perkėlus el. Laišką į jūsų šlamšto aplanką gaunama užklausa „Ar tai šlamštas?“ Kai atsakysite, mokote programą atpažinti laiškus, kurių nenorite matyti. Programos šlamšto filtras išmoksta žymėti būsimus laiškus iš to paties šaltinio arba su panašiu turiniu ir išmesti juos.

Pažymėtų duomenų rinkinių reikia tik mokymo ir testavimo tikslais. Pasibaigus šiam etapui, mašininio mokymosi algoritmas veikia nepaženklintuose duomenų egzemplioriuose. Pvz., Galite pateikti prognozavimo algoritmą naujam, nepažymėtam namo įrašui, ir jis automatiškai numatys numatomą namo kainą, remdamasis mokymo duomenimis.

Kaip mašinos išmoksta numatyti

Prižiūrimo mašininio mokymosi uždavinys yra rasti tinkamą konkretaus klausimo prognozavimo funkciją. Matematiškai iššūkis yra rasti įvesties-išvesties funkciją, kuri imtų įvesties kintamuosius x ir grąžina prognozės vertę y. Tai hipotezės funkcija (hθ) yra mokymo proceso rezultatas. Dažnai hipotezės funkcija taip pat vadinama taikinys arba numatymas funkcija.

Gregoras Rothas

Daugeliu atvejų, x reiškia kelių duomenų tašką. Mūsų pavyzdyje tai gali būti dviejų matmenų individualaus namo duomenų taškas, apibrėžtas namo dydžio vertė ir kambarių skaičius vertė. Šių reikšmių masyvas vadinamas ypatybių vektorius. Atsižvelgiant į konkrečią taikinio funkciją, funkciją galima naudoti numatant kiekvieną požymio vektorių x. Norėdami numatyti individualaus namo kainą, galite iškviesti tikslinę funkciją naudodami funkcijų vektorių {101.0, 3.0}, kuriame nurodytas namo dydis ir kambarių skaičius:

 // tikslinė funkcija h (kuri yra mokymosi proceso išvestis) Funkcija h = ...; // nustatykite požymių vektorių, kurio namo dydis = 101 ir kambarių skaičius = 3 Dvigubas [] x = naujas Dvigubas [] {101,0, 3,0}; // ir numatė namo kainą (etiketė) dvigubai y = h. taikyti (x); 

1 sąraše masyvo kintamasis x vertė reiškia namo ypatybių vektorių. y tikslinės funkcijos grąžinta vertė yra numatoma namo kaina.

Mašininio mokymosi uždavinys yra apibrėžti tikslinę funkciją, kuri kuo tiksliau veiks nežinomiems, nematytiems duomenų egzemplioriams. Mokant mašinoje tikslinė funkcija (hθ) kartais vadinamas a modelis. Šis modelis yra mokymosi proceso rezultatas.

Gregoras Rothas

Remiantis paženklintais mokymo pavyzdžiais, mokymosi algoritmas ieško struktūros ar modelių mokymo duomenyse. Iš jų sukuriamas modelis, kuris iš tų duomenų gerai apibendrina.

Paprastai mokymosi procesas yra žvalgomasis. Daugeliu atvejų procesas bus atliekamas kelis kartus, naudojant skirtingus mokymosi algoritmų ir konfigūracijų variantus.

Galų gale visi modeliai bus įvertinti pagal našumo metriką ir bus išrinktas geriausias. Tada šis modelis bus naudojamas apskaičiuojant būsimų nepažymėtų duomenų egzempliorių prognozes.

Tiesinė regresija

Norėdami išmokyti mašiną mąstyti, pirmiausia reikia pasirinkti mokymosi algoritmą, kurį naudosite. Tiesinė regresija yra vienas iš paprasčiausių ir populiariausių prižiūrimų mokymosi algoritmų. Šis algoritmas daro prielaidą, kad santykis tarp įvesties funkcijų ir išvestos etiketės yra tiesinis. Žemiau pateikta bendroji tiesinės regresijos funkcija grąžina numatytą vertę, apibendrinant kiekvieną elemento elementą ypatybių vektorius padauginta iš a teta parametras (θ). Teta parametrai naudojami mokymo procese, norint pritaikyti arba „sureguliuoti“ regresijos funkciją, remiantis treniruočių duomenimis.

Gregoras Rothas

Linijinės regresijos funkcijoje teta parametrai ir funkcijų parametrai išvardyti prenumeratos numeriu. Prenumeratos numeris nurodo teta parametrų (θ) ir ypatybių parametrų (x) padėtį vektoriuje. Atminkite, kad funkcija x0 yra pastovus kompensuojamas terminas, nustatytas kartu su verte 1 skaičiavimo tikslais. Todėl domenui būdingos funkcijos, pvz., Namo dydžio, rodyklė prasidės x1. Pavyzdžiui, jei x1 nustatoma pirmajai namo ypatybių vektoriaus reikšmei, namo dydžiui, tada x2 bus nustatyta kitai vertei, kambarių skaičiui ir pan.

2 sąraše parodytas šios tiesinės regresijos funkcijos Java įgyvendinimas, matematiškai parodytas kaip hθ(x). Kad būtų paprasčiau, skaičiavimas atliekamas naudojant duomenų tipą dvigubai. per kreiptis () metodo, tikimasi, kad už šios funkcijos ribų buvo nustatytas pirmasis masyvo elementas, kurio vertė 1,0.

Sąrašas 2. Linijinė regresija „Java“

 viešoji klasė „LinearRegressionFunction“ įgyvendina funkciją {privatus galutinis dvigubas [] thetaVector; LinearRegressionFunction (dviguba [] thetaVector) {this.thetaVector = Masyvai.copyOf (thetaVector, thetaVector.length); } public Double apply (Double [] featureVector) {// dėl skaičiavimo priežasčių pirmasis elementas turi būti 1,0 teigti featureVector [0] == 1,0; // paprastas, nuoseklus įgyvendinimo dvigubas numatymas = 0; už (int j = 0; j <thetaVector.length; j ++) {prediction + = thetaVector [j] * featureVector [j]; } grąžos prognozė; } public double [] getThetas () {return Arrays.copyOf (thetaVector, thetaVector.length); }} 

Norėdami sukurti naują LinearRegressionFunction, turite nustatyti teta parametrą. Teta parametras arba vektorius naudojamas bendrai regresijos funkcijai pritaikyti prie pagrindinių treniruočių duomenų. Programos teta parametrai bus sureguliuoti mokymosi proceso metu, remiantis mokymo pavyzdžiais. Išmokytos tikslinės funkcijos kokybė gali būti tokia gera, kaip ir pateiktų mokymo duomenų kokybė.

Žemiau pateiktame pavyzdyje LinearRegressionFunction bus nedelsiant prognozuojama namo kaina pagal namo dydį. Atsižvelgiant į tai, kad x0 turi būti pastovi 1,0 reikšmė, tikslinė funkcija išaiškinama naudojant du teta parametrus. Teta parametrai yra mokymosi proceso rezultatas. Sukūrus naują egzempliorių 1330 kvadratinių metrų namo kaina bus prognozuojama taip:

 // čia naudojamas teta vektorius buvo traukinio proceso dvigubas rezultatas [] thetaVector = new double [] {1.004579, 5.286822}; LinearRegressionFunction targetFunction = nauja LinearRegressionFunction (thetaVector); // sukurkite funkcijų vektoriaus funkciją su x0 = 1 (dėl skaičiavimo priežasčių) ir x1 = namo dydžio dvigubas [] featureVector = naujas dvigubas [] {1.0, 1330.0}; // padaryti prognozę dvigubai predictedPrice = targetFunction.apply (featureVector); 

Tikslinės funkcijos prognozavimo eilutė žemiau esančioje diagramoje rodoma mėlyna linija. Linija buvo apskaičiuota vykdant tikslinę visų namo dydžio verčių funkciją. Diagramoje taip pat pateikiamos kainos ir dydžio poros, naudojamos treniruotėms.

Gregoras Rothas

Kol kas prognozavimo grafikas atrodo pakankamai tinkamas. Grafiko koordinates (perėmimą ir nuolydį) nusako teta vektorius { 1.004579, 5.286822 }. Bet kaip žinoti, kad šis teta vektorius geriausiai tinka jūsų programai? Ar funkcija geriau tiktų, jei pakeistumėte pirmąjį ar antrąjį teta parametrą? Norint nustatyti geriausiai tinkantį teta parametrų vektorių, reikia naudingumo funkcija, kuris įvertins tikslinės funkcijos atlikimą.

Taikinio funkcijos įvertinimas

Mokydamiesi mašinoje, a kaštų funkcija (J (θ)) naudojamas apskaičiuojant vidutinę tam tikros tikslinės funkcijos paklaidą arba „kainą“.

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