Antrenamentul de clasare. Clasificarea valorilor calității Algoritm pentru evaluarea calității restaurării imaginii

Orice cercetător de date lucrează cu volume mari de date în fiecare zi. Se crede că aproximativ 60% - 70% din timp este petrecut în prima etapă a fluxului de lucru: curățarea, filtrarea și conversia datelor într-un format potrivit pentru aplicarea algoritmilor. învățarea automată. În a doua etapă, se efectuează preprocesarea și formarea directă a modelelor. În articolul de astăzi, ne vom concentra asupra celui de-al doilea pas al procesului și ne vom uita la diferite tehnici și recomandări care au rezultat din participarea mea la peste 100 de competiții de învățare automată. Deși conceptele descrise sunt destul de generale, ele vor fi utile în rezolvarea multor probleme specifice.

Toate exemplele de cod sunt scrise în Python!

Date

Înainte ca algoritmii de învățare automată să poată fi aplicați, datele trebuie convertite într-o reprezentare tabelară. Acest proces, prezentat în figura de mai jos, este cel mai complex și consumator de timp.

Date in Database – date din baza de date. Data Munging – filtrarea datelor. Date utile - date utile. Conversie de date - conversie de date. Date tabelare – date tabelare. Date – variabile independente (caracteristici). Etichete – variabile dependente (variabile țintă).

Odată ce datele sunt convertite într-o reprezentare tabelară, pot fi folosite pentru a antrena modele. Reprezentarea tabelară este cea mai comună reprezentare a datelor în învățarea automată și extragerea datelor. Rândurile de tabel sunt obiecte individuale (observații). Coloanele tabelului conțin variabile independente (caracteristici), desemnate X, și variabile dependente (țintă), notate y. În funcție de clasa problemei, variabilele țintă pot fi reprezentate prin una sau mai multe coloane.

Tipuri de variabile țintă

Variabilele țintă definesc clasa de sarcini și pot fi reprezentate prin una dintre următoarele opțiuni:

  • O coloană cu valori binare: o problemă de clasificare binară, fiecare obiect aparține unei singure clase.
  • O coloană cu valori reale: problemă de regresie, prezicerea unei valori.
  • Coloane multiple cu valori binare: problemă de clasificare cu mai multe clase, fiecare obiect aparține unei singure clase.
  • Coloane multiple cu valori reale: problemă de regresie, sunt prezise mai multe valori.
  • Coloane multiple cu valori binare: o problemă de clasificare cu mai multe etichete, un obiect poate aparține mai multor clase.

Metrici

Când rezolvați orice problemă de învățare automată, este necesar să puteți evalua rezultatul, adică este nevoie de o metrică. De exemplu, pentru o problemă de clasificare cu două clase, metrica utilizată în mod obișnuit este aria de sub curba ROC (ROC AUC). În cazul clasificării cu mai multe clase, se utilizează de obicei entropia încrucișată categorială. În cazul regresiei, eroarea medie pătratică (MSE).

Nu vom lua în considerare valorile în detaliu, deoarece acestea pot fi destul de diverse și sunt alese pentru o anumită sarcină.

Biblioteci

