Programmēšana

Mašīnmācība Java izstrādātājiem, 1. daļa: Mašīnmācīšanās algoritmi

Pašpiedziņas automašīnas, sejas noteikšanas programmatūra un balss vadāmi skaļruņi visi ir veidoti uz mašīnmācīšanās tehnoloģijām un ietvariem - un tas ir tikai pirmais vilnis. Nākamās desmitgades laikā jauna produktu paaudze pārveidos mūsu pasauli, uzsākot jaunas pieejas programmatūras izstrādei, kā arī mūsu izveidotajām un izmantotajām lietojumprogrammām un produktiem.

Kā Java izstrādātājs vēlaties apsteigt šo līkni, it īpaši tāpēc, ka tehnoloģiju uzņēmumi sāk nopietni ieguldīt mašīnmācībā. Uz to, ko jūs šodien iemācāties, varat balstīties nākamo piecu gadu laikā, bet kaut kur jāsāk.

Šis raksts palīdzēs jums sākt darbu. Jūs sāksit ar pirmo iespaidu par to, kā darbojas mašīnmācīšanās, kam sekos īss mašīnmācīšanās algoritma ieviešanas un apmācības ceļvedis. Pēc tam, kad esat izpētījis mācību algoritma iekšējās daļas un funkcijas, kuras varat izmantot, lai apmācītu, vērtētu un izvēlētos vislabāk piemēroto prognozēšanas funkciju, jūs saņemsiet pārskatu par JVM ietvara Weka izmantošanu mašīnmācīšanās risinājumu veidošanai. Šis raksts koncentrējas uz uzraudzītu mašīnmācīšanos, kas ir visizplatītākā pieeja viedo lietojumprogrammu izstrādē.

Mašīnmācība Java izstrādātājiem, 2. daļa

Vai esat gatavs nākamajam solim? Šīs apmācības otrajā pusē ir parādīts, kā izstrādāt un izvietot mašīnmācīšanās datu cauruļvadu.

Mašīnmācība un mākslīgais intelekts

Mašīnmācība ir attīstījusies no mākslīgā intelekta lauka, kura mērķis ir ražot mašīnas, kas spēj atdarināt cilvēka intelektu. Lai arī mašīnmācīšanās ir jauna tendence datorzinātnēs, mākslīgais intelekts nav jauna zinātnes joma. Tjūringa tests, kuru 50. gadu sākumā izstrādāja Alans Tūrings, bija viens no pirmajiem testiem, kas izveidots, lai noteiktu, vai datoram var būt reāls intelekts. Saskaņā ar Turinga testu dators varētu pierādīt cilvēka inteliģenci, mānot cilvēku, uzskatot, ka tas ir arī cilvēks.

Daudzas modernākās mašīnmācīšanās pieejas ir balstītas uz gadu desmitiem vecām koncepcijām. Pēdējās desmitgades laikā ir mainījies tas, ka datoriem (un izplatītām skaitļošanas platformām) tagad ir mašīnmācīšanās algoritmiem nepieciešamā apstrādes jauda. Lielākajai daļai mašīnmācīšanās algoritmu apstrādei ir nepieciešams liels skaits matricu reizinājumu un citu matemātisku darbību. Skaitļošanas tehnoloģija, lai pārvaldītu šos aprēķinus, nepastāvēja pat pirms divām desmitgadēm, bet tā ir mūsdienās.

Mašīnmācība ļauj programmām izpildīt kvalitātes uzlabošanas procesus un paplašināt savas iespējas bez cilvēka līdzdalības. Programma, kas izveidota ar mašīnmācīšanos, spēj atjaunināt vai paplašināt savu kodu.

Uzraudzīta mācīšanās pret bez uzraudzības

Vadīta mācīšanās un bez uzraudzības ir vispopulārākās pieejas mašīnmācībai. Abiem ir nepieciešams barot mašīnu ar lielu skaitu datu ierakstu, lai korelētu un mācītos. Šādi savāktie datu ieraksti parasti tiek saukti par a pazīmju vektori. Individuālas mājas gadījumā objektu vektors var sastāvēt no tādām pazīmēm kā kopējais mājas lielums, istabu skaits un mājas vecums.

