Sunteți pe pagina 1din 274

Curs 6

Noțiuni de Statistică
Statistica
Studiul fenomenelor si parametrilor variabili

Obiectiv principal : studiul datelor obtinute pe baza unei (sau mai


multor) caracteristici variabile.

Anumite tendinte de evolutie pot capata caracter de regularitate.


Statistica este cea care pune în evidenta aceste regularitati sau legi,
care sunt valabile numai la modul general, ca tendinta, nu neaparat la
fiecare individ în parte.

Statistica cuprinde multitudinea de procedee pentru analiza, interpretarea,


reprezentarea datelor si luarea deciziilor pe baza datelor pe care le
culegem din realitate.

Pentru o abordare stiintifica corecta trebuie respectate standardele privind


colectarea datelor, alegerea esantionului reprezentativ si folosirea unor
metode statistice adecvate.
Tipuri de date
Analiza statistica a unei populatii se face dupa una sau mai multe variabile

Variabile (date): multimea de valori pe care o caracteristica le poate lua


pentru fiecare element al unei populatii statistice.

Date cantitative (măsurabile )


discrete - iau valori numere intregi
continue - pot lua o infinitate de valori
O variabila continua poate fi transformata in una discreta prin "grupare in
Clase" (Ex: varsta sub 18 ani / varsta peste 18 ani)
Date calitative (nemăsurabile)
nominale - sunt grupate in categorii ce nu pot fi ordonate, dar li
se pot atribui etichete (Ex: culoarea parului A-blonzi, B-bruneti, C-roşcaţi
ordinale - datele sunt grupate in categorii ce pot fi ordonate dupa un
anumit criteriu (Ex: varsta: sugar, copil mic, elev, adolescent, adult,
bătrân)
Date binare: variabile calitative ce au numai doua categorii
Colectarea datelor
Analiza datelor – 4 pasi :
 colectarea
 pregatirea(wrangling)
 explorarea
 informația obținuta/ concluziile

Diferite surse de colectare a datelor:

API - colectăm date cu cereri HTTP

Baze de date (cu SQL sau alt limbaj)

Site-urile web publice/guvernamentale( Yahoo! Finance etc)

Web scraping - extrag date din website HTML-ul (exemplu de pachete


Python: selenium, requests , scrapy și beautifulsoup )
Pregătirea datelor

Vrem să adăugăm/eliminăm din setul de date inițial, să reformata ți, să


combinați cu alte date sau să modificați datele într-un fel.

Pregătirea datelor este procesul de introducere a acestora într-un format


care poate fi folosit pentru analiză.

Erori umane: datele sunt înregistrate/colectate incorect (New York City ,


NYC , și nyc ).
Eroari de computer: nu s-au înregistrat date sau date lipsă.
Valori neașteptate: cineva a decis să folosească ? pentru o valoare lipsă
într-o coloană numerică
Informații incomplete: un sondaj, nu toată lumea răspunde la intrebări,
vom avea date lipsă, dar nu din cauza computerului sau eroare umana.
Formatul datelor: datele formatate necorespunzător pentru analiză
Definiții

Populatie statistica: o multime de elemente (indivizi) cu anumite insusiri


comune.

Datele sunt denumite eșantioane (samples) care au fost observate dintr-o


populație. (și sunt un subset al populației).

Statistică descriptivă - căutăm să descriem eșantionul.

Statistică inferenţială (predictivă) - căutăm să inferăm/deducem ceva


despre populație cum ar fi distribuția de bază.
Definiții

Statistica descriptiva: se ocupa cu culegerea datelor si determinarea unor


caracteristici numerice sintetice ale datelor obtinute.
Se limiteaza la descrierea si analiza unei multimi de date (esantion) fara a
trage concluzii asupra multimii din care provine esantionul respectiv.

Statistica predictivă: se ocupa cu obtinerea de concluzii asupra unei


populatii (numar foarte mare) pornind de la un esantion (numar restrans).

Ex.: din testarea unui vaccin pe un lot de voluntari se trag concluzii care
trebuie sa fie valabile pentru intreaga populatie.
Eșantionarea / Sampling

Eșantionul(sample) trebuie să fie un eșantion aleator (random sample)


reprezentativ pentru populație – fără bias.

caracter aleator:
indivizii din eşantion sunt selectaţi aleator;
fiecare membru al populaţiei are o şansă cunoscută, dar posibil ne-
egală de a fi inclus în eşantion.

caracter independent:
un eşantion nu trebuie să afecteze sau să fie afectat de alte eşantioane
selectate din cadrul populaţiei ţintă, sau a altor populaţii.
Eșantionarea / Sampling
Metode de obtinere a esantioanelor:

A. esantionarea randomizata - elementele sunt selectate aleator din


populatia statistica, fiecare element avand aceeasi probabilitate de a fi
selectat.
In practica se folosesc functii ce genereza numere aleatoare dintr-o
mulţime de numere (identifica in mod unic fiecare element al populatiei
statistice). Numarul de numere generate aleator este egal cu dimensiunea
esantionului

B. esantionarea sistematica - este selectat fiecare al k-lea element din


populatia statistică.
Numarul k se obţine prin impartirea volumului populatiei statistice la
volumul esantionului (nu se foloseste daca in populatia statistica apar
periodicitati!)
Eșantionarea / Sampling

C. esantionarea stratificata (bootstapping ) se realizeaza în doua etape:


I) se imparte populatia statistica in mai multe subgrupe relevante
(straturi);
II) se extrag aleatoriu elemente din straturi (metoda A sau B).

D. esantionarea cluster se realizeaza în doua etape:


I) se imparte populaţia statistica in grupe de dimensiuni egale (clusteri);
II) se extrag aleatoriu elemente din clusteri (metoda A sau B).
Tendinte Centrale - Measures of center
Distribuția datelor- locul în care se concentrează majoritatea datelor

Media - măsura valorii centrale a setului de date în jurul căruia


fluctuează datele

Media eșx antionului xx (se pronuntă X-bar) si estimatorul mediei


populației μ (litera grecească mu).

Proprietăți:
Media aritmetica este influentata de valorile extreme
Exemplu: (0+1+1+2+9)/5 Atenție la outliers!

Suma diferentelor dintre valorile individuale ale esantionului si medie
este totdeauna zero!
Tendinte Centrale - Measures of center

Median –se calculează luând valoarea din mijloc dintr-un set de date
ordonat.

Proprietati:
medianul nu este afectat de valorile extreme
medianul poate fi nereprezentativ pentru distributie daca valorile
individuale nu se grupeaza in jurul valorii centrale!

Medianul este:
- termenul al (n+1)/2-lea → daca n este impar
- media dintre termenii n/2 si n/2+1 → daca n este par

Median - a 50% valoare a datelor - 50% dintre valori sunt mai mari decât
medianul și 50% sunt mai mici decât medianul - 2nd cuartile (Q2)
Measures of center

Mode - valoarea ce are cea mai mare frecventa in setul de date.

O folosim pentru a descrie date categorice sau pentru forma distribu ției
pentru date continue.

Distribuții bimodale sau multimodale - distribuții cu două sau mai multe


valori cele mai frecvente.
Tendinte Centrale - Measures of center
Indicatori de localizare - valori care împart o distribuţie în grupuri egale
fiecare conţinând acelaşi procent din totalul datelor.

Cuartilele împart datele în patru (25%, 50%, 75% și 100%). Sunt 3:


Primul cuartil (Q1) sau cuartil inferior
valoare mai mare (sau egala) decăt 25% din date
Al doilea cuartil (Q2) sau cuartil median
valoarea mediană (50% din date).
Al treilea cuartil (Q3) sau cuartil superior
valoare mai mare (sau egală) decât 75% din date

Decilele împart o distribuţie în zece părţi egale. Sunt 9:


D5 = 5/10=1/2=median

Percentilele împart o distribuție în 100 părți egale. Sunt 99.


Tendinte Centrale - Measures of center

Deviația cuartilă(DQ)/ Interquartile range(IQR)- răspândirea datelor în


jurul median-ului

Măsoară dispersia datelor aflate in zona de mijloc a distribuţiei:

IQR = (Q3-Q1)/2
Mod de calcul:
- se ordonează datele
- se calculează:
valoarea mediana a jumătăţii superioare (Q3=UQ: upper cuartile)
valoarea mediana a jumătăţii inferioare (Q1=LQ: lower cuartile)
Tendinte Centrale - Measures of center
Tendinte Centrale - Measures of center
Coeficientul de dispersie cuartil (CDC)/ quartile coefficient of
dispersion(QCD)- măsură a centrului median

QCD Se calculează împărțind intervalul semi-quartil (jumătate din IQR) la


midhinge (punctul de mijloc între prima și a treia quartile):

Proprietăți:

QCD este independent de unitatile de masura

QCD se foloseste pentru compararea variabilitatii relative a două seturi
de date
Tendinte Centrale - Measures of center
Coeficientul de dispersie cuartil (CDC)/ quartile coefficient of
dispersion(QCD)- măsură a centrului median

QCD Se calculează împărțind intervalul semi-quartil (jumătate din IQR) la


midhinge (punctul de mijloc între prima și a treia quartile):

Proprietăți:

QCD este independent de unitatile de masura

QCD se foloseste pentru compararea variabilitatii relative a două seturi
de date
Tendinte Centrale - Measures of center
Am văzut multe exemple de statistici descriptive pe care le putem folosi
pentru a rezuma datele prin centru
Tukey plot - Measures of center
Liniile orizontale se extind spre minim si maxim.
Tot ceea ce e in afara acestor limite sunt outliers.
Histograma - date discrete si continue

Histograma - distribuția în frecvență a datelor

Cum se calculează:
trebuie definit setul de categorii ("bins") in care sa fie grupate valorile
se adaugă bare cu înălțimi diferite reprezentand numărul de valori pe care
le avem în fiecare bin
Tendinte de variabilitate - Measures of spread

Cum sunt dispersate datele - cum se încadrează valorile datelor în jurul


valorii centrale si cât de departe sunt unele de altele.

Cum este distribuția noastră, cât de subțire (dispersie îngustă) sau largă
(foarte răspândită)

Măsura împraștierii (dispersiei) setului de date:

- ofera informații privind extinderea datelor

- este utila în stabilirea reprezentativitatii masurilor de centralitate

-are rol în estimarea parametrilor statistici și în inferența (predicția)


statistică
Tendinte de variabilitate - Measures of spread

Domeniul de dispersie (DD) / Range

Distanța dintre cea mai mare valoare (maximă) și cea mai mică valoare
(minimă).

range=max(X) – min(X)
Dezavantaje:

Nu ne dă informația despre împrăștierea în jurul valorii centrale.

Se bazeaza doar pe valorile extreme.


Tendinte de variabilitate - Measures of spread
Varianța - cât de departe sunt împrăștiate datele față de valoarea lor
medie.

Varianța populatiei σ 2 (sigma-squared) și varianța eșantionului s 2 .

Unitatea de măsură este egală cu pătratul unității de măsură a valorilor


setului de date.

Corectia Bessel – o estimare unbias a variantei populatiei – cand calculăm


varianța eșantionului, împărțim la n - 1 în loc de n pentru a tine cont de
utilizarea mediei esantionului xx in loc de media populatiei
https://en.wikipedia.org/wiki/Bessel%27s_correction
Dacă volumul eșantionului "n" este mare (n-1 ≈ n):
Tendințe de variabilitate -Measures of spread

Deviația standard - reprezinta "distanta euclidiana" a valorilor fata de


media aritmetică; estimarea uniformității valorilor

Deviatia standard a populatiei reprezentată cu σ si deviatia standard a


esantionului cu s.

Este rădăcina pătrată a varianței, oferindu-ne o măsură în aceleași unități


ca și datele noastre.
Tendinte Centrale - Measures of center

Coeficientul de variatie (CV) - o măsură relativă a dispersiei datelor.

CV- este raportul dintre deviația standard și medie

Proprietăți:

CV este independent de unitatile de masura

CV se foloseste pentru compararea variabilitatii relative a două seturi de
date
 CV intervine în studiul omogenității unor populații:

CV <10% populatie omogena


10% < CV < 20% populatie relativ omogena
20% < CV < 30% populatie relativ eterogena
30% < CV populatie eterogena
Asimetria – Skewness - date continue

Abaterea de la aspectul simetric al distributiei de frecventa.

= 0 distributie simetrica
> 0 distributie cu coada spre dreapta
< 0 distributie cu coada spre stanga
Boltirea – Kurtosis - date continue

Aplatizarea/inaltimea unei distributii in raport cu o distributie normala.

= 0 distributie normala
> 0 distributie mai inalta decat cea normala
< 0 distributie mai joasa
Statistica inferentiala