Primul pas este să instalați bibliotecile de bază necesare pentru a efectua calcule, cum ar fi numpyŞi scipy. Apoi puteți începe să instalați cele mai populare biblioteci pentru analiza datelor și învățarea automată:

  • Explorarea și transformarea datelor: panda(http://pandas.pydata.org/).
  • Gamă largă de algoritmi diferiți de învățare automată: scikit-learn(http://scikit-learn.org/stable/).
  • Cea mai bună implementare a creșterii gradientului: xgboost(https://github.com/dmlc/xgboost).
  • Rețele neuronale: keras(http://keras.io/).
  • Vizualizare: matplotlib(http://matplotlib.org/).
  • Indicator de progres: tqdm(https://pypi.python.org/pypi/tqdm).

Trebuie spus că nu folosesc Anaconda(https://www.continuum.io/downloads). Anaconda Combină majoritatea bibliotecilor populare și simplifică foarte mult procesul de instalare, dar am nevoie de mai multă libertate. Depinde de tine să decizi. 🙂

Cadru de învățare automată

În 2015, am introdus conceptul de cadru automatizat de învățare automată. Sistemul este încă în curs de dezvoltare, dar va fi lansat în curând. Structura cadrului, care va servi drept bază pentru prezentarea ulterioară, este prezentată în figura de mai jos.

Figura din publicație: Thakur A., ​​​​Krohn-Grimberge A. AutoCompete: un cadru pentru competițiile de învățare automată. (A. Thakur și A. Krohn-Grimberghe, AutoCompete: A Framework for Machine Learning Competitions.)

La intrare, cadrul primește date care au fost convertite anterior într-o reprezentare tabelară. Liniile roz arată direcția pentru cel mai simplu caz.

La primul pas, se determină clasa de sarcini. Acest lucru se poate face prin analiza variabilei țintă. Problema poate fi clasificarea sau regresia, clasificarea poate fi de două clase sau multiclase, clasele se pot suprapune sau nu. Odată ce clasa de probleme este definită, împărțim setul de date original în două părți și obținem un set de antrenament și un set de validare, așa cum se arată în figura de mai jos.

În cazul în care avem de-a face cu clasificare, împărțirea datelor trebuie efectuată în așa fel încât în ​​seturile rezultate raportul dintre numerele de obiecte aparținând unor clase diferite să corespundă acestui raport pentru setul de date inițial (divizare stratificată). Acest lucru se poate face cu ușurință folosind clasa StratifiedKFold biblioteci scikit-learn.

Pentru o problemă de regresie, împărțirea obișnuită folosind o clasă este potrivită KFold, care este disponibil și în bibliotecă scikitînvăţa.

În plus, pentru problema regresiei, există metode mai complexe de partiționare a datelor care asigură aceeași distribuție a variabilei țintă în seturile rezultate. Aceste abordări sunt lăsate la latitudinea cititorului să le ia în considerare în mod independent.

În exemplul de cod de mai sus, dimensiunea setului de validare ( eval_size) este 10% din setul de date original. Această valoare trebuie selectată pe baza volumului de date sursă.

După partiționarea datelor, toate operațiunile aplicate setului de antrenament trebuie să fie stocate și apoi aplicate setului de validare. Setul de validare nu trebuie niciodată combinat cu setul de antrenament. Dacă facem acest lucru, vom obține estimări foarte bune, dar modelele noastre vor fi inutile din cauza supraajustării severe.

În pasul următor, definim tipurile de caracteristici. Cele mai comune trei tipuri sunt numerice, categoriale și text. Să ne uităm la un set de date din problema populară a pasagerilor Titanic (https://www.kaggle.com/c/titanic/data).

În acest set de date, coloana supravieţuire conţine variabila ţintă. În pasul anterior, am separat deja variabila țintă de caracteristici. Semne pclass, sexŞi îmbarcat sunt categorice. Semne vârstă, sibsp, uscași altele asemenea sunt numerice. Semn nume este text. Cu toate acestea, nu cred că numele pasagerului va fi util pentru a prezice dacă pasagerul a supraviețuit sau nu.

Caracteristicile numerice nu trebuie convertite. Astfel de caracteristici în forma lor originală sunt pregătite pentru normalizare și formare model.

Nu uitați că înainte de utilizare OneHotEncoder, trebuie să convertiți categoriile în numere folosind LabelEncoder.

Deoarece datele din competiția Titanic nu conțin bun exemplu atribut text, să formulăm regula generala transformarea caracteristicilor textului. Putem combina toate caracteristicile textului într-una singură și apoi să aplicăm algoritmii corespunzători pentru a converti textul într-o reprezentare numerică.

Caracteristicile textului pot fi combinate după cum urmează:

Apoi putem efectua conversia folosind clasa CountVectorizer sau TfidfVectorizer biblioteci scikit-learn.

De regulă, TfidfVectorizer oferă rezultate mai bune decât CountVectorizer. În practică, am aflat că următoarele valori ale parametrilor TfidfVectorizer sunt optime în majoritatea cazurilor:

Dacă aplicați vectorizatorul doar la setul de antrenament, asigurați-vă că îl salvați pe disc, astfel încât să îl puteți aplica mai târziu setului de validare.

La pasul următor, caracteristicile obținute ca urmare a transformărilor descrise mai sus sunt transferate în stivuitor. Acest nod cadru combină toate caracteristicile transformate într-o singură matrice. Vă rugăm să rețineți că în cazul nostru vorbim despre un stivuitor de caracteristici, care nu trebuie confundat cu un stivuitor model, care este o altă tehnologie populară.

Combinarea caracteristicilor se poate face folosind funcția hstack biblioteci numpy(în cazul caracteristicilor dense) sau folosind funcția hstack din modul rar biblioteci scipy(în cazul caracteristicilor rare).

În cazul în care sunt efectuate alți pași de preprocesare, de exemplu, reducerea dimensionalității sau selectarea caracteristicilor (care va fi discutată mai târziu), combinarea caracteristicilor rezultate poate fi efectuată eficient folosind clasa FeatureUnion biblioteci scikitînvăţa.

Odată ce toate caracteristicile sunt combinate într-o singură matrice, putem începe antrenarea modelelor. Deoarece caracteristicile nu sunt normalizate, în această etapă ar trebui utilizați numai algoritmi de ansamblu bazați pe arbori de decizie:

  • RandomForestClassifier
  • RandomForestRegressor
  • ExtraTreesClassifier
  • ExtraTreesRegressor
  • XGBClassifier
  • XGBRegressor

Pentru a aplica modele liniare, trebuie să normalizați caracteristicile folosind clase Normalizator sau StandardScaler biblioteci scikit-learn.

Aceste metode de normalizare oferă rezultate bune numai în cazul caracteristicilor dense. Pentru a aplica StandardScaler pentru a rarefia caracteristicile, trebuie să specificați ca parametru with_mean=Fals.

Dacă pașii de mai sus ne-au oferit un model „bun”, putem trece la reglarea hiperparametrilor. Dacă modelul nu ne mulțumește, putem continua să lucrăm cu funcțiile. În special, ca pași suplimentari putem aplica diverse tehnici de reducere a dimensionalității.

Pentru a rămâne simplu, nu vom lua în considerare analiza discriminantă liniară (LDA) și analiza discriminantă pătratică (QDA). În general, pentru a reduce dimensionalitatea datelor, este utilizată metoda analizei componentelor principale (PCA). Când lucrați cu imagini, ar trebui să începeți cu 10-15 componente și să creșteți această valoare până când rezultatul se îmbunătățește semnificativ. Când lucrați cu alte tipuri de date, puteți începe cu 50-60 de componente.

În cazul datelor text, după conversia textului într-o matrice rară, se poate aplica descompunerea valorii singulare (SVD). Implementarea descompunerii valorii singulare SVD trunchiat disponibil în bibliotecă scikit-learn.

Numărul de componente ale descompunerii valorii singulare, care, de regulă, oferă un rezultat bun în cazul caracteristicilor obținute ca urmare a transformării folosind CountVectorizer sau TfidfVectorizer, este 120 – 200. Un număr mai mare de componente vă permite să îmbunătățiți ușor rezultatul cu prețul unor costuri de calcul semnificative.

După parcurgerea pașilor descriși, nu uitați să normalizați caracteristicile pentru a putea aplica modele liniare. Apoi, putem fie să folosim funcții pregătite pentru a antrena modele, fie să efectuăm selecția caracteristicilor.

Există diferite metode de selectare a caracteristicilor. Una dintre metodele populare este algoritmul de selecție a caracteristicilor. Algoritmul greedy are schema descrisă mai jos. Pasul 1: antrenați și evaluați modelul pe fiecare dintre caracteristicile inițiale; Selectăm o caracteristică care oferă cea mai bună estimare. Pasul 2: antrenează și evaluează modelul pe perechi de caracteristici constând din cea mai bună caracteristică selectată în pasul anterior și fiecare dintre caracteristicile rămase; Selectăm cea mai bună caracteristică dintre cele rămase. Repetăm ​​pași similari până când selectăm numărul necesar de caracteristici sau până când este îndeplinit un alt criteriu. Opțiune de implementare a acestui algoritm, care utilizează aria de sub curba ROC ca metrică, este disponibil la următorul link: https://github.com/abhishekkrthakur/greedyFeatureSelection. Trebuie remarcat faptul că această implementare nu este ideală și necesită anumite modificări pentru o anumită sarcină.

Alții mai mult metoda rapida Selectarea caracteristicilor este selecția folosind unul dintre algoritmii de învățare automată care evaluează importanța caracteristicilor. De exemplu, puteți utiliza regresia logistică sau În viitor, caracteristicile selectate pot fi folosite pentru a antrena alți algoritmi.

Când efectuați selecția caracteristicilor folosind o pădure aleatorie, rețineți că numărul de copaci ar trebui să fie mic și nu ar trebui să faceți o reglare extinsă a hiperparametrilor, altfel poate apărea o supraadaptare.

Selectarea caracteristicilor poate fi efectuată și folosind algoritmi bazați pe creșterea gradientului. Se recomandă utilizarea bibliotecii xgboostîn locul implementării corespunzătoare din scikit-learn, de la implementare xgboost mult mai rapid și scalabil.

Algoritmi RandomForestClassifier, RandomForestRegressorŞi xgboost permite, de asemenea, selectarea caracteristicilor în cazul datelor rare.

Altul tehnologie populară selecția caracteristicilor nenegative este selecția bazată pe criteriul chi-pătrat. O implementare a acestei metode este disponibilă și în bibliotecă scikit-learn.

În codul de mai sus folosim clasa SelectațiKBcel mai bunîmpreună cu testul chi-pătrat ( chi2 ) pentru a selecta cele mai bune 20 de caracteristici. Numărul de caracteristici care trebuie selectate este în esență un hiperparametru care trebuie optimizat pentru a îmbunătăți rezultatul modelului.

Nu uitați să salvați toate transformatoarele pe care le-ați aplicat la setul de antrenament. Acestea vor fi necesare pentru evaluarea modelelor pe setul de validare.

Următorul pas este să selectați un algoritm de învățare automată și să reglați hiperparametrii.

În general, atunci când alegeți un algoritm de învățare automată, trebuie să luați în considerare următoarele opțiuni:

  • Clasificare:
    • pădure aleatorie.
    • Regresia logistică.
    • Bayes naiv.
    • Metoda k-cei mai apropiati vecini.
  • Regresie:
    • pădure aleatorie.
    • Creșterea gradientului.
    • Regresia liniară.
    • Regresia crestei.
    • Regresie lazo.
    • Suportă metoda mașinii vectoriale.

Tabelul de mai jos prezintă principalii hiperparametri ai fiecărui algoritm și intervalele de valori optime ale acestora.

Eticheta RS*în tabel înseamnă că este imposibil să indicați valorile optime și ar trebui să efectuați căutare aleatorie(căutare aleatorie).

Permiteți-mi să vă reamintesc încă o dată, nu uitați să salvați toate convertoarele aplicate:

Și nu uitați să le aplicați setului de validare:

Abordarea pe care am discutat-o ​​și cadrul bazat pe acesta au arătat rezultate bune pe majoritatea seturilor de date cu care am lucrat. Desigur, atunci când se rezolvă probleme foarte complexe, această tehnică nu dă întotdeauna rezultate bune. Nimic nu este perfect, dar învățând ne îmbunătățim. La fel cum se întâmplă în învățarea automată.

În procesul de pregătire a sarcinii pentru testul de admitere la școala de vară GoTo, am descoperit că practic nu există o descriere calitativă a principalelor metrici de clasare în limba rusă (sarcina a vizat un caz special al problemei de clasare - construirea unui algoritm de recomandare) . Noi, cei de la E-Contenta, folosim în mod activ diverse valori de clasare, așa că am decis să corectăm această neînțelegere scriind acest articol.

Sarcina de a clasifica acum apare peste tot: sortarea paginilor web în funcție de o anumită interogare de căutare, personalizarea fluxului de știri, recomandarea de videoclipuri, produse, muzică... Într-un cuvânt, subiectul este fierbinte. Există chiar și o direcție specială în învățarea automată care studiază algoritmii de clasare capabili de auto-învățare - învățarea să ierarhească. Pentru a-l alege pe cel mai bun din varietatea de algoritmi și abordări, trebuie să puteți evalua calitatea acestora cantitativ. Cele mai comune valori ale calității clasamentului vor fi discutate în continuare.

Pe scurt despre sarcina de clasare

Clasamentul este problema sortării unui set elemente din motivele lor relevanţă. Cel mai adesea, relevanța este înțeleasă în raport cu cineva obiect. De exemplu, într-o sarcină de căutare de informații, obiectul este o solicitare, elementele sunt tot felul de documente (legături către acestea), iar relevanța este corespondența documentului cu cererea în sarcina de recomandare, obiectul este utilizatorul; , elementele sunt cutare sau cutare conținut recomandat (produse, videoclipuri, muzică), iar relevanța este probabilitatea ca utilizatorul să folosească (cumpără/aprecieze/vizualizează) acest conținut.

În mod formal, luați în considerare N obiecte și M elemente. Rezultatul operațiunii algoritmului de ierarhizare a elementelor pentru un obiect este o mapare care asociază fiecare element cu o pondere care caracterizează gradul de relevanță a elementului pentru obiect (cu cât greutatea este mai mare, cu atât obiectul este mai relevant). În acest caz, setul de ponderi specifică o permutare asupra unui set de elemente (presupunem că setul de elemente este ordonat) pe baza sortării lor în greutate descendentă.

Pentru a evalua calitatea clasamentului, este necesar să existe un „standard” cu care să poată fi comparate rezultatele algoritmului. Să luăm în considerare funcția de relevanță de referință, care caracterizează relevanța „reală” a elementelor pentru a acestui obiect( - elementul este ideal, - complet irelevant), precum și permutarea corespunzătoare (în ordine descrescătoare).

Există două modalități principale de a primi:
1. Pe baza datelor istorice. De exemplu, în cazul recomandărilor de conținut, puteți lua opiniile utilizatorului (aprecieri, achiziții) și puteți atribui ponderile articolelor vizualizate la 1 () și toate celelalte - 0.
2. Pe baza evaluării experților. De exemplu, într-o sarcină de căutare, pentru fiecare cerere puteți implica o echipă de evaluatori care va evalua manual relevanța documentelor pentru cerere.

Este de remarcat faptul că atunci când iau doar valori extreme: 0 și 1, atunci aranjamentul nu este de obicei luat în considerare și se ia în considerare doar setul de elemente relevante pentru care.

Scopul clasificării valorii calității- determinați în ce măsură corespund estimările de relevanță obținute de algoritm și permutarea corespunzătoare adevărat valori de relevanță. Să ne uităm la principalele valori.

Precizie medie medie

Precizia medie medie la K (map@K) este una dintre cele mai frecvent utilizate valori ale calității clasamentului. Pentru a înțelege cum funcționează, să începem cu „elementele de bază”.

Notă: metrica „*precizie” este utilizată în problemele binare, unde ia doar două valori: 0 și 1.

Precizie la K

Precizie la K (p@K)- acuratețea pe K elemente - o măsură de bază a calității clasamentului pentru un obiect. Să presupunem că algoritmul nostru de clasare produce scoruri de relevanță pentru fiecare articol. Selectând primele elemente cu cele mai mari dintre ele, puteți calcula proporția celor relevante. Exact asta face precizia la K:

Notă: ne referim la elementul care, ca urmare a rearanjarii, a ajuns în poziţia -a. Deci, - elementul cu cel mai mare, - elementul cu al doilea ca mărime și așa mai departe.

Precizie medie la K

Precizia la K este o metrică ușor de înțeles și implementat, dar are un dezavantaj important - nu ține cont de ordinea elementelor din „sus”. Deci, dacă din zece elemente am ghicit doar unul, atunci nu contează în ce loc se afla: primul, sau ultimul, în orice caz. Este evident că prima variantă este mult mai bună.

Acest dezavantaj este atenuat de metrica de clasare precizie medie la K (ap@K), care este egală cu suma p@k peste indicii k de la 1 la K numai pentru elementele relevante, împărțit la K:

Deci, dacă din trei elemente doar cel de pe ultimul loc s-a dovedit a fi relevant, atunci , dacă am ghicit doar pe cel care era pe primul loc, atunci , și dacă le-am ghicit pe toate, atunci .

Acum ne putem ocupa și de map@K.

Precizie medie medie la K

Precizie medie medie la K (hartă@K)- una dintre cele mai frecvent utilizate valori ale calității clasamentului. În p@K și ap@K, calitatea clasamentului este evaluată pentru un singur obiect (utilizator, interogare de căutare). În practică, există multe obiecte: avem de-a face cu sute de mii de utilizatori, milioane de interogări de căutare etc. Ideea map@K este de a calcula ap@K pentru fiecare obiect și medie:

Notă: această idee este destul de logică dacă presupunem că toți utilizatorii sunt la fel de necesari și la fel de importanți. Dacă nu este cazul, atunci în loc de mediere simplă, puteți utiliza o medie ponderată, înmulțind ap@K al fiecărui obiect cu greutatea corespunzătoare „importanței” acestuia.

Câștig cumulativ cu reducere normalizat

Câștig cumulat normalizat redus (nDCG) este o altă măsură comună privind calitatea clasamentului. Ca și în cazul map@K, să începem cu elementele de bază.

Câștig cumulativ la K

Să ne uităm din nou la un obiect și la elementele cu cel mai mare . Câștig cumulat la K (CG@K)- o metrică de clasare de bază care folosește o idee simplă: cu cât elementele din acest top sunt mai relevante, cu atât mai bine:

Această metrică are dezavantaje evidente: nu este normalizată și nu ține cont de poziția elementelor relevante.

Rețineți că, spre deosebire de p@K, CG@K poate fi folosit și în cazul valorilor de relevanță de referință non-binare.

Câștigul cumulat redus la K

Câștig cumulat redus la K (DCG@K)- modificarea câștigului cumulat la K, ținând cont de ordinea elementelor din listă prin înmulțirea relevanței elementului cu o pondere egală cu logaritmul invers al numărului de poziție:

Notă: dacă ia doar valorile 0 și 1, atunci, iar formula ia o formă mai simplă:

Utilizarea logaritmului ca funcție de actualizare poate fi explicată prin următoarele considerații intuitive: din punct de vedere al clasamentului, pozițiile de la începutul listei sunt mult mai diferite decât pozițiile de la sfârșitul listei. Deci, în cazul unui motor de căutare, există un întreg abis între pozițiile 1 și 11 (doar în câteva cazuri din o sută utilizatorul trece dincolo de prima pagină rezultatele căutării), dar nu este mare diferență între pozițiile 101 și 111 - puțini oameni ajung la ele. Aceste considerații subiective sunt frumos exprimate folosind logaritmul:

Câștigul cumulat redus rezolvă problema luării în considerare a poziției elementelor relevante, dar doar agravează problema cu lipsa normalizării: dacă variază în , ia deja valori pe un segment care nu este complet clar. Următoarea măsurătoare este concepută pentru a rezolva această problemă

Câștigul cumulativ redus normalizat la K

După cum puteți ghici din nume, câștig cumulat normalizat redus la K (nDCG@K)- nimic mai mult decât o versiune normalizată a DCG@K:

unde este valoarea maximă (I - ideală). Din moment ce am fost de acord că ia valori în , atunci .

Astfel, moștenește din luarea în considerare a poziției elementelor din listă și, în același timp, ia valori în intervalul de la 0 la 1.

Notă: prin analogie cu map@K, puteți calcula , mediat pe toate obiectele.

rang reciproc mediu

rang reciproc mediu (MRR) este o altă valoare a calității clasamentului folosită frecvent. Este dat de următoarea formulă:

Unde - rang reciproc pentru al-lea obiect - o valoare foarte simplă în esența sa, egală cu rangul invers al primului element ghicit corect.

Rangul reciproc mediu variază într-un interval și ia în considerare poziția elementelor. Din păcate, face acest lucru doar pentru un element - primul prezis corect, fără să acorde atenție tuturor celor ulterioare.

Valori bazate pe corelarea rangului

Separat, merită evidențiate valorile de clasare a calității pe baza unuia dintre coeficienți corelație de rang. În statistică, un coeficient de corelație de rang este un coeficient de corelație care ia în considerare nu valorile în sine, ci doar rangul (ordinea). Să luăm în considerare cei mai comuni doi coeficienți de corelare a rangului: coeficienții Spearman și Kendall.

Coeficientul de corelare a rangului lui Kendall

Primul dintre acestea este coeficientul de corelație Kendall, care se bazează pe numărarea consistentă
(și inconsecvente) perechi de permutări - perechi de elemente cărora permutările au fost atribuite în aceeași ordine (diferită):

Coeficientul de corelare a rangului lui Spearman

Al doilea - coeficientul de corelare a rangului lui Spearman - nu este în esență altceva decât corelația Pearson calculată pe valorile rangului. Există o formulă destul de convenabilă care o exprimă direct din rânduri:

unde este coeficientul de corelație Pearson.

Metricile bazate pe corelarea rangului au un dezavantaj care ne este deja cunoscut: nu iau în considerare poziția elementelor (chiar mai proastă decât p@K, deoarece corelația se calculează pe toate elementele, și nu peste K elemente cu cel mai înalt rang). Prin urmare, în practică sunt folosite extrem de rar.

Metrici bazate pe modelul de comportament în cascadă

Până în acest moment, nu am aprofundat în modul în care utilizatorul (ne vom uita mai departe caz special obiect - utilizatorul) studiază elementele care i se oferă. De fapt, am făcut implicit presupunerea că vizualizarea fiecărui element independent din vizualizarea altor elemente - un fel de „naivitate”. În practică, elementele sunt adesea vizualizate de utilizator unul câte unul și dacă utilizatorul le vede elementul următor, depinde de satisfacția lui față de cele anterioare. Să ne uităm la un exemplu: ca răspuns la interogare de căutare Algoritmul de clasare a oferit utilizatorului mai multe documente. Dacă documentele din pozițiile 1 și 2 s-au dovedit a fi extrem de relevante, atunci probabilitatea ca utilizatorul să vadă documentul în poziția 3 este mică, deoarece va fi destul de mulțumit de primele două.

Se numesc modele similare de comportament al utilizatorului, unde studiul elementelor oferite acestuia are loc secvenţial, iar probabilitatea de vizualizare a unui element depinde de relevanţa celor anterioare. în cascadă.

Rangul reciproc așteptat

Clasament reciproc așteptat (ERR)- un exemplu de măsurare a calității clasamentului bazată pe model în cascadă. Este dat de următoarea formulă:

unde rangul este înțeles în ordine descrescătoare. Cel mai interesant lucru despre această măsurătoare sunt probabilitățile. La calcularea acestora, se folosesc ipotezele modelului în cascadă:

unde este probabilitatea ca utilizatorul să fie mulțumit de un obiect cu rang . Aceste probabilități sunt calculate pe baza valorilor lui . Deoarece în cazul nostru, putem lua în considerare o opțiune simplă:

care poate fi citit ca: adevărata relevanță a elementului în poziție În sfârșit, iată câteva link-uri utile:

1

În ultimii ani, s-a acordat multă atenție reconstrucției imaginii, astfel încât evaluarea calității este o sarcină importantă pentru comparație. diverse metode recuperarea imaginii. În multe cazuri, metodele de reconstrucție au ca rezultat o textură și o structură neclare atunci când reconstruiesc zone mari cu valori de pixeli distorsionate. În prezent, lipsește o evaluare cantitativă obiectivă a rezultatelor restaurării și, prin urmare, multe abordări se bazează pe evaluarea experților. Acest articol discută noua abordare evaluarea calității restaurării imaginilor pe baza învățării automate folosind un model de viziune umană, care constă în faptul că zonele locale ale imaginilor pot fi reprezentate prin descriptori sub forma anumitor distribuții parametrice. Regresia mașinii vectoriale de suport prezice apoi calitatea percepută a imaginilor reconstruite conform aprecierii experților. Lucrarea demonstrează că evaluarea calității obținută prin abordarea de mai sus se corelează cu o evaluare subiectivă a calității.

învățarea automată

calitate vizuală

reconstrucţie

prelucrarea imaginilor

1. Gastaldo P. Soluții de învățare automată pentru evaluarea obiectivă a calității vizuale / al 6-lea atelier internațional de procesare video și metrici de calitate pentru electronice de larg consum, VPQM. - Vol. 12. - 2012.

2. Bertalmio M., Bertozzi A., Sapiro G. Navier-Stokes, fluid dynamics, and image and video inpainting/ Hawaii: Proc. IEEE Computer Vision and Pattern Recognition (CVPR). - 2001.–PP. 213–226.

3. Criminisi A., Perez P., Toyama K. Regiune filling și obiect eliminarea prin imaginea pe bază de exemplare / IEEE Trans. Procesul de imagine. - 13(9) . - 2004. - PP. 28–34.

4. Vijay M., Cheung, S.S. Analiza calității picturii imaginilor bazate pe urmărirea ochilor și procesarea imaginii (ICIP), a 17-a Conferință internațională IEEE despre IEEE. - 2010. - PP. 1109 - 1112.

5. Ardis P.A., Singhal A. Visual salience metrics for image inpainting / SPIE Electronic Imaging. Societatea Internationala pentru Optica si Fotonica. - 2009.

6. Cheung S.S., Zhao J., Venkatesh V. Efficient object-based video inpainting / Image Processing, 2006 IEEE International Conference on. - 2006. - PP. 705-708.

7. Peretyagin G.I. Reprezentarea imaginilor prin câmpuri aleatorii gaussiene / Autometrie. – Nr. 6. – 1984. – P. 42 – 48.

8. Frantc V.A., Voroni V.V., Marchuk V.I., Sherstobitov A.I., Agaian S., Egiazarian K. Machine learning approach for objective inpainting quality assessment/ Proc. SPIE 9120, Mobile Multimedia/Procesare de imagini, securitate și aplicații. – Vol. 91200S. – 2014.

9. Paul A., Singhal A. și. Brown C. Evaluarea calității Inpainting / Journal of Electronic Imaging. – Vol. 19. – 2010. – PP. 011002-011002.

Măsurile obiective ale calității imaginii sunt o parte importantă a sistemelor de procesare a imaginii. O aplicație importantă a metricilor obiective pentru evaluarea calității imaginii este evaluarea eficienței algoritmilor și sistemelor de procesare a imaginii. În ciuda numărului mare de publicații pe această temă, problema evaluării calității imaginilor reconstruite este luată în considerare doar în câteva. În același timp, problema restabilirii zonelor de imagine pierdute a primit o atenție semnificativă în în ultima vreme.

Există două abordări posibile pentru evaluarea calității imaginilor: evaluarea cantitativă folosind metode matematice (eroare pătratică medie, norma Lp, măsuri care țin cont de particularitățile percepției imaginii de către sistemul vizual uman) și evaluarea subiectivă bazată pe evaluări ale experților.

Estimările calității obținute folosind abordările existente pot diferi semnificativ de cele obținute folosind experți umani. Majoritatea abordărilor existente pentru evaluarea calității folosesc o imagine de referință. Dar, din păcate, în multe cazuri imaginea de referință nu este disponibilă. Astfel de probleme includ și problema reconstrucției pixelilor pierduți. Astfel, sarcina de a dezvolta o metrică cantitativă pentru evaluarea calității imaginilor reconstruite este relevantă.

S-au făcut progrese semnificative în dezvoltarea evaluărilor cantitative ale calității imaginii. Cu toate acestea, criteriile introduse nu sunt suficient de perfecte. Cele mai multe încercări de a găsi estimări acceptabile ale calității imaginii se referă la cazuri speciale. Este propusă o anumită evaluare, bazată pe unele condiții prealabile fiziologice și, de cele mai multe ori, pur și simplu convenabilă pentru analiză și calcule, iar apoi sunt evaluate proprietățile acesteia. Crearea unor evaluări mai avansate ale calității imaginii este asociată cu un studiu mai aprofundat al proprietăților sistemului vizual uman.

Scopul acestei lucrări este de a dezvolta o metrică pentru evaluarea calității imaginii atunci când este procesată prin metode de reconstrucție bazate pe învățarea automată.

Model matematic

Articolul folosește notații similare cu cele adoptate în lucrare. Întreaga imagine este formată din două regiuni disjunse: regiunea reconstruită și regiunea cunoscută. Figura 1 prezintă un exemplu de amplasare a acestor zone.

Fig 1. Model imagine

Imaginea și regiunea Ω din interiorul acesteia sunt cunoscute. Sarcina de reconstrucție este de a modifica valorile pixelilor imaginii în regiunea Ω, astfel încât regiunea să nu iasă în evidență de fundalul imaginii din jur. Scopul reconstrucției poate fi acela de a restabili părțile deteriorate ale unei imagini (cum ar fi zgârieturile și crăpăturile din fotografiile vechi) sau de a elimina obiectele nedorite dintr-o imagine. Regiunea Ω prezentată în Figura 1 este întotdeauna definită de utilizator, adică definirea regiunii Ω nu face parte din problema reconstrucției.

Algoritm pentru evaluarea calității restaurării imaginii

În general, pentru a construi cu succes o metrică a calității imaginii bazată pe învățarea automată, trebuie rezolvate următoarele trei sarcini:

1. Definirea spațiului de caracteristici care servesc ca descriere a semnalelor de intrare.

2. Selectarea unei funcții de mapare din spațiul de caracteristici în spațiul de evaluare a calității.

3. Antrenarea sistemului și verificarea stabilității acestuia (verificarea supraantrenamentului etc.).

Diagrama bloc a abordării alese este prezentată în Figura 2 și conține următorii pași:

1. Selectarea unei zone de interes (folosind o hartă a atenției);

2. Calculul caracteristicilor imaginii de nivel scăzut;

3. Construirea unui descriptor al zonei restaurate pe baza caracteristicilor de nivel scăzut;

4. Rezolvarea problemei de regresie în vederea obținerii unei evaluări numerice a calității pe baza vectorului descriptor rezultat.

Orez. 2. Organigrama algoritmului

Lucrarea arată că atenția vizuală joacă un rol important în percepția vizuală umană. În orice moment, ochiul uman vede clar doar o mică parte a scenei, în timp ce o zonă mult mai mare a scenei este percepută ca „încețoșată”. Această „informație neclară” este suficientă pentru a aprecia importanța diferitelor zone ale scenei și pentru a îndrepta atenția către zone importante ale câmpului vizual. Majoritatea metodelor produc o hartă a atenției - o imagine bidimensională în care valoarea fiecărui pixel este asociată cu importanța regiunii corespunzătoare.

Pentru a obține hărți de atenție, folosim Cutia de instrumente de probă, descrisă în lucrare. Acest set instrumentele utilizează un model al sistemului vizual uman. Este important de reținut că nu are rost să comparăm zona reconstruită în imaginile originale și reconstruite, deoarece conținutul general se poate schimba semnificativ. Pentru a selecta zonele de interes, se recomandă utilizarea următoarei expresii:

.

Iată harta atenției pentru imaginea reconstruită, iar valoarea hărții atenției corespunzătoare pixelului este . În expresia de mai sus, densitatea privirii este calculată în interiorul și în afara regiunii imaginii reconstruite. Valoarea este folosită ca prag atunci când se decide ce părți ale imaginii vor fi utilizate în evaluare și care nu. Doar acele zone pentru care .

Reprezentările spectrale sunt utilizate ca caracteristici de nivel scăzut ale zonelor locale. În continuare, propunem o analiză a următoarelor baze Fourier, Walsh și Haar folosind vectorul de eficiență. Pentru a calcula corect componentele unui criteriu de eficiență a sistemului în prezența interferenței și a distorsiunii, este nevoie de utilizarea mediei statistice.

La sintetizarea algoritmilor și sistemelor de procesare a semnalului, se folosește cel mai adesea criteriul riscului mediu minim, ceea ce permite să se ia în considerare statisticile interferențelor și semnalelor. La implementarea transformărilor de frecvență și estimarea costurilor de calcul, alegerea bazei pentru descompunerea spectrală este esențială. Pentru a optimiza alegerea bazei de descompunere a semnalului, este recomandabil să se utilizeze criteriul de risc mediu minim. Pentru a face acest lucru, este necesar ca clasa de semnale și procese utilizate să fie specificată și să fie cunoscute caracteristicile probabilistice ale acestora.

Pentru o anumită clasă de procese bidimensionale, se presupune că probabilitatea fiecărei subclase este cunoscută, unde indicele este numărul subclasei cu unele proprietăți comune și este numărul implementării procesului celui de-al-lea. subclasă. Vom compara un anumit set de sisteme de bază Expansiunea într-o serie Fourier generalizată în sistemul de bază în formă generală are forma: .

Pentru un număr finit de termeni ai seriei Fourier, acesta poate fi caracterizat prin eroarea: , unde este distanța într-o anumită metrică, este suma parțială a termenilor seriei Fourier.

Determinarea hardware a coeficienților seriei Fourier sau calcularea acestora este asociată cu anumite costuri de calcul. Să introducem o funcție de pierdere care ia în considerare atât pierderile asociate cu eroarea de trunchiere a seriei Fourier, cât și costurile hardware-ului și resurselor de calcul:

.

Valoarea riscului condiționat depinde atât de subclasa semnalului, cât și de bază și este calculată prin mediarea funcției de pierdere pe implementări:

unde este densitatea de probabilitate a semnalelor analizate și a interferenței; iar parantezele unghiulare indică operaţia de mediere statistică.

Riscul mediu este determinat prin medierea riscului condiționat între subclasele de semnal:

,

unde este probabilitatea subclasei de semnale.

În conformitate cu criteriul riscului mediu minim, din baze se selectează cel pentru care riscul mediu este minim.

Pentru a evalua eficacitatea criteriului de sistem pentru calitatea procesării imaginii, imaginile de testare sunt luate în considerare sub formă de texturi obținute pe baza modelării câmpurilor gaussiene cu funcții de corelație date. Generarea de câmpuri aleatoare normale omogene, precum și de procese aleatoare normale staționare, se realizează cel mai simplu prin metoda filtrului de modelare.

Ca exemplu, articolul are în vedere reprezentarea realizărilor aleatoare cu diverse funcții de corelație în bazele funcțiilor trigonometrice (Fourier), Walsh și Haar. Să efectuăm analiza în bazele selectate pentru modelele de imagini create cu dimensiunile de 256 pe 256 pixeli. Să definim, de asemenea, trei tipuri de distribuții de probabilitate ale subclaselor: 1) uniformă: ; 2) descrescătoare: ;
3) crescând: . Să alegem o funcție de cost sub forma: .

Riscul mediu este determinat prin mediarea riscului condiționat între subclasele de semnal utilizând probabilitățile a priori acceptate ale subclaselor de semnal, valorile calculate sunt prezentate în Tabelul 1.

Tabelul 1

Valori medii de risc

Tipuri de distribuții de probabilitate

Rezultatele calculelor prezentate în tabel arată că pentru modelele acceptate de semnale bidimensionale și distribuțiile lor de probabilitate, baza Haar are cel mai mic risc mediu, iar baza Fourier are cel mai mare.

Pe baza analizei, vom selecta o bază Haar pentru a reprezenta zonele locale de imagini. Trebuie remarcat faptul că dimensiunea zonei reconstruite variază pentru diferite imagini. În acest sens, pe baza caracteristicilor de nivel scăzut, ar trebui să se formeze o reprezentare la nivel înalt a unei dimensiuni fixe. Abordarea sac de cuvinte este folosită ca o reprezentare la nivel înalt. Procedura de construire a unui descriptor (semnătură) a zonei reconstruite constă în două etape. Primul pas este construirea unui dicționar. Acest lucru se face folosind caracteristici de nivel scăzut extrase din toate imaginile din setul de imagini de antrenament. Pentru a construi dicționarul, caracteristicile extrase sunt împărțite în 100 de clase folosind algoritmul de grupare k-means. Fiecare element de dicționar reprezintă un centroid pentru una dintre clasele găsite prin procedura de grupare. Fiecare cuvânt din dicționar reprezintă o transformare Haar într-un bloc de imagini 8x8. Dicționarul rezultat este utilizat în a doua etapă la construirea histogramelor de frecvență pentru cuvintele din dicționar ca vector caracteristic - un descriptor al zonei reconstruite (Fig. 3). Setul rezultat de descriptori este folosit pentru a antrena o mașină de regresie (Support Vector Regression). Pentru a obține o histogramă a frecvențelor cuvintelor, toate regiunile vizibile vizibile (solința este determinată folosind hărți de atenție) ale unei anumite imagini sunt extrase din dicționar. Transformarea Haar este apoi aplicată fiecăruia dintre blocurile extrase și clasificarea este efectuată conform dicționarului rezultat pe baza distanței euclidiene.

Fiecare bin din histograma rezultată conține numărul de caracteristici de nivel scăzut ale unei anumite clase într-o anumită regiune reconstruită. După normalizarea histogramei, se obține o „semnătură” a imaginii - o reprezentare la nivel înalt a zonei reconstruite.

Fig.3. Construirea unei histograme

Evaluarea eficacității unui algoritm pentru evaluarea calității restaurării imaginii

Pentru a evalua eficacitatea metricii dezvoltate, a fost utilizat un set de imagini de testare. Setul este format din 300 de imagini. Ca metode de restaurare au fost alese următoarele abordări: o metodă bazată pe căutarea regiunilor autosimilare, o metodă bazată pe transformări spectrale, o metodă bazată pe calculul derivatelor parțiale. Pentru fiecare imagine a fost obținută o evaluare de specialitate, care a implicat 30 de persoane. Rezultatele au fost împărțite în două seturi care nu se suprapun. Primul a fost folosit pentru antrenament, iar al doilea a fost folosit pentru a testa rezultatul.

Experții au evaluat calitatea pe o scară în care 5 corespunde „Excelent” și 1 corespunde „Foarte slab”. Pentru aprecierea eficacității metricii rezultate se utilizează coeficientul de corelație între vectorii obținuți cu ajutorul metricii obiective și metoda expertă a evaluărilor calității. Analiza rezultatelor obținute în Tabelul 2 arată că abordarea propusă depășește valorile de calitate cunoscute pe setul de date de testare selectat.

Tabelul 2

Coeficient de corelație pentru diferite metode de calcul al obiectivului
valorile calității imaginii

Abordare propusă

Concluzie

Articolul prezintă o măsură obiectivă pentru evaluarea calității imaginii pe baza învățării automate. Măsurile cantitative ale calității imaginii sunt necesare pentru proiectarea și evaluarea sistemelor de redare a imaginii. Aceste măsuri vor contribui în mare măsură către eliminarea metodei actuale de evaluare a imaginii care necesită multă muncă și inexacte prin examinare subiectivă. În plus, se pot dezvolta metode de optimizare a sistemelor de procesare a imaginilor pe baza unor măsuri cantitative. S-a demonstrat că evaluarea calității obținută prin abordarea de mai sus se corelează cu evaluarea subiectivă a calității.

Lucrarea a fost susținută de Ministerul Educației și Științei din Rusia în cadrul Programului țintă federal „Cercetare și dezvoltare în domenii prioritare de dezvoltare a complexului științific și tehnologic al Rusiei pentru 2014-2020” (acordul nr. 14.586.21.0013) ).

Recenzători:

Fedosov V.P., doctor în științe tehnice, profesor, șef al Departamentului de Dezvoltare Avansată, Academiei de Inginerie și Tehnologie a Universității Federale de Sud, Rostov-pe-Don;

Marchuk V.I., doctor în științe tehnice, profesor, șef al Departamentului de sisteme și complexe radioelectronice și electrice al ISOiP (filiala DSTU), Shakhty.

Link bibliografic

Voronin V.V. EVALUAREA CALITĂȚII RESTAURĂRII IMAGINII PE BAZĂ DE ÎNVĂȚAREA MACHINELOR // Probleme contemporaneștiință și educație. – 2014. – Nr 6.;
URL: http://science-education.ru/ru/article/view?id=16294 (data acces: 02/01/2020). Vă aducem în atenție reviste apărute la editura „Academia de Științe ale Naturii”

Pe baza fluxului de clienți operatori de telecomunicații.


Să descarcăm bibliotecile necesare și să ne uităm la date

import panda ca pd import matplotlib.pyplot ca plt din matplotlib.pylab import rc, plot import seaborn ca sns din sklearn.preprocessing import LabelEncoder, OneHotEncoder din sklearn.model_selection import cross_val_score din sklearn.linearsklearns entBoostingClassifier din sklearn.metrics import precision_recall_curve, classification_report din sklearn.model_selection import train_test_split df = pd.read_csv("../../data/telecom_churn.csv")


df.head(5)

Preprocesarea datelor

# Să mapam coloanele binare # și să codificăm manechinul personalului (pentru simplitate, este mai bine să nu faceți acest lucru pentru modelele din lemn) d = ("Da" : 1, "Nu" : 0) df["Plan internațional"] = df [" Plan internațional"].map(d) df["Voice mail plan"] = df["Voice mail plan"].map(d) df["Churn"] = df["Churn"].astype(" int64" ) le = LabelEncoder() df["State"] = le.fit_transform(df["State"]) ohe = OneHotEncoder(sparse=False) encoded_state = ohe.fit_transform(df["State"].values.reshape (- 1, 1)) tmp = pd.DataFrame(coded_state, columns=["state " + str(i) pentru i în interval(encoded_state.shape)]) df = pd.concat(, axis=1)

Acuratețe, precizie și reamintire

Înainte de a trece la valorile în sine, este necesar să se introducă un concept important pentru descrierea acestor metrici în termeni de erori de clasificare - matricea de confuzie(matricea erorilor).
Să presupunem că avem două clase și un algoritm care prezice că fiecare obiect aparține uneia dintre clase, atunci matricea erorilor de clasificare va arăta astfel:


Adevărat pozitiv (TP) fals pozitiv (FP)
fals negativ (FN) Adevărat negativ (TN)

Aici este răspunsul algoritmului asupra obiectului și este adevărata etichetă de clasă pe acest obiect.
Astfel, erorile de clasificare sunt de două tipuri: Fals Negativ (FN) și Fals Pozitiv (FP).


Antrenarea algoritmului și construirea matricei de erori

X = df.drop("Churn", axa=1) y = df["Churn"] # Împărțiți eșantionul în tren și test, toate valorile vor fi evaluate pe setul de date de testare X_train, X_test, y_train, y_test = train_test_split( X, y , stratify=y, test_size=0.33, random_state=42) # Antrenează regresia logistică nativă lr = LogisticRegression(random_state=42) lr.fit(X_train, y_train) # Utilizați funcția de construcție a matricei de erori din documentația sklearn def plot_confusion_matrix (cm, clase , normalize=False, title="Matrice de confuzie", cmap=plt.cm.Blues): """ This function prints and plots the confusion matrix. Normalization can be applied by setting `normalize=True`. """ plt.imshow(cm, interpolation="nearest", cmap=cmap) plt.title(title) plt.colorbar() tick_marks = np.arange(len(classes)) plt.xticks(tick_marks, classes, rotation=45) plt.yticks(tick_marks, classes) if normalize: cm = cm.astype("float") / cm.sum(axis=1)[:, np.newaxis] print("Normalized confusion matrix") else: print("Confusion matrix, without normalization") print(cm) thresh = cm.max() / 2. for i, j in itertools.product(range(cm.shape), range(cm.shape)): plt.text(j, i, cm, horizontalalignment="center", color="white" if cm > thresh else "black") plt.tight_layout() plt.ylabel("True label") plt.xlabel("Predicted label") font = {"size" : 15} plt.rc("font", **font) cnf_matrix = confusion_matrix(y_test, lr.predict(X_test)) plt.figure(figsize=(10, 8)) plot_confusion_matrix(cnf_matrix, classes=["Non-churned", "Churned"], title="Matricea confuziei") plt.savefig("conf_matrix.png") plt.show()!}


Precizie

O metrică intuitivă, evidentă și aproape nefolosită este acuratețea - proporția de răspunsuri corecte ale algoritmului:



Această măsurătoare este inutilă în problemele cu clase inegale și acest lucru este ușor de arătat cu un exemplu.


Să presupunem că vrem să evaluăm performanța unui filtru de e-mail spam. Avem 100 de e-mailuri non-spam, dintre care 90 clasificatorul nostru a identificat corect (Adevărat Negativ = 90, Fals Pozitiv = 10) și 10 e-mailuri spam, 5 dintre care clasificatorul a identificat și el corect (Adevărat Pozitiv = 5, Fals Negativ = 5). ).
Atunci precizia:



Cu toate acestea, dacă pur și simplu prezicem toate e-mailurile ca non-spam, vom obține o precizie mai mare:



În același timp, modelul nostru nu are deloc putere de predicție, deoarece inițial doream să identificăm e-mailurile spam. Trecerea de la o metrică comună pentru toate clasele la indicatori individuali ai calității clasei ne va ajuta să depășim acest lucru.

Precizie, rechemare și măsură F

Pentru a evalua calitatea lucrului algoritmului pe fiecare dintre clase separat, introducem precizia (precizia) și rechemarea (completitudinea) metricii.




Precizia poate fi interpretată ca proporția de obiecte numite pozitive de către clasificator și fiind de fapt pozitivă, iar reamintirea arată ce proporție de obiecte din clasa pozitivă din toate obiectele din clasa pozitivă a găsit algoritmul.



Este introducerea preciziei care nu ne permite să scriem toate obiectele într-o singură clasă, deoarece în acest caz obținem o creștere a nivelului fals pozitiv. Recall demonstrează capacitatea algoritmului de a detecta o anumită clasă în general, iar precizia demonstrează capacitatea de a distinge această clasă de alte clase.


După cum am observat mai devreme, există două tipuri de erori de clasificare: fals pozitiv și fals negativ. În statistică, primul tip de eroare se numește eroare de tip I, iar al doilea tip se numește eroare de tip II. În sarcina noastră de a determina ratarea abonaților, o eroare de primul tip va fi confundarea unui abonat fidel cu unul care părăsește, deoarece ipoteza noastră nulă este că niciunul dintre abonați nu pleacă și respingem această ipoteză. În consecință, o eroare de al doilea tip va fi „lipsirea” unui abonat care părăsește și acceptarea eronată a ipotezei nule.


Precizia și reamintirea, spre deosebire de acuratețe, nu depind de raportul de clasă și, prin urmare, sunt aplicabile în condiții de eșantioane dezechilibrate.
Adesea, în practica reală, sarcina este de a găsi echilibrul optim (pentru client) între aceste două metrici. Un exemplu clasic este sarcina de a determina rata de pierdere a clienților.
Evident că nu putem găsi toată lumea frecarea de clienti si numai lor. Dar, după ce am stabilit strategia și resursa pentru reținerea clienților, putem selecta pragurile necesare pentru precizie și rechemare. De exemplu, ne-am putea concentra pe păstrarea doar a clienților cu randament ridicat sau a celor care au șanse mai mari de a renunța, deoarece avem resurse limitate ale centrului de apeluri.


De obicei, atunci când se optimizează hiperparametrii unui algoritm (de exemplu, în cazul căutării în grilă GridSearchCV) este utilizată o măsurătoare, a cărei îmbunătățire ne așteptăm să o vedem pe proba de testare.
Sunt mai multe în diverse moduri combina precizia și rechemarea într-un criteriu de calitate agregat. Măsură F (în general) - precizie medie armonică și reamintire:



În acest caz, determină ponderea preciziei în metrică, iar aceasta este media armonică (cu un multiplicator de 2, astfel încât în ​​cazul preciziei = 1 și recall = 1)
Măsura F atinge maximul atunci când retragerea și precizia sunt egale cu unu și este aproape de zero dacă unul dintre argumente este aproape de zero.
sklearn are o funcție la îndemână numită _metrics.classification raport, care returnează rechemarea, precizia și măsura F pentru fiecare clasă, precum și numărul de instanțe ale fiecărei clase.


raport = classification_report(y_test, lr.predict(X_test), target_names="["Non-churned", "Churned")]) print(raport)
clasă precizie reamintire scor f1 sprijin
Neîntors 0.88 0.97 0.93 941
Barotat 0.60 0.25 0.35 159
medie/total 0.84 0.87 0.84 1100

Trebuie remarcat aici că în cazul problemelor cu clase dezechilibrate, care predomină în practica reală, este adesea necesar să se recurgă la tehnici de modificare artificială a setului de date pentru a egaliza raportul de clasă. Sunt multe dintre ele și nu ne vom atinge de ele, poți să te uiți la unele metode și să o alegi pe cea care se potrivește sarcinii tale.

AUC-ROC și AUC-PR

Când convertim răspunsul real al algoritmului (de obicei, probabilitatea apartenenței la clasă, vezi SVM separat) într-o etichetă binară, trebuie să alegem un prag la care 0 devine 1. Un prag de 0,5 pare natural și apropiat, dar nu se dovedește întotdeauna să fie optim, de exemplu, în lipsa de echilibru de clasă sus-menționată.


O modalitate de a evalua modelul ca întreg fără a fi legat de un anumit prag este AUC-ROC (sau ROC AUC) - zonă ( O rea U nder C urve) sub curba de eroare ( R receptor O perating C curbă caracteristică). Această curbă este o linie de la (0,0) la (1,1) în coordonate Rata pozitivă adevărată (TPR) și Rata pozitivă falsă (FPR):




TPR ne este deja cunoscut, este complet, iar FPR arată ce proporție dintre obiectele clasei negative a prezis incorect algoritmul. În cazul ideal, când clasificatorul nu face erori (FPR = 0, TPR = 1), vom obține o zonă sub curbă egală cu unu; în caz contrar, atunci când clasificatorul emite aleatoriu probabilități de clasă, AUC-ROC va tinde spre 0,5 deoarece clasificatorul va scoate același număr de TP și FP.
Fiecare punct din grafic corespunde alegerii unui anumit prag. Zona de sub curbă în acest caz arată calitatea algoritmului (mai mult este mai bine), în plus, abrupta curbei în sine este importantă - dorim să maximizăm TPR în timp ce minimizăm FPR, ceea ce înseamnă că curba noastră ar trebui să tindă în mod ideal către punctul (0,1).


Codul de desen al curbei ROC

sns.set(font_scale=1.5) sns.set_color_codes("muted") plt.figure(figsize=(10, 8)) fpr, tpr, thresholds = roc_curve(y_test, lr.predict_proba(X_test)[:,1], pos_label=1) lw = 2 plt.plot(fpr, tpr, lw=lw, label="curba ROC") plt.plot(, ) plt.xlim() plt.ylim() plt.xlabel("Rata fals pozitivă ") plt.ylabel("Rata pozitivă adevărată") plt.title("curba ROC") plt.savefig("ROC.png") plt.show()



Criteriul AUC-ROC este robust la clasele dezechilibrate (spoiler: din păcate, nu totul este atât de simplu) și poate fi interpretat ca probabilitatea ca un obiect pozitiv selectat aleatoriu să fie clasat mai sus de către clasificator (va avea o probabilitate mai mare de a fi pozitiv). ) decât un obiect negativ selectat aleatoriu .


Luați în considerare următoarea problemă: trebuie să selectăm 100 de documente relevante din 1 milion de documente. Am dezvoltat doi algoritmi:

  • Algoritmul 1 returnează 100 de documente, dintre care 90 sunt relevante. Astfel,

  • Algoritmul 2 returnează 2000 de documente, dintre care 90 sunt relevante. Astfel,


Cel mai probabil, am alege primul algoritm, care produce foarte puține False Pozitive în comparație cu concurentul său. Dar diferența este Rata fals pozitivă între acești doi algoritmi extrem mic - doar 0,0019. Aceasta este o consecință a faptului că AUC-ROC măsoară proporția de fals pozitiv în raport cu adevăratul negativ și în sarcinile în care a doua clasă (mai mare) nu este atât de importantă pentru noi, este posibil să nu ofere o imagine complet adecvată atunci când comparăm algoritmi.


Pentru a corecta situația, să revenim la completitudine și acuratețe:

  • Algoritmul 1

  • Algoritmul 2


O diferență semnificativă între cei doi algoritmi este deja vizibilă aici - 0,855 exact!


Precizia și retragerea sunt, de asemenea, folosite pentru a trasa o curbă și, similar cu AUC-ROC, pentru a găsi aria de sub ea.



Se poate remarca aici că pe seturile de date mici aria de sub curba PR poate fi prea optimistă, deoarece este calculată folosind metoda trapezoidală, dar de obicei în astfel de probleme există date suficiente. Pentru mai multe informații despre relația AUC-ROC și AUC-PR, vă rugăm să accesați aici.

Pierdere logistică

Funcția de pierdere logistică este diferită, definită ca:



aici este răspunsul algoritmului la al-lea obiect, este adevărata etichetă a clasei pe al-lea obiect și este dimensiunea eșantionului.


Interpretarea matematică a funcției de pierdere logistică a fost deja scrisă în detaliu în postarea despre modelele liniare.
Această valoare apare rar în cerințele de afaceri, dar adesea în sarcinile pe kaggle.
Intuitiv, se poate gândi la minimizarea logloss ca o problemă de maximizare a preciziei prin penalizarea predicțiilor incorecte. Cu toate acestea, trebuie remarcat faptul că logloss penalizează puternic încrederea clasificatorului în răspunsul greșit.


Să ne uităm la un exemplu:


def logloss_crutch(y_true, y_pred, eps=1e-15): return - (y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)) print("Logloss pe o clasificare incertă %f " % logloss_crutch(1, 0,5)) >> Logloss cu clasificare incertă 0,693147 print("Logloss cu clasificare sigură și răspuns corect %f" % logloss_crutch(1, 0,9)) >> Logloss cu clasificare sigură și răspuns corect 0,105361 print(" Logloss cu clasificare sigură și răspuns GREȘIT %f" % logloss_crutch(1, 0.1)) >> Logloss cu clasificare sigură și răspuns GREȘIT 2.302585

Observați cât de dramatic a crescut logloss cu un răspuns incorect și o clasificare sigură!
În consecință, o eroare pe un obiect poate duce la o deteriorare semnificativă a erorii generale pe eșantion. Astfel de obiecte sunt adesea valori aberante, care trebuie reținute pentru a fi filtrate sau considerate separat.
Totul cade la locul său dacă desenați un grafic logloss:



Se poate observa că cu cât răspunsul algoritmului este mai aproape de zero la adevărul terenului = 1, cu atât valoarea erorii este mai mare și curba crește mai abruptă.

Să rezumăm:

  • În cazul clasificării cu mai multe clase, trebuie să monitorizați cu atenție metricile fiecărei clase și să urmați logica soluției sarcini, nu optimizarea metrică
  • În cazul claselor inegale, trebuie să selectați un echilibru de clase pentru formare și o metrică care să reflecte corect calitatea clasificării
  • și madrugado pentru asistență în pregătirea articolului.



Bună, Habr!

În acest articol, vom analiza câteva criterii de calitate în problemele de clasificare, vom discuta despre ce este important atunci când alegem o valoare și ce poate merge prost.

Metrica în probleme de clasificare

Pentru demonstrație funcții utile sklearnși o reprezentare vizuală a metricilor, vom folosi setul nostru de date privind fluxul de clienți de la un operator de telecomunicații, pe care l-am întâlnit în primul articol al cursului.

Să descarcăm bibliotecile necesare și să ne uităm la date

Import panda ca pd import matplotlib.pyplot ca plt din matplotlib.pylab import rc, plot import seaborn ca sns din sklearn.preprocessing import LabelEncoder, OneHotEncoder din sklearn.model_selection import cross_val_score din sklearn.linearsklearns entBoostingClassifier din sklearn.metrics import precision_recall_curve, classification_report din sklearn.model_selection import train_test_split df = pd.read_csv("../../data/telecom_churn.csv")

Df.head(5)

Preprocesarea datelor

# Să mapam coloanele binare # și să codificăm manechinul personalului (pentru simplitate, este mai bine să nu faceți acest lucru pentru modelele din lemn) d = ("Da" : 1, "Nu" : 0) df["Plan internațional"] = df [" Plan internațional"].map(d) df["Voice mail plan"] = df["Voice mail plan"].map(d) df["Churn"] = df["Churn"].astype(" int64" ) le = LabelEncoder() df["State"] = le.fit_transform(df["State"]) ohe = OneHotEncoder(sparse=False) encoded_state = ohe.fit_transform(df["State"].values.reshape (- 1, 1)) tmp = pd.DataFrame(coded_state, columns=["state " + str(i) pentru i în interval(encoded_state.shape)]) df = pd.concat(, axis=1)

Acuratețe, precizie și reamintire

Înainte de a trece la valorile în sine, este necesar să se introducă un concept important pentru descrierea acestor metrici în termeni de erori de clasificare - matricea de confuzie(matricea erorilor).
Să presupunem că avem două clase și un algoritm care prezice că fiecare obiect aparține uneia dintre clase, atunci matricea erorilor de clasificare va arăta astfel:

Adevărat pozitiv (TP) fals pozitiv (FP)
fals negativ (FN) Adevărat negativ (TN)

acesta este răspunsul algoritmului asupra obiectului și

Eticheta adevărată a clasei de pe acest obiect.
Astfel, erorile de clasificare sunt de două tipuri: Fals Negativ (FN) și Fals Pozitiv (FP).

Antrenarea algoritmului și construirea matricei de erori

X = df.drop("Churn", axa=1) y = df["Churn"] # Împărțiți eșantionul în tren și test, toate valorile vor fi evaluate pe setul de date de testare X_train, X_test, y_train, y_test = train_test_split( X, y , stratify=y, test_size=0.33, random_state=42) # Antrenează regresia logistică nativă lr = LogisticRegression(random_state=42) lr.fit(X_train, y_train) # Utilizați funcția de construcție a matricei de erori din documentația sklearn def plot_confusion_matrix (cm, clase , normalize=False, title="Matrice de confuzie", cmap=plt.cm.Blues): """ This function prints and plots the confusion matrix. Normalization can be applied by setting `normalize=True`. """ plt.imshow(cm, interpolation="nearest", cmap=cmap) plt.title(title) plt.colorbar() tick_marks = np.arange(len(classes)) plt.xticks(tick_marks, classes, rotation=45) plt.yticks(tick_marks, classes) if normalize: cm = cm.astype("float") / cm.sum(axis=1)[:, np.newaxis] print("Normalized confusion matrix") else: print("Confusion matrix, without normalization") print(cm) thresh = cm.max() / 2. for i, j in itertools.product(range(cm.shape), range(cm.shape)): plt.text(j, i, cm, horizontalalignment="center", color="white" if cm > thresh else "black") plt.tight_layout() plt.ylabel("True label") plt.xlabel("Predicted label") font = {"size" : 15} plt.rc("font", **font) cnf_matrix = confusion_matrix(y_test, lr.predict(X_test)) plt.figure(figsize=(10, 8)) plot_confusion_matrix(cnf_matrix, classes=["Non-churned", "Churned"], title="Matricea confuziei") plt.savefig("conf_matrix.png") plt.show()!}

Precizie

O metrică intuitivă, evidentă și aproape nefolosită este acuratețea - proporția de răspunsuri corecte ale algoritmului:

Această măsurătoare este inutilă în problemele cu clase inegale și acest lucru este ușor de arătat cu un exemplu.

Să presupunem că vrem să evaluăm performanța unui filtru de e-mail spam. Avem 100 de e-mailuri non-spam, dintre care 90 clasificatorul nostru a identificat corect (Adevărat Negativ = 90, Fals Pozitiv = 10) și 10 e-mailuri spam, 5 dintre care clasificatorul a identificat și el corect (Adevărat Pozitiv = 5, Fals Negativ = 5) .
Atunci precizia:

Cu toate acestea, dacă pur și simplu prezicem toate e-mailurile ca non-spam, vom obține o precizie mai mare:

În același timp, modelul nostru nu are deloc putere de predicție, deoarece inițial am vrut să identificăm e-mailurile spam. Trecerea de la o metrică comună pentru toate clasele la indicatori individuali ai calității clasei ne va ajuta să depășim acest lucru.

Precizie, rechemare și măsură F

Pentru a evalua calitatea lucrului algoritmului pe fiecare dintre clase separat, introducem precizia (precizia) și rechemarea (completitudinea) metricii.

Precizia poate fi interpretată ca proporția de obiecte numite pozitive de către clasificator și fiind de fapt pozitivă, iar reamintirea arată ce proporție de obiecte din clasa pozitivă din toate obiectele din clasa pozitivă a găsit algoritmul.

Este introducerea preciziei care nu ne permite să scriem toate obiectele într-o singură clasă, deoarece în acest caz obținem o creștere a nivelului fals pozitiv. Recall demonstrează capacitatea algoritmului de a detecta o anumită clasă în general, iar precizia demonstrează capacitatea de a distinge această clasă de alte clase.

După cum am observat mai devreme, există două tipuri de erori de clasificare: fals pozitiv și fals negativ. În statistică, primul tip de eroare se numește eroare de tip I, iar al doilea tip se numește eroare de tip II. În sarcina noastră de a determina ratarea abonaților, o eroare de primul tip va fi confundarea unui abonat loial cu unul care părăsește, deoarece ipoteza noastră nulă este că niciunul dintre abonați nu renunță și respingem această ipoteză. În consecință, o eroare de al doilea tip va fi „lipsirea” unui abonat care părăsește și acceptarea eronată a ipotezei nule.

Precizia și reamintirea, spre deosebire de acuratețe, nu depind de raportul de clasă și, prin urmare, sunt aplicabile în condiții de eșantioane dezechilibrate.
Adesea, în practica reală, sarcina este de a găsi echilibrul optim (pentru client) între aceste două metrici. Un exemplu clasic este sarcina de a determina rata de pierdere a clienților.
Evident că nu putem găsi toată lumea frecarea de clienti si numai lor. Dar după ce am stabilit strategia și resursa pentru păstrarea clienților, putem selecta pragurile necesare pentru precizie și rechemare. De exemplu, ne putem concentra pe reținerea doar a clienților foarte profitabili sau a celor care au șanse mai mari să abandoneze, deoarece suntem limitați de resursele call center-ului.

De obicei, atunci când se optimizează hiperparametrii unui algoritm (de exemplu, în cazul căutării în grilă GridSearchCV) este utilizată o măsurătoare, a cărei îmbunătățire ne așteptăm să o vedem pe proba de testare.
Există mai multe moduri diferite de a combina precizia și rechemarea într-o măsură agregată a calității. Măsura F (în general

) - precizie medie armonică și reamintire:

în acest caz determină ponderea preciziei în metrică și la

aceasta este media armonică (cu un factor de 2, astfel încât în ​​cazul preciziei = 1 și recall = 1 avem

)
Măsura F atinge maximul atunci când retragerea și precizia sunt egale cu unu și este aproape de zero dacă unul dintre argumente este aproape de zero.
sklearn are o funcție la îndemână numită _metrics.classification raport returnarea reamintirii, preciziei și măsurării F pentru fiecare clasă, precum și numărul de instanțe ale fiecărei clase.

Raport = classification_report(y_test, lr.predict(X_test), target_names="["Non-churned", "Churned")]) print(raport)

clasă precizie reamintire scor f1 sprijin
Neîntors 0.88 0.97 0.93 941
Barotat 0.60 0.25 0.35 159
medie/total 0.84 0.87 0.84 1100

Trebuie remarcat aici că în cazul problemelor cu clase dezechilibrate, care predomină în practica reală, este adesea necesar să se recurgă la tehnici de modificare artificială a setului de date pentru a egaliza raportul de clasă. Sunt multe dintre ele și nu ne vom atinge de ele, poți să te uiți la unele metode și să o alegi pe cea care se potrivește sarcinii tale.

AUC-ROC și AUC-PR

Când convertim răspunsul real al algoritmului (de obicei, probabilitatea apartenenței la clasă, vezi SVM separat) într-o etichetă binară, trebuie să alegem un prag la care 0 devine 1. Un prag de 0,5 pare natural și apropiat, dar nu se dovedește întotdeauna să fie optim, de exemplu, în lipsa de echilibru de clasă sus-menționată.

O modalitate de a evalua modelul ca întreg fără a fi legat de un anumit prag este AUC-ROC (sau ROC AUC) - zonă ( O rea U nder C urve) sub curba de eroare ( R receptor O perating C curbă caracteristică). Această curbă este o linie de la (0,0) la (1,1) în coordonate Rata pozitivă adevărată (TPR) și Rata pozitivă falsă (FPR):

TPR ne este deja cunoscut, este complet, iar FPR arată ce proporție dintre obiectele clasei negative a prezis incorect algoritmul. În cazul ideal, când clasificatorul nu face erori (FPR = 0, TPR = 1), vom obține o zonă sub curbă egală cu unu, altfel, când clasificatorul produce aleatoriu probabilități de clasă, AUC-ROC va tinde să 0,5, deoarece clasificatorul va emite aceeași cantitate de TP și FP.
Fiecare punct din grafic corespunde alegerii unui anumit prag. Zona de sub curbă în acest caz arată calitatea algoritmului (mai mult este mai bine), în plus, abrupta curbei în sine este importantă - dorim să maximizăm TPR în timp ce minimizăm FPR, ceea ce înseamnă că curba noastră ar trebui să tindă în mod ideal către punctul (0,1).

Codul de desen al curbei ROC

Sns.set(font_scale=1.5) sns.set_color_codes("muted") plt.figure(figsize=(10, 8)) fpr, tpr, thresholds = roc_curve(y_test, lr.predict_proba(X_test)[:,1], pos_label=1) lw = 2 plt.plot(fpr, tpr, lw=lw, label="curba ROC") plt.plot(, ) plt.xlim() plt.ylim() plt.xlabel("Rata fals pozitivă ") plt.ylabel("Rata pozitivă adevărată") plt.title("curba ROC") plt.savefig("ROC.png") plt.show()

Criteriul AUC-ROC este robust la clasele dezechilibrate (spoiler: din păcate, nu totul este atât de simplu) și poate fi interpretat ca probabilitatea ca un obiect pozitiv selectat aleatoriu să fie clasat mai sus de către clasificator (va avea o probabilitate mai mare de a fi pozitiv). ) decât un obiect negativ selectat aleatoriu.

Luați în considerare următoarea problemă: trebuie să selectăm 100 de documente relevante din 1 milion de documente. Am dezvoltat doi algoritmi:

  • Algoritmul 1 returnează 100 de documente, dintre care 90 sunt relevante. Astfel,
  • Algoritmul 2 returnează 2000 de documente, dintre care 90 sunt relevante. Astfel,

Cel mai probabil, am alege primul algoritm, care produce foarte puține False Pozitive în comparație cu concurentul său. Dar diferența este Rata fals pozitivă între acești doi algoritmi extrem mic - doar 0,0019. Aceasta este o consecință a faptului că AUC-ROC măsoară proporția de fals pozitiv în raport cu adevăratul negativ și în sarcinile în care a doua clasă (mai mare) nu este atât de importantă pentru noi, este posibil să nu ofere o imagine complet adecvată atunci când comparăm algoritmi.

Pentru a corecta situația, să revenim la completitudine și acuratețe:

  • Algoritmul 1
  • Algoritmul 2

O diferență semnificativă între cei doi algoritmi este deja vizibilă aici - 0,855 exact!

Precizia și retragerea sunt, de asemenea, folosite pentru a trasa o curbă și, similar cu AUC-ROC, pentru a găsi aria de sub ea.

Se poate remarca aici că pe seturile de date mici aria de sub curba PR poate fi prea optimistă, deoarece este calculată folosind metoda trapezoidală, dar de obicei în astfel de probleme există date suficiente. Pentru mai multe informații despre relația AUC-ROC și AUC-PR, vă rugăm să accesați aici.

Pierdere logistică

Funcția de pierdere logistică este diferită, definită ca:

acesta este răspunsul algoritmului la

O obiect,

adevărata etichetă de clasă activată

oh obiect, și

dimensiunea eșantionului.

Interpretarea matematică a funcției de pierdere logistică a fost deja scrisă în detaliu în postarea despre modelele liniare.
Această valoare apare rar în cerințele de afaceri, dar adesea în sarcinile pe kaggle.
Intuitiv, se poate gândi la minimizarea logloss ca o problemă de maximizare a preciziei prin penalizarea predicțiilor incorecte. Cu toate acestea, trebuie remarcat faptul că logloss penalizează puternic încrederea clasificatorului în răspunsul greșit.

Să ne uităm la un exemplu:

Def logloss_crutch(y_true, y_pred, eps=1e-15): return - (y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred)) print("Logloss pe o clasificare incertă %f " % logloss_crutch(1, 0,5)) >> Logloss cu clasificare incertă 0,693147 print("Logloss cu clasificare sigură și răspuns corect %f" % logloss_crutch(1, 0,9)) >> Logloss cu clasificare sigură și răspuns corect 0,105361 print(" Logloss cu clasificare sigură și răspuns GREȘIT %f" % logloss_crutch(1, 0.1)) >> Logloss cu clasificare sigură și răspuns GREȘIT 2.302585

Să observăm cât de dramatic a crescut logloss cu un răspuns incorect și o clasificare sigură!
În consecință, o eroare pe un obiect poate duce la o deteriorare semnificativă a erorii generale pe eșantion. Astfel de obiecte sunt adesea valori aberante, care trebuie reținute pentru a fi filtrate sau considerate separat.
Totul cade la locul său dacă desenați un grafic logloss:

Se poate observa că, cu cât răspunsul algoritmului este mai aproape de zero la adevărul terenului = 1, cu atât valoarea erorii este mai mare și curba crește mai abruptă.

Pentru a rezuma:

  • În cazul clasificării cu mai multe clase, trebuie să monitorizați cu atenție metricile fiecărei clase și să urmați logica soluției sarcini, nu optimizarea metrică
  • În cazul claselor inegale, trebuie să selectați un echilibru de clase pentru formare și o metrică care să reflecte corect calitatea clasificării
  • Alegerea metricii ar trebui să se facă cu accent pe domeniul subiectului, preprocesarea datelor și, eventual, segmentarea (ca și în cazul împărțirii în clienți bogați și săraci)

Link-uri utile

  1. Curs de Evgeny Sokolov: Seminar privind alegerea modelelor (există informații despre metrici pentru problemele de regresie)
  2. Probleme pe AUC-ROC de la A.G. Dyakonova
  3. Puteți citi mai multe despre alte valori pe kaggle. La descrierea fiecărei valori a fost adăugat un link către competiția în care a fost utilizat.
  4. Prezentare de Bogdan Melnik alias ld86 despre învățarea pe mostre dezechilibrate