Vienas svarbus aspektas Mašininis mokymasis yra modelio įvertinimas. Turite turėti tam tikrą mechanizmą, kad galėtumėte įvertinti savo modelį. Štai čia šie našumo rodikliai parodo, koks geras yra modelis. Jei esate susipažinę su kai kuriais pagrindais Mašininis mokymasis tada turėjote susidurti su kai kuriomis iš šių metrikų, pvz., tikslumo, tikslumo, atšaukimo, auc-roc ir kt., kurie paprastai naudojami klasifikavimo užduotims atlikti. Šiame straipsnyje mes nuodugniai išnagrinėsime vieną tokią metriką, kuri yra AUC-ROC kreivė.
Turinys
- Kas yra AUC-ROC kreivė?
- Pagrindiniai terminai, naudojami AUC ir ROC kreivėje
- Ryšys tarp jautrumo, specifiškumo, FPR ir slenksčio.
- Kaip veikia AUC-ROC?
- Kada turėtume naudoti AUC-ROC vertinimo metriką?
- Spėlioja modelio veikimas
- AUC-ROC kreivės supratimas
- Įgyvendinimas naudojant du skirtingus modelius
- Kaip naudoti ROC-AUC kelių klasių modeliui?
- Mašininio mokymosi AUC ROC kreivės DUK
Kas yra AUC-ROC kreivė?
AUC-ROC kreivė arba plotas po imtuvo veikimo charakteristikos kreivė yra grafinis dvejetainio klasifikavimo modelio veikimas esant įvairioms klasifikavimo slenksčiams. Jis dažniausiai naudojamas mašininiame mokyme, siekiant įvertinti modelio gebėjimą atskirti dvi klases, paprastai teigiamą klasę (pvz., ligos buvimas) ir neigiamą klasę (pvz., ligos nebuvimą).
Pirmiausia supraskime dviejų terminų reikšmę ROC ir AUC .
- ROC : Imtuvo veikimo charakteristikos
- AUC : plotas po kreive
Imtuvo veikimo charakteristikų (ROC) kreivė
ROC reiškia imtuvo veikimo charakteristikas, o ROC kreivė yra grafinis dvejetainio klasifikavimo modelio efektyvumo vaizdas. Jis nubraižo tikrąjį teigiamą rodiklį (TPR) ir klaidingą teigiamą rodiklį (FPR), esant skirtingoms klasifikavimo slenksčiams.
Plotas po kreive (AUC) kreivė:
AUC reiškia plotą po kreive, o AUC kreivė reiškia plotą po ROC kreive. Jis matuoja bendrą dvejetainio klasifikavimo modelio našumą. Kadangi ir TPR, ir FPR svyruoja nuo 0 iki 1, taigi sritis visada bus nuo 0 iki 1, o didesnė AUC reikšmė reiškia geresnį modelio veikimą. Mūsų pagrindinis tikslas yra maksimaliai padidinti šią sritį, kad pasiektume aukščiausią TPR ir mažiausią FPR pagal nurodytą slenkstį. AUC matuoja tikimybę, kad modelis atsitiktinai pasirinktam teigiamam atvejui priskirs didesnę numatomą tikimybę, palyginti su atsitiktinai pasirinktu neigiamu atveju.
Jis atstovauja tikimybė su kuria mūsų modelis gali atskirti dvi mūsų taikinyje esančias klases.
ROC-AUC klasifikacijos vertinimo metrika
Pagrindiniai terminai, naudojami AUC ir ROC kreivėje
1. TPR ir FPR
Tai yra labiausiai paplitęs apibrėžimas, su kuriuo susidūrėte naudodami Google AUC-ROC. Iš esmės ROC kreivė yra grafikas, rodantis klasifikavimo modelio veikimą esant visoms įmanomoms slenksčiams (slenkstis yra tam tikra reikšmė, kurią viršijus jūs sakote, kad taškas priklauso konkrečiai klasei). Kreivė brėžiama tarp dviejų parametrų
- TPR – Tikras teigiamas rodiklis
- FPR – Klaidingai teigiamas rodiklis
Prieš suprasdami, TPR ir FPR leiskite mums greitai pažvelgti į painiavos matrica .

