1
Curs 1- Introducere în domeniul învățării automate
Din momentul în care calculatoarele au fost inventate, s-a pus întrebarea dacă acestea ar putea
fi făcut să învețe. Dacă am putea înțelege cum să le programăm să învețe - adică să se
îmbunătățească în mod automat cu experiență - impactul ar fi dramatic. Să ne imaginăm cum
calculatoarele învață pe baza înregistrărilor medicale care tratamente sunt cele mai eficiente pentru
anumite boli, sau programe care învață din experiență să optimizeze costurile energiei unei case
pe baza modelelor specifice de utilizare ale locuitorilor casei, sau învățarea de către personalului
de asistență software a intereselor utilizatorilor săi astfel încât să poată evidenția aspectele
relevante din ziarele online. O înțelegere a modului în care putem face calculatoarele să învețe ar
deschide multe posibilităţi noi de utilizare ale computerelor. Mai mult. o înțelegere profundă a
algoritmilor folosiţi pentru procesarea informațiilor folosiţi în învățarea automată ar putea duce la
o mai bună înțelegere a abilitățile de învățare umane (și dizabilități).
Încă nu știm cum să facem calculatoarele să învețe aproape la fel de bine cum oamenii învață.
Cu toate acestea, au fost inventaţi algoritmi care sunt eficienți pentru anumite tipuri de probleme
de învățare și o înțelegere teoretică a învățării începe să se contureze. Multe programe şi aplicaţii
comerciale au fost dezvoltate astfel încât să conţină unele tipuri de învăţare. Pentru probleme
precum recunoașterea vorbirii, algoritmi bazați pe învăţarea automată depășește toate celelalte
abordări care au fost încercate până în prezent. În domeniul cunoscut sub numele de date mining,
algoritmi de învățare mașină sunt utilizaţi în mod obișnuit pentru a descoperi cunoștințe valoroase
din bazele de date comerciale mari care conțin diferite înregistrări cum ar fi date întreținere a
echipamentelor, cereri de împrumut, tranzacții financiare, înregistrări medicale și altele asemenea.
Pe măsură ce înțelegerea computerelor continuă să se maturizeze, pare inevitabil ca învățarea
automată va juca un rol tot mai important în domeniul informaticii și a tehnologiei informaţiei.
Câteva realizări specifice oferă o privire a stadiului actual al învăţării automate: au fost
dezvoltate programe pentru recunoaşterea automată a vorbirii, pentru prezicerea ratei de
recuperare a pacienților cu pneumonie, detectarea utilizării frauduloase a cardurilor de credit,
conducerea autonomă a vehiculelor, sau să joace jocuri, cum ar fi tablele, la nivelul care se apropie
de performanța campionilor mondiali umani.
Au fost dezvoltate rezultate teoretice care caracterizează procesul de învăţare, astfel a fost
analizat raportul dintre numărul de exemple de antrenare, numărul de ipoteze luate în considerare,
și eroarea obţinută. Încep să apară modele ale învățării umane şi animale și să se înțeleagă relația
lor cu algoritmii de învățare automată.
Învăţarea automată este o ramură a inteligenţei artificiale care se ocupă cu proiectarea şi
dezvoltarea de algoritmi şi metode care permit sistemelor informatice să înveţe. Pe baza
observaţiilor şi a experienţei, sistemele informatice pot învăţa să facă previziuni exacte şi să ia
decizii optime, așa cum ilustrează figura de mai jos.
2
Figură 1. Repezentare schematică a unui sistem de învăţare automată.
Învăţarea automată este domeniul cel mai provocator al inteligenţei artificiale şi, în acelaşi timp,
cel mai rezistent încercărilor de automatizare completă. Învățarea automata este în mod inerent un
domeniu multidisciplinar. Se bazează pe rezultatele obținute în diverse domenii, cum ar fi:
inteligența artificială, probabilităţi și statistică, teoria complexității computaționale, teoria
controlului, teoria informației, filosofie, psihologie, neurobiologie, etc.
Terminologie
În limba engleză termenul folosit este: Machine learning. În limba română se folosesc mai mule
traduceri, următorii termeni fiind similari:
• Învățare automată
• Instruire automată
• Mașini instruibile si recunoașterea formelor (MIRF)
Ce este învăţarea automată?
S-au dat multe definiţii ale procesului de învăţare, una dintre cele mai adecvate definiţii din
punct de vedere al inteligenţei artificiale fiind următoarea:
"Orice schimbare într-un sistem, care permite sistemului îmbunătăţirea performanţelor în
rezolvarea ulterioară a aceleiaşi probleme sau a unei probleme similare, reprezintă un proces de
învăţare".
A învăţa înseamnă a câştiga cunoştinţe, înţelegere sau pricepere prin studiu, instruire sau
experienţă. Maşini instruibile sunt mașini care învață.
Învăţare = Îmbunătăţirea în raport cu o măsură a performanţei (P) a realizării unei sarcini (S)
odată cu experienţa (E)
Scopul învățării automate este de a construi sisteme de calcul care se pot adapta şi pot învăţa din
experienţa lor. De exemplu, un program de calculator care învață să joace dame-şah îşi poate
îmbunătăți performanța măsurată prin abilitatea de a câștiga, prin experiența obținută prin jocul
efectiv împotriva adversarilor umani.
3
În general, pentru a avea o problemă de învățare bine definită, trebuie să identificăm următoarele
trei caracteristici:
• Clasa de sarcini care urmează să se întreprindă
• Performanţa care urmează să se îmbunătăţească
• Sursa experienţei
Putem specifica mai multe probleme de învățare în acest mod, ca de exemplu, învățarea
recunoaşterii cuvintele scrise de mână, sau învățarea conducerii unui automobil robotizat în mod
autonom.
Exemple
Problema de învățare a jocului de dame-şah:
• Sarcina S: jocul de dame
• Măsurarea performanței P: procentul de jocuri câștigate împotriva adversarilor
• Experiența E: jocurile împotriva diverşilor adversari
Problema de recunoaștere a scrisului de mână:
• Sarcina S: recunoașterea și clasificarea cuvintelor scrise de mână în imagini
• Măsurarea performanței P: procentul cuvintelor clasificate corect
• Experiența folosită pentru instruire E: o bază de date cu cuvinte scrise de mână cu
clasificări date
Problema conducerii automate a unui autovehicul:
• Sarcina S: conducerea pe autostrăzi publice cu patru benzi, utilizând senzori de viziune
• Măsurarea performanței P: distanța medie parcursă înainte de face o eroare (așa cum este
evaluat de către supraveghetorul uman)
• Experiența folosită pentru instruire E: o secvență de imagini și comenzi de direcție
înregistrate observând un șofer uman
Tehnicile de învăţare automată sunt algoritmi ce permit maşinilor să-şi îmbunătăţească
performanţele în îndeplinirea unei anumite activităţi prin experienţă. Domeniul învăţării automate
se ocupă cu modul de construire a programelor de calculator care se autoperfecţionează prin
experienţă. Învăţarea automată învaţă structurile şi regulile existente şi descoperă noi înţelesuri şi
structuri.
Algoritmii de învăţare automată descoperă relaţiile dintre variabilele unui sistem (intrări, ieşiri,
variabile ascunse) direct din eşantioane ale sistemului
4
Figură 2. Reprezentare schematică a unui sistem de învăţare automată în care se evidenţieză intrările şi ieşirile sistemului.
Abordarea
Exemple de probleme pentru care scrierea de programe pentru a rezolva această problemă este
dificilă:
• Recunoașterea unui obiect tridimensional dintr-un punct de vedere nou în iluminat nou
deoarece nu știm modul în care s-a făcut această recunoaștere în creierul nostru și chiar
dacă am avea o idee despre cum să scriem un astfel de program, programul s-ar putea să
fie extrem de complex.
• Calcularea probabilităţii ca o tranzacție pe cartea de credit sa fie frauduloasă deoarece
nu exista reguli care să fie atât de simple și de încredere care să ne indice lucrul acesta.
Ar trebui să combinam un număr foarte mare de reguli slabe. Frauda este o țintă în
mișcare. Programul are nevoie sa se schimbe continuu.
În loc sa scriem un program pentru fiecare sarcină specifică, colectăm o mulțime de exemple
care specifică o ieșire corectă pentru o anumită intrare. Un algoritm de învățare automată ia aceste
exemple și produce un program care rezolvă problema. Programul elaborat de algoritmul de
învățare poate arăta foarte diferit de un program tipic scris de mână. Acesta poate conține milioane
de numere. Dacă o facem corect, programul merge bine pentru cazurile noi, precum și pentru cele
pe care l-am antrenat. În cazul în care datele se schimbă, programul se poate schimba şi el prin
antrenarea pe noi date. Capacități masive de calcul sunt acum mai ieftine decât costul necesar
pentru a scrie un program cu sarcini specifice.
Un sistem de învăţare automată poate fi văzut ca fiind format din cinci componente principale, așa
cum ilustrează figura de mai jos:
Figură 3. Reprezentare schematică a unui sistem de învăţare automată în care se evidenţează componentele acestuia.
5
Algoritmii de ML nu sunt necesari atunci când relaţiile dintre toate variabilele sistemului
(intrare, ieşire, variabile ascunse) sunt complet cunoscute, dar acest lucru nu e valabil pentru
aproape nici un sistem real.
Motivația învățării automate
Învățarea automată este motivată de existența unei cantitate impresionante de date disponibile
și de creșterea puterii de calcul. Acestea au dus la progrese în algoritmii dezvoltați și în teorie.
Învățarea automată mai este motivată de următoarele:
• Unele acţiuni (sarcini) pot fi specificate doar prin date sau exemple de antrenare. De
exemplu: recunoaşterea feţelor umane într-o poză.
• Expertiza umană poate fi rară şi/sau foarte scumpă.
• Cantitatea de cunoştinţe poate fi prea mare pentru o codificare explicită de către oameni.
• Este necesară modelarea şi estimarea unor parametri ascunşi.
• Adesea sunt disponibile doar date din măsurători.
• Puterea de calcul este în continuă creştere.
• Cantitatea de date disponibile şi capacitatea de stocare este tot mai mare.
Scurtă istorie a învăţării automate
• Anii 1950:
o Primul program de jucat dame-şah
• Anii 1960:
o Primele progrese în recunoaşterea formelor (Pattern recognition)
• Anii 1970:
o Reguli de prognoză bazate pe spectrometria de masă
o Reguli pentru încheierea jocului de şah
o Reguli de diagnostic
• Anii 1980: Progrese (câştiguri)
o Teoria învăţării
o Algoritmi de învăţare simbolică
o Algoritmi de învăţare conexionistă
o Grupare (Clustering)
6
o Învăţare bazată pe explicaţii
o Învăţare inductivă ghidată de cunoştinţe
o Algoritmi genetici
• Anii 1990: Maturitate
o Data mining
o Învăţare în grup (Ensemble learning: bagging, boosting, etc.)
o Învăţare cu întărire
o Analize teoretice
• Anii 2000
o Maşini cu suport vectorial (SVM)
o Metode kernel
o Modele grafice
o Învăţare statistică relaţională
o Învăţare prin transfer
o Clasificare colectivă şi ieşiri structurate
o Aplicaţii pentru sisteme de calcul
▪ Compilatoare
▪ Depanare
▪ Grafică
▪ Securitate (detecţia intruziunilor, viruşilor şi viermilor)
o Managementul email-ului
o Asistenţi personalizaţi care învaţă
o Învăţare în robotică şi vedere artificială
Aplicații
Nişe pentru învăţarea automată:
• Data Mining: se folosesc date istorice pentru îmbunătăţirea deciziilor. Înregistrări
medicale → cunoştinţe medicale
• Aplicaţii software pe care nu le putem programa direct: conducerea autonomă a
vehiculelor, recunoaşterea vorbirii
7
• Programe care se auto – personalizează: cititoare de ziare care învaţă domeniile de
interes ale utilizatorilor
În medicină aplicații sunt în:
- Analiza imaginilor
- Diagnostic și prognoză
- Descoperirea de noi medicamente
Diferite aplicații există în domeniul securității:
- Recunoașterea feței
- Verificarea semnăturii, a amprentelor, irisului, ADN-ului
Recunoașterea modelelor si a paternurilor:
- Obiecte în scene reale
- Identități faciale sau expresii faciale
- Cuvinte vorbite
Recunoașterea anomaliilor:
- Secvențe neobișnuite de tranzacții pe cărțile de credit
- Modele neobișnuite ale cititoarelor de senzori într-o centrală nucleară
Predicție:
- Prețurile acțiunilor viitoare sau ratele de schimb valutar
- Identificarea preferinţelor spectatorilor în domeniul cinematografiei
Exemple
Clasificarea emailurilor: spam vs non-spam
• Datele conțin 4601 emailuri primite de către o persoană.
• Fiecare email e clasificat ca fiind spam sau nu.
• Scop: crearea unui filtru automat pentru detectarea spam-urilor
• Date de intrare: frecvențele relative ale celor mai frecvente 57 de cuvinte și semne de
punctuație ce apar în aceste emailuri
8
Identificarea cifrelor scrise de mână din codurile poștale scrise pe scrisori.
Pentru acest exemplu se creează o bază de date conținând mai multe exemple pentru fiecare
cifră, așa cum este ilustrat și in figura de mai jos.
Este foarte greu de spus ce e un 2 așa cum reiese și din imaginile de mai jos:
Legătura dintre venit unei persoane și alte caracteristici, printre care nivelul de educație,
vârsta, etc
Așa cum reiese și din graficele de mai jos, cel mai mare venit se obține între 40-60 de ani, există
o tendință de creștere a venitului în cursul anilor 2003-2006 și venitul crește o dată cu creșterea
nivelului de educație.
9
(sursa: Gareth James, Daniela Witten, Trevor Hastie and Robert Tibshirani. An Introduction to
Statistical Learning with Applications in R. Springer-Verlag, 2013)
Netflix
• Competiție începută în oct. 2006. Datele de antrenare sunt formate din rating-uri pentru
18.000 de filme de la 400.000 de utilizatori. Fiecare rating este un număr între 1 și 5.
• Datele de antrenare sunt împrăștiate (aprox. 98% din rating-uri lipsesc)
• Obiectiv: predicții pe un set de date care nu apar în datele de antrenare (1 milion de perechi
(utilizator, film))
• Premiu de 1 milion de dolari pentru o îmbunătățire cu 10% față de metoda curentă folosită
de Netflix
10
Competiții Kaggle
Site-ul: www.kaggle.com găzduiește diferite competiții pentru rezolvarea unor probleme care
reprezintă aplicații ale învățării automate
Exemplu: Diagnosticarea bolilor cardiace
• Datele de antrenare conțin mai multe imagini care reprezintă RMN-uri ale inimii
• Obiectiv: dezvoltarea unui algoritm care pe baza RMN-ului cardiac determină automat și
cu precizie volumul de sânge dintr-un ciclu cardiac
11
Laborator
Primul proiect de învăţarea automată în Python – „Hello world-ul” învăţării automate
În acest laborator veţi testa pas cu pas următoarele:
1. Descărcați și instalați Python și obțineți pachetele cele mai utile pentru învățarea automată
în Python.
2. Încărcați un set de date și înțelegeți structura sa folosind rezumate statistice și vizualizarea
datelor.
3. Creați 6 modele de învățare automată, alegeți cele mai bune și construiți încrederea că
precizia este fiabilă.
1. Instalare Python
Python este un limbaj interpretat popular și puternic. Spre deosebire de Matlab, de
exemplu, Python este un limbaj și o platformă completă pe care le puteți utiliza atât pentru
cercetare și dezvoltare, cât și pentru dezvoltarea sistemelor de producție.
Există, de asemenea, o mulțime de module și biblioteci pe care puteți alege, fiecare oferind
mai multe funcţii şi proceduri.
Pachete Python utile pentru învăţarea automată:
• scipy
• numpy
• matplotlib
• pandas
• sklearn
Există multe modalități de a instala aceste biblioteci. O varianta este să alegeți o metodă,
apoi să fiți consecvenţi în instalarea fiecărei biblioteci.
Link-uri utile:
• www.python.org - versiunea: Python 3.3 sau Python 2.7
• www.anaconda.com - distribuţie de Python
• https://jupyter.org - o aplicație web open-source care vă permite să creați și să partajați
documente care conțin cod viu, ecuații, vizualizări și text narativ
1.2 Porniți Python și verificați versiunile pachetelor instalate
# Python version
import sys
print('Python: {}'.format(sys.version))
# scipy
12
import scipy
print('scipy: {}'.format(scipy.__version__))
# numpy
import numpy
print('numpy: {}'.format(numpy.__version__))
# matplotlib
import matplotlib
print('matplotlib: {}'.format(matplotlib.__version__))
# pandas
import pandas
print('pandas: {}'.format(pandas.__version__))
# scikit-learn
import sklearn
print('sklearn: {}'.format(sklearn.__version__))
Exemplu de afişare:
Comparați ceea ce e afişat mai sus cu versiunile dvs. În mod ideal, versiunile dvs. ar trebui să se
potrivească sau să fie mai recente. API-urile nu se schimbă repede, așa că nu e o problemă dacă
aveţi instalate câteva versiuni mai vechi.
2. Încărcarea setului de date
Vom folosi setul de date de Flori de iris. Acest set de date este renumit pentru că este folosit ca
set de date "hello world" în învățarea automată.
Link: https://archive.ics.uci.edu/ml/datasets/iris
Setul de date conține 150 de observații ale florilor de iris. Există patru coloane de măsurători
ale florilor în centimetri:
- Lungimea şi lăţimea petalei
- Lungimea şi lăţimea sepalei
A cincea coloană este specia de floare observată, una dintre cele 3 variante: Iris Versicolor, Iris
Setosa, Iris Verginica.
13
2.1 Importăm bibliotecile necesare
# Load libraries
import pandas
from pandas.plotting import scatter_matrix
import matplotlib.pyplot as plt
from sklearn import model_selection
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
Totul ar trebui să se încarce fără eroare. Dacă aveți o eroare, opriți-vă.
2.2 Importarea setului de date
Putem încărca datele direct din depozitul UCI Machine Learning.
Folosim biblioteca panda pentru a încărca datele. Vom utiliza, de asemenea, panda pentru
explora datele atât cu statistici descriptive, cât și cu vizualizarea datelor.
Specificăm numele fiecărei coloane la încărcarea datelor. Acest lucru ne va ajuta mai târziu
când vom explora datele.
# Load dataset
url=
"https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv"
names = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width',
14
'class']
dataset = pandas.read_csv(url, names=names)
Dacă nu aveți probleme de rețea, puteți descărca fișierul iris.csv în directorul dvs. de lucru și
îl puteți încărca utilizând aceeași metodă, schimbând adresa URL în numele fișierului local.
3. Rezumaţi setul de date
În acest pas, vom examina datele în câteva moduri diferite:
- Dimensiunile setului de date.
- Ne vom uita la datele in sine.
- Rezumatul statistic al tuturor atributelor.
- Defalcarea datelor în funcţie de variabila de clasă.
3.1 Dimensiunea setului de date.
Putem afla rapid despre câte instanțe (rânduri) și câte atribute (coloane) conțin datele cu
comanda shape.
# shape
print(dataset.shape)
Obţinem 150 de instanţe şi 5 atribute.
3.2 Vizualizarea setului de date
# head
print(dataset.head(20))
Vizualizăm primele 20 de rânduri din setul de date
15
3.3 Rezumatul statistic al datelor
# descriptions
print(dataset.describe())
Putem vedea că toate valorile numerice au aceeași scală (centimetri) și intervale similare între 0
și 8 centimetri.
3.4 Distribuţia de clasă
Să aruncăm o privire asupra numărului de instanțe (rânduri) care aparțin fiecărei clase. Putem
vedea acest lucru ca un număr absolut.
# class distribution
print(dataset.groupby('class').size())
16
4. Vizualizarea grafică a datelor
Avem acum o idee generală despre date. Trebuie să extindem acest lucru cu câteva vizualizări
grafice.
Vom analiza două tipuri de grafice:
- Grafice univariate pentru a înțelege mai bine fiecare atribut.
- Grafice multivariate pentru a înțelege mai bine relațiile dintre atribute.
4.1 Grafice univariate
# box and whisker plots
dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False,
sharey=False)
plt.show()
Acest grafic ne oferă o idee mult mai clară despre distribuția atributelor:
De asemenea, putem crea o histogramă a fiecărei variabile de intrare pentru a obține o
idee despre distribuția acesteia.
# histograms
dataset.hist()
plt.show()
17
Se pare că două dintre variabilele de intrare au o distribuție Gaussiană. Este util să ştim
lucrul acesta pentru că putem folosi algoritmi care pot exploata această ipoteză.
4.2 Grafice multivariate
Acum ne putem uita la interacțiunile dintre variabile.
În primul rând, să aruncăm o privire la scatterploturile tuturor perechilor de atribute. Acest lucru
poate fi util pentru a identifica relațiile structurate între variabilele de intrare.
# scatter plot matrix
scatter_matrix(dataset)
plt.show()
18
Observăm gruparea diagonală a unor perechi de atribute. Acest lucru sugerează o
corelație înaltă și o relație previzibilă.
5. Evaluarea unor algoritmi de învăţare automata
Acum vom crea câteva modele de date și vom estima precizia acestora pe date nevăzute.
Pentru aceasta vom face următoarele:
- Separăm un set de date de validare.
- Utilizăm validarea încrucișată de 10 ori.
- Construim 5 modele diferite pentru a prezice speciile din măsurătorile de flori
- Selectăm cel mai bun model.
5.1 Crearea unui set de date de validare
Vrem să știm cât de bun este modelul pe care l-am creat.
Mai târziu, vom folosi metode statistice pentru a estima corectitudinea modelelor pe care le
creăm pe date nevăzute. De asemenea, dorim o estimare mai concretă a preciziei celui mai bun
model privind datele nevăzute, evaluându-l pe date reale nevăzute.
Asta înseamnă că vom reține câteva date pe care algoritmii nu le vor vedea și vom folosi aceste
date pentru a obține o idee independentă despre cât de corect este cel mai bun model.
Vom împărți setul de date încărcate în două, din care 80% vom folosi pentru a instrui modelele
noastre și 20% pe care le vom reține ca set de date de validare.
# Split-out validation dataset
array = dataset.values
X = array[:,0:4] Y = array[:,4]
19
validation_size = 0.20
seed = 7
X_train, X_validation, Y_train, Y_validation =
model_selection.train_test_split(X, Y, test_size=validation_size,
random_state=seed)
Datele de antrenare sunt acum în variabilele: X_train, y_test
Datele de validare sunt acum în variabilele: X_validation, y_validation
5.2 Validarea încrucişată
Vom folosi validarea încrucișată de 10 ori pentru a estima precizia.
Aceasta înseamnă că vom împărți setul nostru de date în 10 părți, 9 părţi le folosim pentru
antrenare şi 1 parte pentru testare, după care repetăm de 10 ori, schimbând de fiecare data setul
folosit pentru testare şi deci cele 9 pentru antrenare.
Folosim metrica de "precizie" pentru a evalua modelele. Acesta este un raport al numărului de
instanțe corect prezise în împărțit la numărul total de instanțe din setul de date înmulțit cu 100
pentru a da un procent (de exemplu, 95% exacte). Vom folosi variabila de scoring cand vom rula
construi si evalua fiecare model urmator.
# Test options and evaluation metric
seed = 7
scoring = 'accuracy'
5.3 Construirea modelelor
Nu știm care algoritm este mai bun în această problemă sau ce configurații să fie utilizate. Avem
o idee din grafice că unele clase sunt parțial liniar separabile în unele dimensiuni, deci așteptăm
în general rezultate bune.
Evaluăm 6 algoritmi diferiți:
- Logistic Regression (LR)
- Linear Discriminant Analysis (LDA)
- K-Nearest Neighbors (KNN).
- Classification and Regression Trees (CART).
- Gaussian Naive Bayes (NB).
- Support Vector Machines (SVM).
models = []
models.append(('LR', LogisticRegression(solver='liblinear',
multi_class='ovr')))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC(gamma='auto')))
20
# evaluate each model in turn
results = []
names = []
for name, model in models:
kfold = model_selection.KFold(n_splits=10, random_state=seed)
cv_results = model_selection.cross_val_score(model, X_train, Y_train,
cv=kfold, scoring=scoring)
results.append(cv_results)
names.append(name)
msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
print(msg)
5.4 Selectarea celui mai bun model
Acum avem 6 modele și estimări ale precizie pentru fiecare. Trebuie să comparăm modelele
cu și să le alegem cele mai bune.
Aplicând codul de mai sus, obținem următoarele rezultate:
Rețineți că este posibil să obţineţi rezultate diferite.
În acest caz, putem vedea că Maşinile cu Suport Vectorial (SVM) au obţinut cel mai mare scor.
Putem crea, de asemenea, un grafic al rezultatelor evaluării modelelor și să comparăm
media și abaterea medie a fiecărui model. Există o populație de scoruti pentru fiecare algoritm
deoarece fiecare algoritm a fost evaluat de 10 ori (validare încrucișată de 10 ori).
6. Predicţii
Algoritmul KNN este un algoritm simplu și a obţinut un rezultat bun pe testele noastre. Acum
vrem să obținem o idee despre exactitatea modelului pe setul nostru de validare.
Acesta va fi un control final independent privind precizia celui mai bun model. Este important să
păstrați un set de validare doar în cazul în care ați făcut o supra-estimare în timpul
antrenamentului. Aceasta va avea ca rezultat un rezultat prea optimist.
21
Putem rula modelul KNN direct pe setul de validare și vom rezuma rezultatele ca punct final de
precizie, o matrice de confuzie și un raport de clasificare.