In uzraudzīta mācīšanās, mašīnmācīšanās algoritms ir apmācīts pareizi atbildēt uz jautājumiem, kas saistīti ar funkciju vektoriem. Lai apmācītu algoritmu, mašīnai tiek ievadīts pazīmju vektoru kopums un ar to saistīta etiķete. Etiķetes parasti nodrošina cilvēka anotators, un tās norāda pareizo "atbildi" uz konkrēto jautājumu. Mācību algoritms analizē iezīmju vektorus un to pareizās etiķetes, lai atrastu iekšējās struktūras un attiecības starp tiem. Tādējādi mašīna iemācās pareizi atbildēt uz jautājumiem.

Piemēram, viedo nekustamā īpašuma lietojumprogrammu var apmācīt ar funkciju vektoriem, tostarp izmēru, istabu skaitu un attiecīgo vecumu dažādām mājām. Cilvēka etiķete marķē katru māju ar pareizo mājas cenu, pamatojoties uz šiem faktoriem. Analizējot šos datus, nekustamā īpašuma pieteikums tiks apmācīts atbildēt uz jautājumu: "Cik daudz naudas es varētu saņemt par šo māju?"

Pēc apmācības procesa beigām jaunie ievades dati netiks marķēti. Iekārta varēs pareizi atbildēt uz jautājumiem pat par neredzētiem, bez etiķetes iezīmētiem vektoriem.

In bez uzraudzības mācīšanās, algoritms ir ieprogrammēts tā, lai prognozētu atbildes bez cilvēku marķējuma vai pat jautājumiem. Tā vietā, lai iepriekš noteiktu etiķetes vai kādiem jābūt rezultātiem, nepieskatīta mācīšanās izmanto masveida datu kopas un apstrādes jaudu, lai atklātu iepriekš nezināmas korelācijas. Piemēram, patēriņa preču mārketingā bez uzraudzības var mācīties, lai identificētu slēptās attiecības vai patērētāju grupas, kas galu galā radītu jaunas vai uzlabotas mārketinga stratēģijas.

Šis raksts koncentrējas uz uzraudzītu mašīnmācīšanos, kas mūsdienās ir visizplatītākā pieeja mašīnmācībai.

Vadīta mašīnmācība

Visas mašīnmācības pamatā ir dati. Uzraugāmā mašīnmācīšanās projektā dati būs jāapzīmē jēgpilni, lai sasniegtu vēlamo rezultātu. 1. tabulā ņemiet vērā, ka katrā mājas ieraksta rindā ir etiķete "mājas cena". Korelējot rindu datus ar mājas cenu etiķeti, algoritms galu galā varēs prognozēt tirgus cenu mājai, kas nav iekļauta tā datu kopā (ņemiet vērā, ka mājas lielums ir balstīts uz kvadrātmetriem un mājas cena ir balstīta uz eiro).

1. tabula. Mājas ieraksti

ĪPAŠĪBAĪPAŠĪBAĪPAŠĪBALABEL
Mājas lielumsIstabu skaitsMājas vecumsParedzamās mājas izmaksas
90 m2 / 295 pēdas2 istabas23 gadi249,000 €
101 m2 / 331 pēdas3 istabasn / a338,000 €
1330 m2 / 4363 pēdas11 istabas12 gadi6,500,000 €

Sākotnējos posmos jūs, iespējams, iezīmēsit datu ierakstus ar rokām, taču jūs galu galā varētu apmācīt savu programmu šī procesa automatizēšanai. Jūs, iespējams, esat to redzējis e-pasta lietojumprogrammās, kur, pārvietojot e-pastu uz mapi Mēstules, tiek parādīts vaicājums "Vai tas ir surogātpasts?" Kad atbildat, jūs apmācāt programmu atpazīt pastu, kuru nevēlaties redzēt. Lietojumprogrammas surogātpasta filtrs iemācās iezīmēt nākotnes vēstules no tā paša avota vai ar līdzīgu saturu un iznīcināt to.