Dacă dorim să ştim cum arată evoluţia în timp a unei anumite


valori, trebuie determinata probabilitatea de apariţie a acelei valori
printre toate valorile ce caracterizează populatia de interes.

Dacă setul de date al esantionului este normal distribuit (sau


aproape normal distribuit), datele vor determina probabilităţi foarte
particulare, care pot fi exploatate în combinaţie cu media aritmetică şi
deviaţia standard pentru a face predictii despre probabilitatea de aparitia
a unei valori particulare.

Statistica inferentiala permite enuntarea unor:


afirmaţii cantitative probabilistice
afirmaţii cantitative predictive
Distributia normala - Gaussiana
O distributie de date este normala daca:
- este o distributie continua si unimodala
- este simetrica fata de media aritmetica
- graficul distributiei are forma de clopot, atingand inaltimea maxima
pentru media aritmetica
- se apropie de axa orizontala, dar nu o atinge niciodata
Caracteristica cea mai folositoare:
aria de sub grafic – se converteste in probabilitate
probabilitatea de 100% sau probabilitate= 1
Distributia normala - Gaussiana
Afirmatii logice:
- probabilitatea ca toate măsurătorile din setul de date să se afle
între cele două extreme este 100%
-probabilitatea ca orice dată din setul de date considerat să fie mai
mică decât valoarea medie, este 50%
- probabilitatea ca orice dată din setul de date considerat să fie mai
mare decât valoarea medie, este 50%
- cele mai multe valori din setul de date se află în apropierea mediei
- este mai probabil ca o valoare individuală să fie mai aproape de
valoarea medie decât de valorile extreme
- in apropierea extremităţilor se afla mai putine valori decat in
apropierea mediei
KDE – Kernel density function – date continue
Functia de densitarea de probabilitate/ Probability density function
(PDF) – cum este distribuită probabilitatea de valori.

Valorile mai mari pentru PDF indică probabilități mai mari

KDE-urile sunt similare cu histogramele, dar în loc să creeze binuri pentru


date, ele desenează o curbă netezită, care este o estimare a funcției de
densitate de probabilitate a distribuției (PDF)
Probabilitate cumulativa
Probabilitatea cumulativă/Cumulative Distribution function (CDF):
probabilitatea ca o variabilă aleatoare dintr-un set de date să aibă
valoarea într-un anumit domeniu.

CDF este integrala (aria de sub curba) unui PDF


Probabilitate cumulativa

Probabilitatea cumulativă este probabilitatea ca o variabilă aleatoare să


fie mai mică sau egală cu o valoare dată P(X≤x)

Probabilitatea ca o valoare aleatoare sa se afle sub media aritmetica este


50 % P(X ≤ 50)
Distributii comune
Distributiile discrete sunt Probability Mass Function(PMF)in loc de PDF
Scalarea datelor - normalizarea

Pentru a compara variabilele din diferite distribuții trebuie să scalam


datele – normalizam in [0,1]

Z-score - standardizam datele. Obtinem o distributie normala standard


cu media aritmetică = 0 si deviaţia standard = 1

zi reprezinta numărul deviaţiilor standard la care se află valoarea x i


fată de media aritmetică: deasupra (> 0), sub (< 0).
Concluzii

Statistica descriptivă este foarte utila atunci când vrem să cunoaștem


datele, dar fiți precauți, nu vă bazați exclusiv pe ea.

Statisticile vă pot duce în eroare;

Asigurați-vă că vizualizați datele înainte de a trage concluzii sau de a


continua cu analiza.
Bibliografie

https://seaborn.pydata.org/

Seaborn – categorii de funcții după tipul de date:


https://seaborn.pydata.org/api.html
Curs 6

Seaborn
Seaborn

Vizualizări din date în format lung.

Vizualizări de subseturi de date pentru a codifica informații suplimentare


setări de culori pentru diferite categorii.

Personalizați ploturi pentru a le îmbunătăți interpretabilitatea: crearea de


adnotări, adăugarea liniilor de referință, etichetarea corectă a datelor,
controlul paletei de culori, adaptarea axelor.

Creierul uman excelează în găsirea de patternuri - modele vizuale de


reprezentare;
Importul librăriilor

Pregatim mediul de lucru si fișierele cu care vom lucra:

In[]: %pylab
In[]: import seaborn as sns
In[]: import pandas as pd

In[]:fb=pd.read_csv( 'fb_stock2018.csv',
index_col='date',
parse_dates=True)

In[]: qu = pd.read_csv('cutremur.csv')
Fișier de date
Conținutul fișierului fb_stock2018.csv :
Fișier de date
Conținutul fișierului cutremur.csv :
In[]: qu.columns
Index(['mag', 'magType', 'time', 'place', 'tsunami', 'parsed_place'],
dtype='object')

magnitudinea (mag), scara măsurată (magType), data și locația și


parsed_place - indică statul sau țara în care a avut loc un cutremur
Seaborn - stripplot()
A avut loc un tsunami devastator în Indonezia pe 28 septembrie 2018.