Klasifikavimo užduoties painiavos matrica
- Tikras teigiamas : faktinis teigiamas ir prognozuojamas kaip teigiamas
- Tikras neigiamas : faktinis neigiamas ir numatomas kaip neigiamas
- Klaidingai teigiamas (I tipo klaida) : Faktinis neigiamas, bet prognozuojamas kaip teigiamas
- Klaidingas neigiamas (II tipo klaida) : Faktinis teigiamas, bet prognozuojamas kaip neigiamas
Paprastais žodžiais tariant, galite vadinti klaidingą teigiamą a netikras pavojus ir klaidingas neigiamas a panele . Dabar pažiūrėkime, kas yra TPR ir FPR.
2. Jautrumas / tikras teigiamas rodiklis / atšaukimas
Iš esmės TPR/Atšaukimas/Jautrumas yra teisingai identifikuotų teigiamų pavyzdžių santykis. Jis parodo modelio gebėjimą teisingai nustatyti teigiamus atvejus ir apskaičiuojamas taip:
Jautrumas / atšaukimas / TPR matuoja faktinių teigiamų atvejų, kuriuos modelis teisingai identifikuoja kaip teigiamus, dalį.
3. Klaidingai teigiamas rodiklis
FPR yra neigiamų pavyzdžių, kurie yra neteisingai klasifikuojami, santykis.
4. Specifiškumas
Specifiškumas matuoja faktinių neigiamų atvejų, kuriuos modelis teisingai identifikuoja kaip neigiamus, dalį. Tai parodo modelio gebėjimą teisingai nustatyti neigiamus atvejus
Ir kaip minėta anksčiau, ROC yra ne kas kita, kaip diagrama tarp TPR ir FPR per visas įmanomas ribas, o AUC yra visas plotas po šia ROC kreive.

