Upload
hoangkhanh
View
226
Download
0
Embed Size (px)
Citation preview
UNIVERSITATEA BABEŞ-BOLYAI CLUJ-NAPOCAFACULTATEA DE MATEMATICǍ ŞI INFORMATICǍ
SPECIALIZAREA INFORMATICĂ ROMÂNĂ
LUCRARE DE DIPLOMǍ
Sisteme predictive inteligente. Analiza seriilor de timp prin metode de
învățare automată
Conducător ştiinţificProf. univ. dr. Czibula Gabriela
AbsolventGrecu Mircea
2012
Cuprins
CUPRINS 3
INTRODUCERE 5
CAPITOLUL 1. INTELIGEN A ARTIFICIALĂ I ÎNVĂ AREA AUTOMATĂȚ Ș Ț 9
1.1. INTELIGEN AȚ ARTIFICIALĂ 9
1.1.1. CE ESTE INTELIGEN AȚ ARTIFICIALĂ? 9
1.1.2. RAMURI ALE INTELIGEN EIȚ ARTIFICIALE 10
1.2. ÎNVĂ AREAȚ AUTOMATĂ 13
1.2.1. CE ESTE ÎNVĂ AREAȚ AUTOMATĂ? 13
1.2.2. CLASE DE PROBLEME DE ÎNVĂ AREȚ AUTOMATĂ 14
1.2.3. APLICA IIȚ ALE ÎNVĂ ĂRIIȚ AUTOMATE 16
CAPITOLUL 2. ÎNVĂ ARE SUPERVIZATĂȚ 17
2.1. ASPECTE GENERALE 17
2.2. RE ELEȚ NEURONALE 18
2.3. PROGRAMARE GENETICĂ 20
2.4. MA INIȘ CU SUPORT VECTORIAL 21
CAPITOLUL 3. SISTEME PREDICTIVE INTELIGENTE 23
3.1. ANALIZA PREDICTIVĂ 23
3.2. SERII DE TIMP 24
3.3. MĂSURI DE PERFORMAN ĂȚ PENTRU MODELE PREDICTIVE DE REGRESIE 25
CAPITOLUL 4. STUDIU DE CAZ: PREVIZIUNEA VREMII FOLOSIND TEHNICI DE ÎNVĂ AREȚ AUTOMATĂ 27
4.1. ASPECTE GENERALE 27
4.2. DESCRIEREA PROBLEMEI 28
4.2.1. CONTEXT 28
4.2.2. MOTIVA IEȚ 29
4.3. ABORDĂRI INRUDITE 29
4.4. METODOLOGIE 31
4.4.1. PROIECTAREA MODELELOR 32
3
4.4.2. SETUL DE DATE IȘ PREPROCESARE 33
4.4.3. ANTRENAMENT IȘ TESTARE 35
4.5. EXPERIMENTE IȘ REZULTATE 35
4.5.1. EXPERIMENTE 35
4.5.2. ANALIZĂ COMPARATIVĂ 41
4.6. DISCU IIȚ 42
4.6.1. ANALIZĂ 42
4.6.2. COMPARA IIȚ CU LUCRĂRI ANTERIOARE 43
4.7. CONCLUZII 44
CAPITOLUL 5. APLICA IE PRACTICĂ: ANALIZA SERIILOR DE TIMP PRIN TEHNICI DEȚ ÎNVĂ ARE AUTOMATĂȚ 45
5.1. ENUN ULȚ IȘ SPECIFICAREA PROBLEMEI 45
5.2. ANALIZA PROBLEMEI 46
5.3. PROIECTARE 48
5.3.1. MODELUL DE DATE 48
5.3.2. TEHNICILE DE ÎNVĂ AREȚ 52
5.4. IMPLEMENTARE 53
5.4.1. LIMBAJUL IȘ BIBLIOTECILE FOLOSITE 53
5.4.2. IMPLEMENTAREA INTERFE EIȚ CU UTILIZATORUL 53
5.4.3. SECVEN EȚ DE COD RELEVANTE 55
5.5. TESTARE 60
5.6. MANUAL DE UTILIZARE 60
5.7. EXTINDERI POSIBILE 65
CONCLUZII 67
BIBLIOGRAFIE 69
4
Introducere
Deciziile oamenilor sunt de multe ori dificile, din cauza incertitudinilor și a lipsei
de informații despre evenimentele din viitor. Dorința de a facilita luarea deciziilor și de a
face alegeri corecte ne motivează să căutam cât mai multe informații despre situația
studiată. Întrucât în numeroase situații informațiile care lipsesc sunt legate de evenimente
care încă nu au avut loc, se caută modalități de a prezice anumite fenomene care sunt
relevante pentru situațiile în cauză sau de a estima rezultatele unor evenimente despre care
se știe că vor avea loc.
Predicțiile s-au dovedit foarte utile în diverse domenii de activitate: industrie,
transporturi, politică, finanțe, marketing, meteorologie. Mai exact, predicțiile sunt folosite
pentru: managementul lanțului de aprovizionare, o activitate de bază în afacerile mari,
previzionarea indicatorilor meteorologici, planificarea transportului urban și aerian,
previzionarea cutremurelor și a altor calamități naturale și reducerea pagubelor acestora,
previzionarea rezultatelor la alegerile electorale, în actuariat pentru construirea unor
modele care ar estima riscurile afacerilor unei companii în viitorul apropiat, în studierea
burselor de valori pentru a prezice evoluția prețurilor acțiunilor.
Previzionarea diverselor fenomene din societate și din natură a fost una din
preocupările oamenilor încă din antichitate. Însă cele mai importante descoperiri științifice
legate de previzionare și predicții au fost făcute din anii 1960 până în prezent. Și odată cu
apariția calculatoarelor, s-a inceput studierea modelelor computerizate, care să genereze
predicții, având la bază algoritmi construiți după modele matematice sau seturi de reguli
folosite de experți.
În a doua jumătate a secolului XX a început să se dezvolte și o nouă ramură a
informaticii – inteligența artificială. Aceasta include și studiul învățării automate – o serie
de algoritmi și metode care evoluează în funcție de datele empirice primite. Problemele în
care se cer predicții s-au dovedit a fi ușor de transformat în probleme de învățare automată.
Această lucrare studiază aplicarea tehnicilor de învățare automată la problemele de
predicție.
Lucrarea cuprinde cinci capitole.
5
Capitolul 1 descrie pe scurt studiul inteligenței artificiale și al învățării automate.
Se face o scurtă introducere în inteligența artificială și sunt prezentatea principalele ramuri
ale aceasteia. De asemenea, se încadrează studiul învățării automate în cadrul inteligenței
artificiale și se prezintă principalele clase de probleme de învățare. Sunt descrise și câteva
situații reale în care se aplică algoritmii de învățare automată.
În Capitolul 2 este descrisă mai detaliat una din clasele de probleme de învățare
automată – învățare prin supervizare. Sunt prezentate aspecte teoretice și caracteristici
comune ale problemelor din aceasta clasă și domenii în care sunt aplicate tehnici de
învățare supervizată. În cadrul aceluiași capitol sunt descrise trei dintre cele mai cunoscute
metode folosite pentru această clasă de probleme: rețele neuronale artificiale, programarea
genetică și mașini cu suport vectorial. Aceste metode au fost alese și pentru studiul de caz,
descris în Capitolul 4. Sunt prezentate și modalitățile prin care este masurată performanța
acestor tehnici.
În continuare, Capitolul 3 include aspecte generale legate de sisteme predictive și
analiza predictivă. Se va prezenta pe scurt și tema analizei seriilor de timp – o modalitate
de a modela numeroase probleme de predicție. În acest capitol sunt menționate și cele mai
importante măsuri de evaluare a modelelor predictive, care vor fi utile în studiul de caz
prezentat în capitolul următor.
Capitolul 4 descrie un studiu de caz cu tema: Previzionarea vremii folosind metode
de învățare automată. Inițial, sunt mentionate aspecte care ne motivează să cercetăm
problema previzionării indicatorilor meteorologici folosind tehnici de învățare. Sunt
prezentate pe scurt lucrări în care a fost cercetată aceeași problemă, menționându-se
metodele și pașii folosiți pentru a studia problema, precum și rezultatele obținute. În
continuare, sunt explicate abordările folosite în această lucrare și sunt prezentate
experimentele realizate și o analiză a rezultatelor obținute în urma experimentelor
respective. Este inclusă și o analiză comparativă cu experimentele și rezultatele din
lucrările menționate care studiază aceeași problemă. Capitolul include și câteva concluzii
relevante pentru studiul de caz efectuat.
În final, Capitolul 5 descrie aplicația practică realizată pentru studierea sistemelor
predictive inteligente, care este folosită și în cadrul experimentelor descrise în studiul de
caz. Este o aplicatie de tip desktop care poate fi folosită pentru orice problemă pentru care
există un set de date compus dintr-o mulțime de exemple de date, fiecare fiind descris de
6
valorile aceluiași set de variabile. Odată ce este încărcat un set de date se pot întreprinde
următoarele acțiuni: se poate studia corelația dintre variabile, se poate configura o
problemă care constă în previzionarea uneia din variabile, în funcție de valorile precedente
ale unui subset de variabile din setul de date, se poate aplica o tehnică de învățare
supervizată pentru a antrena un model pentru problema configurată, se poate testa acest
model și se pot salva rezultatele obținute. Tehnicile care pot fi folosite în program sunt:
rețele neuronale, programare genetică și mașini cu suport vectorial. Algoritmii folosiți
pentru aceste tehnici pot fi configurați din aplicație, setând parametrii corespunzîtori
fiecăruia.
În cadrul Capitolului 5 se prezintă specificarea proiectului, proiectarea aplicației, cu
diagramele corespunzătoare, detalii de implementare, prezentându-se instrumentele soft
folosite și secvențe de cod relevante pentru algoritmii utilizați, un manual de utilizare a
aplicației și extinderi posibile a acesteia pentru a include mai multe funcționalități și
posibilitatea studierii unui set mai larg de probleme de învățare supervizată.
Este de menționat faptul că studiul de caz prezentat în această lucrare a fost
subiectul unui articol prezentat la Sesiunea de Comunicări Științifice ale Studenților,
organizată de Universitatea Babeș-Bolyai și Universitatea Tehnică din Cluj-Napoca, din
iunie, 2012.
7
8
Capitolul 1. Inteligența artificială și învățarea automată
În acest capitol se vor descrie pe scurt conceptele de inteligență artificială și
învățare automată. Se vor da definițiile noțiunilor de bază în studiul conceptelor respective
și se vor puncta principalele descoperiri în acest domeniu din ultimele decenii. De
asemenea, capitolul include și tendințe actuale în cercetările efectuate.
1.1. Inteligența artificială
1.1.1. Ce este inteligența artificială?
Termenul de inteligență artificială, sau IA, a fost pentru prima dată folosit în anul
1955 de John McCarthy. Acesta definea IA drept “știința și ingineria construirii mașinilor
inteligente.” De-a lungul timpului, oamenii de știință au dat definiții diferite noțiunii de IA.
Dar toate aceste definiții pot fi împărtițe în patru clase, în funcție de cum e înțeleasă
inteligența [1]:
i) Sisteme care gândesc la fel ca oamenii.
Ca să putem spune dacă un program gândește ca un om, trebuie să determinăm cum
gândesc oamenii și să formalizăm modul în care gândesc. Acest lucru poate fi facut prin
introspecție sau prin experimente psihologice. Dacă avem o teorie destul de precisă care să
descrie mintea omului, atunci se pot exprima formalitățile din spatele teoriei respective
într-un program.
Un criteriu posibil de a stabili dacă un sistem gândește la fel ca oamenii ar fi
următorul: Dacă datele de intrare și cele de ieșire ale programului și timpii de răspuns
coincid cu cele ale omului, aceasta poate constitui o dovadă a faptului ca o parte din
mecanismele din spatele sistemului ar putea fi găsite și în modul în care gândesc oamenii.
Această definiție pentru IA are și numele de abordarea modelării cognitive.
ii) Sisteme care se comportă la fel ca oamenii.
Această definiție este strâns legată de testul Turing, propus de renumitul Alan
Turing în 1950. Un program trece testul Turing dacă acesta primește întrebări de la o
9
persoană aflată într-o altă cameră și, în urma răspunsurilor primite, persoana respectivă nu
ar putea să răspundă clar dacă interacționează cu un calculator sau cu o altă persoană.
Pentru a trece testul Turing, un calculator ar trebui să posede următoarele
capacități: procesarea limbajului natural, reprezentarea cunoștințelor, deducția automată a
răspunsurilor, învățare automată.
Din acest motiv, definiția de mai sus se numește și abordarea testului Turing.
iii) Sisteme care gândesc rațional.
Această definiție se referă la procesele de deducție și la logica formală. Astfel,
ideea constă în construirea unor programe care primesc ca date de intrare un set de
afirmații, reprezentând caracteristici ale entităților cercetate și relații dintre acestea, și care
deduc valoarea de adevăr a altor afirmații.
iv) Sisteme care se comportă rațional.
Un program este considerat că se comportă rațional dacă este capabil să perceapă,
să raţioneze şi să acţioneze în conformitate cu un anumit scop. Aceasta definiție are la bază
conceptul de agent – o entitate care percepe mediul din jurul ei și reacționează la acesta,
pentru a-și atinge obiectivul. Din această cauză, definiția este numită abordarea agentului
rațional.
1.1.2. Ramuri ale inteligenței artificiale
Scopurile de bază ale cercetării în IA sunt evidențiate de subdomeniile acesteia. În
continuare, se vor descrie cele mai importante ramuri ale IA.
Prelucrările simbolice (symbolic processing) reprezintă componenta cu preocupări
de programare a domeniului. Ea a dus la dezvoltarea unor limbaje specializate în
prelucrarea simbolurilor, cel mai cunoscut dintre ele fiind Lisp. Fără a neglija aspectele
clasice ale programării, cum ar fi utilizarea numerelor în calcule, în toate aceste limbaje se
pune un accent deosebit pe manipularea simbolurilor. Un limbaj adecvat prelucrărilor
simbolice găzduieşte cu uşurintă reprezentarea şi manipularea simbolurilor de orice natură,
nu numai numerice. Pentru că inteligența artificială se bazează în mare măsură pe
manipularea simbolurilor, Lisp este considerat limbajul de casă (sau nativ) al inteligenței
artificiale. Un tip particular de prelucrări simbolice sunt confruntările de şabloane (pattern
matching). Sabloanele sunt obiecte abstracte formate din părți definite riguros şi altele doar
10
schițate. Sabloanele sunt utilizate pentru regăsirea de obiecte ce satisfac anumite
constrângeri în mulțimi de obiecte asemănătoare [2].
Procesare simbolică şi limbaje de procesare simbolică. În general se acceptă că
sistemele inteligente din natură prelucrează două tipuri de informații: de natură simbolică
sau concentrată şi de natură difuză, distribuită. Calculatoarele noastre, prin proiectare, sunt
destinate a manipula numere şi caractere, având compartimente special proiectate pentru
realizarea performantă de calcule numerice. Lucrul cu simboluri (şiruri de caractere,
imagini sau sunete) deşi realizabil pe calculatoarele clasice, necesită tehnici speciale
mulate pe natura digitală a aparatului de calcul. Maşina uzuală pe care o avem la dispoziție
nu are cablate disponibilități de a opera cu simboluri, de a realiza regăsiri simbolice pe
bază de asociații, ori de a forma alte simboluri prin compunere. Manipularea simbolurilor
necesită un aparat logic şi un suport adecvat de calcul (o maşinărie). Aparatul logic este dat
de logica simbolică care reprezintă atât un model de formalizare a cunoştintelor cât şi o
metodă de raționament. Maşinăria este asigurată de limbajele de procesare simbolică
capabile a simula un comportament adecvat prelucrărilor simbolice mulat pe natura slab
simbolică a maşinii. Dintre acestea, putem identifica: Lisp – în paradigma funcțională,
Prolog – în paradigma logică şi Clips – în paradigma bazată pe reguli [2].
Reprezentarea cunoaşterii (knowledge representation). Putem interacționa cu
mediul înconjurător pentru că, pe de o parte, datorită simțurilor, intrăm în legătură cu ea,
iar pe de altă parte o "înțelegem" aşa cum este. Ca să înțelegem realitatea avem însă nevoie
de a o "proiecta" în mintea noastră. Această proiecție este o reprezentare a realității. Fără a
avea o reprezentare asupra unei entități nu putem emite judecăți asupra ei. Reprezentarea
implică, în principiu, trei componente: o notație, o denotație şi un calcul. Notația este un
desen, sau o structură de date, care respectă anumite convenții (date de obicei de o sintaxă).
Conotația, sau semantica, este interpretarea pe care o dăm notației, din nou pe baza unui
sistem de convenții. Fără aceste reguli de interpretare notația este superfluă. În sfârşit, o
reprezentare trebuie să includă un model computațional care să facă posibilă operarea cu
obiectele şi relațiile dintre obiecte ce compun reprezentarea. Datorită modelului de calcul
entitățile modelate prind viață, putându-se studia astfel comportamentul lor în condiții ce
simulează de aproape realitatea [2].
Raționament automat şi demonstrarea teoremelor (theorem proving, problem
solving). Cea mai veche ramură a IA şi cea mai teoretică dintre ele, utilizează logica ca
sistem formal de găsire a demonstrațiilor şi de generare a inferențelor automate. Foarte 11
multe probleme pot fi formalizate ca probleme de matematică sau logică, rezolvarea lor
reducându-se la o demonstrare a unei teoreme, plecând de la un sistem de axiome şi
utilizând un mecanism de deducție logică. Ca şi în alte cazuri, dificultățile rezidă în
numărul extrem de mare de posibilități ce pot apare. Pentru controlul exploziei de
posibilități în căutarea unei soluții se utilizează de multe ori soluții euristice, care deşi nu
garantează soluția optimă, pot în general duce la găsirea uneia, cel puțin [2].
Procesarea limbajului natural (natural language processing). Este de mult
acceptat că utilizarea limbajului este o caracteristică definitorie a inteligenței. Deşi nouă ne
vine atât de uşor să comunicăm prin limbaj, o încercare de explicitare a mecanismelor care
stau la baza înțelegerii textelor ori a limbajului vorbit se dovedeşte deosebit de dificilă. În
domeniul înțelegerii limbajului natural trebuie întâi stabilită o distincție între a întelege un
mesaj comunicat prin voce şi a întelege un mesaj scris. De prima chestiune se ocupă
domeniul de cercetare al interpretării vorbirii (speech processing). Problema înțelegerii
limbajului în varianta scrisă face obiectul a două tipuri de preocupări. Lingvistica
computațională pe de o parte, ca domeniu pur academic, pune în discuție modele
computaționale ale limbajului natural cu scopul de a investiga şi descoperi natura însuşi a
limbajului şi a abilităților cognitive umane. Ingineria Lingvistică, pe de altă parte, este
preocupată de a dezvolta aplicații care se bazează pe utilizarea limbajului natural, orientate
spre industrie, comerț, sfera socialului sau cea educațională [2].
Vederea artificială (computer vision). Cinci simțuri (vederea, auzul, simțul tactil,
mirosul şi gustul) ne stau la dispoziție pentru a interacționa cu mediul, pentru a lua
cunoştintă de ceea ce se află în afara corpului nostru, în imediata noastră vecinătate.
Modelarea acestor simțuri pe sisteme automate reprezintă cu certitudine, o preocupare de
mare însemnătate a domeniului IA. Dintre cele cinci, vederea ocupă un loc privilegiat.
Sistemele de vedere artificială încearcă să descifreze mecanismele vederii şi ale
interpretării imaginilor statice şi în mişcare [2].
Robotică (robotics). Sistemele inteligente vii au abilitatea de a găsi soluții de
deplasare în spațiu în vederea atingerii unor obiective sau de mutare a unor obiecte
folosind brațele. Căutarea unui drum pe un teren accidentat (lunar, de exemplu, sau pe
fundul oceanelor) sau într-un spațiu cu obstacole (cum este o cameră) nu este o problemă
simplă, nu în ultimul rând datorită numărului mare de posibilități de alegere la fiecare pas,
complexitate ce face imposibilă tentativa căutării exhaustive. Încercând a modela procesele
cognitive care se desfăşoară în sistemele vii, planificarea roboților este un câmp de 12
cercetare care urmăreşte a îmbunătăți comportamentul roboților atunci când ei sunt
programați a executa diferite sarcini [2].
Învățare automată (machine learning). Un sistem înzestrat cu inteligență este
capabil să învețe pentru a-şi îmbunătăți interacțiunea cu mediul. El poate învăța fie din
greşeli, prin auto-perfecționare, fie ghidat de un profesor, fie generalizând, fie prin
analogie, sau din exemple pozitive şi negative. Domeniul învățării automate formalizează
aceste metode şi caută aplicarea lor la sistemele automate [2].
Sisteme expert (expert systems). Puterea stă în cunoaştere. Aplicarea acestui truism
în sisteme artificiale înseamnă dotarea lor cu abilitatea de a se servi de cunoaştere specifică
(cunoaştere expert). Un medic este bun în găsirea unui diagnostic pentru că are un bagaj de
cunoştințe generale dar şi specifice despre boli şi bolnavi. Parțial această cunoaştere a
deprins-o din cărți, parțial în cursul anilor de experiență clinică, prin atâtea cazuri în care s-
a implicat. Achiziționarea, formalizarea şi includerea cunoaşterii expert în sistemele
artificiale reprezintă scopul domeniului sistemelor expert [2].
1.2. Învățarea automată
1.2.1. Ce este învățarea automată?
Învăţarea automată (machine learning, ML), unul din sub-domeniile de bază ale
inteligenţei artificiale, se preocupă cu dezvoltarea de algoritmi şi metode ce permit unui
sistem informatic să înveţe date, reguli sau algoritmi. Învăţarea automată presupune în
primul rând identificarea şi implementarea unei modalităţi cât mai eficiente de a reprezenta
informaţii, în sensul facilitării căutării, reorganizării şi modificării lor. Alegerea modului
de a reprezenta aceste date ţine atât de concepţia generală asupra modului de rezolvare a
problemei, cât şi de caracteristicile datelor cu care se lucrează [2, 3].
Învăţarea nu se poate face pe baza unui set foarte mare de cunoştinţe, atât din cauza
costurilor mari presupuse de acumularea unor baze de informaţii mari cât şi din cauza
complexităţii memorării şi prelucrării unui volum mare de informaţii. În acelaşi timp însă,
învăţarea trebuie să ducă la formularea de suficiente “reguli” atât cât să permită rezolvarea
unor probleme dintr-un spaţiu mai larg decât cel pe baza căruia s-a făcut învăţarea. Adică,
învăţarea trebuie să îmbunătăţească performanţa unui sistem nu doar în rezolvarea repetată
a unui acelaşi set de probleme, ci şi în rezolvarea unor probleme noi. Acest lucru
13
presupune o generalizare a unei metode de rezolvare pentru a acoperi un număr cât mai
mare de instanţe posibile, dar şi păstrarea unei specializări suficiente pentru a fi identificate
corect instanţele acceptate. Aceasta se poate face fie inductiv, generalizând o problemă
plecând de la un set de exemple, fie deductiv, plecând de la o bază de cunoştinţe suficiente
asupra universului problemei şi extrăgând date şi reguli esenţiale. Pentru a putea face acest
lucru, un algoritm de învăţare trebuie să fie capabil să selecteze acele elemente
semnificative pentru rezolvarea unei instanţe viitoare a problemei. Aceasta alegere se face
pe baza unor criterii de selecţie numite diagonale inductive.
O altă componentă esenţială a unui algoritm de învăţare este metoda de verificare, o
metodă capabilă să confirme dacă generalizările făcute sau regulile deduse se apropie mai
mult de soluţia ideală decât starea anterioară a sistemului. Studiul învăţării automate a dus
la descrierea a numeroase metode, variind după scop, date de antrenament, strategia de
învăţare şi modalitatea de reprezentare a datelor [2].
Specificarea unei metode de învăţare automată presupune definirea următoarelor
date:
- scopul metodei şi baza de cunoştinţe necesară;
- formalismul de reprezentare a datelor utilizate şi a celor învăţate;
- un set de operaţii asupra datelor disponibile şi învăţate;
- un spaţiu general al problemei în care se va specifica soluţia;
- opţional, reguli euristice pentru căutarea în spaţiul problemei.
1.2.2. Clase de probleme de învățare automată
Algoritmii din ML pot fi clasificați după tipul de feedback pe care îl primește
modelul după ce generează un rezultat. Acest criteriu determină trei clase de probleme:
învățare supervizată, învățare nesupervizată și învățare prin intarire.
Învăţarea supervizată este un tip de învăţare inductivă ce pleacă de la un set de
exemple de instanţe ale problemei şi formează o funcţie de evaluare (şablon) care să
permită clasificarea (rezolvarea) unor instanţe noi [2]. Învăţarea este supervizată în sensul
că setul de exemple este dat împreună cu clasificarea lor corectă. Aceste instanţe rezolvate
se numesc instanţe de antrenament. Formal, setul de instanţe de antrenament este o
mulţime de perechi atribut-valoare (x, f(x)), unde x este instanţa, iar f(x) - clasa căreia îi
14
aparţine instanţa respectivă. Despre acest tip de probleme se va discuta pe larg în capitolul
următor.
Învăţarea nesupervizată elimină complet necesitatea unor instanţe de
antrenament, deci şi problemele legate de acestea. Scopul învăţării nesupervizate nu este
definit anterior ca un concept ţintă, algoritmul fiind lăsat singur să identifice concepte
posibile. În general, învăţarea nesupervizată presupune existenţa unor instanţe
neclasificate, un set de reguli euristice pentru crearea de noi instanţe şi evaluarea unor
concepte deduse, eventual un model general al spaţiului de cunoştinţe în care se găsesc
aceste instanţe. Un algoritm de învăţare nesupervizată construieşte concepte pentru a
clasifica instanţele, le evaluează şi le dezvoltă pe cele considerate “interesante” de regulile
euristice. În general, concepte interesante sunt considerate cele care acoperă o parte din
instanţe, dar nu pe toate. Astfel, invăţarea nesupervizată permite identificarea unor
concepte complet noi plecând de la date cunoscute [2].
Învăţarea prin întarire se face fără ca algoritmul de învăţare să compare direct
şablonul obţinut cu rezultatele corecte pentru exemplele de antrenament. În schimb, este
implementată o modalitate de a “răsplăti” sau “pedepsi” sistemul în funcţie de cât de mult
se apropie de rezultatul corect. Acest feedback este singura metodă a sistemului de învăţare
de a se regla pentru îmbunătăţirea rezultatelor sale. Acest lucru face învăţarea prin întărire
mai dificilă, căci sistemul nu mai primeşte informaţii directe despre cum şi cât să se
corecteze, ci doar ştie dacă se apropie sau se depărtează de rezultatul optim. De asemenea,
feedback-ul poate veni doar uneori, nu neapărat la fiecare schimbare în şablonul ipotetic,
deci sistemul trebuie să aibă o modalitate de a direcţiona şi impulsiona singur schimbarea
pentru îmbunătăţirea şablonului [2].
Există două tipuri de informaţie ce pot face parte din feedback-ul primit de sistem
în cazul învățării prin întărire:
- informaţie utilitară, prin care sistemul învaţă utilitatea unei anumite stări în care
se află şi care permite sistemului să caute acele stări care maximizează şansa de
a găși o soluţie optimă;
- valoarea unei acţiuni, adică sistemul află potenţialul unei acţiuni de a fi sau nu
utilă într-o anumită stare, practic potenţialul unei acţiuni de a apropia sistemul
de găsirea unei soluţii optime.
15
1.2.3. Aplicații ale învățării automate
Există multe aplicații cu algoritmi de ML folosite în practică și numărul acestora
crește semnificativ în fiecare an. Este important de menționat că până în 1985 nu exista
aproape nicio aplicație comercială care să folosească ML [4]. Vom menționa câteva
domenii în care se aplică ML.
Recunoașterea vorbirii. Aproape toate aplicațiile comerciale curente pentru
recunoașterea vorbirii folosesc ML într-o formă sau alta pentru antrenarea sistemului de
recunoaștere. Motivul este simplu: acuratețea recunoașterii vorbirii este mai mare dacă
sistemul este antrenat decât dacă este programat de mână.
Vederea artificială. Multe sisteme curente, de la cele de recunoaștere de fețe la cele
care clasifică imagini microscopice de celule, sunt dezvoltate folosind ML. Una din
aplicațiile vederii artificiale folosită la scară largă este sistemul folosit de Oficiul Poștal din
SUA pentru sortarea automată a scrisorilor care conțin adrese scrise de mână. Mai mult de
85% din scrisorile scrise de mână în SUA sunt sortate automat, folosindu-se un algoritm de
analiză a scrisului de mână antrenat prin ML cu un set de date foarte mare [4].
Controlul roboților. Tehnicile de ML au fost folosite cu succes în mai multe
sisteme de roboți. De exemplu, un grup de cercetători au demonstrat folosirea ML pentru a
obține strategii de control pentru un zbor stabil al unui elicopter și pentru acrobații cu
elicopterul. De asemenea, competiția sponsorizată de DARPA pentru un robot care să
conducă autonom mai mult de 100 de mile în deșert a fost câștigată de un robot care
folosea ML pentru a-și dezvolta abilitatea de a detecta obiecte la distanță [4].
Cercetări în științe noi. Multe științe în care se lucrează cu un volum imens de date
folosesc tehnici de ML pentru a facilita descoperirile științifice. Algoritmi din ML sunt
folosiți pentru a învăța modele de descriere a genelor din celule, pentru a descoperi obiecte
astronomice neobișnuite din setul imens de date colectat de Sloan Sky Survey, pentru a
caracteriza modelele complexe de activare a părților creierului în scanerele fMRI [4].
16
Capitolul 2. Învățare supervizată
În acest capitol se va prezenta tematica învățării supervizate ca o clasă de probleme
de învățare automată. Se vor descrie și trei dintre cele mai cunoscute tehnici de ML folosite
pentru probleme de învățare supervizată: rețele neuronale, programare genetică și mașini
cu suport vectorial. Aceste trei tehnici au fost folosite și în studiul de caz care este
prezentat în Capitolul 4.
2.1. Aspecte generale
Învățarea supervizată este un tip de învățare automată prin care se induce o funcție
dintr-un set de date cu valori deja atribuite. Cu alte cuvinte, este formalizarea învățării din
exemple. În cadrul învățării supervizate, programul are la dispoziție două seturi de date: un
set de date de antrenament și unul de test. Ideea constă în faptul că programul să învețe
dintr-un set de exemple cu etichete cunoscute din setul de antrenament pentru a identifica
exemplele neetichetate din setul de test cu o acuratețe cât mai mare [5].
Un algoritm de învățare supervizată analizează datele de antrenament și produce o
funcție, care este numită funcție de clasificare dacă datele de ieșire sunt dintr-o mulțime
discretă sau funcție de regresie dacă datele de ieșire aparțin unei mulțimi continue. Funcția
produsă ar trebui să prezică cât mai bine valorile de ieșire pentru orice obiect de intrare
valid. Acest lucru cere de la algoritmul de învățare să generalizeze de la datele de
antrenament la orice date de intrare din mulțimea indicată în problemă [6].
Astfel, pentru a rezolva o problemă de ML, trebuie întreprinși următorii pași:
A. Precizarea tipului de exemple de antrenament.
B. Colectarea unui set de date de antrenament.
C. Determinarea unei reprezentări potrivite pentru datele de intrare a funcției
învățate.
D. Deciderea asupra structurii funcției învățate și a algoritmului de învățare
corespunzator.
E. Execuția algoritmului pe setul de date de antrenament ales.
17
F. Evaluarea acurateții funcției învățate, folosind un set de date de test.
2.2. Rețele neuronale
O rețea neuronală artificială este un model matematic sau computațional, care este
inspirat din structura și aspectele funcționale ale unei rețele neuronale biologice. O rețea
neuronală constă dintr-un grup de neuroni artificiali interconectați, dispuși pe straturi. De
obicei, o legătură de la un neuron la altul are asociată o pondere [3].
În cele mai multe cazuri, o rețea neuronală artificială este un sistem adaptiv care își
schimbă structura în funcție de informația din interior sau exterior care este transmisă prin
rețea în timpul fazei de învățare.
În implementările actuale ale rețelelor neuronale, abordarea inspirată din biologie a
fost în mare parte abandonată în locul unei abordări mai practice bazată pe statistică și
procesarea semnalelor [3].
Metodele bazate pe rețele neuronale oferă o abordare robustă în aproximarea
funcțiilor reale, discrete și vectoriale. Pentru anumite tipuri de probleme, cum ar fi
învățarea interpretării datelor reale complexe obținute de la senzori, rețelele neuronale
artificiale sunt printre cele mai eficiente metode cunoscute. De exemplu, rețelele neuronale
de tip feed-forward backpropagation, despre care se vor vorbi în detaliu, s-au dovedit a fi
surprinzător de bune pentru probleme practice cum ar fi: conducerea autonomă a
automobilului, recunoașterea scrisului de mână, controlul roboților, recunoașterea fețelor
[3].
Un neuron din rețea are următoarea formă [2]:
Figura 1. Structura unui neuron
18
unde x1, x2, ... , xn sunt semnalele primite de neuron, w1, w2, ... , wn sunt costurile sau
ponderile pentru fiecare semnal, , iar f(net) este o funcţie care calculează
ieşirea din neuron (funcţie de activare). Dacă f(net) este mai mare decât un prag stabilit
pentru reţea, atunci neuronul transmite semnalul mai departe.
Sunt numeroase abordări și algoritmi de antrenare a unei rețele. Printre acestea
sunt: rețele de tip feed-forward backpropagation (semnalul se propagă înainte, iar eroarea
se propagă înapoi), rețele radial-basis function, rețele recurente (graful format de neuroni
și sinapse conține și cicluri), rețele de tip counterpropagation. Printre cele mai simple și
mai utilizate rețele neuronale sunt acelea bazate pe algoritmul feed-forward with
backpropagation, sau pe scurt backpropagation. Aceste rețele au o structură clasică cu un
strat de neuroni de intrare, unul de ieșire și mai multe straturi ascunse între acestea [7].
Algoritmul backpropagation este divizat în 2 faze: prima constă în propagarea
informației utile dinspre stratul de intrare spre cel de ieșire, apoi propagarea în direcție
inversă a erorilor și a doua fază constă în actualizarea ponderilor.
În prima fază, datele de intrare se propagă înainte prin rețea pentru a se genera
valorile de ieșire, iar după aceasta se calculează eroarea și se propagă înapoi spre
straturile ascunse și spre cel de intrare pentru a genera diferențele (delta) dintre
valorile obținute și cele reale pentru fiecare neuron în parte.
În a doua fază, pentru fiecare pondere, se calculează gradientul de eroare folosind
valorile delta generate în prima fază, și se actualizează ponderea în direcția opusă
erorii scăzănd din pondere eroarea înmulțită cu o constantă subunitară, numită
coeficient de învățare.
Algoritmul pentru un singur strat ascuns arată în felul următor [8]:
Inițializează ponderile din rețea // de obicei, aleator
Execută
Pentru fiecare exemplu e din setul de antrenament
O = valoarea-de-ieșire(rețea, e) // parcurgere înainte
T = valoarea reală pentru e
Calculează eroarea (T - O) pentru neuronii de ieșire
Calculează delta_wh pentru toate ponderile de la stratul ascuns
19
la cel de ieșire // parcurgere înapoi
Calculează delta_wi pentru toate ponderile de la stratul de
intrare la cel ascuns // continuarea parcurgerii înapoi
Actualizează pnderile din rețea
Până când toate exemplele au fost învățate corect sau a fost
îndeplinit un criteriu de oprire,
Întoarce rețeaua
2.3. Programare genetică
Programarea genetică este o metodă bazată pe algoritmi evolutivi, inspirată din
evoluția biologică, prin care se caută expresii sau algoritmi care ar rezolva cât mai bine o
anumită problemă. Structurile care sunt supuse adaptării și evoluției în paradigma
programării genetice sunt programe structurate ierarhic, ale căror mărime, formă și
complexitate se pot schimba de-a lungul procesului [9].
Programarea genetică este o tehnică de învățare automată folosită pentru a optimiză
o populație de programe în concordanță cu o funcție de fitness determinată de abilitatea
programului de a realiza sarcina cerută.
Programele manipulate de algoritmii de programare genetică sunt reprezentate prin
arbori de expresii. Fiecare apel de funcție este reprezentat printr-un nod intern în arbore, iar
argumentele funcției sunt date de nodurile fii ale nodului respectiv. Pentru a aplica
programarea genetică la un domeniu particular, trebuie definit un set de funcții primitive
sau operatori cu care se va lucra (de ex: sin, cos, +, -, or, and, xor), precum și un set de
noduri terminale, reprezentate prin variabile (datele de intrare în program) sau constante.
Algoritmii bazați pe programare genetică au următoarea formă [10]:
1) Creează în mod aleator o populație inițială de programe individuale alcătuite din
funcțiile disponibile și din terminale.
2) În mod iterativ execută următorii pași (o generație) asupra populației, până când
criteriul de oprire este satisfăcut:
a. Execută fiecare program din populație și calculează fitness-ul acestuia folosind
funcția de fitness definită.
b. Alege unul sau două programe din populație cu o probabilitate bazată pe fitness
20
pentru a participa la operațiile genetice de la punctul c).
c. Creează un nou program pentru a fi inclus în populație aplicând următoarele
operații cu probabilitățile specificate:
i. Reproducere : Copiază programul selectat în noua populație.
ii. Crossover : Creează un nou program pentru noua populație, recombinând
bucăți aleatoare din două programe selectate.
iii. Mutație : Creează un nou program pentru noua populație, modificând o
parte aleatoare a unui program selectat.
3) După ce criteriul de oprire a fost satisfăcut, programul cu cel mai bun rezultat pentru
funcția de fitness este ales și este întors de către algoritm.
2.4. Mașini cu suport vectorial
Mașinile cu suport vectorial (Support vector machines, SVM) sunt bazate pe teoria
învățării statistice. Ideea de bază este de a mapa datele originale într-un spațiu inițial printr-
o funcție neliniară și de a construi un hiperplan optim într-un spațiu nou cu mai multe
dimensiuni [11]. Acești algoritmi pot fi utilizați atât pentru clasificare, cât și pentru
regresie. În cazul clasificării, se caută un hiperplan optim care ar separa datele în 2 clase
diferite. Iar în cazul regresiei, se contruiește un hiperplan care se află aproape de cât mai
multe puncte, fiind reprezentați sub formă de vectori, care reprezintă datele problemei. În
cazul problemelor de regresie, algoritmul este numit Support Vector Regression (SVR).
Mașinile cu suport vectorial sunt o metodă de învățare supervizată state-of-the-art.
Algoritmii SVM sunt folosiți pe larg în bioinformatică datorită acurateții înalte și a
capacității de a se descurca cu date multi-dimensionale, cum ar fi descrierea genelor, și
flexibilitatea modelării diverselor surse de date [12].
Tehnicile SVM aparțin categoriei de metode kernel. O metodă kernel este un
algoritm care depinde de date numai prin produse scalare. Când acesta e cazul, produsul
scalar poate fi înlocuit cu o funcție kernel care calculeaza produsul scalar într-un posibil
spatiu de caracteristici multi-dimensional. Acest lucru are două avantaje: în primul rând,
abilitatea de a genera limite de decizie non-liniare folosind metode pentru clasificatori
liniari. În al doilea rand, folosirea funcțiilor kernel permite utilizatorului să aplice
clasificatorul pe seturi de date care nu au o reprezentare într-un spațiu vectorial de o
21
dimensiune fixată. Un exemplu de astfel de date este prezent în bioinformatică, și anume
secvențele de ADN și de proteine [12].
Sunt numeroase aplicații practice ale tehnicilor SVM. Cele mai cunoscute situații
reale în care s-a folosit SVM sunt: recunoașterea cifrelor scrise de mână, clasificarea
textului și a hiper-textului, identificarea sexului din imagini și algoritmi de ordonare a
paginilor după relevanță [13].
22
Capitolul 3. Sisteme predictive inteligente
Studiul care se ocupă cu sistemele predictive este analiza predictivă. În acest
capitol se va prezenta aspecte generale legate de analiza predictivă și modalități prin care
se pot aplica tehnici de învățare automată pentru a construi sisteme predictive. Analiza
predictivă poate fi folosită pentru a construi modele de clasificare și modele de regresie,
dar în această lucrare se pune accentul pe modelele de regresie. Se va discuta și despre
unul din tipurile de modele predictive, și anume cele bazate pe serii de timp. Ultimul
subcapitol va conține câteva masuri de performanță utilizate pentru modelele predictive de
regresie.
3.1. Analiza predictivă
Analiza predictivă este un domeniu al analizei statistice care se ocupă cu extragerea
informațiilor din date și folosirea acestora pentru a prezice comportamentul unor fenomene
din viitor. Cuprinde tehnici statistice din învățare automată, data mining, teoria jocurilor,
care analizează evenimente curente și din trecut pentru a face predicții despre evenimente
din viitor. Dacă modelul dorit trebuie să genereze date de ieșire care fac parte dintr-o
mulțime discretă, atunci acesta e numit model de clasificare. Daca multimea datelor de
ieșire este continuă, atunci modelul este de regresie. Domeniile de aplicare ale analizei
predictive sunt numeroase: finanțe, marketing, asigurări, transporturi, telecomunicații etc.
Din punct de vedere al afacerilor, analiza predictivă este vazută ca un set de tehnici
de business intelligence (BI) prin care se caută descoperirea unor relații și șabloane în
volume mari de date care pot fi folosite pentru a prezice comportamente și evenimente.
Spre deosebire de alte tehnici de BI, analiza predictivă este anticipativă, folosind
evenimente din trecut pentru a anticipa viitorul [14].
Analiza predictivă este considerată mai mult decât doar statistică. Regresia liniară
și logistică – tehnici clasice din statistică – încă sunt folosite pe larg în modelele predictive
de azi și aproape toți modelatorii analitici folosesc statistica descriptivă (medie, mod,
23
mediana, deviația standard, histograme) pentru a înțelege natura datelor care trebuie
analizate [14].
Însă descoperirile din informatică și tehnologie au facut posibil să se folosească o
clasă mai largă de tehnici predictive, cum ar fi: arbori de decizie, rețele neuronale,
algoritmi evolutivi, mașini cu suport vectorial și alți algoritmi matematici. Aceste noi
tehnici se folosesc de puterea de lucru tot mai mare a calculatoarelor pentru a face calcule
complexe care de multe ori necesită parcurgeri multiple ale setului de date. Ele sunt
modelate, astfel încât să ruleze cu volume mari de date, cu multe variabile. De
asenemenea, sunt gândite să gestioneze zgomotul din date cu diverse anomalii care ar face
probleme modelelor tradiționale.
Indiferent de metodă, majoritatea proceselor pentru a crea modele predictive includ
următorii pași [14]:
1. Definirea proiectului: Definește obiectivul și rezultatele așteptate pentru un
anumit proiect, acestea fiind traduse în obiective și sarcini din analiza
predictivă.
2. Explorare: Analizează sursa de date și determină cel mai potrivit set de date
și cea mai bună abordare pentru a construi modelul.
3. Pregătirea datelor: Selectează, extrage și transformă datele care vor fi
folosite pentru crearea modelului.
4. Construirea modelului: Creează, testează și validează modelul. Evaluează
cât de bine acesta satisface cerințele proiectului.
5. Exploatare: Aplică rezultatele modelului în deciziile și procesele de
business care sunt studiate.
6. Gestiunea modelului: Gestionează și întreține modelele construite pentru a
îmbunătăți performanța, a promova reutilizabilitatea și a minimiza
activitățile redundante.
Unul din tipurile de modele de regresie care sunt obținute în urma analizei
predictive sunt modelele bazate pe serii de timp.
24
3.2. Serii de timp
O serie de timp este o secvență de puncte de date, de obicei măsurate la intervale
egale de timp. Seriile de timp apar în mod natural în multe situații reale [15]. De exemplu:
Economie: cifrele lunare pentru somaj, numărul de internări în spitale, etc.
Finante: valorile zilnice ale cursului de schimb, valorile prețurilor acțiunilor
cotate la bursă, etc.
Mediu: cantitatea zilnică de precipitații, valorile zilnice pentru calitatea aerului
din atmosferă, etc.
Medicină: activitatea undelor cerebrale la fiecare 2-8 secunde.
Previzionarea seriilor de timp constă în folosirea unui model care prezice valori în
viitor, bazându-se pe valorile înregistrate în trecut. Aceste modele iau în considerare faptul
că evenimentele luate de-a lungul timpului sunt corelate într-un anumit fel sau au un
caracter periodic.
3.3. Măsuri de performanță pentru modele predictive de regresie
Vom menționa cele mai importante măsuri de evaluare a unui model predictiv de
regresie. Fie că avem: p – vectorul valorilor prezise, a – vectorul valorilor așteptate, n –
numărul de instanțe.
Mean Squared Error. Este o formulă foarte utilizată pentru măsurarea erorii unui
model de regresie. Are dezavantajul ca poate fi comparată doar între modele care au
eroarea masurată în aceeași unitate de masură.
Root Mean Squared Error. Este rădăcina pătrată a formulei de mai sus.
Relative Squared Error. Este o formulă care poate fi folosită pentru a compara două
modele pentru care erorile sunt măsurate în unități de măsură diferite [16].25
Mean Absolute Error. Valoarea formulei are aceeași unitate de masură ca și eroarea
modelului. Poate fi folosită doar pentru a compara modele care au aceeași unitate de
măsură pentru eroare [16].
Relative Absolute Error. O formulă care poate fi folosită pentru a compara modele care au
unități de măsura diferite pentru erori [16].
26
Capitolul 4. Studiu de caz: Previziunea vremii folosind tehnici
de învățare automată
În acest capitol vom prezenta problema previzionării temperaturii atmosferice
folosind algoritmi dezvoltați în domeniul inteligenței artificiale. Există metode tradiționale
pentru a construi modele care dau rezultate bune pentru previzionarea indicatorilor
meteorologici. Însă în acest studiu de caz ne propunem să investigăm utilitatea tehnicilor
de învățare automată pentru predicții ale vremii. Dacă presupunem că temperatura în
viitorul apropiat depinde de valorile indicatorilor atmosferici din trecutul imediat, se poate
deriva o metodă care să învețe din datele din trecut și care să construiască un model care să
dea estimări apropiate ale temperaturii în perioada imediat următoare, pentru o anumită
locație. Tehnicile de învățare automată folosite în acest studiu sunt: rețele neuronale,
programare genetică și mașini cu suport vectorial. Pentru a cerceta acest subiect, au fost
realizate trei tipuri de experimente, pentru care sunt indicate și rezultatele obținute. Se
prezintă și o scurtă analiză a rezultatelor, comparându-le cu cele obținute în studii similare.
4.1. Aspecte generale
Previziunea vremii este definită ca fiind aplicarea științei și a tehnologiei pentru
prezicerea stării atmosferei pentru o anumită locație. Oamenii au încercat să prezică
vremea informal de milenii și formal din secolul al XIX-lea [17]. Prognozele meteo sunt
făcute colectând date cantitative despre starea curentă a atmosferei și folosind descoperiri
științifice despre procesele atmosferice pentru a estima cum va evolua atmosfera.
Predicția stării vremii este un proces complex și o problemă dificilă pentru
cercetători. Aceasta necesită expertiză în diverse domenii științifice și tehnologice. Însă
prognozele meteo sunt esențiale pentru anumite activități. Acestea include: monitorizarea
climatică, detecția secetei, prezicerea situațiilor critice, planificarea în agricultură,
planificarea în producerea de energie regenerabilă, industria acvatică și multe altele.
Tradițional, estimările pentru temperatura din viitorul apropiat sunt făcute cu
ajutorul modelării numerice a observațiilor și a datelor obținute de la senzori și radare. Ca
27
o alternativă, această lucrare propune o abordare diferită, bazată pe tehnici de învățare
automată.
Acest studiu de caz urmăreste să investigheze folosirea rețelelor neuronale
artificiale, a programării genetice și a mașinilor cu suport vectorial pentru a construi
modele care să prezică temperatura pentru o anumită locație și care sunt antrenate cu
exemple de date care să descrie starea vremii în trecut, pentru locația respectivă.
4.2. Descrierea problemei
În această secțiune vom prezenta problema previzionării vremii, explicând în
același timp motivația studierii acestei teme.
4.2.1. Context
Ideile fundamentale ale prognozii numerice a stării vremii și a modelării climatice
au fost dezvoltate cu un secol în urmă, cu mult înaintea apariției primului calculator
electronic. Dar erau căteva obstacole majore care trebuiau trecute pentru ca predicția
numerică să fie pusă în practică [18].
O mai bună înțelegere a dinamicii atmosferei a permis dezvoltarea unor sisteme
simplificate de ecuații; observațiile regulate ale atmosferei făcute de radiosonde și, mai
apoi, datele venite de la sateliți au oferit condițiile inițiale; mai apoi, au fost dezvoltate și
schemele stabile cu diferențe finite. Toate acestea și calculatoarele electronice puternice au
oferit o modalitate practică de a efectua calcule complexe necesare pentru a prezice
schimbările meteorologice [18].
Odată cu dezvoltarea inteligenței artificiale și a învățării automate, este natural să
cercetăm posibilitatea construirii unor programe pe calculator care nu au algoritmi
predefiniți pentru a genera predicții, ci învață din datele disponibile și își adaptează
modelul în concordanță cu noile exemple de date procesate.
Este adevărat cu specialiștii de domeniu încă nu au descoperit modalități de a face
calculatoarele să învețe la fel de bine cum o fac oamenii. Cu toate acestea, există algoritmi
inventați relativ recent care sunt eficienți pentru anumite tipuri de probleme de învățare și o
înțelegere teoretică a conceptului de învățare a inceput să se formeze. În ultimii ani, au fost
28
dezvoltate numeroase programe de calculator care demonstrează tehnici eficiente de
învățare și au aparut diverse aplicații comerciale care pun în practica aceste concepte și
care au fost folosite cu succes [3].
4.2.2. Motivație
Daca ne uităm la problema previzionării vremii ca la o încercare de a identifica
relații între date și de a le folosi pentru a face predicții, atunci o putem vedea ca o problemă
de analiză a unei serii de timp, pentru că încercăm să construim un model care să prezică
valori din viitor, bazându-ne pe valorile observate anterior. Și este cunoscut faptul că
tehnicile de învățare automată sunt potrivite pentru a studia serii de timp [19].
Așadar, scopul nostru este de a implementa și a testa programe care să folosească
învățarea automată, și anume: rețele neuronale, programarea genetică și mașini cu suport
vectorial pentru a prezice vremea. Programele vor procesa un set de date cu valori din
trecut pentru indicatori meteorologici, pentru o anumită locație, cu scopul de a antrena un
model care să fie capabil să genereze estimări destul de bune pentru valorile viitoare ale
indicatorilor doriți.
Mai exact, în acest studiu de caz, ne propunem să studiem posibilitatea
previzionării temperaturii medii pentru o zi următoare, folosind ca date de intrare pentru
model valorile unor indicatori meteorologici din zilele precedente. Indicatorii care vor fi
considerați sunt: temperatura medie, temperatura maximă, temperatura minimă, punctul de
rouă, viteza vântului și cantitatea de precipitații.
4.3. Abordări inrudite
Ideea folosirii tehnicilor de învățare automată pentru a prezice vremea a fost
studiată în diverse lucrări în ultimii ani. În continuare, vom prezenta câteva din aceste
lucrări.
Y. Radhika și M. Shashi prezintă în [11] o aplicație a mașinilor cu suport vectorial
pentru a prezice temperatura maximă pentru ziua următoare, folosind ca date de intrare
temperaturile maxime zilnice pentru ultimele n zile, unde n variază între 2 și 10.
29
Algoritmul SVM a fost antrenat cu metoda de regresie neliniară cu suport vectorial.
Cand a fost selectată o funcție kernel pentru SVM, s-a observat [11] ca între funcțiile
polinomiale și radial basis function (RBF), funcția RBF dă rezultate mai bune pentru
același set de date și de aceea a fost aleasă pentru experimentele efectuate. În
experimentele descrise în lucrare, a mai folosită un rețea neuronală de tip multi-layer
perceptron (MLP), bazată pe algoritmul propagării înapoi, pentru a compara rezultatele cu
cele obținute de SVM.
Rezultatele obținute de tehnicile de învățare automată din fiecare experiment au
fost măsurate cu formula mean squared error (MSE).
Zile precedente 2 3 5 7 10
SVM 7.56 7.52 7.15 7.092 7.07
MLP 8.21 8.95 8.07 9.19 10.26*Valorile temperaturilor sunt în Celsius
Figura 2. Erorile obținute în [11].
După cum se poate vedea din tabelul 1, algoritmul SVM a dat rezultate puțin mai
bune decat rețeaua neuronală.
În lucrarea [20], scrisă de K. Sreelakshmi și P. Ramakanthkumar, este descris un
model bazat pe o rețea neuronală implementată cu algoritmul de propagare înapoi, care
este folosit pentru a prezice viteza vântului pe termen scurt, folosind valori ale altor
variabile meteorologice ca și date de intrare.
Variabilele folosite în experimente sunt: presiunea atmosferica, umiditatea și
cantitatea de precipitații. Experimentele au arătat ca viteze vântului previzionată de model
era diferită de valorile actuale cu o diferență maximă de 5%.
Un alt articol care studiază problema prognozării vremii folosind tehnici de
învățare automată este [21], scrisă de Aditya Polumetla. Unul din experimentele descrise în
lucrare constă în prezicerea temperaturii pentru anumite locatii, folosind diverse tehnici de
învățare, cum ar fi: regresie liniară (LR), multi-layer perceptron (MLP), rețele RBF,
LeastMedSquare (LMS), M5P și Regula conjunctivă (CR).
30
Rezultatele au fost măsurate cu formula mean absolute error (MAE). Erorile
obținute pentru LR, LMS, M5P și MLP au fost între 10 și 20 Fahrenheit, iar pentru RBF și
CR eroarea a fost între 100 și 120 Fahrenheit.
În lucrarea [21], în afară de studierea problemei de previziune a vremii ca o
problemă de regresie, aceasta a fost studiată și ca o problemă de clasificare. Valorile
temperaturilor au fost grupate în 9 clase, în dependență de numărul de deviații standard ale
valorii de la medie. Valorile de intrare erau temperaturile pentru ultime 3 ore, iar ieșirea
constă în clasa estimată pentru temperatura din ora următoare.
Metodele folosite pentru a crea modelele de clasificare au fost: arbori de decizie
J48 și metoda Naïve Bayes. În urma rezultatelor obținute, s-a arătat ca arborii de decizie
J48 au clasificat corect 93.6% din instanțele din setul de date, iar metoda Naïve Bayes a
avut o performanța de doar 32.33%.
Smith et al. la fel investighează în [22] folosirea rețelelor neuronale artificiale
pentru problema previzionarii vremii. Valorile folosite ca date de intrare în model
includeau cinci variabile: temperatura, umiditatea relativa, viteza vantului, radiația solară și
cantitatea de precipitații. În plus față de valorile curente ale fiecărei instanțe observate, au
fost incluse pentru antrenament și valorile indicatorilor din exemplele anterioare, la
intervale de o oră distanță.
Rețelele neuronale folosite în experimente au fost antrenate cu algoritmul de
propagare înapoi a erorii. Pentru toate modelele, rata de învățare a fost aleasă 0.1, iar
ponderile inițiale ale legăturilor dintre neuroni au fost alese între -0.1 și 0.1.
Valorile mean absolute error (MAE) pentru toate modelele folosite în experimente
au fost între 1.50C and 20C. Cea mai perfomantă rețea a fost antrenată cu peste 50 000 de
instanțe și a avut o eroare MAE de 1.510 C.
4.4. Metodologie
Această secțiune prezintă abordările folosite în acest studiu de caz pentru problema
previzionării vremii. Sunt menționate valorile alese pentru parametrii modelelor de
învățare automată folosite. De asemenea, este descris setul de date și preprocesările
efectuate asupra acestuia înaintea folosirii lui pentru antrenament. Este prezentat și modul
în care s-au facut antrenamentul și testarea modelelor.
31
4.4.1. Proiectarea modelelor
4.4.1.1. Rețele neuronale
Rețelele neuronale folosite în experimentele efectuate sunt de tip feed-forward cu
propagarea înapoi (backpropagation). Acestea au fost configurate cu trei straturi. Primul
strat constă din neuronii de intrare, iar numărul acestora depinde de valorile de intrare
furnizate modelului. Al doilea strat este cel ascuns, care are de la 8 până la 20 neuroni, în
functie de experimentul efectuat. Ultimul strat este stratul de ieșire și are un singur neuron,
pentru că modelul trebuie să întoarcă doar valoarea estimată pentru temperatura medie din
ziua următoare.
Funcția de activare folosită pentru fiecare neuron din stratul ascuns este funcția
sigmoid:
4.4.1.2. Programare genetică
Fiecare algoritm de programare genetică are un set de parametri ale căror valori
trebuie precizate la început. În experimentele noastre, modelele bazate pe programare
genetică au următoarele valori pentru parametrii de bază:
Marimea populatiei: 30-100 (depinde de experiment).
Metoda de selectie pentru noi indivizi: elite.
Setul de funcții primitive folosite pentru a forma arborii de expresiii: (+, -, *, /,
sin, cos, ln, exp, sqrt).
Rata de încrucișare: 0.75.
Rata de mutație: 0.1.
Adâncimea maximă a arborelui de expresie: 10.
4.4.1.3. Mașini cu suport vectorial
În cazul experimentelor în care s-au folosit mașini cu suport vectorial, algoritmii au
avut următorii parametri:
32
Tipul tehnicii: ε-SVR. În cazul acestei tehnici, scopul este de a găsi o funcție
care are o deviație de cel mult ε de la valorile reale petru toate instanțele de
antrenament.
Funcția kernel: Radial basis function (RBF):
Parametrul : 1.
Parametrul ε: Între 10-5 și 10-4 (depinde de experiment).
4.4.2. Setul de date și preprocesare
Setul de date folosit în experimente constă din valorile zilnice pentru cei mai
importanți indicatori meteorologici pentru regiunea Cluj-Napoca, România, din anul 1952
până în 2011 [23]. Indicatorii folosiți sunt: temperatura medie, temperatura maximă,
temperatura minimă, punctul de rouă, viteza vântului și cantitatea de precipitații. S-a
considerat ca variabilă de intrare pentru fiecare exemplu de date și indicele zilei în an.
Valorile temperaturilor și a punctului de rouă sunt exprimate în Fahrenheit și variază în
intervalul [-30, +90]. Cantitatea de precipitații este dată în inci și variază între 0.0 și 2.0.
Viteza vântului este masurată în noduri și variază în intervalul [0.0, 20.0]. Pentru un
exemplu de date unde o valoare lipsește, se ia valoarea precedentă pentru acea variabilă.
În cazul experimentelor cu rețele neuronale și mașini cu suport vectorial, toate
valorile de intrare sunt scalate la intervalul [0, 1], în funcție de valorile minime și maxime
pe care le pot lua variabilele. Iar valorile de ieșire sunt scalate înapoi la intervalul original.
S-a studiat și corelația dintre variabile. S-a calculat coeficientul de corelație
Spearman, în loc de coeficientul Pearson, pentru ca ar putea fi relații între variabile care să
nu fie neaparat liniare. Coeficientul lui Spearman se calculează astfel:
Fie că avem variabilele X și Y cu valorile Xi și Yi. Valorile sunt ordonate
crescător și sunt convertite în rangurile xi și yi.
Se calculează coeficientul de corelație astfel:
33
Dacă valorile Xi și Yi sunt toate diferite și avem n valori pentru fiecare variabilă,
atunci se poate aplica formula:
S-a obținut următorul tabel cu coeficienți de corelație:
Figura 3. Tabelul cu coeficienții de corelație dintre variabile
Se observă că variabilele care sunt mai bine corelate cu temperatura medie sunt:
temperatura maximă, temperatura minimă și punctul de rouă.
4.4.3. Antrenament și testare
Inițial, setul de date este împărțit în 2 părți: setul de antrenament și setul de testare.
Setul de antrenament conține 98% din exemplele de date, iar cel de testare restul de 2% din
exemple.
În cadrul antrenamentului, evaluarea modelelor se face prin metoda k-fold cross-
validation, unde k=4. Mai exact, setul de antrenament se împarte în 4 părți. Se face
antrenamentul de 4 ori, de fiecare dată excluzându-se din exemplele de antrenament una
din cele 4 părți. După fiecare antrenament, exemplele care nu au participat la
34
antrenamentul propriu-zis sunt folosite pentru a evalua modelul. Se obțin astfel 4 valori
diferite pentru eroare. Se calculează media acestor valori și deviația standard.
Eroarea modelului la fiecare validare se calculează folosind formula mean squared
error (MSE):
În formula de mai sus, E reprezintă eroarea, n – numărul de exemple de test, yi –
valoarea așteptată pentru testul i, și ypi – valoarea estimată pentru testul i.
4.5. Experimente și rezultate
Această secțiune descrie experimentele efectuate pentru a evalua metodele alese și
rezultatele obținute de modele. Se va prezenta și cum rulează modelele cele mai bune de la
fiecare tip de experiment pe date reale. Se va realiza și o analiză comparativă a rezultatelor
obținute.
4.5.1. Experimente
Majoritatea metodelor de învățare automată utilizează coeficienți și parametri care
nu au legătură cu domeniul problemei și ale căror valori nu pot fi stabilite de la bun început
într-un mod simplu. De aceea, acești parametri ar trebui să se poată seta din aplicație, astfel
încât să se poată efectua mai multe teste pentru valori diferite ale parametrilor și să se
ajungă la o configurație optimă a acestora. Pentru fiecare experiment se vor indica valorile
care au fost alese pentru parametrii respectivi.
În primul tip de experimente s-a folosit doar temperatura medie din ultimele n zile
ca date de intrare, unde n s-a luat 1, 2 și 3. Parametrii metodelor au fost alesi astfel:
Rețele neuronale:
o Numărul de neuroni pe stratul ascuns: 4.
o Rata de învățare: 0.1.
35
o Numărul de epoci: 1000.
Programare genetică:
o Mărimea populației: 40.
o Numărul de generații: 40.
Mașini cu suport vectorial:
o Funcția kernel: RBF.
o Parametrul ε: 10-5.
S-au obținut rezultatele următoare, exprimate în erori de tip MSE:
n
(zile)Metoda Media Deviația standard
1 Rețele neuronale 28.05 1.91
1 Programare genetică 19.18 2.48
1 SVM 21.01 2.15
2 Rețele neuronale 31.40 2.38
2 Programare genetică 19.21 2.52
2 SVM 21.08 2.09
3 Rețele neuronale 34.62 2.46
3 Programare genetică 19.18 2.48
3 SVM 19.85 1.98
Figura 4. Tabelul cu erorile obținute în primul grup de experimente
Rezultatele obținute în urma rulării modelului bazat pe SVM, pentru primul grup de
experimente, cu n=2, pentru datele de test, sunt următoarele:
36
Figura 5. Rezultatele testării modelului SVM, obținut în primul grup de experimente, cu n=2
În al doilea tip de experimente s-au folosit ca date de intrare: temperatura medie,
temperatura maximă și temperatura minimă din ultimele n zile, unde n s-a luat 1 și 2.
Parametrii metodelor au fost aleși astfel:
Rețele neuronale:
o Numărul de neuroni pe stratul ascuns: 7.
o Rata de învățare: 0.1.
o Numărul de epoci: 500.
Programare genetică:
o Mărimea populației: 40.
o Numărul de generații: 60.
Mașini cu suport vectorial:
o Funcția kernel: RBF.
o Parametrul ε: 10-5.
S-au obținut rezultatele următoare, exprimate în erori de tip MSE:
37
n
(zile)Metoda Media Deviația standard
1 Rețele neuronale 34.52 2.43
1 Programare genetică 19.20 2.52
1 SVM 21.25 1.77
2 Rețele neuronale 38.40 3.06
2 Programare genetică 19.21 2.50
2 SVM 20.88 1.75
Figura 6. Tabelul cu erorile obținute în al doilea grup de experimente
Rezultatele obținute în urma rulării modelului bazat pe SVM, pentru al doilea grup
de experimente, cu n=2, pentru datele de test, sunt următoarele:
Figura 7. Rezultatele testării modelului SVM obținut în al doilea grup de experimente, pentru n=2
38
În al treilea tip de experimente s-au folosit ca date de intrare: temperatura medie,
temperatura maximă, temperatura minimă, punctul de rouă, viteza vântului, cantitatea de
precipitații și indicele zilei în an pentru ultimele n zile ca date de intrare, unde n s-a luat 1
și 2. Parametrii metodelor au fost aleși astfel:
Rețele neuronale:
o Numărul de neuroni pe stratul ascuns: 10.
o Rata de învățare: 0.07.
o Numărul de epoci: 400.
Programare genetică:
o Marimea populației: 50.
o Numărul de generații: 60.
Mașini cu suport vectorial:
o Funcția kernel: RBF.
o Parametrul ε: 10-5.
S-au obținut rezultatele următoare, exprimate în erori de tip MSE:
n
(zile)Metoda Media Deviația standard
1 Rețele neuronale 18.72 1.80
1 Programare genetică 19.18 2.47
1 SVM 17.91 1.69
2 Rețele neuronale 20.73 2.15
2 Programare genetică 19.20 2.52
2 SVM 18.21 2.32
Figura 8. Tabelul cu erorile obținute în al treilea grup de experimente
Rezultatele obținute în urma rulării modelului bazat pe rețele neuronale, pentru al
treilea grup de experimente, cu n=1, pentru datele de test, sunt următoarele:
39
Figura 9. Rezultatele testării rețelei neuronale construita la al treilea grup de experimente, pentru n=1
Intervalele de erori pentru toate experimentele sunt prezentate în Figura I.
Figura 10. Intervalele de erori pentru toate experimentele
40
4.5.2. Analiză comparativă
Primul tip de experimente (Date de intrare: temperatura medie)
În primul grup de experimente, modelele bazate pe programare genetică și mașini
cu suport vectorial au obținut rezultate apropiate între ele și mai bune decât cele bazate pe
rețele neuronale. Intervalele de încredere 19.18 ± 2.48 și 21.01 ± 2.15, 19.21 ± 2.52 și
21.01 ± 2.15, respectiv 19.18 ± 2.48 și 19.85 ± 1.98 se intersectează. Deci nu se poate
spune care din cele 2 tehnici, programare genetică sau SVM, dă rezultate mai bune.
Al doilea tip de experimente (Date de intrare: temperatura medie, temperatura
minimă, temperatura maximă)
În al doilea grup de experimente, situatia e similară cu cea din primul grup.
Programarea genetică și SVM dau rezultate mai bune dect rețelele neuronale. Deși
programarea genetică ar părea să aibă o eroare puțin mai mică decât SVM, intervalele de
încredere 19.20 ± 2.52 și 21.25 ± 1.77, respectiv 19.21 ± 2.50 și 20.88 ± 1.75 se
intersectează. Deci nu se poate spune care din cele doua metode are eroarea mai mica.
Al treilea tip de experimente (Date de intrare: temperatura medie, temperatura
minimă, temperatura maximă, punctul de rouă, viteza vântului, cantiatea de
precipitații, indicele zilei în an)
În al treilea grup de experimente, modelele bazate pe rețele neuronale dau rezultate
surprinzator de bune, în comparație cu rezultatele obținute la experimentele precedente.
Media erorilor este cea mai mică în cazul experimentelor cu mașini cu suport vectorial, dar
toate intervalele de încredere: 18.72 ± 1.80, 19.18 ± 2.47, 17.91 ± 1.69, 20.73 ± 2.15, 19.20
± 2.52, 18.21 ± 2.32 se intersecteaza între ele două câte două. Astfel, în acest caz avem că
toate cele trei tehnici dau rezultate similare.
4.6. Discuții
Această secțiune are scopul de a analiza metodologia aplicată în studiul efectuat și
de a compara rezultatele obținute cu cele descrise în alte lucrări similare.
41
4.6.1. Analiză
Având în vedere toate experimentele efectuate pentru acest studiu, nu putem
deduce care ar fi setul optim de parametri care ar trebui folosit ca date de intrare pentru un
model care să prezică temperatura atmosferică pentru perioada imediat următoare. Chiar
dacă s-au calculat coeficienții de corelație între variabile, s-a observat ca dacă se includ și
parametri care nu par corelați cu variabila de ieșire, rezultatele nu sunt mai rele, ci în
anumite cazuri s-au obținut rezultate mai bune. O explicatie ar fi faptul ca coeficientii de
corelatie calculați sunt de tip Spearman și doar exprimă daca există o relatie de monotonie
între variabile. În cazul nostru, ar putea exista o relatie mai complicată între doua variabile
care nu este surprinsa de coeficientul de corelatie calculat.
S-ar parea că cele mai bune rezultate sunt date de modelele bazate pe programare
genetică. Însă, problema cu programarea genetică este ca expresiile simple care au o
valoare de fitness destul de bună iau locul expresiilor mai complicate în populație. Si din
cauza aceasta e greu pentru algoritm să formeze o expresie mai complexă, în care să apară
mai multe date de intrare și care să dea rezultate mai bune decat expresiile simple.
Modelele bazate pe SVM obțin rezultate bune în toate experimentele și se
antrenează repede. Dacă sunt alese valori mai potrivite pentru parametrii algoritmului, s-ar
putea obține erori și mai mici decat cele obținute la experimentele efectuate.
În cazul rețelelor neuronale, acestea se antrenează greu și probabil din cauza
aceasta nu au ajuns la erori mici în cazul primelor două tipuri de experimente. Este
surprinzător faptul ca au dat erori mai mici în experimentele din al treilea grup. În cazul
rețelelor neuronale, alegerea valorilor potrivite pentru parametri, cum ar fi numărul de
neuroni pe stratul ascuns și rata de învățare, este foarte importantă. Si probabil pentru
primele două grupuri de experimente există un set de valori mai optim pentru parametri,
care să dea rezultate similare celor obținute în al treilea grup de experimente.
4.6.2. Comparații cu lucrări anterioare
Comparând rezultatele obținute în experimentele efectuate în acest studiu cu
rezultatele din [11], putem observa că erorile în cazul nostru sunt puțin mai mari decât
erorile descrise în lucrarea respectivă. Acest lucru poate fi explicat de faptul cî teritoriul
analizat în cazul nostru, orașul Cluj-Napoca, este mult mai mare decât teritoriul
42
Universității Cambridge, studiat în [11]. O altă differență importantă este că noi studiem
previziunea temperaturii medii, pe când [11] studiază previziunea temperaturii maxime
pentru următoarea zi.
În lucrarea [21], valorile MAE obținute pentru LR, LMS, M5P și MLP sunt între 10
și 20 Fahrenheit. Aceste valori sunt mai bune decat o eroare MSE între 16 și 20, obținute în
experimentele noastre. Dar diferenta este că în [21] este previzionată temperatura pentru
următoarea oră pentru teritorii mici, pe când în cazul nostru este studiată temperatura
medie pentru următoarea zi pentru un oraș întreg.
Erorile medii absolute (MAE) ale tuturor modelelor folosite în experimentele din
lucrarea [22] au fost între 1.50C and 20C. Aceste valori sunt comparabile cu o valoare MSE
de 16-20 pentru Fahrenheit, dar sunt puțin mai bune, pentru că experimentele din [22] au
fost efectuate pentru valori medii ale temperaturii la intervale de o oră.
4.7. Concluzii
În acest studiu am investigat folosirea a trei tehnici de învățare automată: rețele
neuronale artificiale, programare genetica și mașini cu suport vectorial, pentru problema
previzionarii temperaturii atmosferice. Au fos oferite evaluari experimentale, precum și o
analiza comparativă a rezultatelor.
O modalitate prin care se poate îmbunătăți studiul prezicerii temperaturii folosind
tehnici de învățare automată este să fie considerat un teritoriu mai mic, pentru ca relațiile
dintre variabile vor fi mult mai ușor de identificat pentru algoritmi.
Un alt mod de a obține rezultate mai bune este de a studia seturi de date cu instanțe
care să conțină valori pentru intervale mai mici de timp. De exemplu, se pot studia
intervale de o oră, în locul intervalelor de o zi, și se poate încerca previziunea temperaturii
pentru următoarea oră. Astfel, am putea obține o eroare mai mică.
O direcție de continuare a studiului ar fi folosirea acelorați tehnici de învățare
automată pentru prezicerea altor indicatori atmosferici, cum ar fi: viteza vântului, nivelul
de precipitații, temperatura apei și presiunea atmosferică.
43
O altă direcție pentru cercetare ar fi studierea altor tehnici de învățare și aplicarea
lor pentru aceeași problemă. Alte tehnici care ar putea fi folosite sunt: locally-weighted
regression, rețele RBF s.a.
44
Capitolul 5. Aplicație practică: Analiza seriilor de timp prin
tehnici de învățare automată
În acest capitol, se va descrie o aplicație realizată cu scopul de a studia
aplicabilitatea tehnicilor de învățare automată în problema analizei seriilor de timp. Se vor
descrie toate etapele de realizare a aplicației, caracteristice dezvoltării oricărui proiect
software.
5.1. Enunțul și specificarea problemei
Se dorește realizarea unei aplicații care să ofere instrumentele necesare pentru a
experimenta tehnici de învățare automată asupra previzionării seriilor de timp. Aplicația
trebuie să includă următoarele funcționalități:
Încărcarea unui set de date ce reprezintă o serie de timp dintr-un fișier ales de
utilizator. Setul de date este compus dintr-o mulțime de exemple de date care conțin
valori pentru un set fixat de variabile. Setul de date și variabilele sunt descrise în
fișier. Pentru fiecare variabilă trebuie să fie indicate: numele variabilei, valoarea
minimă, valoarea maximă.
Generarea tabelului cu coeficienții de corelație Spearman între variabilele din setul
de date încărcat.
Setarea variabilelor de intrare și a variabilei de ieșire pentru modelul predcitv dorit
din mulțimea de variabile descrise în setul de date. De asemenea, trebuie permisă și
setarea numărului de instanțe precendente care vor fi folosite ca date de intrare.
Implementarea următoarelor tehnici de învățare automată pentru antrenament și
testare pe setul de date încărcat: rețele neuronale artificiale de tip feed-forward with
backpropagation, programare genetică și mașini cu suport vectorial de tip ε-SVR.
Setarea tehnicii dorite pentru model și setarea parametrilor de bază pentru
algoritmii de învățare. Mai exact:
o Rețele neuronale:
Numărul de neuroni pe stratul ascuns
45
Rata de învățare
Numărul de epoci pentru antrenament
o Programare genetică
Mărimea populației
Rata de încrucișare
Rata de mutație
Numărul de generații
o Mașini cu suport vectorial
Funcția kernel
Parametrul epsilon
Setarea numărului de subseturi în care se va împărți setul de date de antrenament
pentru k-fold cross-validation.
Antrenarea modelului cu tehnica selectată și întoarcerea mediei și deviației standard
pentru erorile obținute.
Testarea modelului cu datele de test și generarea unui grafic care să prezinte
valorile reale și valorile estimate de model.
Salvarea erorilor obținute la antrenament și a valorilor obținute la testare într-un
fișier ales de utilizator.
5.2. Analiza problemei
Pentru a avea o imagine mai clară asupra funcționalităților cerute în specificare
vom crea tabelul de evenimente pentru aplicație. Acesta arată în felul următor:
Subiect Verb Obiect Frecvență
Utilizator încarcă set de date o dată pe rulare
Utilizator generează tabel de corelație o dată pe rulare
Utilizator setează parametrii generali 4-10 ori pe rulare
Utilizator setează parametrii tehnicii 4-10 ori pe rulare
46
alese
Utilizator antrenează modelul selectat 4-10 ori pe rulare
Utilizator testează modelul obținut 4-10 ori pe rulare
Utilizator salvează rezultatele 4-10 ori pe rulare
Figura 11. Tabelul de evenimente
Identificând evenimentele din specificarea problemei și având tabelul de
evenimente, putem vedea mai clar cazurile de utilizare care trebuie să apară în aplicație. În
continuare, vom prezenta diagrama de cazuri de utilizare dedusă din specificarea
problemei.
Figura 12. Diagrama cazurilor de utilizare
47
5.3. Proiectare
În această secțiune se va descrie modul în care a fost gândită aplicația și deciziile
de proiectare luate pentru a asigura o implementare cât mai ușoară a funcționalităților din
specificație. Aplicația va fi proiectată în ideea programării orientate pe obiecte.
5.3.1. Modelul de date
Având în vedere faptul că aplicația trebuie să proceseze orice set de date care
respectă condițiile din specificație, avem nevoie de un pachet de clase care să reprezinte
concepte cât mai abstracte, astfel încât să modeleze orice set de date valid.
Avem următoarele clase:
Variable – reprezintă o variabilă din setul de date. Conține următoarele
informații: numele variabilei, id, valoarea minimă și valoarea maximă a
acesteia.
Value – reprezintă o valoare a unei variabile într-un exemplu de date.
DataSample – reprezintă un exemplu de date din cadrul unui set de date.
Conține câte o valoare pentru fiecare variabilă din set.
DataSet – reprezintă un set de date. Conține un nume, o descriere a setului
de date, o listă de obiecte de tip Variable și o listă de obiecte de tip
DataSample.
Problem – reprezintă o problemă de învățare asupra unui set de date. Are ca
atribute: setul de date, un set de variabile care vor fi date de intrare, o
variabilă care va fi dată de ieșire, numărul de exemple precedente care
trebuie luate în considerare pentru datele de intrare în model, numărul de
subseturi în care se împart datele de antrenament pentru cross-validation și
indicele subsetului care nu va participa la antrenament.
LearningModel – interfață care declară metodele pe care ar trebui să le
definească o clasă care implementeaƶă o tehnică de învățare pentru a fi
folosită în aplicatie.
AbstractLearningModel – clasă abstractă care implementează o parte din
metodele declarate de interfața LearninModel, care sunt comune pentru
toate modelele implementate în aplicație.
48
Diagrama claselor din model este următoarea:
Figura 13. Diagrama claselor din modelul de date
Fișierul cu setul de date trebuie să fie într-un format ușor de citit de către o
aplicație. S-a decis asupra formatului XML. Schema XSD a unui fisier XML care conține
un set de date este următoarea:
49
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.scs.ubbcluj.ro/~gmir0757/DataSetSchema"
xmlns:tns="http://www.scs.ubbcluj.ro/~gmir0757/DataSetSchema"
elementFormDefault="qualified"> <xs:element name="dataset"> <xs:complexType> <xs:sequence> <xs:element name="name" /> <xs:element name="description" /> <xs:element name="variables"> <xs:complexType> <xs:sequence> <xs:element name="variable" minOccurs="1" maxOccurs="10"> <xs:complexType> <xs:attribute name="id" type="xs:string" /> <xs:attribute name="name" type="xs:string" /> <xs:attribute name="minValue" type="xs:double" /> <xs:attribute name="maxValue" type="xs:double" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="samples"> <xs:complexType> <xs:sequence> <xs:element name="sample" minOccurs="1" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="value" minOccurs="1" maxOccurs="10"> <xs:complexType> <xs:attribute name="varId" type="xs:string" /> <xs:attribute name="val" type="xs:double" /> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType>
50
</xs:element></xs:schema>
Un exemplu de fișier care descrie un set de date ar fi următorul:
<?xml version="1.0" encoding="UTF-8" standalone="no"?><dataset> <name>Daily weather indicators for Cluj-Napoca.</name> <description>Daily values for the most important weather indicators for Cluj-Napoca, from 1952 to 2011.</description> <variables> <variable id="1" maxValue="366" minValue="1" name="Day index"/> <variable id="2" maxValue="90" minValue="-30" name="Mean temperature"/> <variable id="3" maxValue="90" minValue="-30" name="Minimum temperature"/> <variable id="4" maxValue="90" minValue="-30" name="Maximum temperature"/> <variable id="5" maxValue="90" minValue="-30" name="Dew point"/> <variable id="6" maxValue="20.0" minValue="0.0" name="Wind speed"/> <variable id="7" maxValue="2.0" minValue="0.0" name="Precipitation level"/> </variables>
<samples> <sample> <value val="2" varId="1"/> <value val="31.0" varId="2"/> <value val="27.0" varId="3"/> <value val="36.0" varId="4"/> <value val="30.0" varId="5"/> <value val="0.0" varId="6"/> <value val="0.0" varId="7"/> </sample> <sample> <value val="3" varId="1"/> <value val="30.5" varId="2"/> <value val="28.0" varId="3"/> <value val="34.0" varId="4"/> <value val="24.8" varId="5"/> <value val="16.2" varId="6"/> <value val="0.05" varId="7"/> </sample>
... </samples></dataset>
51
5.3.2. Tehnicile de învățare
Aplicația trebuie să implementeze trei tehnici de învățare: rețele neuronale de tip
feed-forward with backpropagation, programare genetică și mașini cu suport vectorial de
tip ε-SVR. Și luând în considerare parametrii care se cer a fi configurabili din aplicație,
avem următoarea ierarhie de clase:
Figura 14. Diagrama claselor care implementează tehnicile de învățare
5.4. Implementare
În această secțiune se vor prezenta detaliile de implementare ale aplicației. Se vor
menționa limbajul de programare ales, tipul aplicației și bibliotecile folosite. Se va descrie
cum a fost implementată interfața cu utilizatorul și se vor prezenta câteva secvențe de cod
relevante din aplicație.
52
5.4.1. Limbajul și bibliotecile folosite
Limbajul de programare în care a fost dezvoltată aplicatia este Java. Aplicația este
de tip desktop, cu o interfață utilizator dezvoltată cu ajutorul framework-ului Swing, din
pachetele standard Java.
Pentru implementarea metodelor de învățare automată, au fost folosite următoarele
biblioteci:
Neuroph 2.6 pentru rețele neuronale [24].
JGAP (Java Genetic Algorithms Package) 3.6.2 pentru programare genetică
[25].
LibSVM 3.11 pentru mașini cu suport vectorial [26].
Pentru generarea de grafice pentru a arăta diferența dintre valorile reale și cele
estimate în cazul testării unui model s-a folosit biblioteca JFreeChart 1.0.14 [27].
5.4.2. Implementarea interfeței cu utilizatorul
Interfața cu utilizatorul este formată din ferestre, butoane, meniuri și alte
componente standard pentru o aplicație desktop. Clasele care descriu interfața cu
utilizatorul sunt următoarele:
MainWindow – definește fereastra principală din aplicație. În cadrul acesteia
sunt definite functionalitățile de bază și componentele care apar în cadrul
ferestrei.
SettingsFrame – definește fereastra de setare a parametrilor. Aceată
fereastră este facută vizibilă atunci când utilizatorul alege să seteze
parametrii din cadrul ferestrei principale.
CorrelationFrame – definește fereastra în care este prezentat tabelul cu
coeficienții de corelație. Această fereastră este facută vizibilă atunci când
utilizatorul alege să vadă coeficienții de corelație dintre variabile din cadrul
ferestrei principale, după încărcarea setului de date.
TrainingDialog – definește dialogul care apare atunci când are loc
antrenarea unui model. Acesta prezintă progresul la care s-a ajuns în
antrenare.
53
TestResultsFrame – definește fereastra care prezintă graficul cu rezultatele
obținute în urma testării. Este făcută vizibilă atunci când utilizatorul alege
să testeze modelul din fereastra principală.
Diagrama care arată relațiile dintre clasele de interfață este următoarea:
Figura 15. Diagrama claselor care implementează interfața utilizator
54
5.4.3. Secvențe de cod relevante
Codul clasei TrainingTask, interioară clasei MainWindow, care definește operația
de antrenament al unui model. Pentru fiecare subset creat pentru cross-validare, se
construiește modelul și se antrenează cu datele de antrenament care nu includ
subsetul de validare. Dupa fiecare antrenare se actualizează progresul
antrenamentului și se adaugă eroarea obținută în lista de erori.
private class TrainingTask extends Thread { @Override public void run() { for (int i = 0; i < problem.getNumValidationSets(); i++) {
if (trainingCanceled) { return; }
problem.setValidationSetIndex(i);
learningModel = constructSelectedModel(); learningModel.setProblem(problem); learningModel.initModel(); learningModel.train();
final double error =learningModel.getErrorForSet(problem.getValidationSamples()); final int iter = i + 1; System.out.println("Finishing iteration " + i + ", error: " + error); errorList.add(error);
EventQueue.invokeLater(new Runnable() { @Override public void run() { trainingDialog.getPbTraining().setValue(iter * 100 /
problem.getNumValidationSets()); trainingDialog.getPbTraining().invalidate();
if (iter == problem.getNumValidationSets()) { trainingDialog.getCancelButton().setEnabled(false); trainingDialog.getFinishButton().setEnabled(true); trainingDialog.getLblProgress().setText("Training done!"); } } });
55
} }}
Codul metodei test() din cadrul clasei MainWindow. Prin această metodă se
testează modelul cu datele selectate ca fiind de test și se creează un obiect
TestResultsFrame în care se generează graficul cu valorile reale și valorile estimate.
public void test() { lblStatus.setText("Testing..."); List<DataSample> testSamples = problem.getTestSamples(); testResults = learningModel.testBatch(testSamples); testRealValues = new double[testResults.length];
int past = problem.getNumPastSamples(); int N = testSamples.size();
for (int i = past; i < N; i++) { Variable outputVar = problem.getOutputVariable(); testRealValues[i - past] =
testSamples.get(i).getValueForVariable(outputVar).getValue(); }
resultsFrame = new TestResultsFrame(problem.getOutputVariable().getName(), testRealValues, testResults);
resultsFrame.setVisible(true); mntmSaveResults.setEnabled(true);}
Codul metodei computeCorrelation() din clasa CorrelationFrame. Se calculează
coeficienții de corelație între variabile, în funcție de exemplele de date din setul de
date încărcat. Se salvează coeficienții în matricea correlationValues, care apoi este
folosită pentru a completa tabelul generat.
private void computeCorrelation() { int numVars = dataSet.getVariablesList().size(); int N = dataSet.getDataSamplesList().size(); ArrayList<ArrayList<Double>> valueLists = new ArrayList<ArrayList<Double>>(); ArrayList<ArrayList<Integer>> rankLists = new ArrayList<ArrayList<Integer>>();
56
// Computing ranks for all values
for (int i = 0; i < numVars; i++) { valueLists.add(new ArrayList<Double>()); rankLists.add(new ArrayList<Integer>()); }
for (DataSample sample : dataSet.getDataSamplesList()) { for (int i = 0; i < numVars; i++) { valueLists.get(i).add(sample.getValues().get(i).getValue()); } }
for (int i = 0; i < numVars; i++) { Collections.sort(valueLists.get(i)); for (int j = 0; j < N; j++) { double value = dataSet.getDataSamplesList().get(j).getValues().get(i).getValue(); int position = Collections.binarySearch(valueLists.get(i), value); rankLists.get(i).add(position); } }
// Computing correlation for all pairs
long longN = N; correlationValues = new double[numVars][numVars];
for (int i = 0; i < numVars; i++) { correlationValues[i][i] = 1; for (int j = i + 1; j < numVars; j++) { double dSum = 0; for (int k = 0; k < N; k++) { long diff = rankLists.get(i).get(k) - rankLists.get(j).get(k); dSum += diff * diff; } correlationValues[i][j] = (double) (1 - ((6 * dSum) /
(double) (longN * (longN * longN - 1)))); correlationValues[j][i] = correlationValues[i][j]; } }}
Codul metodei test() din clasa NeuralNetworkModel. Metoda respectivă este folosită
pentru a testa modelul antrenat pe un singur caz de test. Metoda returnează valoarea
57
estimată de model. Se observă ca datele de intrare sunt ajustate să fie în intervalul [0,
1], prin metoda getValueBetweenZeroAndOne() din clasa Value. Această metodă se
folosește de valorile minime și maxime ale variabilei pentru a ajusta valorile la
intervalul [0, 1]. Valoarea generată de rețeaua neuronală la fel este între 0 și 1. De
aceea, înainte să fie returnată valoarea, este ajustată inapoi la intervalul specific
variabilei de ieșire. Celelalte clase care implementează tehnici de învățare au o metodă
de test asemănătoare.
@Overridepublic double test(List<DataSample> inputSamples) {
int numInputs = problem.getInputVariables().size();
// Get the inputs int past = inputSamples.size(); double[] inputs = new double[past * numInputs]; int current = 0;
for (int j = 0; j < past; j++) { for (int k = 0; k < numInputs; k++) { Variable var = problem.getInputVariables().get(k); Value value = inputSamples.get(j).getValueForVariable(var); inputs[current++] = value.getValueBetweenZeroAndOne(); } }
// Use the network neuralNetwork.setInput(inputs); neuralNetwork.calculate(); double output = neuralNetwork.getOutput()[0]; double rangeLength = problem.getOutputVariable().getUpperBound() - problem.getOutputVariable().getLowerBound(); double adjustedOutput = output * rangeLength +
problem.getOutputVariable().getLowerBound(); return adjustedOutput;}
58
5.5. Testare
Aplicația a fost testată cu setul de date și problema descrisă în studiul de caz din
Capitolul 4. A fost încărcat setul de date dorit, s-au configurat parametrii de intrare și de
ieșire pentru problema studiată și s-au făcut experimente cu tehnicile implementate în
aplicație pe setul de date respectiv, cu diverse valori pentru parametrii metodelor. Valorile
parametrilor și rezultatele obținute au fost prezentate în studiul de caz.
5.6. Manual de utilizare
În această secțiune vom prezenta instrucțiunile de utilizare a aplicatiei și vom
explica modul în care aplicația trebuie utilizată pentru a obține rezultatul dorit.
Primul pas care trebuie făcut dupa ce e pornita aplicația este încărcarea setului de
date din fișier. Aceasta se face navigând spre File Load data set.
Figura 16. Încărcarea setului de date
După aceasta, utilizatorul primește informațiile despre setul de date.
59
Figura 17. Fereastra principală, cu informații despre setul de date
Imediat după ce a fost încărcat setul de date, utilizatorul poate seta parametrii
pentru modelul ce urmează a fi antrenat. Utilizatorul poate să aleagă: variabilele de intrare,
variabila de ieșire, numărul de exemple precedente care să fie luate în considerare pentru
datele de intrare, metoda de învățare, numărul de subseturi pentru cross-validare și
parametrii specifici fiecărei metode în parte.
Figura 18. Setări generale
60
Figura 19. Setări pentru rețele neuronale
Figura 20. Setări pentru programare genetică
61
Figura 21. Setări pentru mașini cu suport vectorial
O altă acțiune pe care o poate face utilizatorul imediat după ce au fost încărcate
datele este vizualizarea tabelului de corelație. La alegerea acestei opțiuni, apare o fereastră
care conține un tabel. Acest tabel are numărul de coloane și numarul de linii egale cu
numărul de variabile și în fiecare celulă conține câte un coeficient de corelație între două
variabile.
Figura 22. Tabelul de corelație
După ce au fost setați parametrii doriți, utilizatorul poate apăsa butonul Train din
cadrul ferestrei principale pentru a antrena modelul. În acest caz, apare un dialog care
indică progresul antrenamentului.
62
Figura 23. Dialogul de antrenament
La sfârșitul antrenamentului, sunt afișate erorile obținute, precum și media și
deviația standard a acestora.
Figura 24. Dialogul cu rezultatele antrenamentului
Dupa antrenament, utilizatorul poate apăsa butonul Test din cadrul ferestrei
principale. Este testat modelul cu datele selectate ca fiind de test și este afișat un grafic cu
valorile reale și valorile estimate de model pentru variabila de ieșire.
63
Figura 25. Graficul cu rezultatele testării
Dupa ce s-a facut și testarea, utilizatorul poate alege să salveze rezultatele obținute.
Pentru aceasta, navighează spre File Save results și alege fisierul în care vor fi salvate
rezultatele antrenamentului și ale testării.
5.7. Extinderi posibile
Aplicația discutată poate fi extinsă în mai multe moduri. În această secțiune vom
prezenta câteva idei pentru extinderea funcționalităților acesteia.
Unul din lucrurile care pot fi modificate la aplicație este oferirea posibilității setarii
mai multor parametri specifici metodelor de învățare folosite. De exemplu, pentru rețele
neuronale se poate oferi posibilitatea setarii numarului de straturi ascunse și numarul de
neuroni pe fiecare strat, a valorii pentru momentum sau a funcției de activare. Pentru
programare genetică s-ar mai putea seta din aplicație: setul de funcții pentru construirea
arborilor de expresii, adâncimea maximă a unui arbore de expresie, setul de constante care
să fie incluse în construirea arborilor de expresii. Pentru mașini cu suport vectorial, s-ar
mai putea configura ca să se poată seta din aplicație: parametrul gamma în formula pentru
64
funcția RBF și alți parametri pentru alte funcții kernel, cum ar fi gradul pentru funcția
polinomială.
Aplicația mai poate fi extinsă prin implementarea altor tehnici de învățare și
punerea lor în lista metodelor din care se poate alege pentru antrenament și testare. Două
din metodele care pot fi adăugate sunt: locally-weighted regression și rețele RBF.
O altă extindere posibilă ar fi oferirea posibilității generării unor tabele cu
coeficienți de corelație între variabile calculați după alte formule. În această aplicatie este
calculat coeficientul lui Spearman, dar se poate extinde să includă și optiunea calculării
coeficientului lui Pearson sau a coeficientului lui Kendall.
Aplicația a fost gândită astfel încât să se poată studia probleme de predicții în care
seturile de date au structura unei serii de timp. Dar modelul de date folosit în aplicație
poate fi extins fără mari dificultăți să includă și alte tipuri de probleme de predicție. Se
poate modifica codul astfel încât să poată fi studiate chiar și probleme de clasificare, nu
doar regresie. Pentru acest lucru, ar trebui ca pentru fiecare variabila să se indice mulțimea
valorilor posibile și aceasta să poată fi exprimată ca o enumerare de valori sau ca un
interval.
S-ar mai putea adăuga și posibilitatea generării și altor grafice pentru analiza
antrenamentului și testării. De exemplu, s-ar putea crea un grafic care să prezinte evoluția
erorii în timpul antrenamentului. Această functionalitate nu este posibila pentru toate
metodele, pentru ca nu toate bibliotecile folosite ofera posibilitatea asocierii unei acțiuni
evenimentului de terminare a unei iterații. Dar se pot căuta alte biblioteci care să nu aibă
acest impediment. Un alt grafic relevant ar fi cu valorile obținute de mai multe modele în
urma testării lor. Astfel, s-ar putea compara mai ușor rezultatele obținute de modele
diferite.
O altă extensie utilă ar fi oferirea posibilității automatizării antrenamentului și
testării pentru o serie de configurații. De exemplu, s-ar putea configura astfel încât să se
antreneze și să se testeze mai multe rețele neuronale care să aibă parametrii indicați în
aplicație, dar rata de învățare să varieze de la 0.05 la 0.15 cu pasul 0.01. Astfel, am putea
face mai ușor experimente care să ne indice ce valori trebuie să alegem pentru un anumit
parametru.asd
65
Concluzii
Inteligența artificială în general și învățarea automată în special sunt domenii de
cercetare relativ noi. S-au facut multe descoperiri în ultimele decenii și s-au construit
tehnici eficiente care au fost folosite în scopuri comerciale, cum ar fi: recunoașterea
vorbirii, recunoașterea scrisului de mână, controlul roboților. Unul din scopurile acestei
lucrări a fost să prezinte tematica învățării automate și să demonstreze utilitatea acestui
domeniu în probleme reale.
Dar există și numeroase probleme în care nu s-au exploatat îndeajuns algoritmii de
învățare automată existenți. Una din aceste probleme este previziunea vremii. Deși au fost
încercări de a utiliza învățarea automată pentru predicția indicatorilor meteorologici și se
fac tot mai multe cercetări în domeniu, această problemă rămâne un subiect important de
cercetare în continuare. Studiul de caz din această lucrare a avut scopul să demonstreze că
se pot aplica tehnici de învățare automată pentru problema respectivă. Algoritmii de
învățare folosesc date din trecut ca să construiască modele matematice care să fie capabile
să facă predicții meteorologice.
Proiectând o aplicație care să permită realizarea de experimente pentru a studia
problema previzionării vremii folosind tehnici de învățare automată, s-a observat că
aplicația poate fi construită fără prea mult efort în plus, astfel încât să permită și studierea
altor probleme de predicție. În rezultat, s-a creat o aplicație care poate fi folosită pentru
orice set de date care are caracterul unei serii de timp și care permite folosirea a trei tehnici
de învățare automată: rețele neuronale, programare genetică și mașini cu suport vectorial.
Aceste tehnici se pot folosi în aplicație pentru antrenarea și testarea modelelor care să
genereze predicții pentru variabilele din setul de date încărcat. Mergând pe aceeași idee,
aplicația poate fi extinsă ca să includă și posibilitatea studierii altori probleme de învățare,
cum s-a discutat și în secțiunea Extinderi posibile, din Capitolul 5.
66
Bibliografie
[1] S. J. Russel, P. Norvig, Artificial Intelligence: A Modern Approach, Prentice
Hall, New Jersey, 1995, pp. 4-8, 567-570.
[2] D. Cristea, I. Pistol, Inteligența Artificială, Facultatea de Informatica, Univ. Al.
I. Cuza, Iași, 2011, pp. 5-10, 166-170.
[3] T. Mitchell, Machine Learning, McGraw-Hill, March 1997, pp.1, 81-96, 262-
266.
[4] T. Mitchell, Discipline of Machine Learning, Universitatea Carnegie Mellon,
Pittsburgh, 2006, pp. 1-3
[5] E. G. Learned-Miller, Supervised Learning and Bayesian Classification,
University of Massachusetts, Amherst, septembrie 2011
[6] S. B. Kotsiantis, Supervised Machine Learning: A Review of Classification
Techniques, Informatica 31, Universitatea din Peloponnese, Grecia, 2007, pp.
249-251
[7] Simon Haykin, Neural Networks: A Comprehensive Foundation, Pearson
Education, McMaster University, Ontario, Canada, 1999, pp. 12-13.
[8] C. Fyfe, Artificial Neural Networks, University of Paisley, Marea Britanie, 1996
pp. 37-39
[9] J. R. Koza et al., Genetic Programming IV: Routine Human-Competitive
Machine Intelligence, 2003, pp. 1-10
[10] J.R. Koza, What is genetic programming?, 2003, http://www.genetic-programming.com/gpanimatedtutorial.html
[11] Y. Radhika, M. Shashi, Atmospheric Temperature Prediction using Support
Vector Machines, International Journal of Computer Theory and Engineering,
Vol. 1, No. 1, aprilie 2009.
[12] A. Ben-Hur, J.Weston, A User’s Guide to Support Vector Machines, Colorado
State University, Colorado, NEC Labs America, Princeton, NJ, pp. 1-3
67
[13] P. Kar, Support Vector Machines and their Applications, Indian Institute of
Technology Kanpur, 2009, pp. 56-70.
[14] W. W. Eckerson, Predictive Analytics, TDWI Best Practices Report, 2007, pp.
4-10.
[15] R. Weber, Time Series, Statistical Laboratory, University of Cambridge, pp.1-2
[16] S. Sayad, Model Evaluation - Regression, University of Toronto, 2010,
http://chem-eng.utoronto.ca/~datamining/dmc/model_evaluation_r.htm
[17] L. Alter, Meteorology, The Atmosphere and the Ocean, Vol. V, Yale-New
Haven Teachers Institue, New Haven, Connecticut, SUA, 1994
[18] P. Lynch, The origins of computer weather predictions and climate modelling,
Journal of Computational Physics 227, pp. 3431–3444, 2008
[19] U. Rebbapragada, Introduction to Machine Learning Research on Time Series,
Tufts University, ianuarie 2007.
[20] K. Sreelakshmi, P. Ramakanthkumar, Neural Networks for Short Term Wind
Speed Prediction, World Academy of Science, Engineering and Technology 42,
2008.
[21] A. Polumetla, Machine Learning Methods for the Detection of RWIS Sensor
Malfunctions, University of Minnesota, iulie 2006, pp. 71-79.
[22] B. A. Smith, R. W. McClendon, G. Hoogenboom, Improving Air Temperature
Prediction with Artificial Neural Networks, University of Georgia, martie 2006
[23] National Climatic Data Center, Global Surface Summary of Day Data, http://www.ncdc.noaa.gov/
[24] Biblioteca Neuroph, http://neuroph.sourceforge.net/
[25] Biblioteca JGAP, http://jgap.sourceforge.net/
[26] Biblioteca LibSVM, http://www.csie.ntu.edu.tw/~cjlin/libsvm/
[27] Biblioteca JFreeChart, http://www.jfree.org/jfreechart/
68