Analizăm datele:
In[]: c=qu.assign(time=lambda x: pd.to_datetime(x.time,
unit='ms')) .set_index('time').loc['2018-09-28'].query('parsed_place ==
"Indonesia" ')
Seaborn - stripplot()

Vrem să vizualizăm ce tipuri de magnitudine au fost utilizate în


Indonezia, intervalul de magnitudini înregistrate și câte dintre cutremure
au fost însoțite de un tsunami.

In[]: c=qu.assign(time=lambda x: pd.to_datetime(x.time,


unit='ms')) .set_index('time').loc['2018-09-28'].query('parsed_place ==
"Indonesia" and tsunami ')

Trebuie să facem graficul unei relații între variabile: o variabilă de tip


categorie ( magType ) iar cealaltă variabilă este numerică (mag)

Scatter plots din Pandas sau Matplotlib e limitat la ambele variabile


numerice.
Seaborn - stripplot()
Specificam că vrem magType pe axa x ( x ) și mag pe axa y ( y )
Colorăm punctele dacă cutremurul a fost însoțit de un tsunami (hue)
Extragem subsetul de cutremure care sunt în Indonezia si-l pasăm în
parametrul de date:

In[]: sns.stripplot(x='magType', y='mag', hue='tsunami',


data=qu.query('parsed_place == "Indonesia"'))
Seaborn - swamplot()
Swarmplot (sau bee swarm plot) – vizibilitatea distribuției datelor,
definesc marimea punctelor
In[]: sns.swarmplot( x='magType', y='mag', hue='tsunami',
data=qu.query('parsed_place == "Indonesia"'), size=3.5 )
Seaborn - boxenplot()
Boxenplot pentru seturi mari de date, arată mai multe informații despre
forma distribuției, în special în cozi.
In[]: sns.boxenplot(x='magType', y='mag', data=qu[['magType', 'mag']] )
Seaborn - violinplot()
Violin plot combină o estimare a densității nucleului KDE (estimarea a
distribuția de bază) și un box plot
In[]: fig, axes = subplots(figsize=(10, 5))
In[]: sns.violinplot(x='magType', y='mag', data=qu[['magType', 'mag']],
ax=axes, scale='width')
Faceting

Creăm subploturi în subseturi de date prin fațetare.

1. Trebuie să creăm un FacetGrid - specifică modul de aranjare a


diagramelor (care coloană categorială merge de-a lungul rândurilor și
care de-a lungul coloanelor).
2. Apelăm metoda map() ptr FacetGrid și transmitem funcția de plotare
pe care dorim să o folosim (împreună cu orice argument suplimentar).

Arătăm ce bacsis primesc chenerii unui restaurant pe diverse criterii:

In[]: tips = sns.load_dataset('tips')


In[]: tips.head()
In[]: tips['tip_pct'] = 100 * tips['tip'] / tips['total_bill']
In[]:grid=sns.FacetGrid(tips, row="sex", col="time", margin_titles=True)
In[]: grid.map(plt.hist, "tip_pct", bins=np.linspace(0, 40, 15))
Faceting
Seaborn - jointplot()

jointplot()-comparăm doar două variabile, asemănător cu un scatter plot


dar avem împreună și distribuția fiecărei variabile (ca histograme sau
KDE).

Ptr datele fb (stock-ul Facebook 2018), vizualizăm modul în care


volumul tranzacționat se corelează cu diferența zilnică dintre prețul mare
și cel mic.

In[]: sns.jointplot( x='log_volume',


y='max_abs_change',
data=fb.assign(log_volume=np.log(fb.volume),
max_abs_change=fb.high - fb.low))
Seaborn - jointplot()
Seaborn - jointplot()

kind=”hex” - schimbam forma punctelor


kind=”kde” - a contour plot a densității estimate și cu KDE pe laturi
kind= “reg” - linia de regresie în centru și cu KDEs pe laturi
kind= “resid” - rezidurile din regresie

In[]: sns.jointplot( x='log_volume',


y='max_abs_change',
kind=’kde’,
data=fb.assign(log_volume=np.log(fb.volume),
max_abs_change=fb.high - fb.low))
Seaborn - jointplot()
Seaborn - jointplot()
Seaborn - heatmap()

Heatmap() - corelații între prețurile stockurilor OHLC, log volumului


tranzacționat, max_abs_change=diferența zilniă între del mai mare si cel
mai mic preț

In[]:sns.heatmap(fb.sort_index().assign( log_volume=np.log(fb.volume),
max_abs_change=fb.high – fb.low).corr(), annot=True, center=0,
vmin=-1, vmax=1 )

center=0 (nicio correlație) pentru a marca centrul paletei dec culori


vmin si vmax – setăm scala de culori cu limitele coeficienților de
correlație
annot=True- pentru a scrie coeficienții de corelație în fiecare pătrat

Avantajul de a avea datele numerice și datele vizuale toate într-un singur


grafic cu un singur apel de funcție.
Heatmap
Seaborn - pairplot()
Corelațiile între coloanele din datele din fisierul fb ca scatter plots
In[]: sns.pairplot(fb)
Seaborn - pairplot()

Vizualizăm cum s-a schimbat distribuția datelor în fiecare trimestru

In[]: sns.pairplot(fb.assign(quarter=lambda x:
x.index.quarter),diag_kind='kde', hue='quarter')

hue – ptr a colora distribuțiile

Putem vedea cum distribuțiile coloanelor OHLC au deviația standard mai


scăzută (și varianța mai mică) în primul trimestru și modul în care prețul
stocului a scazut mult în trimestrul al patrulea (distribuția se deplasează
spre stânga)
Seaborn - pairplot()
Bibliografie

https://seaborn.pydata.org/

Seaborn – categorii de funcții după tipul de date:


https://seaborn.pydata.org/api.html
Curs 7

Machine Learning (ML)


Slide-uri adaptate după Andrew Ng și David Sontag
Sumar

1. Istoric Machine Learning (ML)


2. Exemple ML in domeniul Medical
3. Introducerea vocabularului/conceptelor ML
ML – Invățare Automată
Învăţarea automată - ramură a inteligenţei artificiale, se ocupă cu
proiectarea şi dezvoltarea de algoritmi şi metode care permit sistemelor
informatice să înveţe.
ML – Invățare Automată
Machine Learning – extragerea informațiilor din date - Analiză
Predictivă sau Învățare Statistică

Machine Learning : date → crează modele

Programare tradițională Machine Learning


ML – Invățare Automată
ML definition (1998) Tom Mitchell:
"A computer program is said to learn from experience E with respect to
some class of tasks T and performance measure P, if its performance at
tasks in T, as measured by P, improves with experience E."

Î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)

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
ML – Invățare Automată
Machine learning este preferat în:
Recunoasterea vorbirii, Natural Language Processing (NLP)
Computer Vision
Analiză / Sistem Medical
Control Robotic
Biologie Computatională
Sensor networks

De ce acum ?

Big data: teste de lab, imagistica, genomică/proteomică, dispozitive


Standardizare ICD9 si ICD10 – Intenational Classification Diseases
Progres tehnologic – calculatoare rapide
Imbunătătirea algoritmilor de machine learning – Deep Learning
Software open-source: Python scikit-learn, TensorFlow, Torch, Theano
Interesul Industriei in AI & Sistemul Medical
Istoric ML
Anii 1950:
Primul program de jucat şah/dame
•Anii 1960:
Primele progrese în recunoaşterea formelor (Pattern recognition)
• Anii 1970:
Reguli de prognoză bazate pe spectrometria de masă
Reguli pentru închideri la jocul de şah
Reguli de diagnostic
• Anii 1980:
Teoria învăţării
Algoritmi de învăţare simbolică
Grupare (Clustering)
Învăţare bazată pe explicaţii/ ghidată de cunoştinţe
Algoritmi genetici
Anii 1990:
Data mining
Învăţare în grup (Ensemble learning: bagging, boosting, etc.)
Învăţare cu întărire
Istoric ML

Anii 2000
Maşini cu suport vectorial (SVM)
Metode kernel
Modele grafice
Învăţare statistică relaţională
Învăţare prin transfer
Clasificare colectivă şi ieşiri structurate
Aplicaţii pentru sisteme de calcul
▪ Compilatoare
▪ Depanare
▪ Grafică
▪ Securitate (detecţia intruziunilor, viruşilor/viermilor)
Managementul email-ului
Asistenţi personalizaţi care învaţă
Învăţare în robotică şi vedere artificială
Istoric ML în domeniu Medical
Anii 1970 (Stanford): MYCIN sistem expert - identificarea bacteriilor ce
produc infecții severe. A propus o terapie mai buna in 69% din cazuri
Istoric ML în domeniu Medical
Anii 1980(Univ of Pittsburgh):INTERNIST-1/Quick Medical Reference
model probabilistic - diagnostic pentru medicina internă

A avansat domeniul ML (Bayesian networks, inferențe aproximate)


[Miller et al., ‘86, Shwe et al., ‘91]

570
variabile binare ptr boli
4,075
variabile binare ptr simptome
45,470
muchii directe

Probleme: 1. Medicii introduceau simptomele manual


2. Dificil de intreținut si generalizat
Istoric ML în domeniu Medical
Anii 1980 (Stanford) : RX Project Automate Knowledge Aquisition -
pentru medicina internă

[RobertBlum, “Discovery, Confirmation and Incorporation of Causal


Relationshipsfrom a Large Time-Oriented Clinical Data Base:The
RX Project”. Dept. of Computer Science, Stanford 1981]

Descoperire: Prednisonul creste nivelul colesterolului


[Annals of Internal Medicine, ‘86]
Istoric ML în domeniu Medical
Anii 1990 Rețele neuronale in medicină – 88 de studii cu date clinice

[Penny & Frost, NeuralNetworks in Clinical Medicine. Med Decis


Making,1996]

Probleme: 1. Nu s-a potrivit modelului clinic


2. Dificil de generalizat
Vocabular ML

Este important să existe o reprezentare a datelor de intrare pe care un


calculator o poate înțelege.

Gândim datele ca la un tabel.

Fiecare rând ca un sample/data point( eșantion) în timp ce coloanele –


proprietățile care descriu aceste date se numesc featutres (atribute sau
caracteristici).

Puține features/atribute – set de date low-dimensional

Multe features/atribute – set de date high-dimensional


Exemple ML - Clasificare

Care e probabilitatea ca o nouă tumoare să fie malignă sau benignă?


Exemple ML - Clasificare

Input atribute → Output prezicem o valoare discretă


Exemple ML - Clasificare

Model : liniar
Parametrii modelului:valori numerice ce descriu locația si orientarea liniei
Training the model: aflarea valorilor optime ale parametrilor modelului
din date= (“learning” din machine learning)
Predicție: generalizare - date noi, avem modelul si stabilim clase(etichete)
Algoritmi de Clasificare

Generalizăm la seturi mari de date multi dimensionale( multe features):

Naive Bayes/Gaussian Naive Bayes

Support Vector Machines (SVD)

Decision Trees

Random Forests
Exemple ML - Regresie

Cat va costa o casă de 750 feet2


Exemple ML - Regresie

Input date etichetate corect → Output prezicem o valoare continuă


Algoritmi de Regresie

Regresia celor mai mici patrate (OLSR)

Regresie liniară

Regresie logistică
Exercițiu

Conduceți o companie și doriți să dezvoltați algoritmi de învățare pentru


a rezolva fiecare dintre cele două probleme.

1. Aveți un inventar mare de articole identice. Aveți mii de copii de vândut


și doriți să preziceți câte dintre aceste articole veți vinde în următoarele
trei luni.
2. Aveți o mulțime de utilizatori și doriți să scrieți un software pentru a
examina fiecare cont individual al clientului dvs să decideți dacă contul a
fost sau nu piratat sau compromis.

Alegeți răspunsul corect:


A. Ambele probleme sunt de clasificare.
B. Prb1 ca o problemă de clasificare, prb 2 ca o problemă de regresie.
C. Prb1 ca o problemă de regresie, prb 2 ca o problemă de clasificare.
D. Ambele probleme de regresie.
Invățare Supervizată (Supervised Learning)

Datele de intrare se numesc date de antrenament (training data) și au o


etichetă sau un rezultat cunoscut.

Este construit un model printr-un proces de instruire în cadrul căruia


modelul trebuie să facă nişte predicții și este corectat atunci aceste
predicții sunt greșite. Procesul de instruire continuă până când modelul
atinge un nivel dorit de precizie privind datele de antrenament.

Tipuri de învățare supervizată:


Regresie: Ieșirea este o variabilă continuă - număr real/ float-point
Clasificare: Ieșirea este o variabilă discretă - etichetă de clasă.
Exemple ML - Clustering

Fără date etichetate cautăm patternuri în date - grupăm(cluster)


Exemple ML - Clustering

Identificăm categorii/tipuri distincte – detectăm structuri distincte


Algoritmi Clustering

k-Means Clustering

Gaussian Mixture Models

Spectral Clustering
Algoritmi Reducerea Dimensionalitații

Exploatează structura internă a datelor pentru a identifica structuri low


dimensional în date high dimensional.

Principal Component Analysis (PCA)


Principal Component Regression (PCR)
Partial Least Squares Regression (PLSR)
Manifold Learning
Multidimensional Scaling (MDS)
Linear Discriminant Analysis (LDA)
Mixture Discriminant Analysis (MDA)
Quadratic Discriminant Analysis (QDA)
Flexible Discriminant Analysis (FDA)
Invățare Nesupervizată (Unsupervised Learning)

Datele de intrare nu sunt etichetate și nu au un rezultat cunoscut.

Un model este elaborat prin deducerea structurilor prezente în datele de


intrare. Aceasta înseamnă extragerea unor reguli generale din date,
reducerea redundanței datelor sau organizarea datelor pe baza
similitudinii.

Este dificil de estimat care este performanța modelului

Învăţarea nesupervizată este folosită ca și un pas de pre-procesare înainte


aplicării învățării supervizate

Tipuri de învățare nesupervizată:


Clustering (gruparea )
Reducerea dimensionalităţii
Tipuri de ML

Invățare Supervizată (Supervised Learning)


Datele vin etichetate cu răspunsul corect
Determinăm dacă o tumoare este benignă pe baza unei imagini medicale

Invățare Nesupervizată (Unsupervised Learning)


Fără date etichetate , cautăm patternuri în date
Gruparea clienților cu preferințe similare

Invățare Semi-supervizată (Reinforsment Learning)


Feedback din mediu → învătare cu seturi de reguli
Control robotic
Tipuri de ML

Supervised sau Unsupevised ?


recunoașterea fețelor în fotografii
descoperirea planetelor îndepărtate
prezicem valorile la bursă/stock
filtrarea email/spam
analiza secvențelor de ADN
tratamente personalizate pentru cancer
recomandarea unei noi melodii/carti unui grup de utilizatori
Seturi de date publice
Parkinson’s Disease ( 400 subiecți)
Multiple Myeloma (975 subiecți)
Competiții Kaggle
Site-ul: www.kaggle.com găzduiește diferite competiții pentru
rezolvarea unor probleme care reprezintă aplicații ale ML

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
Competiții Kaggle
Site-ul: www.kaggle.com găzduiește diferite competiții pentru
rezolvarea unor probleme care reprezintă aplicații ale ML

Cancerul de plămani Retinopatie Diabetică


Bibliografie

David Sontag - Machine Learning for Healthcare-MIT 2017


https://mlhc17mit.github.io/slides/lectures1.pdf

Andrew Ng- Machine learning -Coursera


https://www.coursera.org/learn/machine-
learning/lecture/Ujm7v/what-is-machine-learning
Curs 8
Regresie Lineara cu o variabilă-
Univariate
Slide-uri adaptate după Andrew Ng
Sumar

1. Reprezentarea modelului
2. Functia de cost (Cost Function)
3. Gradient Descent
Regresie Liniară
Regresia liniară - pe baza unei valori de intrare prezicem o valoare reală
ca valoare de ieșire (output).

Setul de date de input: case de diverse dimensiuni la diverse preturi.


Output: prezicem pretul unei noi case de o anumită dimensiune.
Regresie Liniară
Cream un model liniar : putem prezice ca o casa de 1250 (feet2) va avea
pretul de 220 000$

Supervised Learning ( Invatarea automată) – input date corect etichetate


Regresie – prezicem o valoarea reala (continuă)
Reprezentarea Modelului
Invățam sa prezicem pe baza setului de date de intrare/ antrenare

Notații:
x - input -variabile de intrare / features
y – output -variabila de iesire / target
X - spatiul variabilelor de intrare
Y – spatiul varialilelor de iesire X=Y=R(numere reale)
m - numărul de randuri (samples) de date de antrenare – training set
(x, y) – un singur rand
(x(i),y(i)) – index in setul de date de antrenare, al i-lea rand i=1,2, 3...m
Regresia – curve fitting
Regresia este o parte centrală a învățării automate (machine learning).

Regresia încearcă să estimeze relația dintre variabile prin optimizare.

Relația dintre variabilele independente X, variabilele dependente Y și


parametrii necunoscuți Θ:
Y = f (X, Θ )

unde funcția de regresie f (·) este prescrisă de obicei și se găsesc


parametrii Θ prin optimizarea - potrivire a acestei funcții la date.

În învățarea automată nu suntem atât de preocupați la cât de bine se


potrivește modelul de regresie cu datele.

Suntem preocupați de cât de bine prezice modelul la noi observații.


Regresia
Un model liniar care aproximează datele de intrare, cu o eroarea de
aproximare în fiecare punct:
f (x k ) = y k + E k
y k este valoarea adevărată a datelor
E k este eroarea de potrivire pe datele yk

Metrica erorii E k sau lp-norm se poate calcula :

Pentru diverse valori ale lui p putem calcula eroarea E 1 , E 2 ,E ∞

Cand avem outliers in date alegerea normei are impact!


Regresia

Sunt trei posibilitati standard ce sunt asociate cu normele


l2 (least-squares), l1 , si l∞ norms si sunt definite asa:

Maximum Error – l∞

Mean Absolute Error – l1

Least Squares Error l2


Reprezentarea Modelului
Scop: sa invațam functia h: X→ Y pe baza setului de date de antrenare –
h(x) sa fie un predictor bun pentru y
h(x) cat mai apoape de y h – hypothesis function

Cum reprezentăm functia h ?


Regresie liniara cu o variabilă (x) – univariate
: parametrii modelului
Cost Function
Scop:cum contruim modelul pentru datele de intrare -“cea mai bună linie?

Cum alegem parametrii modelului ?

Setam valori diferite ale parametrilor si obtinem diferite functii h


Cost Function

h(x) =1.5 h(x)= 0.5x h(x) =1+0.5x

Setam valori diferite ale parametrilor si obtinem diferite functii h(x) –


diverse predictii
Cost Function
Cum alegem parametrii modelului Θ0 si Θ1 ?

Alegem parametrii Θ0 si Θ1 astfel incat h(x) – valorile pe care le


prezicem sa fie cat mai apropiate de valorile y din setul de antrenare (x,y)

min ( h Θ(x) – y ) 2
Θ 0 , Θ1
Cost Function
Trebuie sa rezolvam problema de minimizare ptr toate valorile (x (i),y(i))
din setul de date de intrare de dimensiune m:

min ( h Θ(x) – y ) 2 devine minimizarea pentru:


Θ0 , Θ1

Media patratului diferentei dintre valorile prezise si valorile reale

Eroarea patratica medie

Mean squared error sau Squared error function

½ - artificiu de calcul ( ne foloseste la gradient descent sa se anuleze cand


facem derivata functiei) – obtinem aceleasi valori ptr Θ0 si Θ1
Cost Function
Acuratețea modelului (modelul de prezicere- hypothesis function ) se
masoară cu Functia de Cost (functia obiectiv).

Scop: sa gasim Θ0 si Θ1 care optimizeaza funcția obiectiv

Hypothesis Function:

Parametrii:

Functia de Cost :

Scop:
Ipoteza simplificată doar Θ1

hΘ(x) modelul de prezicere depinde de x ptr valori fixe ale lui Θ1

J(Θ1) funcția de cost depinde de Θ1


Ipoteza simplificată doar Θ1

Set de date (x,y): (1,1) (2,2), (3,3)


h(x)- fara offset pe axa y, pleaca din origine
Θ1=1
J(Θ1) =1/2m Σ( Θ1x (i) -y(i))2 = 1/6((1-1)2 +(2-2)2+(3-3)2) =0
J(1) = 0
Ipoteza simplificată doar Θ1

Set de date (x,y): (1,1) (2,2), (3,3)


Θ1=0.5
J(Θ1) =1/2m Σ( Θ1x (i) -y(i))2 = 1/6((0.5-1)2 +(1-2)2+(1.5-3)2) =1/6*3.5=0.58
J(0.5) = 0.58
Ipoteza simplificată doar Θ1

Set de date (x,y): (1,1) (2,2), (3,3)


Θ1=0
J(Θ1) =1/2m Σ( Θ1x (i) -y(i))2 = 1/6((0-1)2 +(0-2)2+(0-3)2) =14/6=2.3
J(0) = 2.3
Ipoteza simplificată doar Θ1

Set de date (x,y): (1,1) (2,2), (3,3)


Θ1=1 J(1)= 0 h(x) - linia roz
Θ1=0.5 J(0.5) = 0.58 h(x) - linia neagra
Θ1=0 J(0) = 2.3 h(x) - linia rosie
Θ1=-0.5 J(-0.5) = 5.25 h(x) – panta negativa
Scopul nostru sa aflam Θ1 astfel incat sa minimizam J(Θ1)
minim global → Θ1=1
Cea mai buna potrivire cu setul de date – “cea mai buna linie”
Ipoteza simplificată- doar Θ1

Scopul nostru sa aflam Θ1 astfel incat sa minimizam J(Θ1)

Functia de cost J(Θ1) - o funcție quadratică – bowl shape – functie convexa

Nu are minim local doar un minim global → Θ1=1


Ipoteza completă – Θ0 si Θ1

Aleg hΘ(x) =50+0.6x – nu e o predictie bună Θ0=50 si Θ1=0.06

Functia de cost J(Θ0,Θ1) este o suprafata (inaltimea suprafetei)

Θ0 pe axa x Θ1 pe axa y si pe axa z valoarea lui J(Θ0,Θ1)


Ipoteza completă – Θ0 si Θ1

Contur plots:
Functia de cost J(Θ0,Θ1) are aceeasi valoare pe aceste elipse
Valoarea minima a lui J(Θ0,Θ1) este elipsa centrala, cea mai mica

Consideram un punct pe a 5 elipsa- pct rosu: Θ0=800 si Θ1=-0.15 – e un pct


de pe h(x) – nu e o predictie buna ptr setul de date
Valoarea functiei de cost J(Θ0,Θ1) e departe de valoarea minima
Ipoteza completă – Θ0 si Θ1

Contur plots:
Consideram un punct pe a 3a elipsa- pct rosu: Θ0=350 si Θ1=0 – e un pct de
pe h(x) – nu e o predictie buna ptr setul de date
Valoarea functiei de cost J(Θ0,Θ1) e mai aproape de centru – se reduce
eroarea functiei de cost.
Ipoteza completă – Θ0 si Θ1

Contur plots:
Consideram un punct pe a 3a elipsa- pct rosu: Θ0=240 si Θ1=0.13 – e un
pct de pe h(x) – e o predictie buna

Valoarea functiei de cost J(Θ0,Θ1) e aproape de valoarea minima


Ipoteza completă – Θ0 si Θ1

Avem un model (hypothesis function) si avem o metoda sa masuram cat


de bine se potriveste modelul la setul de date- funnctia de cost

Vrem sa gasim o metoda automata care gaseste parametrii modelului,


valorile Θ0 si Θ1 astfel incat valoarea functiei de cost J(Θ0,Θ1) sa fie
minima:

Gradient Descent
( minimizează alte functii, nu doar modelul regresiei liniare )

Multi parametrii ai modelului – figuri complicate n dimensionale greu de


vizualizat
Regresie neliniara- Gradient Descent

Algoritm general.

Nu vizualizăm datele de intreare x și y.

Vizualizăm intervalul in care variază parametrii modelului nostru ( ai


hypothesis function) și costul rezultat din selectarea unui anumit set de
parametri.

Punctele din graficul nostru vor fi rezultatul funcției de cost folosind


ipoteza – modelul nostru cu acei parametri Θ specifici.
Regresie neliniara-Gradient Descent

Algoritm:

1. Initializam parametrii modelului, Θ0 si Θ1 la niste valori arbitrare.

2. Tot modificam valorile Θ0 si Θ1 , putin cate putin, cu scopul de a


reduce valoarea functiei J(Θ0,Θ1) pana cand ajunge sa fie minima (minim
local).
Regresie neliniara-Gradient Descent
Algoritm - gasesc direcția sa cobor cat mai rapid in vale
Regresie neliniara-Gradient Descent

Alfa - pasul de invatare (learning rate ) cat de mare e pasul pe care-l


facem in directia de coborare

Θ0 si Θ1 se modifica simultan
Regresie neliniara-Gradient Descent doar cu Θ1

Derivata intr-un pct = panta tangentei in acel pct – directia de miscare

Derivata partiala a functiei J(Θ0,Θ1) determina directia pasului pe care


trebuie sa-l facem in jos.

Facem pasi in directia care se coboara cel mai rapid – minimizam functia

Alfa prea mic – facem pasi prea mici, algoritmul prea lent

Alfa prea mare – facem pasi prea mari, algoritmul nu mai poate gasi
minimul – nu mai converge

Algoritmul Gradient Descent va converge catre un minim local chiar daca


alfa e constant – cu cat ne apropiem de minim, facem pasi mai mici,
cantitatea cu care updatamΘ1 e mai mica .
Regresie neliniara-Gradient Descent doar cu Θ1
Daca initializam Θ1 intr-un mimim local algoritmul va lasa Θ1 neschimbat
(derivata in acel pct este 0)
Regresie neliniara-Gradient Descent cu Θ0 si Θ1
Am calculat derivatele partiale pentru Θ0 si Θ1
Important sa updatam Θ0 si Θ1 simultan !

Batch Gradient Descent algoritm: la fiecare pas in algoritm folosim toate


datele de antrenare/intrare
Regresie neliniara-Gradient Descent cu Θ0 si Θ1

Elipsele reprezinta contururile unei funcții pătratice.


Θ a fost inițializată la (48,30)Traiectoria luată prin coborâre în gradient,
care . X-urile din figură (unite prin linii drepte) marchează valorile
succesive ale lui θ prin care a trecut coborârea gradientului pe măsură ce
a convergit la minim.
Regresie neliniara-Gradient Descent

Diverse variante ale algoritmului Gradient Descent:

Normal Equation Method rezolva fara iteratii

Interpolation Gradient Descent - optimizeaza pentru alfa

Alternating Gradient Descent - optimizeaza pe rand variabilele

Notatia matematica pentru Gradient Descent : f(x)


Bibliografie

Andrew Ng- Machine learning -Coursera


https://www.coursera.org/learn/machine-
learning/lecture/Ujm7v/what-is-machine-learning
Curs 9
Regresie Lineara multiple
variabile- Multivariate
Slide-uri adaptate după Andrew Ng
Sumar

1. Regresie multivariată
2. Implementare:
• Gradient Descent
• Normal Equation
3. Overfitting, Regularizare
Regresia Liniară Univariată
Regresia Liniară Multivariată

Notații:
m - numărul de randuri (samples) de date de antrenare – training set
(x(i),y(i)) – index in setul de date de antrenare, al i-lea rand i=1,2, 3...m

n- numărul de features (variabile )


xj(i) – valoarea pentru variabila j din i-lea sample (rand)
Regresie Liniară Multivariată

Funcția ipoteza cu multiple features (variabile) :

Conventie x0(i) =1 pentru i =1,2,3….m astfel incat sa avem acelasi numar


de elemente n+1 in ambii vectori x si θ (indexarea incepe de la 0)
Regresie Liniară Multivariată

θ este vectorul parametrilor modelului continand θ0 (bias term) si


θ1 pana la θn (feature weights)

x este o instanta a vectorului variabilelor / feature vector, continand


x0 =1 (intotdeauna) si x1 pana la xn

θ · x este produsul scalaor/ dot product intre vectorii θ si x

hθ este functia ipoteza, folosind parametrii θ ai modelului


Regresie Liniară Multivariată

Avem modelul de regresie liniară, dar cum îl antrenăm?

Antrenarea unui model înseamnă stabilirea parametrilor acestuia


astfel încât modelul să se potrivească cel mai bine setul de date de
antrenament.

Stabilim o măsură a performanței - cât de bine (sau de rau) modelul se


potrivește cu datele de antrenament. - eroarea pătratică medie (MSE).

Pentru a antrena un model de regresie liniară, avem nevoie să găsim


valoarile lui θ care minimizează MSE
Gradient Descent pentru multiple variabile
Scopul e sa minimizăm Functia de Cost:

Algoritmul Gradient Descent: cât de mult se va schimba funcția de cost


dacă modificam θ j doar puțin - derivată parțială
Gradient Descent pentru o singură variabilă
Algoritmul pentru n=1 (o singura variabila/feature x1(i)):
Gradient Descent pentru multiple variabile
Algoritmul pentru n >= 1 repetam ecuatiile pentru n variabile (features):

Generalizand avem:
Implementare Gradient Descent pentru
multiple variabile – Batch GD
Care e panta (slope) pe care trebuie sa cobor ?

Generalizand pentru n variabile avem:

Avem directia gradientului, daca e in sus mergem in sens opus.


Folosim intreg setul de date sa calculam gradientul la fiecare pas
θnext step = θ - α
Stochastic Gradient Descent
Se alege aleator o instanță din setul de antrenament și la fiecare pas se
calculează gradienții bazandu-ne numai pe acea singură instanță.
Avantaj: Rapid si se poate antrena pe un set foarte mare de date.

Dezavantaj: funcția de cost în loc să scadă graduat până când ajunge la


minim, va sări în sus și în jos scăzând doar în medie. Va ajunge foarte
aproape de minim, dar tot oscileaza iar valorile finale ale parametrilor sunt
bune, dar nu optime.
Mini Batch Gradient Descent

La fiecare pas in loc sa calculam gradienții bazandu-ne pe intregul set de


antrenare (ca in Batch GD) sau bazandu-ne pe o instanța aleatoare ( ca in
Stochastic GD), Mini-batch GD calculează gradienții bazandu-se pe un set
mic random de instanțe numite mini-batches.

Avantaj: performanța crescută datorită optimizarii hardware

Mini-batch GD va ajunge puțin mai aproape de minim decât Stochastic


GD, dar poate fi mai greu să scape de minimele locale.
Feature Scaling

Verificati ca toate features/variabilele sunt de marimi similare, au


acelasi range de valori x1= size(0-2000 feet2) x2= # dormitoare(1-5)

Ajutam algoritmul să conveargă mai rapid: θ va coborî rapid pe intervale


mici și lent pe intervale mari astfel va oscila ineficient până la global
minimul atunci când variabilele sunt de marimi inegale.
Feature Scaling
Vrem ca algoritmul Gradient Descent sa gaseasca direct minimul
global nu sa oscileaze pe mai multe directii.

Scalarea variabilelor implică împărțirea valorilor de intrare la range


(adică valoarea maximă minus valoarea minimă a variabilei de intrare):
x1= size/2000 si x2 = #dormitoare/5 .

Vrem ca toate features/variabilele sa fie in acelasi interval de valori:

-1 ≤ x(i) ≤ 1 sau -3 ≤ x(i) ≤ 3

Nu asa: -100 ≤ x(2) ≤ 100 sau -0.0001 ≤ x(3) ≤ 0.0001


Mean Normalization
Normalizarea mediei - pentru o variabilă de intrare scădem valoarea
mediei si – poate sa fie range-ul sau deviatia standard

Exemplu: x1= (size-1000) / 2000 sau x2 = (#dormitoare -2) /4

Nu se aplica ptr x0 =1 -0.5 ≤ x(i) ≤ 0.5


α Rata de invatare / Learning rate
Cum alegem hiperparametrul α (marimea pasului) astfel incat sa stim ca
algoritmul Gradient Descent lucreaza corect

α =0.02 α =0.1 α =0.5


α Rata de invatare / Learning rate
Cum alegem hiperparametrul α (marimea pasului) astfel incat sa stim ca
algoritmul Gradient Descent lucreaza corect - scopul e sa minimizam J(θ)

Facem graficul lui J(θ) si numarul de iteratii pe axa x – numarul de


iteratii difera de la aplicatie la aplicatie

Test automat de convergenta: de exemplu daca intr-o iteratie J(θ)


descreste mai putin de un ε =10-3. Greu de ales ε.

α destul de mic J(θ) trebuie sa descreasca la fiecrare iteratie.


α nu trebuie sa fie prea mic ptr ca algoritmul va converge prea incet
α Rata de invatare / Learning rate
Daca α e prea mic algoritmul va converge prea incet

Daca α e prea mare J(θ) nu descreste la fiecare iteratie, algoritmul nu


va converge - algoritmul va sari peste valoarea de minim global

Trebuie incercate diverse valori ptr α :

0.001 0.003 0.01 0.03 0.1 0.3 1 ….


Features
Putem combina multiple features/variabilele si obtinem diferite functii
ipoteza

Exemplu : x1 – frontage x2- depth → x (aria)= x1* x2


Regresie Polinomială

Pentru functii mai complicate sau chiar functii neliniare

Atenție la scalarea features/variabilelor !


Regresie Polinomială

Modelul cuadratic nu se potriveste facem alta selectie a variabilelor

Există algoritmi care fac selectia automată a features/variabilelor


Normal Equation

Minimizand functia de cost J(θ) aflam valorile θ :

Gradient Descent metodă iterativă

Normal Equation metoda directă (analitică) closed-form solution

θ =(XTX)-1XTy

θ vector Rn+1

y valorile pe care le prezicem y(1)...y(m)


Exemplu implementare -Normal Equation
La setul de date adaugam o coloana extra ce corespunde lui x0 =1
Construim matricea tuturor features/variabilelor X si vectorul y

X (m, n+1) y (m,1)


Exemplu implementare -Normal Equation

Aplicam formula closed-form solution :

θ =(XTX)-1XTy

Matlab: pinv(X’*X) * X’ * y -pseudoinversa Moore-Penrose inverse

Singular Value Decomposition (SVD)Scikit Learn Linear Regression class

Python: import numpy as np


X_b = [np.ones((100, 1)), X] # adaug x0 = 1 la matricea X
np.linalg.pinv(X_b).dot(y)

Nu avem nevoie sa facem scalarea features/variabilelor


Exemplu implementare -Normal Equation

Medoda cu pinv mai eficienta decat Normal Equation mai ales X TX nu e


inversabila, pinv va fi definita mereu !

Cauze pentru care XTX nu e inversabila (singulară sau degenerată):

-caracteristici redundante, două features/variabile sunt foarte strâns legate


(adică sunt dependente liniar) x1 =feet2 si x2=m2 x1=3.822x2

- prea multe caracteristici (de exemplu, m ≤ n) – trebuie să folosiți


„regularizarea” exemplu: m=10 si n =100

Soluții:
-ștergerea unei caracteristici care este dependentă liniar de alta
-ștergerea uneia sau mai multor caracteristici atunci când există prea multe
caracteristici.
Gradient Descent -Normal Equation
n- numarul de features/variabile m – numar de instante (sample)

Gradient Descent Normal Equation

Trebuie sa alegem/setam α NU trebuie sa alegem/setam α


Necesita multe iterații NU necesita iterații
O (kn2) O(n3) ptr a calcula (X T X)-1
Rapid pentru n > 10 000 Incet pentru n > 10 000
Incet ptr m mare Rapid ptr m mare

X T X (n+1) x (n+1) dublam numarul de features crestem timpul de calcul


Predicțiile sunt facute rapid, nu există o diferență majoră după
antrenament: acești algoritmi sunt foarte asemănători: modelează și fac
predicții exact în același mod.

Algoritmul Normal Equation nu functioneaza pentru Clasificari –


Regresia Logistica va trebui sa folosim Gradient Descent
Supra-ajustarea Overfitting

Underfitting sau High bias - modelul h(θ) prea simplu, prea putini
parametrii sa capteze structura datelor

Overfitting – High variance - modelul h(θ) este prea complex în raport cu


cantitatea datelor de antrenament.

Overfitting - h(θ)se potrivește cu datele disponibile, dar nu generalizează


bine pentru a prezice date noi.
Supra-ajustarea Overfitting

Există două variante pentru a soluționa problema overfitting:

1) Reducem numarul de features/variabile:

- selectăm manual ce features să păstrăm

- folosim un algoritm de selectie automată a modelului

2) Regularizare = constrângerea modelului pentru a-l simplifica