Marķētas datu kopas ir nepieciešamas tikai apmācības un testēšanas vajadzībām. Pēc šī posma beigām mašīnmācīšanās algoritms darbojas uz nemarķētiem datu gadījumiem. Piemēram, jūs varētu ievadīt prognozēšanas algoritmu ar jaunu, nemarķētu mājas ierakstu, un tas automātiski paredzētu paredzamo mājas cenu, pamatojoties uz apmācības datiem.

Kā mašīnas iemācās prognozēt

Pārraudzītas mašīnmācīšanās uzdevums ir atrast pareizu prognozēšanas funkciju konkrētam jautājumam. Matemātiski izaicinājums ir atrast ievades un izvades funkciju, kas ņem ievadītos mainīgos x un atgriež prognozes vērtību y. Šis hipotēzes funkcija (hθ) ir apmācības procesa rezultāts. Bieži tiek saukta arī hipotēzes funkcija mērķis vai pareģošana funkciju.

Gregors Rots

Vairumā gadījumu, x apzīmē vairāku datu punktu. Mūsu piemērā tas varētu būt divdimensiju individuālās mājas datu punkts, ko definē mājas izmērs vērtība un istabu skaits vērtība. Šo vērtību masīvu sauc par iezīmju vektors. Ņemot vērā konkrētu mērķa funkciju, šo funkciju var izmantot, lai prognozētu katru pazīmju vektoru x. Lai prognozētu individuālās mājas cenu, varat izsaukt mērķa funkciju, izmantojot funkciju vektoru {101.0, 3.0}, kurā norādīts mājas lielums un istabu skaits:

 // mērķa funkcija h (kas ir mācību procesa rezultāts) Funkcija h = ...; // iestatiet iezīmju vektoru ar mājas izmēru = 101 un istabu skaitu = 3 Double [] x = jauns Divkāršs [] {101,0, 3,0}; // un paredzēja mājas cenu (etiķete) dubultā y = h. lietot (x); 

1. sarakstā masīva mainīgais x vērtība apzīmē mājas pazīmju vektoru. The y mērķa funkcijas atgrieztā vērtība ir paredzamā mājas cena.

Mašīnmācīšanās uzdevums ir noteikt mērķa funkciju, kas pēc iespējas precīzāk darbosies nezināmiem, neredzētiem datu gadījumiem. Mašīnmācībā mērķa funkcija (hθ) dažreiz sauc par a modeli. Šis modelis ir mācību procesa rezultāts.

Gregors Rots

Pamatojoties uz apzīmētiem apmācības piemēriem, mācību algoritms meklē struktūru vai modeļus apmācības datos. No tiem tiek iegūts modelis, kas no šiem datiem labi vispārina.

Parasti mācību process ir izzinošs. Vairumā gadījumu process tiks veikts vairākas reizes, izmantojot dažādas mācību algoritmu un konfigurāciju variācijas.

Galu galā visi modeļi tiks novērtēti, pamatojoties uz veiktspējas rādītājiem, un tiks izvēlēts labākais. Pēc tam šo modeli izmantos, lai aprēķinātu prognozes nākamajiem nemarķētajiem datu gadījumiem.

Lineārā regresija

Lai apmācītu mašīnu domāt, vispirms jāizvēlas izmantotais mācību algoritms. Lineārā regresija ir viens no vienkāršākajiem un populārākajiem uzraudzītajiem mācību algoritmiem. Šis algoritms pieņem, ka saikne starp ievades pazīmēm un izdoto etiķeti ir lineāra. Vispārējā lineārās regresijas funkcija zemāk atgriež prognozēto vērtību, apkopojot katru elementa elementu iezīmju vektors reizināts ar a teta parametrs (θ). Teta parametri tiek izmantoti apmācības procesā, lai pielāgotu vai "noregulētu" regresijas funkciju, pamatojoties uz apmācības datiem.

Gregors Rots

Lineārās regresijas funkcijā teta parametri un pazīmju parametri ir uzskaitīti ar abonēšanas numuru. Abonēšanas numurs norāda teta parametru (θ) un pazīmju parametru (x) pozīciju vektorā. Ņemiet vērā, ka iezīme x0 ir nemainīgs nobīdes termiņš, kas iestatīts ar vērtību 1 skaitļošanas vajadzībām. Rezultātā domēnam raksturīgas funkcijas, piemēram, mājas lieluma indekss sāksies ar x1. Piemēram, ja x1 ir iestatīts pirmajai mājas iezīmju vektora vērtībai, mājas lielumam, pēc tam x2 tiks iestatīta nākamajai vērtībai, istabu skaitam utt.

