Sunteți pe pagina 1din 38

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/

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