- păstram toate features, dar reducem magnitudinea parametrilor θj


Regularizare

Hiperparametru – parametru al algoritmului de învățare (nu a modelului)


trebuie setat înainte de antrenament și rămâne constant în timpul
antrenamentului.

Hiperparametru – controlează cantitatea de regularizare care trebuie


aplicată în timpul învățării.
Cost Function - Regularizare

Sa evitam overfitting penalizăm parametrii θ3 si θ4 le dam


ponderi/weights foarte mici sa fie apoape 0
Cost Function - Regularizare
Dorim să controlăm toti parametrii modelului θn nu stim care sunt
importanti si care nu mai ales cand avem foarte multe features/variabile

Hiperparametru λ - parametrul de regularizare controleză influen ța


parametrilor asupra modelului ( suma 1..n, nu penalizam θ 0 ) - tinem
parametrii modelului la valori mici, facem modelul cat mai simplu.

Underfit - λ prea mare (penalizam toti θn ramanem doar cu θ0)


Regularizare - Regresie Liniara Gradient Descent

Nu dorim sa penalizăm θ0 îl lăsăm separat:

(1- αλ/m) < 1 la fiecare pas va descreste θj


Regularizare - Regresie Liniara Normal Equation

Formula closed-form solution : θ =(XTX)-1XTy