2. saraksts parāda šīs lineārās regresijas funkcijas Java ieviešanu, matemātiski parādot kā hθ(x). Vienkāršības labad aprēķins tiek veikts, izmantojot datu tipu dubultā. Ietvaros pieteikties () metodi, paredzams, ka masīva pirmais elements ir iestatīts ar vērtību 1,0 ārpus šīs funkcijas.

2. lineārā regresija Java

 publiskā klase LinearRegressionFunction īsteno funkciju {private final double [] thetaVector; LinearRegressionFunction (double [] thetaVector) {this.thetaVector = Masīvi.copyOf (thetaVector, thetaVector.length); } public Double Apply (Double [] featureVector) {// skaitļošanas apsvērumu dēļ pirmajam elementam ir jābūt 1,0 assert featureVector [0] == 1,0; // vienkārša, secīga ieviešanas dubultā prognoze = 0; par (int j = 0; j <thetaVector.length; j ++) {prediction + = thetaVector [j] * featureVector [j]; } atgriešanās prognoze; } public double [] getThetas () {return Arrays.copyOf (thetaVector, thetaVector.length); }} 

Lai izveidotu jaunu LinearRegressionFunction, jums jāiestata teta parametrs. Teta parametru vai vektoru izmanto, lai vispārējo regresijas funkciju pielāgotu pamatā esošajiem treniņu datiem. Programmas teta parametri tiks noregulēti mācību procesa laikā, pamatojoties uz apmācības piemēriem. Apmācītās mērķa funkcijas kvalitāte var būt tikai tikpat laba kā doto apmācības datu kvalitāte.

Zemāk redzamajā piemērā LinearRegressionFunction tiks prognozēts, lai prognozētu mājas cenu, pamatojoties uz mājas lielumu. Ņemot vērā, ka x0 ir jābūt nemainīgai vērtībai 1,0, mērķa funkcija tiek instantizēta, izmantojot divus teta parametrus. Teta parametri ir mācību procesa rezultāts. Pēc jaunās instances izveidošanas mājas cena ar platību 1330 kvadrātmetri tiks prognozēta šādi:

 // šeit izmantotais teta vektors tika izvadīts no vilciena procesa divkāršā [] thetaVector = new double [] {1.004579, 5.286822}; LinearRegressionFunction targetFunction = jauna LinearRegressionFunction (thetaVector); // izveidojiet funkciju vektora funkciju ar x0 = 1 (skaitļošanas apsvērumu dēļ) un x1 = house-size Double [] featureVector = new Double [] {1.0, 1330.0}; // padarīt prognozi dubultu predictedPrice = targetFunction.apply (featureVector); 

Mērķa funkcijas prognozēšanas līnija zemāk redzamajā diagrammā ir parādīta kā zila līnija. Līnija ir aprēķināta, izpildot mērķa funkciju visām mājas lieluma vērtībām. Diagrammā ir iekļauti arī cenu un izmēra pāri, kas tiek izmantoti apmācībai.

Gregors Rots

Līdz šim prognozēšanas grafiks, šķiet, ir pietiekami piemērots. Grafika koordinātas (griezumu un slīpumu) nosaka teta vektors { 1.004579, 5.286822 }. Bet kā jūs zināt, ka šis teta vektors vislabāk atbilst jūsu lietojumprogrammai? Vai funkcija derētu labāk, ja mainītu pirmo vai otro teta parametru? Lai noteiktu vislabāk piemēroto teta parametru vektoru, jums ir nepieciešams lietderības funkcija, kas novērtēs mērķa funkcijas veiktspēju.

Mērķa funkcijas vērtēšana

Mašīnmācībā a izmaksu funkcija (J (θ)) izmanto, lai aprēķinātu vidējo kļūdu vai noteiktas mērķa funkcijas "izmaksas".

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