Skip to content
This repository was archived by the owner on Mar 15, 2021. It is now read-only.

Py@Codette #4 4. Analiza Performanței

Giorgiana Vlăsceanu edited this page Nov 12, 2019 · 1 revision

Analiza Performanței în Machine Learning

În cadrul acestui workshop o să avem de-a face și cu o parte de Machine Learning. Aici vom lua contact cu partea de clasificare, folosind două metode consacrate în zona de ML. Este vorba despre SVM (Support Vector Machines) și Logistic Regression (LR). Aceste tehnici de clasificare vor fi aplicate atât pe problema detecției cancerului mamar, cât și pe o problemă clasică de Natural Language Processing: stotalpam detection.

În clasificare, indiferent de algoritmul folosit, vom avea întotdeauna un set de date pe care-l vom sparge în set de training și set de test. Setul inițial de date, din moment ce vorbim despre învățare supervizată aici, o să aibă un label (clasa căreia aparține exemplul curent) și o listă de features.

De exemplu, în cazul setului de date pentru detecția cancerului la sân, vom avea drept etichete (labels): M/B, unde M vine de la 'Malign' iar B de la 'Benign'. Convenția aici va fi să notăm drept positive, clasa cea mai de interes (ceea ce vrem să detectăm de fapt) - în cazul nostru, ne interesează mai curând dacă tumoarea este Malignă, prin urmare M -> 1 iar B -> 0.

În cazul setului de date pentru detecția de spam în email-uri, etichetele noastre vor fi spam/ham. Mai de interes este spam-ul, prin urmare spam -> 1 iar ham -> 0. Facem chestia asta și pentru a facilita interpretarea API-urilor cu care lucrăm, care se așteaptă mai degrabă să vadă label-uri numerice în unele scopuri în care le vom utiliza.

Lista de features pentru breast cancer detection dataset va consta în diverse dimensiuni ale tumorii (rază, simetrie, textură, etc). Pentru spam detection, avem doar conținutul fiecărui email la dispoziție pentru a trage niște concluzii. Prin urmare, feature-urile la care ne uităm sunt cuvintele ce intră în componența email-ului.

Scopul final este ca în urma antrenării unui model să fim în stare să distingem cât mai bine între clasele disponibile. Adică să fi învățat cele mai reprezentative atribute posibile și care diferențiază cele două (sau mai multe) clase. Întrebarea este cum pot spune cât de bune sunt rezultatele obținute și cum știu ce probleme are modelul meu și ce s-ar putea îmbunătăți la el? Fix despre asta o să vorbim noi aici: metricile și graficele care ne permit să evaluăm performanța unui model.

1. Acuratețea

Reprezintă numărul de predicții corecte din numărul total de predicții. Trebuie să ținem cont aici de faptul că acuratețea nu ne va da întotdeauna performanța reală a modelului construit. Un exemplu în acest sens este situația în care am avea de-a face cu un set de date foarte ne-echilibrat. De pildă, în setul de date pentru spam detection, să zicem că am avea 90% din samples etichetate ca fiind 'ham' și restul de 10% 'spam'. Este clar că modelul nostru se va descurca foarte bine să detecteze orice nu este spam, dar s-ar putea ca pe mine să mă intereseze operația fix inversă. Iar acuratețea nu-mi va spune prea multe despre asta, pentru că majoritatea exemplelor din setul de test or să fie 'ham' și o să am acuratețe bună la test.

2. F1-Score

Media armonică dintre precizie și recall: 2 (precision recall) / (precision + recall).

Acesta se uită atât la exemplele pozitive cât și la cele negative din dataset. Deci ne dă o încredere mai mare în performanță dacă avem de-a face cu un dataset neechilibrat (asemeni AUC ROC, vezi mai jos).

3. Curbă de Învățare

Curba de învățare ne spune cât de bine s-a descurcat modelul în faza de training. Sau, altfel spus, cât de bine a învățat acesta.

Aici o să obținem indicii despre posibilitate overfitting-ului - cu alte cuvinte, clasificatorul meu s-ar putea să fi învățat foarte bine să distingă între spam/ham pe setul de training, dar când o să-i arăt un mail nou, din afara acestuia, să nu fie capabil să clasifice corect.

În caz de overfitting, cea mai bună soluție dacă avm posibilitatea asta, este să adăugăm mai multe exemple în setul de date. Eventual să încercăm și o diversificare a acestuia.

4. Raport de Clasificare

Ne arată următoarele valori, pentru fiecare clasă (în cazul nostru SPAM/HAM):

**precizie** = tp / (tp + fp). 
Sau numărul de true positives (exemple clasificate corect ca aparținând clasei 1) din câte positive a clasificat de fapt modelul. 
Ne zice de fapt puterea de predicție a sample-urilor pozitive.
**recall** = tp / (tp + fn). Adică câte am clasificat drept pozitive din câte pozitive erau de fapt.
**f1-score**: vezi mai sus.
**suport**: câte sample-uri avem pe care s-a calculat respectivul scor.

5. AUC ROC

Vrem să fie cu cât mai mult peste 0.5, ca să putem avea încredere în puterea de predicție a modelului.

AUC ROC dă indicii despre acuratețe, dar nu avem termen de comparație cu acuratețea . Cu alte cuvinte, pentru seturi de date nebalansate (în care am muuulte sample-uri dintr-o clasă și extrem de puține din alta) nu mai pot avea prea mare încredere în acuratețea overall. Atunci AUC ROC îmi vine-n ajutor.

6. Matrice de Confuzie

În general o să ne dorim o culoare cât mai închisă pe diagonala principală. Aici vom avea True Positives și True Negatives. Diagonala secundară, în cazul de clasificare binară va conține numărul de False Positives și False Negatives. Analizați graficele odată ce le obțineți, pentru o mai bună (si mai vizuală) înțelegere a situației.