Adăugam termenul de regularizare : θ =(XTX +λL )-1XTy

L (n+1)x (n+1)
Concluzii Regularizare

O modalitate simplă de a regulariza un model polinomial este


reducerea numărului de grade polinomiale.

Reducem overfitting prin regularizarea modelului (îl constrângem


prin ponderi/weights): cu cât e mai simplu, are mai puține grade de
libertate, cu atât va fi mai greu să fie overfitt.

Trei moduri diferite de a implementa constrângerile ponderilor:

Ridge Regression

Lasso Regression

Elastic Net
Bibliografie

Andrew Ng- Machine learning -Coursera


https://www.coursera.org/learn/machine-
learning/lecture/Ujm7v/what-is-machine-learning
Curs 10

Scikit Learn
Scikit Learn

Scikit-Learn una din multele biblioteci Python care oferă implementări ale
unei game largi de algoritmi de învățare automată.

Scikit-Learn are un API uniform și simplificat si o documentație online


foarte utilă și completă.

Avantajul acestei uniformități este că, odată ce înțelegeți utilizarea și


sintaxa de bază a Scikit-Learn pentru un tip de model, trecerea la un nou
model sau algoritm este foarte simplă.
Scikit Learn – API Estimator

Fiecare algoritm de învățare automată din Scikit-Learn este implementat


prin intermediul API-ului Estimator - o interfață coerentă

Scikit-Learn folosește faptul ca multe taskuri de învățare automată pot fi


exprimate ca secvențe de algoritmi mai fundamentali

Ierarhie limitată a obiectelor:


• Seturile de date sunt reprezentate în formate standard (matrice NumPy,
Pandas DataFrames, matrice sparse SciPy)

Numele parametrilor folosesc șiruri standard Python

Toate valorile parametrilor specificati sunt ca atribute publice

Când modelele necesită parametri specificați de utilizator, biblioteca
Scikit definește o valoare implicită adecvată

Algoritmii sunt reprezentați de clase Python

Consecvență: Toate obiectele au o interfață comună extrasă dintr-un set


limitat de metode, cu documentație
Scikit Learn – API Estimator

Pașii în utilizarea API-ului estimator Scikit-Learn :

1. Alegeți o clasă de model importând clasa de estimator adecvată din


Scikit-Learn.
2. Alegeți hiperparametrii modelului prin instanțierea acestei clase cu
valorile dorite.
3. Aranjați datele în matricea de features/variabile și vectorul țintă/output.
4. Apelati metoda fit() a instanței modelului sa potriviți modelul la date.
5. Aplicați modelul la date noi:
• folosim metoda predict() pentru învățarea supravegheată să prezicem
etichete pentru date necunoscute.

folosim metoda transform() sau predict() pentru învățarea
nesupravegheată cand transformăm sau deducem proprietăți din date.
Exemplu Regresie Liniară
Generam date:

import matplotlib.pyplot as plt


import numpy as np

In[]:rng= np.random.RandomState(42)
In[]:x = 10 * rng.rand(50)
In[]:y = 2 * x - 1 + rng.randn(50)
In[]:plt.scatter(x, y);
Exemplu Regresie Liniară
1. Alegem o clasă de model importând clasa de estimator adecvată din
Scikit-Learn.
https://scikit-learn.org/stable/modules/linear_model.html

In[]: from sklearn.linear_model import LinearRegression

2. Alegem hiperparametrii modelului prin instanțierea acestei clase.


In Scikit-Learn alegem hiperparametrii transmițând valori la instanțierea
modelului.

In[]: model = LinearRegression(fit_intercept=True)

Atentie! Clasa modelui nu e acelasi lucru cu o instanță a modelului.


Când modelul este instanțiat se stochează aceste valori ale
hiperparametrilor. Nu am aplicat încă modelul la date !

API-ul Scikit-Learn face distincția foarte clară între alegerea modelului și


aplicarea modelului la date.
Exemplu Regresie Liniară

În funcție de clasa modelului cu care lucrăm trebuie sa răspundem la


următoarele întrebări :

• Modelul se potriveste/ fit pentru offset/intercept ?


• Modelul să fie normalizat?
• Vrem să preprocesăm features/variabilele pentru a adăuga flexibilitate
modelului?
• Ce grad de regularizare să folosim în modelul nostru?
• Câte componente ale modelului vrem să folosim?
Exemplu Regresie Liniară

3. Aranjați datele în matricea de features/variabile – 2D și vectorul


țintă/output -1D.

Setam matricea features/caracteristicilor X [m_samples, n_features]


Setam vectorul y ( m_samples array)

In[]: X = x[:, np.newaxis]


In[]:X.shape
Out[]:(50,1)
Exemplu Regresie Liniară
4. Potrivim modelul la date - apelăm metoda fit() a instanței modelului

In[]: model.fit(X, y)

Această comandă fit() face o serie de calcule interne dependente de


model, iar rezultatele acestor calcule sunt stocate în atributele specifice
modelului pe care utilizatorul le poate explora.

Prin convenție în Scikit-Learn, toti parametrii modelului care au fost


învățați în timpul procesului de fit() au adăugat la sfarșit un underscore:

In[]: model.coef_ # ptr modelul de regresie liniar e slope ( Θ1 )


Out[]: array([ 1.9776566])

In[]: model.intercept_ # ptr modelul dev regresie liniar e offset pe y (Θ0)


Out[]: -0.90331072553111635
Exemplu Regresie Liniară

4. În general, Scikit-Learn nu oferă instrumente pentru a trage concluzii


din parametrii interni ai modelului: interpretarea parametrilor modelului
este mult mai mult o problema de modelare statistică decât de machine
learning/învățare automată.

Învățarea automată se concentrează pe ceea ce prezice modelul.

Pachetul StatsModels Python- să explorati sensul parametrilor modelelor


https://www.statsmodels.org/stable/index.html
Exemplu Regresie Liniară

Odată ce modelul este antrenat trebuie să-l evaluați – ce preziceri face pe


date noi, date care nu au făcut parte din procesul de instruire.

Ptr examplul nostru generăm “date noi” - xfit [m_samples, n_features] si


aflam care vor fi valorile yfit pe care le va prezice modelul

5. Aplicăm modelul la date noi, folosim metoda predict()

In[]: xfit = np.linspace(-1, 11)


In[]: Xfit = xfit[:, np.newaxis]
In[]: yfit = model.predict(Xfit)
Exemplu Regresie Liniară
Visualizăm rezultatul afișand datele raw și datele prezise de model.
Evaluam eficacitatea modelului comparand resultatele cu un baseline

In[]: plt.scatter(x, y)
In[]: plt.plot(xfit, yfit)
Exemplu Regresie Polinomială

Folosim clasa PolynomialFeatures pentru a transforma datele noastre de


antrenare, adăugând pătratul (polinom de gradul doi) fiecărei
features/variabile din setul de antrenare ca o feature/variabila nouă

from sklearn.preprocessing import PolynomialFeatures

In[]:pfeatures = PolynomialFeatures(degree=2, include_bias=False)


In[]: X_poly = pfeatures.fit_transform(X)
# X_poly contine features/variabilele originale X si patratul lor.

# Modelam cu LinearRegresion pe acest set extins de date


In[]: lin_reg = LinearRegression().fit(X_poly, y)
Exemplu Regresie Polinomială