Jautrumo ir klaidingai teigiamo rodiklio diagrama
Ryšys tarp jautrumo, specifiškumo, FPR ir slenksčio .
Jautrumas ir specifiškumas:
- Atvirkštinis ryšys: jautrumas ir specifiškumas turi atvirkštinį ryšį. Kai vienas didėja, kitas linkęs mažėti. Tai atspindi įgimtą kompromisą tarp tikrų teigiamų ir tikrų neigiamų palūkanų normų.
- Derinimas per slenkstį: Reguliuodami slenkstinę vertę galime kontroliuoti jautrumo ir specifiškumo pusiausvyrą. Žemesni slenksčiai lemia didesnį jautrumą (daugiau tikrų teigiamų rezultatų) specifiškumo sąskaita (daugiau klaidingų teigiamų rezultatų). Ir atvirkščiai, slenksčio padidinimas padidina specifiškumą (mažiau klaidingų teigiamų rezultatų), bet paaukoja jautrumą (daugiau klaidingai neigiamų).
Slenkstis ir klaidingai teigiamas rodiklis (FPR):
- FPR ir specifiškumo jungtis: Klaidingai teigiamas rodiklis (FPR) yra tiesiog specifiškumo papildymas (FPR = 1 – specifiškumas). Tai reiškia tiesioginį ryšį tarp jų: didesnis specifiškumas reiškia mažesnį FPR ir atvirkščiai.
- FPR pakeitimai naudojant TPR: Panašiai, kaip pastebėjote, tikrasis teigiamas rodiklis (TPR) ir FPR taip pat yra susieti. Padidėjęs TPR (daugiau tikrų teigiamų rezultatų) paprastai padidina FPR (daugiau klaidingų teigiamų rezultatų). Ir atvirkščiai, sumažėjus TPR (mažiau tikrų teigiamų rezultatų), sumažėja FPR (mažiau klaidingų teigiamų rezultatų).
Kaip veikia AUC-ROC?
Mes pažvelgėme į geometrinę interpretaciją, bet manau, kad to vis dar nepakanka norint sukurti intuiciją, kuri iš tikrųjų reiškia 0,75 AUC. Dabar pažvelkime į AUC-ROC tikimybiniu požiūriu. Iš pradžių pakalbėkime apie tai, ką veikia AUC, o vėliau patobulinsime savo supratimą
AUC matuoja, kaip gerai modelis gali atskirti klases.
0,75 AUC iš tikrųjų reikštų, kad, tarkime, imsime du duomenų taškus, priklausančius atskiroms klasėms, tada yra 75 % tikimybė, kad modelis sugebės juos atskirti arba teisingai surikiuoti, t. y. teigiamas taškas turi didesnę prognozavimo tikimybę nei neigiamas. klasė. (darant prielaidą, kad didesnė numatymo tikimybė reiškia, kad taškas idealiu atveju priklausytų teigiamai klasei). Štai mažas pavyzdys, kad viskas būtų aiškiau.
Indeksas | Klasė | Tikimybė |
---|---|---|
P1 | 1 | 0,95 |
P2 | 1 | 0,90 |
P3 | 0 | 0,85 |
P4 | 0 | 0,81 |
P5 | 1 | 0,78 |
P6 | 0 | 0,70 |
Čia yra 6 taškai, kuriuose P1, P2 ir P5 priklauso 1 klasei, o P3, P4 ir P6 priklauso 0 klasei, ir mes atitinkame numatomas tikimybes tikimybių stulpelyje, kaip minėjome, jei paimsime du atskirus taškus. Kokia tikimybė, kad modelio reitingas jas teisingai išdėstys.
Paimsime visas įmanomas poras, kad vienas taškas priklausytų 1 klasei, o kitas priklausytų 0 klasei, iš viso turėsime 9 tokias poras žemiau yra visos šios 9 galimos poros.
Pora | yra teisingas |
---|---|
(P1, P3) | Taip |
(P1, P4) | Taip |
(P1, P6) | Taip |
(P2, P3) | Taip |
(P2, P4) | Taip |
(P2, P6) | Taip |
(P3, P5) | Nr |
(P4, P5) | Nr |
(P5, P6) | Taip |
Čia stulpelis Teisingas nurodo, ar minėta pora teisingai surikiuota pagal numatomą tikimybę, t. y. 1 klasės taškas turi didesnę tikimybę nei klasė 0 taško, 7 iš šių 9 galimų porų 1 klasė yra aukštesnė nei 0 klasė, arba galime teigti, kad yra 77% tikimybė, kad pasirinkus taškų porą, priklausančią atskiroms klasėms, modelis galės juos teisingai atskirti. Dabar manau, kad už šio AUC numerio galite turėti šiek tiek intuicijos, kad išspręstume bet kokias abejones, patvirtinkime jį naudodami Scikit mokosi AUC-ROC diegimą.
Python3
import> numpy as np> from> sklearn .metrics> import> roc_auc_score> y_true> => [> 1> ,> 1> ,> 0> ,> 0> ,> 1> ,> 0> ]> y_pred> => [> 0.95> ,> 0.90> ,> 0.85> ,> 0.81> ,> 0.78> ,> 0.70> ]> auc> => np.> round> (roc_auc_score(y_true, y_pred),> 3> )> print> (> 'Auc for our sample data is {}'> .> format> (auc))> |
>
>
Išvestis:
AUC for our sample data is 0.778>
Kada turėtume naudoti AUC-ROC vertinimo metriką?
Kai kuriose srityse ROC-AUC naudojimas gali būti netinkamas. Tais atvejais, kai duomenų rinkinys yra labai nesubalansuotas, ROC kreivė gali pernelyg optimistiškai įvertinti modelio veikimą . Šis optimizmo šališkumas atsiranda dėl to, kad ROC kreivės klaidingai teigiamų rezultatų rodiklis (FPR) gali tapti labai mažas, kai faktinių neigiamų skaičius yra didelis.
Žvelgiant į FPR formulę,
stebime ,
- Neigiama klasė yra daugumoje, FPR vardiklyje dominuoja tikri negatyvai, dėl to FPR tampa mažiau jautrus prognozių pokyčiams, susijusiems su mažumos klase (teigiama klase).
- ROC kreivės gali būti tinkamos, kai klaidingų teigiamų ir klaidingų neigiamų verčių kaina yra subalansuota ir duomenų rinkinys nėra labai nesubalansuotas.
Tokiu atveju Tikslumo-atsišaukimo kreivės gali būti naudojami, kurie suteikia alternatyvią vertinimo metriką, labiau tinkančią nesubalansuotiems duomenų rinkiniams, sutelkiant dėmesį į klasifikatoriaus našumą teigiamos (mažumos) klasės atžvilgiu.
Spėlioja modelio veikimas
- Aukštas AUC (arti 1) rodo puikią skiriamąją galią. Tai reiškia, kad modelis veiksmingai skiria dvi klases, o jo prognozės yra patikimos.
- Žemas AUC (arti 0) rodo prastą veikimą. Šiuo atveju modelis stengiasi atskirti teigiamas ir neigiamas klases, o jo prognozės gali būti nepatikimos.
- AUC maždaug 0,5 reiškia, kad modelis iš esmės daro atsitiktinius spėjimus. Tai rodo, kad nėra galimybės atskirti klases, o tai rodo, kad modelis iš duomenų nesimoko jokių prasmingų modelių.
AUC-ROC kreivės supratimas
ROC kreivėje x ašis paprastai reiškia klaidingą teigiamą rodiklį (FPR), o y ašis – tikrąjį teigiamą rodiklį (TPR), taip pat žinomą kaip jautrumas arba atšaukimas. Taigi didesnė x ašies vertė (į dešinę) ROC kreivėje rodo didesnį klaidingai teigiamą rodiklį, o didesnė y ašies vertė (į viršų) rodo didesnį tikrąjį teigiamą rodiklį. ROC kreivė yra grafinė Kompromiso tarp tikrojo teigiamo rodiklio ir klaidingai teigiamo rodiklio atvaizdavimas esant įvairioms slenksčiams. Tai rodo klasifikavimo modelio veikimą esant skirtingoms klasifikavimo slenksčiams. AUC (plotas po kreive) yra apibendrintas ROC kreivės veikimo matas. Slenksčio pasirinkimas priklauso nuo konkrečių problemos, kurią bandote išspręsti, reikalavimų ir kompromiso tarp klaidingų teigiamų ir klaidingų neigiamų rezultatų. priimtina jūsų kontekste.
- Jei norite teikti pirmenybę klaidingų teigiamų rezultatų mažinimui (sumažindami tikimybę ką nors pažymėti kaip teigiamą, kai taip nėra), galite pasirinkti slenkstį, dėl kurio klaidingai teigiamas rodiklis būtų mažesnis.
- Jei norite teikti pirmenybę tikrų teigiamų rezultatų didinimui (užfiksuoti kuo daugiau faktinių teigiamų dalykų), galite pasirinkti slenkstį, kuris padidintų tikrąjį teigiamą rodiklį.
Panagrinėkime pavyzdį, iliustruojantį, kaip ROC kreivės generuojamos skirtingoms slenksčiai ir kaip tam tikra riba atitinka painiavos matricą. Tarkime, kad turime a dvejetainės klasifikacijos problema su modeliu, numatančiu, ar el. laiškas yra šlamštas (teigiamas), ar ne šlamštas (neigiamas).
Panagrinėkime hipotetinius duomenis,
Tikrosios etiketės: [1, 0, 1, 0, 1, 1, 0, 0, 1, 0]
Numatytos tikimybės: [0,8, 0,3, 0,6, 0,2, 0,7, 0,9, 0,4, 0,1, 0,75, 0,55]
1 atvejis: slenkstis = 0,5
Tikros etiketės | Numatytos tikimybės | Numatytos etiketės |
---|---|---|
1 | 0.8 | 1 |
0 | 0.3 | 0 |
1 | 0.6 | 1 |
0 | 0.2 | 0 |
1 | 0.7 | 1 |
1 | 0.9 | 1 |
0 | 0.4 | 0 |
0 | 0.1 | 0 |
1 | 0,75 | 1 |
0 | 0,55 | 1 |
Sumaišties matrica, pagrįsta aukščiau pateiktomis prognozėmis
| Numatymas = 0 | Prognozė = 1 |
---|---|---|
Faktinis = 0 | TP = 4 | FN=1 |
Faktinis = 1 | FP = 0 | TN=5 |
Atitinkamai,
- Tikrasis teigiamas rodiklis (TPR) :
Faktinių teigiamų, teisingai nustatytų klasifikatoriaus, dalis yra
- Klaidingai teigiamas rodiklis (FPR) :
Faktinių negatyvų, neteisingai priskirtų teigiamiems, dalis
Taigi, ties 0,5 riba:
- Tikrasis teigiamas rodiklis (jautrumas): 0,8
- Klaidingai teigiamas rodiklis: 0
Aiškinimas yra toks, kad esant šiai ribai, modelis teisingai identifikuoja 80 % faktinių teigiamų rezultatų (TPR), bet 0 % faktinių neigiamų klaidingai priskiria teigiamiems (FPR).
Atitinkamai skirtingų slenksčių atveju gausime ,
2 atvejis: slenkstis = 0,7
Tikros etiketės | Numatytos tikimybės | Numatytos etiketės |
---|---|---|
1 | 0.8 | 1 |
0 | 0.3 | 0 |
1 | 0.6 | 0 |
0 | 0.2 | 0 |
1 | 0.7 | 0 |
1 | 0.9 | 1 |
0 | 0.4 | 0 |
0 | 0.1 | 0 |
1 | 0,75 | 1 |
0 | 0,55 | 0 |
Sumaišties matrica, pagrįsta aukščiau pateiktomis prognozėmis
| Numatymas = 0 | Prognozė = 1 |
---|---|---|
Faktinis = 0 gretimi kampai | TP = 5 | FN=0 |
Faktinis = 1 | FP = 2 | TN=3 |
Atitinkamai,
- Tikrasis teigiamas rodiklis (TPR) :
Faktinių teigiamų, teisingai nustatytų klasifikatoriaus, dalis yra
- Klaidingai teigiamas rodiklis (FPR) :
Faktinių negatyvų, neteisingai priskirtų teigiamiems, dalis
3 atvejis: slenkstis = 0,4
Tikros etiketės | Numatytos tikimybės | Numatytos etiketės |
---|---|---|
1 | 0.8 | 1 |
0 | 0.3 | 0 |
1 | 0.6 | 1 |
0 | 0.2 | 0 |
1 | 0.7 | 1 |
1 | 0.9 | 1 |
0 | 0.4 | 0 |
0 | 0.1 | 0 |
1 | 0,75 | 1 |
0 | 0,55 | 1 |
Sumaišties matrica, pagrįsta aukščiau pateiktomis prognozėmis
| Numatymas = 0 | Prognozė = 1 |
---|---|---|
Faktinis = 0 | TP = 4 | FN=1 |
Faktinis = 1 | FP = 0 | TN=5 |
Atitinkamai,
- Tikrasis teigiamas rodiklis (TPR) :
Faktinių teigiamų, teisingai nustatytų klasifikatoriaus, dalis yra
- Klaidingai teigiamas rodiklis (FPR) :
Faktinių negatyvų, neteisingai priskirtų teigiamiems, dalis
4 atvejis: slenkstis = 0,2
Tikros etiketės | Numatytos tikimybės | Numatytos etiketės |
---|---|---|
1 | 0.8 | 1 |
0 | 0.3 | 1 |
1 | 0.6 | 1 |
0 | 0.2 | 0 |
1 | 0.7 | 1 |
1 | 0.9 | 1 |
0 | 0.4 | 1 |
0 | 0.1 | 0 |
1 | 0,75 | 1 |
0 | 0,55 | 1 |
Sumaišties matrica, pagrįsta aukščiau pateiktomis prognozėmis
| Numatymas = 0 | Prognozė = 1 |
---|---|---|
Faktinis = 0 | TP = 2 | FN=3 |
Faktinis = 1 | FP = 0 | TN=5 |
Atitinkamai,
- Tikrasis teigiamas rodiklis (TPR) :
Faktinių teigiamų, teisingai nustatytų klasifikatoriaus, dalis yra
- Klaidingai teigiamas rodiklis (FPR) :
Faktinių negatyvų, neteisingai priskirtų teigiamiems, dalis
5 atvejis: slenkstis = 0,85
Tikros etiketės | Numatytos tikimybės | Numatytos etiketės |
---|---|---|
1 | 0.8 | 0 |
0 | 0.3 | 0 |
1 | 0.6 | 0 |
0 | 0.2 | 0 |
1 | 0.7 | 0 |
1 | 0.9 | 1 |
0 | 0.4 | 0 |
0 | 0.1 | 0 |
1 | 0,75 | 0 |
0 | 0,55 | 0 |
Sumaišties matrica, pagrįsta aukščiau pateiktomis prognozėmis
| Numatymas = 0 | Prognozė = 1 |
---|---|---|
Faktinis = 0 | TP = 5 | FN=0 |
Faktinis = 1 | FP = 4 | TN=1 |
Atitinkamai,
- Tikrasis teigiamas rodiklis (TPR) :
Faktinių teigiamų, teisingai nustatytų klasifikatoriaus, dalis yra
- Klaidingai teigiamas rodiklis (FPR) :
Faktinių negatyvų, neteisingai priskirtų teigiamiems, dalis
Remdamiesi aukščiau pateiktu rezultatu, nubraižysime ROC kreivę
Python3
true_positive_rate> => [> 0.4> ,> 0.8> ,> 0.8> ,> 1.0> ,> 1> ]> false_positive_rate> => [> 0> ,> 0> ,> 0> ,> 0.2> ,> 0.8> ]> plt.plot(false_positive_rate, true_positive_rate,> 'o-'> , label> => 'ROC'> )> plt.plot([> 0> ,> 1> ], [> 0> ,> 1> ],> '--'> , color> => 'grey'> , label> => 'Worst case'> )> plt.xlabel(> 'False Positive Rate'> )> plt.ylabel(> 'True Positive Rate'> )> plt.title(> 'ROC Curve'> )> plt.legend()> plt.show()> |
>
>
Išvestis:
Iš grafiko matyti, kad:
- Pilka punktyrinė linija reiškia blogiausią scenarijų, kai modelio prognozės, ty TPR, yra FPR, yra vienodos. Ši įstrižainė linija laikoma blogiausiu atveju, nurodant vienodą klaidingų teigiamų ir klaidingų neigiamų rezultatų tikimybę.
- Kai taškai nukrypsta nuo atsitiktinės spėjimo linijos link viršutinio kairiojo kampo, modelio veikimas pagerėja.
- Plotas po kreive (AUC) yra kiekybinis modelio diskriminacinio gebėjimo matas. Didesnė AUC vertė, arčiau 1,0, rodo puikų našumą. Geriausia galima AUC vertė yra 1,0, atitinkanti modelį, kuris pasiekia 100 % jautrumą ir 100 % specifiškumą.
Apskritai imtuvo veikimo charakteristikos (ROC) kreivė yra grafinis kompromiso tarp dvejetainio klasifikavimo modelio tikrojo teigiamo rodiklio (jautrumo) ir klaidingai teigiamo dažnio, esant įvairioms sprendimo slenksčiams, vaizdas. Kai kreivė grakščiai kyla link viršutinio kairiojo kampo, tai reiškia pagirtiną modelio gebėjimą atskirti teigiamus ir neigiamus atvejus per įvairias patikimumo ribas. Ši aukštyn kylanti trajektorija rodo patobulintą našumą, pasiektą didesnį jautrumą, sumažinant klaidingų teigiamų rezultatų skaičių. Anotuotos slenksčiai, žymimi kaip A, B, C, D ir E, suteikia vertingų įžvalgų apie modelio dinaminį elgesį skirtingais patikimumo lygiais.
Įgyvendinimas naudojant du skirtingus modelius
Bibliotekų diegimas
Python3
import> numpy as np> import> pandas as pd> import> matplotlib.pyplot as plt> from> sklearn.datasets> import> make_classification> from> sklearn.model_selection> import> train_test_split> from> sklearn.linear_model> import> LogisticRegression> from> sklearn.ensemble> import> RandomForestClassifier> from> sklearn.metrics> import> roc_curve, auc> |
>
>
Norėdami išmokyti Atsitiktinis miškas ir Logistinė regresija modelius ir pateikti jų ROC kreives su AUC balais, algoritmas sukuria dirbtinius dvejetainius klasifikavimo duomenis.
Duomenų generavimas ir duomenų skaidymas
Python3
# Generate synthetic data for demonstration> X, y> => make_classification(> > n_samples> => 1000> , n_features> => 20> , n_classes> => 2> , random_state> => 42> )> # Split the data into training and testing sets> X_train, X_test, y_train, y_test> => train_test_split(> > X, y, test_size> => 0.2> , random_state> => 42> )> |
>
>
Naudodamas 80-20 padalijimo santykį, algoritmas sukuria dirbtinius dvejetainius klasifikavimo duomenis su 20 funkcijų, suskirsto juos į mokymo ir testavimo rinkinius ir priskiria atsitiktinę sėklą, kad būtų užtikrintas atkuriamumas.
Įvairių modelių mokymas
Python3
# Train two different models> logistic_model> => LogisticRegression(random_state> => 42> )> logistic_model.fit(X_train, y_train)> random_forest_model> => RandomForestClassifier(n_estimators> => 100> , random_state> => 42> )> random_forest_model.fit(X_train, y_train)> |
>
>
Naudojant fiksuotą atsitiktinę sėklą, kad būtų užtikrintas pakartojamumas, metodas inicijuoja ir apmoko logistinės regresijos modelį mokymo rinkinyje. Panašiu būdu jis naudoja mokymo duomenis ir tą pačią atsitiktinę sėklą, kad inicijuotų ir apmokytų atsitiktinio miško modelį su 100 medžių.
Prognozės
Python3
# Generate predictions> y_pred_logistic> => logistic_model.predict_proba(X_test)[:,> 1> ]> y_pred_rf> => random_forest_model.predict_proba(X_test)[:,> 1> ]> |
>
>
Naudojant bandymo duomenis ir apmokytas Logistinė regresija modelis, kodas numato teigiamos klasės tikimybę. Panašiai, naudodamas bandymo duomenis, jis naudoja parengtą atsitiktinio miško modelį, kad sukurtų prognozuojamas teigiamas klasės tikimybes.
Duomenų rėmelio kūrimas
Python3
# Create a DataFrame> test_df> => pd.DataFrame(> > {> 'True'> : y_test,> 'Logistic'> : y_pred_logistic,> 'RandomForest'> : y_pred_rf})> |
>
>
Naudodamas bandymo duomenis, kodas sukuria duomenų rėmelį, pavadintą test_df su stulpeliais, pažymėtais True, Logistic ir RandomForest, pridedant tikras etiketes ir numatomas tikimybes iš atsitiktinių miško ir logistinės regresijos modelių.
Nubraižykite modelių ROC kreivę
Python3
# Plot ROC curve for each model> plt.figure(figsize> => (> 7> ,> 5> ))> for> model> in> [> 'Logistic'> ,> 'RandomForest'> ]:> > fpr, tpr, _> => roc_curve(test_df[> 'True'> ], test_df[model])> > roc_auc> => auc(fpr, tpr)> > plt.plot(fpr, tpr, label> => f> '{model} (AUC = {roc_auc:.2f})'> )> # Plot random guess line> plt.plot([> 0> ,> 1> ], [> 0> ,> 1> ],> 'r--'> , label> => 'Random Guess'> )> # Set labels and title> plt.xlabel(> 'False Positive Rate'> )> plt.ylabel(> 'True Positive Rate'> )> plt.title(> 'ROC Curves for Two Models'> )> plt.legend()> plt.show()> |
>
>
Išvestis:
Kodas sukuria diagramą su 8 x 6 colių skaičiais. Jis apskaičiuoja kiekvieno modelio AUC ir ROC kreivę (Random Forest ir Logistic Regression), tada nubraižo ROC kreivę. The ROC kreivė atsitiktiniam spėjimui taip pat vaizduojama raudona punktyrinė linija, o vizualizacijai nustatomos etiketės, pavadinimas ir legenda.
Kaip naudoti ROC-AUC kelių klasių modeliui?
Kelių klasių nustatymui galime paprasčiausiai naudoti vieną prieš visas metodiką ir kiekvienai klasei turėsite vieną ROC kreivę. Tarkime, kad turite keturias klases A, B, C ir D, tada būtų ROC kreivės ir atitinkamos AUC reikšmės visoms keturioms klasėms, t. y. kai A būtų viena klasė, o B, C ir D kartu būtų kitos klasės. , panašiai, B yra viena klasė, o A, C ir D kartu su kitomis klasėmis ir kt.
Bendrieji AUC-ROC naudojimo kelių klasių klasifikavimo modelio žingsniai yra šie:
„Vienas prieš visus“ metodika:
- Kiekvieną savo kelių klasių problemos klasę traktuokite kaip teigiamą klasę, o visas kitas klases sujunkite į neigiamą klasę.
- Išmokykite kiekvienos klasės dvejetainį klasifikatorių, palyginti su likusiomis klasėmis.
Apskaičiuokite kiekvienos klasės AUC-ROC:
- Čia nubraižome nurodytos klasės ROC kreivę, palyginti su likusia.
- Nubraižykite kiekvienos klasės ROC kreives tame pačiame grafike. Kiekviena kreivė parodo konkrečios klasės modelio diskriminacijos efektyvumą.
- Išnagrinėkite kiekvienos klasės AUC balus. Didesnis AUC balas rodo geresnę tos konkrečios klasės diskriminaciją.
AUC-ROC įdiegimas daugiaklasėje klasifikacijoje
Bibliotekų importavimas
Python3
import> numpy as np> import> matplotlib.pyplot as plt> from> sklearn.datasets> import> make_classification> from> sklearn.model_selection> import> train_test_split> from> sklearn.preprocessing> import> label_binarize> from> sklearn.multiclass> import> OneVsRestClassifier> from> sklearn.linear_model> import> LogisticRegression> from> sklearn.ensemble> import> RandomForestClassifier> from> sklearn.metrics> import> roc_curve, auc> from> itertools> import> cycle> |
>
>
Programa sukuria dirbtinius kelių klasių duomenis, padalija juos į mokymo ir testavimo rinkinius, o tada naudoja Vienas prieš likusius klasifikatorius techniką, skirtą treniruoti atsitiktinių miškų ir logistinės regresijos klasifikatorius. Galiausiai, jis nubraižo dviejų modelių kelių klasių ROC kreives, kad parodytų, kaip gerai jie skiria skirtingas klases.
Duomenų generavimas ir skaidymas
Python3
# Generate synthetic multiclass data> X, y> => make_classification(> > n_samples> => 1000> , n_features> => 20> , n_classes> => 3> , n_informative> => 10> , random_state> => 42> )> # Binarize the labels> y_bin> => label_binarize(y, classes> => np.unique(y))> # Split the data into training and testing sets> X_train, X_test, y_train, y_test> => train_test_split(> > X, y_bin, test_size> => 0.2> , random_state> => 42> )> |
>
>
Trys klasės ir dvidešimt funkcijų sudaro sintetinius kelių klasių duomenis, kuriuos sukuria kodas. Po etikečių dvejetainių duomenų duomenys suskirstomi į mokymo ir testavimo rinkinius santykiu 80-20.
Treniruočių modeliai
Python3
# Train two different multiclass models> logistic_model> => OneVsRestClassifier(LogisticRegression(random_state> => 42> ))> logistic_model.fit(X_train, y_train)> rf_model> => OneVsRestClassifier(> > RandomForestClassifier(n_estimators> => 100> , random_state> => 42> ))> rf_model.fit(X_train, y_train)> |
>
>
Programa moko du kelių klasių modelius: atsitiktinio miško modelį su 100 vertintojų ir logistinės regresijos modelį su „Vienas prieš poilsį“ metodas . Su mokymo duomenų rinkiniu abu modeliai yra pritaikyti.
AUC-ROC kreivės braižymas
Python3
# Compute ROC curve and ROC area for each class> fpr> => dict> ()> tpr> => dict> ()> roc_auc> => dict> ()> models> => [logistic_model, rf_model]> plt.figure(figsize> => (> 6> ,> 5> ))> colors> => cycle([> 'aqua'> ,> 'darkorange'> ])> for> model, color> in> zip> (models, colors):> > for> i> in> range> (model.classes_.shape[> 0> ]):> > fpr[i], tpr[i], _> => roc_curve(> > y_test[:, i], model.predict_proba(X_test)[:, i])> > roc_auc[i]> => auc(fpr[i], tpr[i])> > plt.plot(fpr[i], tpr[i], color> => color, lw> => 2> ,> > label> => f> '{model.__class__.__name__} - Class {i} (AUC = {roc_auc[i]:.2f})'> )> # Plot random guess line> plt.plot([> 0> ,> 1> ], [> 0> ,> 1> ],> 'k--'> , lw> => 2> , label> => 'Random Guess'> )> # Set labels and title> plt.xlabel(> 'False Positive Rate'> )> plt.ylabel(> 'True Positive Rate'> )> plt.title(> 'Multiclass ROC Curve with Logistic Regression and Random Forest'> )> plt.legend(loc> => 'lower right'> )> plt.show()> |
>
>
Išvestis:
Atsitiktinės miško ir logistinės regresijos modelių ROC kreivės ir AUC balai apskaičiuojami pagal kiekvienos klasės kodą. Tada nubraižomos kelių klasių ROC kreivės, rodančios kiekvienos klasės diskriminacijos efektyvumą ir liniją, vaizduojančią atsitiktinį spėjimą. Gautame siužete pateikiamas grafinis modelių klasifikavimo našumo įvertinimas.
Išvada
Mašininio mokymosi metu dvejetainių klasifikavimo modelių našumas vertinamas naudojant esminę metriką, vadinamą plotu po imtuvo veikimo charakteristika (AUC-ROC). Tai rodo, kaip keičiamas jautrumas ir specifiškumas, atsižvelgiant į įvairias sprendimo ribas. Didesnę teigiamų ir neigiamų atvejų diskriminaciją paprastai rodo modelis, kurio AUC balas didesnis. 0,5 reiškia tikimybę, o 1 reiškia nepriekaištingą veikimą. Modelį optimizuoti ir pasirinkti padeda naudinga informacija, kurią teikia AUC-ROC kreivė apie modelio gebėjimą atskirti klases. Dirbant su nesubalansuotais duomenų rinkiniais arba programomis, kur klaidingai teigiami ir klaidingai neigiami rezultatai kainuoja skirtingai, tai ypač naudinga kaip visapusiška priemonė.
Mašininio mokymosi AUC ROC kreivės DUK
1. Kas yra AUC-ROC kreivė?
Esant įvairioms klasifikavimo slenksčiams, kompromisas tarp tikrojo teigiamo dažnio (jautrumo) ir klaidingai teigiamo dažnio (specifiškumo) yra grafiškai pavaizduotas AUC-ROC kreive.
2. Kaip atrodo tobula AUC-ROC kreivė?
Idealios AUC-ROC kreivės plotas lygus 1 reikštų, kad modelis pasiekia optimalų jautrumą ir specifiškumą esant visoms slenksčiams.
3. Ką reiškia 0,5 AUC reikšmė?
AUC 0,5 rodo, kad modelio veikimas yra panašus į atsitiktinio atsitiktinumo. Tai rodo, kad trūksta gebėjimo atskirti.
4. Ar AUC-ROC gali būti naudojamas kelių klasių klasifikavimui?
AUC-ROC dažnai taikomas problemoms, susijusioms su dvejetainiu klasifikavimu. Klasifikuojant kelias klases, galima atsižvelgti į tokius pokyčius kaip makrovidurkis arba mikrovidurkis.
5. Kuo AUC-ROC kreivė naudinga vertinant modelį?
Modelio gebėjimą atskirti klases išsamiai apibendrina AUC-ROC kreivė. Tai ypač naudinga dirbant su nesubalansuotais duomenų rinkiniais.