Când există mai multe caracteristici/variabile, regresia polinomială este


capabilă să găsească relații între variabile (ceea ce modelul liniar de
regresie nu poate face).

PolynomialFeatures adaugă toate combinațiile de caracteristici până la un


anumit grad al polinomului.
PolynomialFeatures(degree=d) transformă un array continand n features
intr-un array continand (n + d)! /d! n! features
Atenție! la explozia combinatoriala a numărului de features

Exemplu: dacă au existat două caracteristici a și b, PolynomialFeatures


cu grad=3 nu numai că ar adăuga caracteristicile a 2 , a 3 , b 2 și b 3 , ci și
combinații ab, a 2 b și ab 2 .
Scikit – Regresie Liniară

Scikit Learn oferă două abordări ale regresiei liniare:

Obiectul LinearRegression folosește soluția Ordinary Least Squares din


scipy, deoarece Linear Regression este unul dintre cei doi clasificatori care
au soluție în closed-form – Normal Equation

Obiectul SGDRegressor care este o implementare foarte generică a


Stochastic Gradient Descent, în care vă puteți alege regularizarea-
termenii de penalizare. Pentru a obține regresia liniară, alegeți ca
pierderea să fie L2 și penalizare None (regresie liniară) sau L2 (regresie
Ridge)
Testarea și Validarea Modelului

Odată ce avem un model antrenat nu dorim „să sperăm” că va generaliza


bine cazurile noi. Vrem să evaluăm /să validăm că modelul nostru (
hyperparametrii) sunt un bun fit la date - și să-l ajustăm dacă va fi necesar.

Trebuie să împărțiți datele în două seturi: training set / setul de antrenare


și sau test set/ setul de testare.

Rata de eroare pe datele noi se numește generalization error /eroare de


generalizare (sau out-of-sample error) și prin evaluarea modelului
pe setul de testare obțineți o estimare a acestei erori - vă spune cât de bine,
modelul va funcționa în cazuri pe care nu le-a mai văzut niciodată.

Eroarea de generalizare:
este mică - modelul face puține greșeli la setul datelor de antrenare.
este mare - modelul face overfitt pe setul datelor de antrenare.
Testarea și Validarea Modelului
Ezităm între două tipuri de modele ( un model liniar și unul polinomial):
cum putem decide ? Le antrenăm pe ambele și compară cât de bine se
generalizează folosind setul de testare.

Dezavantajul utilizării unui test set pentru validarea modelului este că am


pierdut a o parte din datele noastre de antrenare.

Problema este că măsurăm eroarea de generalizare de mai multe ori pe


setul de testare și adaptăm modelul și hiperparametrii pentru a produce
cel mai bun model pentru acel set anume - modelul nu o să performeze la
fel de bine pe date noi.

Soluția se numește validare holdout: ținem o parte din setul de antrenare


pentru a evalua mai multe modele candidate și-l alegem pe cel mai bun.
Noul set se numește validation set ( sau development set/ dev set)

La sfârșit, evaluăm modelul acesta final pe setul de testare pentru a ob ține


o estimare a erorii de generalizare.
Testarea și Validarea Modelului
# avem niste date prtegatite, matricea X si vectorul y de output

from sklearn.cross_validation import train_test_split

# impartim datele 50% in fiecare set


X1, X2, y1, y2 = train_test_split(X, y, random_state=0, train_size=0.5)

# aplicam functia fit() pe un set de date


model.fit(X1, y1)

# evaluam modelul pe al doilea set de date


y2_model = model.predict(X2)

accuracy_score(y2, y2_model)

Out[]: 0.90666666666666662
Testarea și Validarea Modelului
Folosim cross-validation multe seturi de validare mai mici
Se face o succesiune de fit() unde fiecare subset de date este folosit atât ca
set de antrenare cât și ca set de validare. Exemplu :two-fold cross-
validation

In[]: y2_model = model.fit(X1, y1).predict(X2)


In[]: y1_model = model.fit(X2, y2).predict(X1)
In[]: accuracy_score(y1, y1_model), accuracy_score(y2, y2_model)
Out[]: (0.95999999999999996, 0.90666666666666662)

Obținem două scoruri de precizie, putem sa le combinăm (facând media)


pentru a obține o măsură mai bună a performanței modelului global.
Testarea și Validarea Modelului
Exemple: five-fold cross-validation – impărțim datele în 5 seturi

E obositor de făcut manual, folosim rutina Scikit-Learn cross_val_score

from sklearn.cross_validation import cross_val_score

In[]: cross_val_score(model, X, y, cv=5)


Out[]: array([ 0.96666667, 0.96666667, 0.93333333, 0.93333333,1.])
Testarea și Validarea Modelului

Modulul Scikit-Learn cross_validation implementează o serie de scheme


de cross-validation

https://scikit-learn.org/stable/modules/cross_validation.html

Exemplu: leave-one-out cross-validation


Cazul extrem în care numărul in care impartim datele este egal cu numărul
de date, ne antrenăm în toate punctele, cu excepția unuia:

from sklearn.cross_validation import LeaveOneOut

In[]: scores = cross_val_score(model, X, y, cv=LeaveOneOut(len(X)))


In[]: scores.mean()
Selectarea celui mai bun model

Albastru – setul de date de testare Rosu – setul de date de validare

Se calculează coeficientul de determinare R2 - măsoară cat de bine


funcționează un model în raport cu medie valorilor target/output.
R2 = 1 indica o potrivire perfecta
R2 = 0 indica ca modelul face potrivirea doar pe media datelor
R2 =-1 indică un model nepotrivit/gresit
Curba de Validare

Relația dintre complexitatea modelului, scorul de antrenare și scorul de


validare:
-model de complexitate mică (high-bias) datele de antrenare sunt
insuficiente, modelul este un predictor slab atât pentru datele de antrenare
cât și pentru datele de validare ( nevăzute anterior)
- model de complexitate mare ( high-variance) datele de antrenare sunt
Supra-ajustate, modelul prezice foarte bine pe datele de antrenare, dar nu
reușește pentru datele de validare
-o anumită valoare intermediară, curba de validare are un maxim. Acest
nivel de complexitatea a modelului indică un compromis bun/adecvat.
Curba de Validare – Model Polinomial

Scikit-Lear vizualizarea curbei de validare prin metoda validation_curve.


from sklearn.model_selection import validation_curve

Dandu-se un set de date, modelul , parametrii și a intervalul de explorat,


această funcție va calcula automat scorul de antrenare și scorul de validare
pe întregul interval.

Vrem sa aflam care e gradul polinomului care va aproxima cel mai bine
un anumit set de date.
Curba de Validare – Model Polinomial
Polinomul de grad 3 va modela cel mai bine acest set de date X, y:

In[]: scatter(X.ravel(), y)
In[]: X_test = np.linspace(-0.1, 1.1, 500)[:, None]
In[]: y_test=PolynomialRegression(3).fit(X,y).predict(X_test)
In[]: plot(X_test.ravel(), y_test)

Găsirea modelului optim nu necesita să calculăm scorul de antrenare, dar


examinând relația dintre scorul de antrenare și cel de validare ne poate
oferi o perspectivă utilă asupra performanței modelului.
Curba de Invățare

Graficul scorului de antrenare/validare în raport cu dimensiunea setului de


antrenare se numește curbă de învățare
- un model cu o anumită complexitate va fi overfit pe un set mic de date:
scorul de antrenare va fi mare în timp ce scorul de validare va fi mic.
- un model cu o anumită complexitate va fi underfit pe un set mare de
date: scorul de antrenare va scădea, dar scorul de validare va crește.
- curbele ar trebui să se apropie una de cealalta, dar sa nu se intersecteze
niciodată.

from sklearn.model_selection import learning_curve


Curba de Invățare

Vizualizarea curbei de invatare e dificila de realizat pentru modele


complexe. Scikit ofera un modul automat pentru aflarea modelului optim.

from sklearn.model_selection import GridSearchCV

Setăm ce hiperparametri vrem să experimentăm și ce valori să încerce


GridSearchCV va folosi cross-validarea pentru a evalua toate combinații
posibile de valori ale hiperparametrului.
Bibliografie

https://scikit-learn.org/stable/

API design for machine learning software: experiences from the


scikit-learn project
https://arxiv.org/abs/1309.0238

https://www.statsmodels.org/stable/index.html

https://scikit-learn.org/stable/modules/cross_validation.html

https://scikit-learn.org/stable/modules/learning_curve.html#validation-c
urve
Curs 11

Clasificarea – Regresia Logistică


SVM
Slide-uri adaptate după Andrew Ng
Sumar

1. Clasificarea - Regresie Logistică


2. Support Vector Machine (SVM)
Clasificarea

Clasificare tot o problema de regresi liniară : incercăm să prezicem y

Exemple:
tumori: maligne/benigne
email: spam Da/Nu ?
tranzactii: frauda Da/Nu?

Clasificare binară : y={0,1} - prezicem valori discrete

0: clasa negativă (tumoare benignă) - absența


1: clasa pozitivă (tumoare malignă) - prezența

Clasificare multiplă (multi-class): y= {0,1,2,3...n}


Algoritm ? de Clasificarea

Incercăm modelul de regresie liniară: hθ(x) = θTx

Threshold (pragul) de clasificare 0.5:

daca hθ(x) ≥ 0.5 prezice 1


daca hθ(x) < 0.5 prezice 0
Algoritm ? de Clasificarea

Modelul de regresie liniară nu se potrivește cand avem date


singulare/impraștiate (outliers)

Clasificare y ={0,1} hθ(x) poate sa fie ≥ 1 sau < 0

Regresia Logistică: 1 ≤ hθ(x) ≤ 0


Modelul Regresie Logistică
Regresia Logistică: trebuie să schimbăm hθ(x) = θTx 1 ≤ hθ(x) ≤ 0
prin Funcția Sigmoid sau Funcția Logistică : z= θTx

hθ(x) = g(θTx) mapează orice valoare in [0,1] probabilitatea ca y să fie 1


Modelul Regresie Logistică

hθ(x) = estimează probabilitatea ca y să fie 1 știind x

hθ(x) =0.7 – estimează probabilitatea ca 70% din y(output) să fie 1, adică


70% șansa ca tumoarea să fie malignă.

hθ(x) = P(y=1 | x;θ) = 1- P(y=0 | x;θ)

P(y=0 | x;θ) + P(y=1 | x;θ) =1


Limita de decizie – Decision Boundaries

Limita de decizie e linia care separă aria cand y=1 si cand y=0. E creată
de functia ipoteza hθ(x).

Să obtinem clasificare discretă 0 sau 1 :

hθ(x) = g(θTx) ≥ 0.5 y→ 1


hθ(x) = g(θTx) < 0.5 y→ 0

Inseamnă că g(z) ≥ 0.5 cand z ≥ 0 adică θTx ≥ 0

θTx ≥ 0 y→ 1
θTx < 0 y→ 0
Limita de decizie – cum aleg θ?

Exemplu: θ0=-3 θ1=1 θ2=1 hθ(x) = g(θTx)

y=1 cand θTx ≥ 0 -3 +x1+x2 ≥ 0

x1+x2 = 3 – limita de decizie cand hθ(x) =0.5

Limita de decizie este o proprietate a functiei ipoteza ( a parametrilor θ)


Limita de decizie NU eeste o proprietate a setului de date !
Limita de decizie – cum aleg θ?

Exemplu: θ0=-1 θ1=0 θ2=0 θ3=1 θ4=1 hθ(x) = g(θTx)

y=1 cand θTx ≥ 0 -1 +x12+x22 ≥ 0


x12+x2 2 = 1 – limita de decizie - ecuatia cercului in exterior y=1

Avem mai multi parametrii θ, hθ(x) o elipsa/o curba neregulată.


Cum aleg automat θ ? Functia de cost

hθ(x) = g(θTx) – e neliniara


min J(θ) nu e convexa, nu va garanta un minim global

Funcția de Cost pentru Regresia Logistică:


Cum aleg automat θ ? Functia de cost

y =1 hθ(x) = 1 Cost(hθ(x)) = 0 y=0 hθ(x) = 1 Cost(hθ(x)) = 0

P(y=1 | x;θ) = 0 – probabilitatea sa fie o tumoare maligna (y=1) e 0 –


imposibil să fie malignă.
Functia de cost - Compactată

Gasim parametrii θ prin min J(θ) P(y=1 | x;θ) = 0


Nu exista o ecuatie in closed -form sa aflam θ care sa minimizeze J(θ)
J(θ) – este convexa - > Gradient Descent va gasi minimul global
Gradient Descent pentru Regresia Logistică

Calculam derivată parțială pentru fiecare θj si devine:


Gradient Descent pentru Regresia Liniară
Algoritmul pentru n >= 1 repetam ecuatiile pentru n variabile (features):

Generalizand avem:
Gradient Descent pentru Regresie Logistică

Chiar daca avem aceeași formula pentru a modifica θj și in Regresia


Liniară cat si in Regresia Logistică nu este aceeasi implementare a
alogoritmului, deoarece h(θ) diferă.

Tot trebuie sa updatăm simultan toate valorile lui θ.

Sfaturi de implementare - forma vectorizată:


Regresie Logistică – one vresus all
Clasificare in clase multiple – multiple valori discrete:
Exemple:
Email in diverse directoare: Job, Hobby, Familie, Prieteni
Simptome raceala: Raceala, Gripa, COVID-19, Sanatos
Vremea: Soare, Innourat, Ploaie, Ninsoare

Clasificare binară Clasificare Multiplă


Regresie Logistică Multiplă: One-vs-all

Pentru fiecare clasa i antrenăm un clasificator de regresie logistică hθ(x)


pentru a prezice probabilitatea ca y=i
Pentru a face o predicție asupra unui nou x, alegeți clasa i care
maximizează hθi(x)
Regularizare Regresie Logistică

Overfitting- pentru foarte multe features/variabile sau functii


polinomiale de grad mare.
min J(θ) = min (A + λB) λ mare → ponderi mari ptr B
Support Vector Machine (SVM)

Este unul dintre cele mai populare modele din Machine Learning.

SVM - model puternic și versatil de învățare automată folosit in:


clasificare liniară sau neliniară (seturi de date complexe)
regresie liniară sau neliniară
detectia outliers /valori aberante
Regresie Logistică vs SVM
Exemplu: o singura instanta contribuie la functia de cost (nu avem suma)

daca y=1 vrem ca z= θTx >>0 daca y=0 vrem ca z= θTx << 0
Cost1(z) Cost0(z)
Regresie Logistică vs SVM
Regularizare Regresie Logistica - Functia de cost:
A B

Regularizare SVM - Functia de cost:

Regresie Logistică min (A+λB) λ controlează nivelul de regularizare


minimizam A fit la setul de antrenare vs cat minimizam B
SVM min (CA+B ) hiperparametrul C controlează nivelul de regularizare
C = 1/λ
Minimizand acesta functie de cost aflam parametrii θ
SVM predictie directa hθ(x)={0,1} NU probabilitati
Support Vector Machine

Daca y=1 vrem z= θTx ≥ 1 ( nu doar ≥ 0 )


Daca y=0 vrem z= θTx ≤ -1 ( nu doar < 0 )
SVM introduce un factor de margine
C foarte mare ( 100 000) → termenul A e aproape 0 → cum alegem
parametrii θ sa minimizam functia de cost → Decision Boundary
C mare: low bias, high variance (overffiting)
C mic : high bias (underfitting), low variance
LinearSVM - Clasificare Liniară

Stanga: Limitele de decizie a trei posibili clasificatori liniari


Două modele funcționează perfect la acest set de antrenare, dar limitele de
decizie se apropie prea mult de cazuri, probabil că aceste modele nu vor
performa la fel de bine în cazuri noi.
Dreapta: linia continuă reprezintă limita de decizie a unui clasificator
SVM desparte cele două clase si dar rămâne cât mai departe de cele mai
apropiate instanțe de antrenare- fitting the widest possible street -
large margin classifier – cercurile sunt support vectors
SVM – Scalarea variabilelor

SVM sensibil la scalarea features/caracteristicilor.


SVM – Hard/Soft margin

Hard margin classifier – clasele separate complet “off the street”


- datele trebuie să fie separabile liniar
- sensibil la outliers

Obiectivul: găsirea unui echilibru bun între menținerea străzii cât mai lată
posibil și limitarea încălcării marginilor (cazuri care ajung în mijlocul
străzii sau chiar pe partea greșită) - Soft margin classifier

hiperparametrul C =1 (generalizează mai bine ) decat C-100 (overfitting)


NonLinear SVM – Clasificare Nonliniară

Date complexe, nu putem să le separăm liniar - adăugăm features –


polinomial features : x2=x12

Adaugăm prea multe features modelul va fi prea incet → implementarea


SVM cu kernel. Kernelul face posibil obținerea aceluiasi rezultat ca și
cum ați fi adăugat multe features polinomiale fără a fi nevoie sa le
adaugăm de fapt (chiar și cu polinoame de grad foarte mare). Nu există
explozia combinatoriala a numărului de features pentru că de fapt nu s-a
adăugat niciuna.
NonLinear SVM – Clasificare Nonliniară

Altă metodă pentru date nonliniare : adăugăm features folosind o functie


de similaritare – masoara cat de mult fiecare instanta se aseamana cu
anumite landmarks (cercurile). Gaussian Radial Basis Function(RBF)
Exemplu ptr γ = 0.3 x1=-1 calculăm features noi x 2=exp(–0.3 × 1 2 )≈
0.74 si x3= exp(–0.3 × 2 2 )≈ 0.30.
Landmarks se aleg la locatia fiecarei instante din setul de date de
antrenare. Se creează multe dimensiuni și cresc șansele ca setul de
antrenare sa fie transformat intr-unul liniar separabil.
Scikit-Learn SVM
Kernele ptr SVM folosite mai rar (Mercer Theorem): polinomial ( xTl)2
sau (xTl)3 sau (xTl+constantă), string – clasificare de text sau secvente
ADN, chi-square /histogramă /intersecție

Clasa LinearSVC - bazată pe biblioteca liblinear, implementează o


versiune optimizată a unui algoritm SVM liniar – NU are kernele.
Precizia algoritmului e controlata de hiperparametrul de toleranta ε ( tol
in Scikit-Learn).

Clasa SVC - bazată pe biblioteca libsvm, implementează un algoritm


care acceptă kernele
SVM Regresie

Putem utiliza SVM-uri pentru regresie în loc de clasificare, trucul este


să inversăm obiectivul:

SVM Regresie încearcă să potrivească cât mai multe cazuri posibile pe


stradă limitând în același timp încălcărea marginilor (adică, cazuri în
afara străzii)- hiperparametrul ε controlează lațimea străzii.
SVM Regresie
Pentru date nonlineare folosim SVM-uri cu kernel.
Scikit-Learn: Clasa SVR este echivalenta clasei SVC si clasa
LinearSVR este echivalenta clasei LinearSVC.

In[]: from sklearn.svm import SVR


In[]: svm_poly_reg = SVR(kernel="poly", degree=2, C=100,epsilon=0.1)
In[]: svm_poly_reg.fit(X, y)
Scikit Learn SVM – Implementare
Pasi in implementare SVM:

1. Aleg hiperparametrul C
2. Hotarasc daca aplic kernel sau nu:
- Scalarea features
- Daca da, incerc kernelul Gausssian setez parametrii acestui kernel
- Scriu functia de similaritate care imi va genera automat toate features

Retineti! LinearSVC este mult mai rapid decat SVC(kernel="linear")

n - numar de features m – instante in setul de antrenare


n > m folosesc Regresie Logistică sau LinearSVC

n mic si m mediu (< 10 000) SVC cu kernel Gaussian

n mic si m mare ( > 50 000) : incerc sa adaug features si apoi folosesc


Regresia Logistică sau LinearSVC
Scikit Learn SVM – Implementare
Pentru clasa LinearSVC trebuie:
să centrați mai întâi setul de antrenare scazant valoarea medie - se face
automat dacă scalați datele utilizând clasa StandardScaler .
să setați hiperparametru loss = ”hinge”, deoarece nu e valoarea implicită.
să setați hiperparametru dual= Fals, cu excepția cazului în care există mai
multe caracteristici decât instanțe de antrenare - performanță mai bună

In loc să folosim clasa LinearSVC putem folosi clasa SVC cu un nucleu


liniar. Cream modelul SVC : SVC(kernel="linear", C=1)

Sau putem folosi clasa SGDClassifier – Stochastic Gradient Descent


SGDClassifier(loss="hinge", alfa=1/(m*C)).

Stochastic Gradient Descent se aplică pentru a antrena un clasificator


liniar SVM. Nu converge la fel de repede ca clasa LinearSVC, dar poate fi
util pentru a gestiona clasificarea online sau a seturilor foarte mari de date
care nu se pot incarca în memorie.
loss =”hinge” SVM – Implementare

Functia max(0, 1-t) sau Function Hinge Loss

Derivata funcției (panta) este -1 t < 1 si 0 ptr t > 1 nu e derivabila in 1


Seturi de date reale

UC Irvine Machine learning Repository


http://archive.ics.uci.edu/ml/index.php
Kaggle
https://www.kaggle.com/datasets
Amazon
https://registry.opendata.aws/
DataPortals
http://dataportals.org/
OpenData Monitor
https://opendatamonitor.eu/frontend/web/index.php?r=dashboard%2
Findex
Wikipedia Machine Learning Datasets
https://en.wikipedia.org/wiki/List_of_datasets_for_machine-learning
_research
Tema

1.
Va alegeți un set de date real și antrenați un LinearSVC.
Apoi antrenați un SVC și un SGDClassifier pe același set de date.
Verificați/setați să le faceți să producă aproximativ acelasi model.

2.
Antrenați un clasificator SVM pe setul de date MNIST (dacă folosiți
LinearSVC by default se foloseste algoritmul one-vs-all pentru a
clasifica toate cele 10 cifre). Ce scor de acuratete obtineti?

Antrenați un SVC cu un kernel Gaussian RBF ( by default)


Reglați hiperparametrii folosind seturi mici de validare pentru a
accelera procesul. La ce precizie puteti ajunge?
Bibliografie

Andrew Ng- Machine learning -Coursera


https://www.coursera.org/learn/machine-
learning/lecture/Ujm7v/what-is-machine-learning
Bibliografie

https://scikit-
learn.org/stable/auto_examples/classification/plot_classifier_compari
son.html#sphx-glr-auto-examples-classification-plot-classifier-
comparison-py

Algoritmul implementat în LinearSVC


https://www.csie.ntu.edu.tw/~cjlin/papers/cddual.pdf

Algoritmul implementat în SVC


https://www.microsoft.com/en-us/research/publication/sequential-
minimal-optimization-a-fast-algorithm-for-training-support-vector-
machines/
Curs 12

Invățarea nesupervizată
Clustering
Slide-uri adaptate după Andrew Ng
Sumar

1. Algoritmul K-means clustering


2. Principal Component Analysis (PCA)
Invățarea nesupervizată - Clustering

Invățam din date ne etichetate

Algoritmii găsesc o stuctură in date -


Clustering
Aplicații Clustering
K – means Clustering algoritm
K – means Clustering algoritm
Algoritm iterativ
Input:
Setul de date de antrenare {x(1),x(2), x(3)…x(m)} – vector n dimensional
K numarul de clustere

Initializez random K centroizi ai clusterelor -


Repet{
for i =1 to m (pentru fiecare data de antrenare)
c(i):= indexul centroidului clusterului cel mai aproape de x(i)
for k =1 to K
μk:= media punctelor asignate culsterului k
}

c(i) e de fapt k care min || xi- μk||2 - ia valori de la 1 la K

Daca avem un centroid cu nici un pct asignat atunci eliminam acest cluster
sau putem reinitializa random acel centroid al clusterului
K – means ptr clustere neseparabile

Exemplu de segmentarea pietii: - un producător de tricouri vrea să


proiecteze și să vânda tricouri de trei dimensiuni, S, M și L.

K-means va separa datele în mai multe segmente și se vor putea


proiecta produse separate S, M și L.
K-means Obiectiv de optimizare/ Functia de Cost
Stiind care este obiectivul de optimizare al k-means:
- ne va ajuta să depanăm algoritmul de învățare și să ne asigurăm că k-
means rulează corect.
- putem folosi acest lucru pentru a ajuta k-means să găsească costuri mai
bune și să evite optimul local.

In k-means trebuie sa tinem cont de doua seturi de variabile:


c(i):= indexul/numarul clusterului (1,2...K) unde un datele x (i) se vor asigna
μk:= locatia centroidul culsterului k
x(i)= 5 c(i) =5 μc(i)= μ5
Cum initializam centroizii clusterelor ?
Initializare random :
K (nr de centroizi ai clusterelor) < m (dim setului de date de antrenare)
Aleg random K date de antrenare
Setez μ1, μ2, ... μk sa fie egale cu aceste K date

Exemple: K=2 μ1= x(i) , μ2= x(j)

Algoritmul va converge catre solutii diferite in functie de initializare


Cum initializam centroizii clusterelor ?
Initializare random “fericită” - optim global

Algoritmul va converge catre solutii diferite – initializare “nefericită” -


omptim local prost al functiei J
Soluția- cum initializam centroizii clusterelor ?
Pentru ca algoritmul K-means sa gaseasca cea mai buna clusterizare
trebuie sa incercam multiple initializari random si sa rulam algoritmul
de mai multe ori :

For i=1 to 100 {


Initializez random.
Rulez K-means, aflu valorile
Calculez Functia de Cost ( Distortion Cost Function)
J( )
}

O sa avem 100 de moduri diferite de a face clusterizarea datelor ( si 100


de valori ale functiei J ) o sa alegem varianta care are cea mai mica
valoare a Functiei de Cost J → clusterizarea optima

Nr mic de clustere K intre 2 si 10 - multiple initializari random


K > 10 o singura initializare random ne va da o solutie destul de buna
Expectation-Maximization K – means
Detalii de implementare Scikit-Learn
Dacă se întâmplă să știți aproximativ unde ar trebui să fie centroizii (de
exemplu, dacă ați rulat un alt algoritm de clustering), puteți seta
hiperparametru init la un NumPy array ce conține lista de centroizi și
setați n_init la 1:

good_init = np.array([[-3, 3], [-3, 2], [-3, 1], [-1, 2], [0, 2]])
kmeans = KMeans(n_clusters=5, init=good_init, n_init=1)

Hiperparametrul n_init controleaza numărul aleatoriu de initializari :


implicit este 10, ceea ce înseamnă că întreg algoritmul rulează de 10
ori când apelați fit() , iar Scikit-Learn păstrează cea mai bună soluție.

Cea mai buna solutie, cea mai mica valoare a Functiei de Cost care in
Scikit este parametrul inertia

In[]: kmeans.inertia_
Out[]: 211.59853725816856
Cum alegem numarul de clustere, K ?

Vizualizand datele numarul de clustere este ambiguu K=4 ? sau K=2 ?

Nu avem un raspuns “corect” - trebuie sa facem procesul automatic


Alegem valoarea lui K - Metoda Elbow

Metoda Elbow (K=3) ambiguu 3? sau 5 ?

Functia de Cost (Inerția) nu este o măsură bună de performanță când


încercam să alegem k pentru că continuă să scadă pe măsură ce cre ștem k.
Cu cât sunt mai multe clustere, cu atât fiecare instanță va fi mai aproape
de cel mai apropiat centroid și inerția va fi mai mică.
Alegem valoarea lui K
Rulam K-means cu un anumit scop, evaluam ptr o anumită măsură

K=3 ( S, M, L) sau K=5 (XS, S, M, L, XL)

K-means ptr compresia imaginilor. Cum aleg K in functie de calitatea


imaginilor? sau cat de bine fac compresia ?
Alegem valoarea lui K – Silhouette Analysis
Calculam silhouette score ca media coeficientului silhouette din toate
instantele
coeficientul silhouette ptr o instanta = (b-a)/max(a,b)
a- este distanța medie față de celălalte instanțe din același cluster
(the mean intra-cluster distance)
b- este distanța medie până la instanțele celui mai apropiat cluster
(the mean nearest-cluster distance)

Coeficientul silhouette ia valori [-1, 1 ]:


- apropiat de +1 înseamnă că instanța este bine în interiorul propriului
cluster și departe de alte clustere
- apropiat de 0 înseamnă că este aproape de granița unui cluster
- apropiat de –1 înseamnă că este posibil ca instanța să fi fost atribuită
unui cluster greșit.

In[]: from sklearn.metrics import silhouette_score


In[]: silhouette_score(X, kmeans.labels_)
Out[]: 0.6819938690643478
Alegem valoarea lui K – Silhouette Analysis

O vizualizare și mai informativă se obține cu Silhouette Diagram -


trasam coeficientul siluetei pentru fiecare instanța sortat după clusterul
căruia îi este alocat si prin valoarea coeficientului.

Fiecare diagramă conține o formă de cuțit per grup:


-înălțimea formei indică numărul de instanțe pe care le conține clusterul
-lățimea reprezintă coeficienții siluetei sortați ai instanțelor din cluster
(mai lat este mai bine).
-linia întreruptă verticală reprezintă scorul silhouettei = mean silhouette
coefficient
Alegem valoarea lui K – Silhouette Analysis

k=3 si k=6 “bad ”(coeficient < scorul) instante prea apropiate de alte
clustere
K=4 si k=5 “good” (instantele trec de linia verticala→1) il aleg pe k=5
clusterele au aceeasi dimensiune
Reducerea dimensionalității

Compresia datelor
- reducem reduntanta caracteristicilor
- crestem viteza de calcul al algoritmilor de invatare

Vizualizarea datelor
Reducerea dimensionalității
Date 2D → 1D reducem reduntanta caracteristicilor

Gasim directia de proiectie a datelor : x(1), x(2)...x(m) - R2 z(1),z(2)...z(m) - R


- gasim locatia/pozitia datelor pe linia de proiectie (1D)
Reducerea dimensionalității 3D → 2D

Gasim directia de proiectie a datelor : x(1), x(2)...x(m) - R3 z(1),z(2)...z(m) - R2


- gasim locatia/pozitia datelor pe planul de proiectie (2D : z1 si z2)
Reducerea dimensionalității
Set de date imens pentru fiecare tara avem 50 de features x(i)- R50

Gasim directia de proiectie a datelor : x(1), x(2)...x(m) - R50 z(1),z(2)...z(m) R2


- gasim locatia/pozitia datelor pe planul de proiectie
Reducerea dimensionalității
Reducem cele 50 de features x(i)- R50 la z(i) [z1, z2] – R2 50D → 2D

Singapore
USA

Noile features (axe de reprezentare)


z1 – dimensiunea tarii- actibvitatea economica GDP
z – GDP per persoana
Principal Component Analysis (PCA)

Eroare de proiectie

PCA gaseste o suprafata de dimensiune redusa (linie) pe care se


proiecteaza datele astfel incat suma erorilor de proiectie sa fie
minima.

Inainte de PCA trebuie sa facem : mean normalization si feature scaling


Principal Component Analysis (PCA)

2D → 1D PCA gaseste directia – vectorul u(i) pe care se proiecteaza


datele astfel incat suma erorilor de proiectie sa fie minima.

3D → 2D PCA gaseste directia planului de proiectie a datelor.

Reducerea de la n-dimensiuni la k-dimensiuni PCA gaseste suprafata


definita de k-vectori u(1), u(2)...u(k) (subspatiul liniar definit de k veectori)
Principal Component Analysis (PCA)
PCA identifică un set de axe ortogonale, axe ce reprezintă cea mai mare
cantitate de variație în setul de date antrenament (directiile dominante ).

Cum alegem directia hyperplanului de proiectie?


Alegem prima axa care reprezinta variatia maxima a datelor proiectate
(c1) si urmatoarea (c2) pe directia ortogonala pe prima axa si tot asa.

Axa (i) – componenta principala PC (i) → SVD


Singular Value Decomposition (SVD)
Metoda SVD este data-driven si ofera o descompunere matriceala stabila
numeric (ptr orice matrice reala R sau complexa C ) - generalizează
descompunerea in vectori si valori proprii (eigenvectors/eigenvalues)

SVD oferă o reprezentare ierarhică a datelor în termenii unui nou sistem de


coordonate pentru a reprezenta date corelate de dimensiuni mari.

Xn x m = [ x1 x2 xk ...xm] - matrice complexa Xn x m = UΣV*


(* =conjugata complexa)

Un xn – matrice unitara UU*= I – left singular vector a matricii X


Σn x m – matrice diagonala cu valori pozitive pe diagonala principala –
valori singulare
Vm x m - matrice unitara VV*= I - right singular vector a matricii X

Ptr X matrice reala U*=UT si V*=VT Xn x m = UΣVT U si V au coloane


ortonormale.
Singular Value Decomposition (SVD)
EconomySVD n> m, Σ are m valori nonzero pe diagonala principala
Singular Value Decomposition (SVD)
SVD legat de matricea de corelare – produsul scalar (dot product)
X X* - pe linii X*X - pe coloane

Coloanele matricii U reprezinta eigenvectorii matricii de corelare X X* -


captează corelarea pe coloane

Coloanele matricii V reprezinta eigenvectorii matricii de corelare X*X -


captează corelarea pe linii
Principal Component Analysis (PCA)
Algoritmul PCA -gasim/calculam componentele principale:
1. Centram datele: ne asiguram ca fiecare features are media zero ( facem
media pe linii si o scadem din X , X = X- xmean()

2. Calculam “matricea de covariantă” sigma =

3. Calculam eigenvectorii matricii sigma: [U , S , V] = svd(sigma)


4. Obtinem datele reduse z =XVk sau z= UkTX # proiectia pe hyperplan
Uk, Vk -primele k coloane din matricea U sau V definesc spatiul redus k-
dimensional Ureduced =Uk=U(:, 1:k)
In[]: import numpy as np
In[]: X_centrat = X - X.mean(axis=0)
In[]: U, S, Vt = np.linalg.svd(X_centered)
In[]: c1 = Vt.T[:, 0]
In[]: c2 = Vt.T[:, 1]
In[]:V2 = Vt.T[:, :2] # planul definit de primele 2 componente principale
In[]: z = X_centered.dot(V2) # z=XVk
Principal Component Analysis (PCA)
In Scikit-Learn by default datele sunt centrate in algoritmul PCA

In[]: from sklearn.decomposition import PCA

# reduc dimensionalitatea setului de date la două dimensiuni


In[]: pca = PCA(n_components = 2)
In[]: X2D = pca.fit_transform(X)
In[]: pca.components_.T[:, 0] # vectorul primei componente principala

Atributul pca.components_ este de fapt transpusa matricii Vd


(coloanele = componentele principale PC)

In[]: pca.explained_variance_ratio_
Out[]:array([0.84248607, 0.14631839])

84.2% din variatia datelor e de-a lungul primei componente si 14.6%


variatia de-a lungul celei de-a doua componente
Reconstructia din Componentele Principale (PC)

X approx = Ureducez

dimensiune Xn = Un x k z k x 1
Cum aleg k - numarul Componentelor Principale
media patratica a erorilor de proiectie / variatia toala a datelor
aleg cel mai mic k care respecta relatia :

99% din variatia datelor e retinuta # 95% k < 0.05


Multe features sunt puternic corelate – datele se comprima mult.

[U, S, V] =svd(sigma) # S –matrice diagonala

aleg cea mai mica valoare a lui k pre care:

exemplu: k=3 (S11+S22+S 33) / (S11+S22+…..Smm) > 0.99

Atentie: Rulez PCA doar pe setul de antrenare!


Detalii implementare PCA

Scikit-Learn folosește un algoritm stocastic numit PCA Randomizat


care găsește rapid aproximarea primelor k componente principale.

Trebuie sa setați hiperparametrul svd_solver la „randomized”

In[]: rnd_pca = PCA(n_components=154, svd_solver="randomized")


In[]: X_reduced = rnd_pca.fit_transform(X_train)

Daca doriti ca Scikit-Learn sa foloseasca full SVD, trebuie să setați


hiperparametrul svd_solver la "full" .
Detalii implementare PCA

PCA necesita întregul set de date de antrenare să fie în memorie pentru ca


algoritmul să ruleze.

Incremental PCA (IPCA) vă permite să împărțiți setul de antrenare în


mini-seturi și să rulați algoritm IPCAcu câte un mini-set.

In[]: import numpy as np


In[]: from sklearn.decomposition import IncrementalPCA

In[]: n_sets = 100


In[]: inc_pca = IncrementalPCA(n_components=154)
In[]: for X_set in np.array_split(X_train, n_sets):
In[]: inc_pca.partial_fit(X_set) # nu . fit
In[]: X_reduce = inc_pca.transform(X_train)
Detalii implementare PCA

Scikit-Learn folosește un algoritm stocastic numit PCA Randomizat


care găsește rapid aproximarea primelor k componente principale.

Trebuie sa setați hiperparametrul svd_solver la „randomized”

In[]: rnd_pca = PCA(n_components=154, svd_solver="randomized")


In[]: X_reduced = rnd_pca.fit_transform(X_train)

Daca doriti ca Scikit-Learn sa foloseasca full SVD, trebuie să setați


hiperparametrul svd_solver la "full" .
Bibliografie

Andrew Ng- Machine learning -Coursera


https://www.coursera.org/learn/machine-learning/lecture/93VPG/k-m
eans-algorithm

https://scikit-learn.org/stable/auto_examples/cluster/plot_kmeans_si
lhouette_analysis.html

S-ar putea să vă placă și