Kvalitetsmåling i maskinlæring. En universell tilnærming til (nesten) alle maskinlæringsproblemer. Kort om oppgaven med rangering

Dette kapittelet presenterer populære metoder for å vurdere kvaliteten på klassifikasjonsmodellen, som også brukes i andre arbeider om dette temaet. Deres beskrivelse og begrunnelse av beregningene som brukes for denne vurderingen er gitt.

Kvalitetsvurderingsmålinger

Full nøyaktighet

Denne metrikken er en av de enkleste og samtidig universelle beregningene for å vurdere ytelsen til klassifiseringsalgoritmer. Verdien av denne koeffisienten beregnes som andelen korrekt klassifiserte objekter fra det totale antallet objekter i utvalget. Denne beregningen er populær på grunn av sin enkelhet og muligheten til å utvide til et hvilket som helst antall klasser. Den største ulempen med denne metrikken er at den tillegger samme vekt til alle dokumenter, noe som kan være feil ved en sterk forskyvning av dokumenter i opplæringssettet mot en eller flere klasser. Denne metrikken kan ha en høy verdi, men en klassifiserer innenfor samme klasse kan vise en ekstremt lav kvalitet på arbeidet. Samtidig signaliserer ikke metrikken dette på noen måte.

Presisjon, fullstendighet og F-mål

Beregninger som presisjon (presisjon) og fullstendighet (gjenkalling) ble først utbredt i vurderingen av kvaliteten på systemer som løser problemet med informasjonsinnhenting. Nøyaktigheten til systemet innenfor en klasse er andelen objekter som virkelig tilhører en bestemt klasse i forhold til alle objekter som systemet har tildelt denne klassen. Fullstendighet uttrykkes som andelen objekter funnet av klassifisereren som tilhører en klasse i forhold til alle objektene i denne klassen. Tabell 4 er en beredskapstabell for en egen klasse, der TP (sann positiv) er en sann-positiv avgjørelse, TN (sann negativ) er en sann-negativ avgjørelse, FP (falsk positiv) er en falsk positiv beslutning, og FN (falsk negativ) er en falsk avgjørelse.

Tabell 1 - Tabell over beredskap for en klasse av objekter

Dermed blir presisjon og fullstendighet beregnet som:

F-målet kombinerer informasjon om nøyaktigheten og fullstendigheten til den evaluerte algoritmen. Det beregnes som det harmoniske gjennomsnittet av nøyaktighets- og fullstendighetsindikatorene:

På grunn av det faktum at F-målet beregnes separat for hver klasse, er det praktisk å bruke det til å søke og analysere spesifikke feil i algoritmen, for å evaluere en klassifisering med flere klasser. Dessuten, i tilfelle av et stort antall klasser, er det nødvendig med en karakteristikk som vil samle fullstendigheten og nøyaktigheten for alle klasser og karakterisere den generelle oppførselen til systemet. I dette arbeidet brukes følgende aggregerte verdier for dette formålet: makropresisjon, som beregnes som det aritmetiske gjennomsnittet av nøyaktigheten for alle klasser, makrogjenkalling, som beregnes som det aritmetiske gjennomsnittet av fullstendigheten for alle klasser, og makro F-mål (Macro F-score), som er det harmoniske gjennomsnittet mellom dem.

Kryssvalidering

Kryssvalidering er en av de vanligste metodene for å gjennomføre full testing og vurdere ytelsen til ulike maskinlæringsalgoritmer. For et uavhengig utvalg lar denne metoden en oppnå et objektivt estimat av feilsannsynligheten, i motsetning til den gjennomsnittlige feilen på det trenede utvalget, som kan være et skjevt estimat av feilsannsynligheten på grunn av overtilpasning av algoritmen. En annen fordel med denne prosedyren er muligheten til å få et estimat av sannsynligheten for en algoritmefeil, i fravær av en kontrollprøve spesielt designet for testing.

La oss anta at det er et sett med funksjonsbeskrivelser av objekter, der et begrenset utvalg av brukstilfeller er spesifisert, hvor er et begrenset sett med klasser. Det gis en kartlegging som tilordner en algoritme til et vilkårlig utvalg brukstilfeller. Deretter estimeres kvaliteten på algoritmen for et vilkårlig utvalg av presedenser ved å bruke kvalitetsfunksjonen:

hvor er en ikke-negativ funksjon som returnerer verdien av algoritmefeilen med en korrekt klasseetikett.

I maskinlæringsoppgaver brukes beregninger for å vurdere kvaliteten på modeller og sammenligne ulike algoritmer, og deres valg og analyse er en uunnværlig del av en datasatanists jobb.

I denne artikkelen skal vi se på noen kvalitetskriterier i klassifiseringsproblemer, diskutere hva som er viktig ved valg av metrikk og hva som kan gå galt.

Beregninger i klassifiseringsproblemer

For å demonstrere nyttige funksjoner lære og en visuell representasjon av metrikk, vil vi bruke datasettet vårt på kundekretsen til en teleoperatør, som vi møtte i den første artikkelen av kurset.

La oss laste inn de nødvendige bibliotekene og se på dataene

Importer pandaer som pd importer matplotlib.pyplot som plt fra matplotlib.pylab importer rc, plot importerer seaborn som sns fra sklearn.preprocessing import Labelmblencoder, OneHotEncoder fra sklearn.model_selection importer cross_val_score fra sklearn.linear_modelression GrainFormalarsession GrainFormalization fra skleprocesrn import. fra sklearn.metrics import precision_recall_curve, classification_report from sklearn.model_selection import train_test_split df = pd.read_csv ("../../ data / telecom_churn.csv")

Df.hode (5)


Dataforbehandling

# La oss lage en kartlegging av binære kolonner # og kode staten med dummy-koding (for enkelhets skyld er det bedre å ikke gjøre dette for tremodeller) d = ("Ja": 1, "Nei": 0) df ["Internasjonal plan "] = df [" Internasjonal plan "]. Kart (d) df [" Talepostplan "] = df [" Talepostplan "]. Kart (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 (encoded_state, columns = ["state" + str (i) for i i området (encoded_state.shape)]) df = pd.concat (, akse = 1)

Nøyaktighet, presisjon og tilbakekalling

Før du går videre til selve beregningene, er det nødvendig å introdusere et viktig konsept for å beskrive disse beregningene i form av klassifiseringsfeil - forvirringsmatrise(feilmatrise).
Anta at vi har to klasser og en algoritme som forutsier tilhørigheten til hvert objekt til en av klassene, så vil klassifiseringsfeilmatrisen se slik ut:

Sant positiv (TP) Falsk positiv (FP)
Falsk negativ (FN) True Negative (TN)

Her er responsen til algoritmen på objektet, og er den sanne klasseetiketten på det objektet.
Det er altså to typer klassifiseringsfeil: Falsk Negativ (FN) og Falsk Positiv (FP).

Algoritmetrening og konstruksjon av feilmatrisen

X = df.drop ("Churn", akse = 1) y = df ["Churn"] # Del prøven i tog og test, alle beregninger vil bli evaluert på testdatasettet X_train, X_test, y_train, y_test = train_test_split ( X, y, stratify = y, test_size = 0,33, random_state = 42) # Tren den opprinnelige logistiske regresjonen lr = LogisticRegression (random_state = 42) lr.fit (X_train, y_train) # Bruk funksjonen til å konstruere feilmatrisen fra sklearn dokumentasjon def plot_confusion_matrix (cm, klasser , normalize = False, title = "(! LANG: Forvirringsmatrise", 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="Forvirringsmatrise") plt.savefig("conf_matrix.png") plt.show()!}


Nøyaktighet

En intuitiv, åpenbar og nesten ubrukt beregning er nøyaktighet - prosentandelen av riktige svar i algoritmen:

Denne metrikken er ubrukelig i problemer med ulik klasser, og det er lett å vise det med et eksempel.

La oss si at vi ønsker å evaluere ytelsen til et søppelpostfilter. Vi har 100 e-poster som ikke er spam, hvorav 90 klassifisereren vår identifiserte riktig (sann negativ = 90, falsk positiv = 10) og 10 spam e-poster, hvorav 5 klassifisereren også identifiserte riktig (sann positiv = 5, falsk negativ = 5 ) .
Så nøyaktighet:

Men hvis vi bare forutsier alle e-poster som ikke-spam, vil vi få en høyere nøyaktighet:

Samtidig har modellen vår absolutt ingen prediktiv kraft, siden vi i utgangspunktet ønsket å identifisere spam-meldinger. For å overvinne dette vil vi få hjelp av overgangen fra en felles beregning for alle klasser til separate indikatorer for kvaliteten på klassene.

Presisjon, tilbakekalling og F-mål

For å vurdere ytelsen til algoritmen på hver av klassene separat, introduserer vi presisjons- og tilbakekallingsmålingene.

Presisjon kan tolkes som andelen objekter som klassifiseres som positive og samtidig virkelig positive, og gjenkalling viser hvor stor andel av objekter av en positiv klasse av alle objekter i en positiv klasse funnet av algoritmen.

Det er introduksjonen av presisjon som ikke tillater oss å skrive alle objekter i en klasse, siden vi i dette tilfellet får en økning i False Positive-nivået. Tilbakekalling demonstrerer algoritmens evne til å oppdage en gitt klasse generelt, og presisjon demonstrerer evnen til å skille denne klassen fra andre klasser.

Som vi bemerket tidligere, er det to typer klassifiseringsfeil: Falsk positiv og falsk negativ. I statistikk kalles den første typen feil en type I-feil, og den andre kalles en type II-feil. I vårt problem med å bestemme antall abonnenter, vil feilen av den første typen være aksept av en lojal abonnent for en utgående, siden vår nullhypotese er at ingen av abonnentene forlater, og vi avviser denne hypotesen. Følgelig vil en feil av den andre typen være "hopping" av den utgående abonnenten og feilaktig aksept av nullhypotesen.

Presisjon og tilbakekalling avhenger ikke, i motsetning til nøyaktighet, av forholdet mellom klasser og er derfor anvendelige under forhold med ubalanserte prøver.
Ofte i praksis er oppgaven å finne den optimale (for kunden) balansen mellom disse to beregningene. Et klassisk eksempel er problemet med å bestemme kundeavgang.
Vi kan tydeligvis ikke finne av alle utgående kunder og kun deres. Men etter å ha identifisert strategien og ressursen for kundeoppbevaring, kan vi velge nødvendig presisjons- og tilbakekallingsterskler. Du kan for eksempel fokusere på å beholde kun kunder med høy avkastning eller de som er mer sannsynlig å forlate fordi vi har begrensede ressurser til kundesenteret.

Vanligvis, når du optimerer hyperparametrene til en algoritme (for eksempel ved iterasjon over et rutenett GridSearchCV), brukes en beregning, hvis forbedring vi forventer å se på testprøven.
Det er flere forskjellige måter å kombinere presisjon og gjenkalling til et samlet mål på kvalitet. F-mål (generelt) - harmonisk gjennomsnittlig presisjon og tilbakekalling:

I dette tilfellet bestemmer den vekten av nøyaktigheten i metrikken, og når dette er det harmoniske gjennomsnittet (med en faktor på 2, slik at i tilfelle presisjon = 1 og tilbakekalling = 1 å ha)
F-målet når sitt maksimum når fullstendigheten og presisjonen er lik én, og er nær null hvis ett av argumentene er nær null.
Sklearn har en hendig funksjon _metrics.classification rapportere tilbakekalling, presisjon og F-mål for hver av klassene, samt antall forekomster av hver klasse.

Report = classification_report (y_test, lr.predict (X_test), target_names = ["Ikke-churned", "Churned"]) print (rapport)

klasse presisjon minnes f1-score Brukerstøtte
Ikke-kjernet 0.88 0.97 0.93 941
Kjernet 0.60 0.25 0.35 159
snitt / totalt 0.84 0.87 0.84 1100

Det skal bemerkes her at i tilfelle problemer med ubalanserte klasser, som råder i virkelig praksis, er det ofte nødvendig å ty til teknikkene for kunstig modifisering av datasettet for å utjevne klasseforholdet. Det er mange av dem og vi vil ikke berøre dem, du kan se på noen metoder og velge den som passer din oppgave.

AUC-ROC og AUC-PR

Når vi konverterer det virkelige svaret til algoritmen (som regel sannsynligheten for å tilhøre en klasse, se SVM separat) til en binær etikett, må vi velge en terskel hvor 0 blir 1. En terskel lik 0,5 virker naturlig og nærliggende , men det er ikke alltid det viser seg å være optimalt, for eksempel i den nevnte mangelen på klassebalanse.

En av måtene å evaluere modellen som helhet, uten å være bundet til en spesifikk terskel, er AUC-ROC (eller ROC AUC) - område ( EN rea U nder C urve) under feilkurven ( R mottaker O perating C karakteristisk kurve). Denne kurven er en linje fra (0,0) til (1,1) i True Positive Rate (TPR) og False Positive Rate (FPR) koordinater:

Vi kjenner allerede TPR, dette er fullstendighet, og FPR viser hvor stor andel av objekter av den negative klassen algoritmen forutså feil. I det ideelle tilfellet, når klassifikatoren ikke gjør noen feil (FPR = 0, TPR = 1), får vi arealet under kurven lik én; ellers, når klassifikatoren tilfeldig gir ut klassesannsynligheter, vil AUC-ROC tendere til 0,5, siden klassifikatoren vil gi ut samme antall TP og FP.
Hvert punkt på grafen tilsvarer valget av en viss terskel. Arealet under kurven viser i dette tilfellet kvaliteten på algoritmen (mer er bedre), i tillegg er brattheten i selve kurven viktig – vi ønsker å maksimere TPR ved å minimere FPR, noe som betyr at kurven vår ideelt sett bør ha en tendens til å punktet (0,1).

ROC-kurvetegningskode

Sns.set (font_scale = 1.5) sns.set_color_codes ("dempet") 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 = "ROC-kurve") plt.plot (,) plt.xlim () plt.ylim () plt.xlabel ("False Positive Rate" ") plt.ylabel (" True Positive Rate ") plt.title (" ROC-kurve ") plt.savefig (" ROC.png ") plt.show ()


AUC-ROC-kriteriet er motstandsdyktig mot ubalanserte klasser (spoiler: dessverre, ikke alt er så entydig) og kan tolkes som sannsynligheten for at et tilfeldig valgt positivt objekt vil bli rangert av klassifisereren høyere (vil ha høyere sannsynlighet for å være positivt ) enn et tilfeldig valgt negativt objekt ...

Tenk på følgende problem: vi må velge 100 relevante dokumenter fra 1 million dokumenter. Vi har mestret to algoritmer:

  • Algoritme 1 returnerer 100 dokumenter, hvorav 90 er relevante. Og dermed,
  • Algoritme 2 returnerer 2000 dokumenter, hvorav 90 er relevante. Og dermed,

Mest sannsynlig vil vi velge den første algoritmen som produserer svært få falske positiver sammenlignet med konkurrenten. Men forskjellen i falsk positiv rate mellom disse to algoritmene ekstremt liten - bare 0,0019. Dette er en konsekvens av at AUC-ROC måler andelen falsk positiv i forhold til sann negativ, og i problemer der den andre (større) klassen ikke er så viktig for oss, kan det hende at den ikke gir et helt dekkende bilde når man sammenligner algoritmer .

For å rette opp situasjonen, la oss gå tilbake til fullstendighet og nøyaktighet:

  • Algoritme 1
  • Algoritme 2

Her er en betydelig forskjell mellom de to algoritmene allerede merkbar - 0,855 i nøyaktighet!

Presisjon og tilbakekalling brukes også til å konstruere kurven og, som AUC-ROC, finne området under den.


Det kan her bemerkes at på små datasett kan arealet under PR-kurven være for optimistisk, fordi det beregnes ved hjelp av trapesmetoden, men vanligvis er det nok data i slike oppgaver. For detaljer om forholdet mellom AUC-ROC og AUC-PR, se her.

Logistisk tap

Den logistiske tapsfunksjonen skiller seg ut, definert som:

her er det algoritmens respons på -th-objektet, den sanne klasseetiketten på -th-objektet og prøvestørrelsen.

Detaljer om den matematiske tolkningen av den logistiske tapsfunksjonen er allerede skrevet i rammen av innlegget om lineære modeller.
Denne beregningen vises sjelden i forretningskrav, men ofte i oppgaver på kaggle.
Intuitivt kan loglossminimering betraktes som oppgaven med å maksimere nøyaktigheten ved å straffe ukorrekte spådommer. Imidlertid bør det bemerkes at logloss straffer ekstremt sterkt for klassifisererens tillit til feil svar.

La oss vurdere et eksempel:

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 with uncertain classification% f "% logloss_crutch (1, 0.5)) >> Loggtap med usikker klassifisering 0.693147 print (" Loggtap med sikker klassifisering og riktig svar% f "% logloss_crutch (1, 0.9)) >> Loggtap med sikker klassifisering og riktig svar 0.105361 print (" Loggtap med sikker klassifisering og feil svar% f "% logloss_crutch (1, 0.1)) >> Loggtap med sikker klassifisering og feil svar 2.302585

Legg merke til hvordan logtapet har vokst dramatisk med et feil svar og en sikker klassifisering!
Følgelig kan en feil ved ett objekt resultere i en betydelig degradering av den totale prøvefeilen. Slike objekter er ofte uteliggere, som må huskes for å filtreres eller vurderes separat.
Alt faller på plass hvis du tegner en logloss-graf:


Man kan se at jo nærmere null algoritmens respons med grunnsannhet = 1, jo høyere er feilverdien og jo brattere vokser kurven.

La oss oppsummere:

  • I tilfelle av en flerklasseklassifisering, må du nøye overvåke beregningene til hver av klassene og følge logikken i avgjørelsen oppgaver i stedet for å optimalisere beregningen
  • I tilfelle av ulik klasser, er det nødvendig å velge balansen mellom klasser for trening og en beregning som riktig gjenspeiler kvaliteten på klassifiseringen
  • mephistopheies og madrugado for deres hjelp med å utarbeide denne artikkelen.

Om utstrømming av kunder til en teleoperatør.


La oss laste inn de nødvendige bibliotekene og se på dataene

importer pandaer som pd importer matplotlib.pyplot som plt fra matplotlib.pylab importer rc, plot importerer seaborn som sns fra sklearn.preprocessing importerer LabelmbleEncoder, OneHotEncoder fra sklearn.model_selection importer cross_val_score fra sklearn.linear_modelression GrainFormalization fra skleprocesrn GrainFormalization.processn. fra sklearn.metrics import precision_recall_curve, classification_report from sklearn.model_selection import train_test_split df = pd.read_csv ("../../ data / telecom_churn.csv")


df.hode (5)

Dataforbehandling

# La oss lage en kartlegging av binære kolonner # og kode staten med dummy-koding (for enkelhets skyld er det bedre å ikke gjøre dette for tremodeller) d = ("Ja": 1, "Nei": 0) df ["Internasjonal plan "] = df [" Internasjonal plan "]. Kart (d) df [" Talepostplan "] = df [" Talepostplan "]. Kart (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 (encoded_state, columns = ["state" + str (i) for i i området (encoded_state.shape)]) df = pd.concat (, akse = 1)

Nøyaktighet, presisjon og tilbakekalling

Før du går videre til selve beregningene, er det nødvendig å introdusere et viktig konsept for å beskrive disse beregningene i form av klassifiseringsfeil - forvirringsmatrise(feilmatrise).
Anta at vi har to klasser og en algoritme som forutsier tilhørigheten til hvert objekt til en av klassene, så vil klassifiseringsfeilmatrisen se slik ut:


Sant positiv (TP) Falsk positiv (FP)
Falsk negativ (FN) True Negative (TN)

Her er responsen til algoritmen på objektet, og er den sanne klasseetiketten på det objektet.
Det er altså to typer klassifiseringsfeil: Falsk Negativ (FN) og Falsk Positiv (FP).


Algoritmetrening og konstruksjon av feilmatrisen

X = df.drop ("Churn", akse = 1) y = df ["Churn"] # Del prøven i tog og test, alle beregninger vil bli evaluert på testdatasettet X_train, X_test, y_train, y_test = train_test_split ( X, y, stratify = y, test_size = 0,33, random_state = 42) # Tren den opprinnelige logistiske regresjonen lr = LogisticRegression (random_state = 42) lr.fit (X_train, y_train) # Bruk funksjonen til å konstruere feilmatrisen fra sklearn dokumentasjon def plot_confusion_matrix (cm, klasser , normalize = False, title = "(! LANG: Forvirringsmatrise", 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="Forvirringsmatrise") plt.savefig("conf_matrix.png") plt.show()!}


Nøyaktighet

En intuitiv, åpenbar og nesten ubrukt beregning er nøyaktighet - prosentandelen av riktige svar i algoritmen:



Denne metrikken er ubrukelig i problemer med ulik klasser, og det er lett å vise det med et eksempel.


La oss si at vi ønsker å evaluere ytelsen til et søppelpostfilter. Vi har 100 ikke-spam-e-poster, hvorav 90 klassifisereren vår identifiserte riktig (sann negativ = 90, falsk positiv = 10), og 10 spam-e-poster, hvorav 5 klassifisereren også identifiserte riktig (sann positiv = 5, falsk negativ = 5 ).
Så nøyaktighet:



Men hvis vi bare forutsier alle e-poster som ikke-spam, vil vi få en høyere nøyaktighet:



Samtidig har modellen vår absolutt ingen prediktiv kraft, siden vi i utgangspunktet ønsket å identifisere spam-meldinger. For å overvinne dette vil vi få hjelp av overgangen fra en felles beregning for alle klasser til separate indikatorer for kvaliteten på klassene.

Presisjon, tilbakekalling og F-mål

For å vurdere ytelsen til algoritmen på hver av klassene separat, introduserer vi presisjons- og tilbakekallingsmålingene.




Presisjon kan tolkes som andelen objekter som klassifiseres som positive og samtidig virkelig positive, og gjenkalling viser hvor stor andel av objekter av en positiv klasse av alle objekter i en positiv klasse funnet av algoritmen.



Det er introduksjonen av presisjon som ikke tillater oss å skrive alle objekter i en klasse, siden vi i dette tilfellet får en økning i False Positive-nivået. Tilbakekalling demonstrerer algoritmens evne til å oppdage en gitt klasse generelt, og presisjon demonstrerer evnen til å skille denne klassen fra andre klasser.


Som vi bemerket tidligere, er det to typer klassifiseringsfeil: Falsk positiv og falsk negativ. I statistikk kalles den første typen feil en type I-feil, og den andre kalles en type II-feil. I vårt problem med å bestemme antall abonnenter, vil feilen av den første typen være aksept av en lojal abonnent for en utgående, siden vår nullhypotese er at ingen av abonnentene forlater, og vi avviser denne hypotesen. Følgelig vil en feil av den andre typen være "hopping" av den utgående abonnenten og feilaktig aksept av nullhypotesen.


Presisjon og tilbakekalling avhenger ikke, i motsetning til nøyaktighet, av forholdet mellom klasser og er derfor anvendelige under forhold med ubalanserte prøver.
Ofte i praksis er oppgaven å finne den optimale (for kunden) balansen mellom disse to beregningene. Et klassisk eksempel er problemet med å bestemme kundeavgang.
Vi kan tydeligvis ikke finne av alle utgående kunder og kun deres. Men etter å ha identifisert strategien og ressursen for kundeoppbevaring, kan vi velge de nødvendige tersklene for presisjon og tilbakekalling. Du kan for eksempel fokusere på å beholde kun kunder med høy avkastning eller de som er mer sannsynlig å forlate fordi vi har begrensede ressurser til kundesenteret.


Vanligvis, når du optimerer hyperparametrene til en algoritme (for eksempel ved iterasjon over et rutenett GridSearchCV), brukes en beregning, hvis forbedring vi forventer å se på testprøven.
Det er flere forskjellige måter å kombinere presisjon og gjenkalling til et samlet mål på kvalitet. F-mål (generelt) - harmonisk gjennomsnittlig presisjon og tilbakekalling:



I dette tilfellet bestemmer den vekten av nøyaktigheten i metrikken, og når dette er det harmoniske gjennomsnittet (med en faktor på 2, slik at i tilfelle presisjon = 1 og tilbakekalling = 1 å ha)
F-målet når sitt maksimum når fullstendigheten og presisjonen er lik én, og er nær null hvis ett av argumentene er nær null.
Sklearn har en hendig funksjon _metrics.classification rapportere, som returnerer tilbakekalling, presisjon og F-mål for hver av klassene, samt antall forekomster av hver klasse.


report = classification_report (y_test, lr.predict (X_test), target_names = ["Ikke-churned", "Churned"]) print (rapport)
klasse presisjon minnes f1-score Brukerstøtte
Ikke-kjernet 0.88 0.97 0.93 941
Kjernet 0.60 0.25 0.35 159
snitt / totalt 0.84 0.87 0.84 1100

Det skal bemerkes her at i tilfelle problemer med ubalanserte klasser, som råder i virkelig praksis, er det ofte nødvendig å ty til teknikkene for kunstig modifisering av datasettet for å utjevne forholdet mellom klassene. Det er mange av dem, og vi skal ikke berøre dem, du kan se på noen av metodene og velge den som passer din oppgave.

AUC-ROC og AUC-PR

Når vi konverterer det virkelige svaret til algoritmen (som regel sannsynligheten for å tilhøre en klasse, se SVM separat) til en binær etikett, må vi velge en terskel hvor 0 blir 1. En terskel lik 0,5 virker naturlig og nærliggende , men det er ikke alltid det viser seg å være optimalt, for eksempel i den nevnte mangelen på klassebalanse.


En av måtene å evaluere modellen som helhet, uten å være bundet til en spesifikk terskel, er AUC-ROC (eller ROC AUC) - område ( EN rea U nder C urve) under feilkurven ( R mottaker O perating C karakteristisk kurve). Denne kurven er en linje fra (0,0) til (1,1) i True Positive Rate (TPR) og False Positive Rate (FPR) koordinater:




Vi kjenner allerede TPR, dette er fullstendighet, og FPR viser hvor stor andel av objekter av den negative klassen algoritmen forutså feil. I det ideelle tilfellet, når klassifikatoren ikke gjør noen feil (FPR = 0, TPR = 1), får vi arealet under kurven lik én; ellers, når klassifikatoren tilfeldig gir ut klassesannsynligheter, vil AUC-ROC tendere til 0,5, siden klassifikatoren vil gi ut samme antall TP og FP.
Hvert punkt på grafen tilsvarer valget av en viss terskel. Arealet under kurven viser i dette tilfellet kvaliteten på algoritmen (mer er bedre), i tillegg er brattheten i selve kurven viktig – vi ønsker å maksimere TPR ved å minimere FPR, noe som betyr at kurven vår ideelt sett bør ha en tendens til å punktet (0,1).


ROC-kurvetegningskode

sns.set (font_scale = 1.5) sns.set_color_codes ("dempet") 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 = "ROC-kurve") plt.plot (,) plt.xlim () plt.ylim () plt.xlabel ("False Positive Rate" ") plt.ylabel (" True Positive Rate ") plt.title (" ROC-kurve ") plt.savefig (" ROC.png ") plt.show ()



AUC-ROC-kriteriet er motstandsdyktig mot ubalanserte klasser (spoiler: dessverre, ikke alt er så entydig) og kan tolkes som sannsynligheten for at et tilfeldig valgt positivt objekt vil bli rangert av klassifisereren høyere (vil ha høyere sannsynlighet for å være positivt ) enn et tilfeldig valgt negativt objekt ...


Tenk på følgende problem: vi må velge 100 relevante dokumenter fra 1 million dokumenter. Vi har mestret to algoritmer:

  • Algoritme 1 returnerer 100 dokumenter, hvorav 90 er relevante. Og dermed,

  • Algoritme 2 returnerer 2000 dokumenter, hvorav 90 er relevante. Og dermed,


Mest sannsynlig vil vi velge den første algoritmen som produserer svært få falske positiver sammenlignet med konkurrenten. Men forskjellen i falsk positiv rate mellom disse to algoritmene ekstremt liten - bare 0,0019. Dette er en konsekvens av at AUC-ROC måler andelen falsk positiv i forhold til sann negativ, og i problemer der den andre (større) klassen ikke er så viktig for oss, kan det hende at den ikke gir et helt dekkende bilde når man sammenligner algoritmer .


For å rette opp situasjonen, la oss gå tilbake til fullstendighet og nøyaktighet:

  • Algoritme 1

  • Algoritme 2


Her er en betydelig forskjell mellom de to algoritmene allerede merkbar - 0,855 i nøyaktighet!


Presisjon og tilbakekalling brukes også til å konstruere kurven og, som AUC-ROC, finne området under den.



Det kan her bemerkes at på små datasett kan arealet under PR-kurven være for optimistisk, fordi det beregnes ved hjelp av trapesmetoden, men vanligvis er det nok data i slike oppgaver. For detaljer om forholdet mellom AUC-ROC og AUC-PR, se her.

Logistisk tap

Den logistiske tapsfunksjonen skiller seg ut, definert som:



her er algoritmens respons på -th-objektet, er den sanne klasseetiketten på -th-objektet og prøvestørrelsen.


Detaljer om den matematiske tolkningen av den logistiske tapsfunksjonen er allerede skrevet i rammen av innlegget om lineære modeller.
Denne beregningen vises sjelden i forretningskrav, men ofte i oppgaver på kaggle.
Intuitivt kan loglossminimering betraktes som oppgaven med å maksimere nøyaktigheten ved å straffe ukorrekte spådommer. Imidlertid bør det bemerkes at logloss straffer ekstremt sterkt for klassifisererens tillit til feil svar.


La oss vurdere et eksempel:


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 with uncertain classification% f "% logloss_crutch (1, 0.5)) >> Loggtap med usikker klassifisering 0.693147 print (" Loggtap med sikker klassifisering og riktig svar% f "% logloss_crutch (1, 0.9)) >> Loggtap med sikker klassifisering og riktig svar 0.105361 print (" Loggtap med sikker klassifisering og feil svar% f "% logloss_crutch (1, 0.1)) >> Loggtap med sikker klassifisering og feil svar 2.302585

Legg merke til hvordan logtapet har vokst dramatisk med et feil svar og en sikker klassifisering!
Følgelig kan en feil ved ett objekt resultere i en betydelig degradering av den totale prøvefeilen. Slike objekter er ofte uteliggere, som må huskes for å filtreres eller vurderes separat.
Alt faller på plass hvis du tegner en logloss-graf:



Man kan se at jo nærmere null algoritmens respons med grunnsannhet = 1, jo høyere er feilverdien og jo brattere vokser kurven.

La oss oppsummere:

  • I tilfelle av en flerklasseklassifisering, må du nøye overvåke beregningene til hver av klassene og følge logikken i avgjørelsen oppgaver i stedet for å optimalisere beregningen
  • I tilfelle av ulik klasser, er det nødvendig å velge balansen mellom klasser for trening og en beregning som riktig gjenspeiler kvaliteten på klassifiseringen
  • og madrugado for hjelp med denne artikkelen.
1

De siste årene har det vært mye oppmerksomhet rundt bilderekonstruksjon, derfor er kvalitetsvurdering en viktig oppgave for å sammenligne ulike metoder for bilderekonstruksjon. I mange tilfeller vil rekonstruksjonsteknikker uskarpe tekstur og struktur når man gjenoppretter store områder med forvrengte pikselverdier. Det er foreløpig ingen objektiv kvantitativ vurdering av utvinningsresultatene, og derfor bruker mange tilnærminger ekspertvurderinger. Denne artikkelen diskuterer en ny tilnærming til å vurdere kvaliteten på bilderekonstruksjon basert på maskinlæring ved bruk av en menneskelig synsmodell, som består i det faktum at lokale områder av bilder kan representeres av deskriptorer i form av noen parametriske distribusjoner. Videre tillater støttevektorregresjonsmetoden å forutsi den oppfattede kvaliteten til de rekonstruerte bildene i samsvar med ekspertvurderinger. Oppgaven viser at kvalitetsvurderingen oppnådd ved bruk av tilnærmingen ovenfor, korrelerer med den subjektive kvalitetsvurderingen.

maskinlæring

visuell kvalitet

gjenoppbygging

bildebehandling

1. Gastaldo P. Maskinlæringsløsninger for objektiv visuell kvalitetsvurdering / 6. internasjonale workshop om videoprosessering og kvalitetsmålinger for forbrukerelektronikk, VPQM. - Vol. 12. - 2012.

2. Bertalmio M., Bertozzi A., Sapiro G. Navier-Stokes, uid-dynamikk og bilde- og videomaleri / Hawaii: Proc. IEEE Computer Vision and Pattern Recognition (CVPR). - 2001.– PP. 213-226.

3. Criminisi A., Perez P., Toyama K. Regionutfylling og fjerning av objekter ved eksempelbasert bildemaling / IEEE Trans. Bildeprosess. - 13 (9). - 2004. - PP. 28-34.

4. Vijay M., Cheung, S.S. Øyesporingsbasert perseptuell bildekvalitetsanalyse / bildebehandling (ICIP), 17. IEEE internasjonale konferanse om IEEE. - 2010. - PP. 1109 - 1112.

5. Ardis P. A., Singhal A. Visuell fremtredende metrikk for bildemaling / SPIE Electronic Imaging. International Society for Optics and Photonics. - 2009.

6. Cheung S.S., Zhao J., Venkatesh V. Effektiv objektbasert videomaling / bildebehandling, 2006 IEEE International Conference on. - 2006. - PP. 705-708.

7. Peretyagin G.I. Representasjon av bilder ved Gaussiske tilfeldige felt / autometri. - Nr. 6. - 1984. - S. 42 - 48.

8. Frantc V.A., Voroni V.V., Marchuk V.I., Sherstobitov A.I., Agaian S., Egiazarian K. Machine learning approach for objektiv inpainting quality assessment / Proc. SPIE 9120, mobil multimedia / bildebehandling, sikkerhet og applikasjoner. - Vol. 91200S. - 2014.

9. Paul A., Singhal A., og. Brown C. Inpainting kvalitetsvurdering / Journal of Electronic Imaging. - Vol. 19. - 2010. - PP. 011002-011002.

En objektiv metrikk for bildekvalitet er en viktig del av bildebehandlingssystemer. En av de viktige anvendelsene av objektive beregninger for å vurdere bildekvalitet er å vurdere effektiviteten til algoritmer og bildebehandlingssystemer. Til tross for det store antallet publikasjoner om dette emnet, vurderes problemet med å vurdere kvaliteten på rekonstruerte bilder bare i noen få. Samtidig har problemet med å gjenopprette de tapte bildeområdene fått betydelig oppmerksomhet den siste tiden.

Det er to mulige tilnærminger til å vurdere kvaliteten på bilder: kvantitativ vurdering ved bruk av matematiske metoder (standardfeil, Lp-norm, tiltak som tar hensyn til særegenhetene ved bildeoppfatning av det menneskelige visuelle systemet) og subjektiv vurdering basert på ekspertvurderinger.

Kvalitetsvurderingen oppnådd ved bruk av eksisterende tilnærminger kan avvike betydelig fra vurderingen oppnådd ved hjelp av menneskelige eksperter. De fleste av de eksisterende tilnærmingene til kvalitetsvurdering bruker et referansebilde. Dessverre er det i mange tilfeller ikke et referansebilde tilgjengelig. Slike oppgaver inkluderer oppgaven med å rekonstruere tapte piksler. Derfor haster oppgaven med å utvikle en kvantitativ metrikk for å vurdere kvaliteten på rekonstruerte bilder.

Det er gjort betydelige fremskritt i utviklingen av kvantitative vurderinger av bildekvalitet. De introduserte kriteriene er imidlertid ikke perfekte nok. De fleste forsøk på å finne akseptable estimater for bildekvalitet er spesifikke tilfeller. En viss vurdering er foreslått, basert på noen fysiologiske forutsetninger, og oftere enkelt praktisk for analyse og beregninger, og deretter vurderes dens egenskaper. Opprettelsen av bedre estimater av kvaliteten på bilder er assosiert med en dypere studie av egenskapene til det menneskelige visuelle systemet.

Hensikten med dette arbeidet er utvikling av en metrikk for å vurdere kvaliteten på bilder ved behandling av rekonstruksjonsmetoder basert på maskinlæring.

Matematisk modell

Artikkelen bruker betegnelser som ligner på de som er brukt i verket. Hele bildet består av to ikke-overlappende områder: det rekonstruerte området og det kjente området. Figur 1 viser et eksempel på plasseringen av disse områdene.

Fig 1. Bildemodell

Bildet og området Ω inne i det er kjent. Rekonstruksjonsoppgaven er å modifisere verdiene til pikslene i bildet inne i regionen Ω, slik at regionen ikke skiller seg ut mot bakgrunnen til det omkringliggende bildet. Hensikten med rekonstruksjon kan være å reparere skadede deler av et bilde (for eksempel riper og sprekker i gamle fotografier) ​​eller å fjerne uønskede objekter fra et bilde. Domenet Ω vist i figur 1 er alltid brukerdefinert, dvs. å definere domenet Ω er ikke en del av rekonstruksjonsproblemet.

Algoritme for å vurdere kvaliteten på bildegjenoppretting

Generelt, for en vellykket konstruksjon av en bildekvalitetsmåling basert på maskinlæring, er det nødvendig å løse følgende tre problemer:

1. Bestemmelse av rommet av funksjoner som fungerer som en beskrivelse av inngangssignalene.

2. Valg av kartleggingsfunksjon fra funksjonsrom til kvalitetsvurderingsrom.

3. Trening av systemet og kontroll av stabiliteten (sjekke for omskolering osv.).

Blokkdiagrammet for den valgte tilnærmingen er vist i figur 2 og inneholder følgende trinn:

1. Velge et område av interesse (ved hjelp av et oppmerksomhetskart);

2. Beregning av funksjoner på lavt nivå i bildet;

3. Bygge en beskrivelse av det gjenvunnede området basert på funksjoner på lavt nivå;

4. Løse regresjonsproblemet for å få en numerisk kvalitetsvurdering basert på den oppnådde deskriptorvektoren.

Ris. 2. Blokkdiagram av algoritmen

Arbeidet viser at visuell oppmerksomhet spiller en viktig rolle i menneskets visuelle persepsjon. Til enhver tid ser det menneskelige øye tydelig bare en liten del av scenen, mens et mye større område av scenen oppfattes som "uskarpt". Denne "uklare informasjonen" er nok til å vurdere viktigheten av ulike områder av scenen og for å trekke oppmerksomhet til viktige områder av synsfeltet. De fleste metoder produserer et oppmerksomhetskart - et todimensjonalt bilde der verdiene til hver piksel er assosiert med viktigheten av det tilsvarende området.

For å få oppmerksomhetskart benyttes Saliency Toolbox beskrevet i arbeidet. Denne verktøykassen bruker en modell av det menneskelige visuelle systemet. Det er viktig å merke seg at det ikke gir mening å sammenligne det rekonstruerte området i originalen og det rekonstruerte bildet, da det generelle innholdet kan endre seg betydelig. Det foreslås å bruke følgende uttrykk for å velge områder av interesse:

.

Her er oppmerksomhetskartet for det rekonstruerte bildet, og oppmerksomhetskartverdien som tilsvarer pikselen. I uttrykket ovenfor er blikktettheten beregnet innenfor og utenfor det rekonstruerte bildeområdet. Verdien brukes som en terskelverdi når det skal avgjøres hvilke deler av bildet som skal brukes i evalueringen og hvilke som ikke skal. Bare de områdene som.

Spektralrepresentasjoner brukes som funksjoner på lavt nivå i lokale områder. Videre foreslås analysen av følgende Fourier, Walsh, Haar-baser ved bruk av effektivitetsvektoren. For riktig beregning av komponentene i systemeffektivitetskriteriet i nærvær av støy og forvrengning, er det nødvendig å bruke statistisk gjennomsnitt.

Ved syntetisering av algoritmer for behandling av signaler og systemer, brukes oftest kriteriet om minimum gjennomsnittlig risiko, noe som gjør det mulig å ta hensyn til statistikk over interferens og signaler. Når du implementerer frekvenstransformasjoner og evaluerer beregningskostnader, er valget av grunnlaget for spektral dekomponering avgjørende. For å optimalisere valget av grunnlaget for signaldekomponering, er det tilrådelig å bruke kriteriet for minimum gjennomsnittlig risiko. For dette er det nødvendig at klassen av signaler og prosesser som brukes spesifiseres og deres sannsynlige egenskaper er kjent.

For en gitt klasse av todimensjonale prosesser antas det at sannsynligheten for hver av underklassene er kjent, der indeksen er nummeret til underklassen med noen felles egenskaper, og er implementeringsnummeret til prosessen til den th underklassen. . Vi vil sammenligne et sett med basissystemer Utvidelse i en generalisert Fourier-serie i det -th basissystemet i generell form har formen: .

Med et begrenset antall ledd i Fourier-serien, kan det karakteriseres ved en feil: hvor er avstanden i en metrikk, er delsummen av leddene til Fourier-serien.

Maskinvarebestemmelsen av koeffisientene til Fourier-serien eller deres beregning er forbundet med visse beregningskostnader. La oss introdusere en tapsfunksjon som tar hensyn til både tapene knyttet til avkortingsfeilen til Fourier-serien og kostnadene for maskinvare og beregningsressurser:

.

Verdien av den betingede risikoen avhenger av både signalunderklassen og grunnlaget og beregnes ved å beregne et gjennomsnitt av tapsfunksjonen over realisasjonene:

hvor er sannsynlighetstettheten til de analyserte signalene og interferensen; og vinkelparentesene angir den statistiske gjennomsnittsoperasjonen.

Den gjennomsnittlige risikoen bestemmes ved å snitte den betingede risikoen over signalunderklasser:

,

hvor er sannsynligheten for den -te underklassen av signaler.

I samsvar med kriteriet om minimum gjennomsnittlig risiko fra basene, velges den som gjennomsnittsrisikoen er minimal for.

For å vurdere effektiviteten til systemkriteriet for bildebehandlingskvalitet, vurderes testbilder i form av teksturer oppnådd på grunnlag av modellering av Gaussiske felt med spesifiserte korrelasjonsfunksjoner. Generering av homogene normale tilfeldige felt, samt stasjonære normale tilfeldige prosesser, gjøres enklest ved formingsfiltermetoden.

Som et eksempel tar artikkelen for seg representasjonen av tilfeldige realisasjoner med ulike korrelasjonsfunksjoner i basene til trigonometriske funksjoner (Fourier), Walsh og Haar. La oss utføre analysen i de valgte basene for de opprettede bildemodellene med en størrelse på 256 x 256 piksler. Vi vil også sette oss tre typer sannsynlighetsfordeling av underklasser: 1) uniform: ; 2) avtagende:;
3) økende:. La oss velge en kostnadsfunksjon i skjemaet: .

Den gjennomsnittlige risikoen bestemmes ved å snitte den betingede risikoen over signalunderklasser ved å bruke de aksepterte a priori-sannsynlighetene for signalunderklasser, de beregnede verdiene er presentert i tabell 1.

Tabell 1

Gjennomsnittlige risikoverdier

Typer sannsynlighetsfordelinger

Beregningsresultatene presentert i tabellen viser at for de vedtatte modellene av todimensjonale signaler og deres sannsynlighetsfordelinger, har Haar-grunnlaget lavest gjennomsnittlig risiko, og Fourier-grunnlaget har høyest.

Basert på analysen som er utført, vil vi velge et Haar-grunnlag for å representere lokale bilderegioner. Det skal bemerkes at størrelsen på det rekonstruerte området er forskjellig for forskjellige bilder. I denne forbindelse, på grunnlag av funksjoner på lavt nivå, bør det dannes en representasjon på høyt nivå av en fast størrelse. En pose med ord-tilnærming brukes som en representasjon på høyt nivå. Prosedyren for å konstruere en deskriptor (signatur) av det restaurerte området består av to trinn. Det første trinnet er å bygge en ordbok. Den bruker funksjoner på lavt nivå hentet fra alle bildene av treningsbildesettet. For å bygge en ordbok deles de utpakkede funksjonene inn i 100 klasser ved hjelp av en k-betyr klyngealgoritme. Hvert element i ordboken er et tyngdepunkt for en av klassene funnet av klyngingsprosedyren. Hvert ord i ordboken representerer en Haar-transformasjon i en 8x8 bildeblokk. Den resulterende ordboken brukes på det andre trinnet når man konstruerer frekvenshistogrammer for ord fra ordboken som en funksjonsvektor - en beskrivelse av det gjenopprettede området (fig. 3). Det resulterende settet med deskriptorer brukes til å trene regresjonsmaskinen (Support Vector Regression). For å få et histogram over ordfrekvenser trekkes alle visuelt merkbare områder ut fra ordboken (synligheten bestemmes ved hjelp av oppmerksomhetskart) til et bestemt bilde. Deretter påføres en Haar-transformasjon på hver av de ekstraherte blokkene og klassifisering utføres i henhold til det resulterende vokabularet basert på den euklidiske avstanden.

Hver boks i det resulterende histogrammet inneholder antallet funksjoner på lavt nivå for en bestemt klasse i et gitt gjenopprettet område. Etter normalisering av histogrammet oppnås en "signatur" av bildet - en representasjon på høyt nivå av det gjenopprettede området.

Fig. 3. Bygge et histogram

Evaluering av effektiviteten til algoritmen for å evaluere kvaliteten på bildegjenoppretting

For å vurdere effektiviteten til den utviklede metrikken, ble et sett med testbilder brukt. Settet består av 300 bilder. Følgende tilnærminger ble valgt som utvinningsmetoder: en metode basert på søk etter selvliknende regioner, en metode basert på spektrale transformasjoner, en metode basert på beregning av partielle derivater. En ekspertvurdering ble innhentet for hvert bilde, som involverte 30 personer. Resultatene ble delt inn i to ikke-overlappende sett. Den første ble brukt til trening, og den andre ble brukt til å sjekke resultatet.

Ekspertene vurderte kvaliteten på en skala der 5 tilsvarer "Utmerket", og 1 tilsvarer "Veldig dårlig". For å vurdere effektiviteten til den oppnådde metrikken, brukes korrelasjonskoeffisienten mellom vektorene oppnådd ved bruk av den objektive metrikken og ekspertmetoden for kvalitetsvurderinger. Analysen av resultatene oppnådd i tabell 2 viser at den foreslåtte tilnærmingen overgår de kjente kvalitetsmålingene på det valgte settet med testdata.

tabell 2

Korrelasjonskoeffisient for ulike metoder for å beregne målet
bildekvalitetsmålinger

Den foreslåtte tilnærmingen

Konklusjon

Artikkelen presenterer en objektiv beregning for å vurdere bildekvalitet basert på maskinlæring. Kvantitative mål på bildekvalitet er avgjørende for design og evaluering av bildesystemer. Disse tiltakene vil i stor grad bidra til å bli kvitt den møysommelige og unøyaktige moderne metoden for å vurdere bilder gjennom subjektiv undersøkelse. I tillegg kan metoder for å optimalisere bildebehandlingssystemer utvikles på grunnlag av kvantitative mål. Det er vist at kvalitetsvurderingen oppnådd ved bruk av tilnærmingen ovenfor samsvarer med den subjektive kvalitetsvurderingen.

Dette arbeidet ble støttet av Utdannings- og vitenskapsdepartementet i Den russiske føderasjonen innenfor rammen av det føderale målprogrammet "Forskning og utvikling i prioriterte utviklingsområder for Russlands vitenskapelige og teknologiske kompleks for 2014-2020" (avtale nr. 14.586) .21.0013).

Anmeldere:

Fedosov V.P., doktor i tekniske vitenskaper, professor, leder for avdelingen for TOR ved Engineering and Technological Academy ved Southern Federal University, Rostov-on-Don;

Marchuk V.I., doktor i tekniske vitenskaper, professor, leder for avdelingen for radioelektroniske og elektrotekniske systemer og komplekser, ISOiP (gren av DSTU), Shakhty.

Bibliografisk referanse

Voronin V.V. VURDERING AV KVALITETEN PÅ BILDERESTAURERING BASERT PÅ MASKINLÆRING // Moderne problemer innen vitenskap og utdanning. - 2014. - Nr. 6 .;
URL: http://science-education.ru/ru/article/view?id=16294 (dato for tilgang: 02/01/2020). Vi gjør deg oppmerksom på tidsskriftene utgitt av "Academy of Natural Sciences"

Ofte i praksisen til systemanalytikeren som utgjør FRD, er det ting som ikke er formalisert. Et eksempel kan være krav som:

  • Appen skal kjøre raskt
  • Applikasjonen bør forbruke lite trafikk
  • Videomaterialet skal være av høy kvalitet.

Slike krav, når de er skrevet som de er i FRD, er en monstrøs kilde til problemer i etterkant. Å formalisere slike krav er en konstant hodepine for analytikeren. Vanligvis løser en analytiker et problem i to trinn: Først fremsettes et "tilsvarende" formkrav, deretter bevises det i kommunikasjonsprosessen (med en kunde, fagekspert osv.) at et slikt formkrav kan erstatte det opprinnelige kravet. Generelt sett er ikke kravet vi mottok funksjonelt; den beskriver ikke "hva" systemet skal kunne gjøre, men "hvordan det skal gjøres". Dessuten bør "hvordan gjøre det" formuleres med en spesifikk kvalitativ egenskap.

Det var en ingress til oppgaven at en systemanalytiker skulle være flytende i det matematiske apparatet og samtidig kunne forklare «matematikk» for kunden. La oss nå se på et eksempel.

Om klassifiseringsproblemet

La oss si at vi skriver FRD for et kontekstuelt annonseringssystem som ligner på Amazon Omakase. En av modulene i vårt fremtidige system vil være en kontekstanalysator:

Analysatoren tar teksten til en nettside som input og utfører sin kontekstuelle analyse. Hvordan han gjør dette er av liten interesse for oss; det er viktig at vi ved utgangen får et sett med produktkategorier (hvis settet er forhåndsbestemt). Videre, basert på disse kategoriene, kan vi vise bannere, produktlenker (som Amazon), etc. Analysatoren er fortsatt en svart boks for oss, som vi kan stille et spørsmål til (i form av en dokumenttekst) og få svar.

Kunden ønsker at analysatoren skal være "flink til å kontekstualisere". Vi må artikulere hva dette kravet betyr. La oss først snakke om konteksten som sådan, dvs. omtrent det samme settet med kategorier som returneres av analysatoren. Du kan definere dette som en klassifiseringsoppgave når et dokument (webside) er tilordnet mange klasser fra et forhåndsbestemt antall; i vårt tilfelle er klasser produktkategorier. Klassifiseringsoppgaven er ganske vanlig i tekstbehandling (for eksempel spamfiltre).

Vurderingsberegninger

Vurder evalueringsberegningene som gjelder for klassifiseringsproblemet. La oss si at vi vet riktig kategorier for en rekke dokumenter. La oss gruppere svarene fra vår hypotetiske analysator som følger:

  • Virkelig positiv ( ekte positive) - de kategoriene som vi forventet å se og mottatt ved utgangen
  • Falsk positiv ( falske positiver) - kategorier som ikke skal være i utgangen og analysatoren returnerte dem feilaktig ved utgangen
  • Falsk negativ ( falske negativer) - kategorier som vi forventet å se, men analysatoren oppdaget dem ikke
  • Ekte negativ ( ekte negativer) - kategorier som ikke skal være i utgangen, og de er også helt fraværende fra analysatorutgangen.

La oss kalle et testsett for et sett med dokumenter (websider) som vi vet de riktige svarene på. Hvis vi teller antall treff for hver kategori (teller vi treff etter par dokument - kategori), får vi den kanoniske tabellen over distribusjon av svar:

Den venstre kolonnen i tabellen er de "riktige" kombinasjonene av dokumenter og kategorier (som vi forventer å være tilstede i utgangen), den høyre er feil. Den øverste raden i tabellen er klassifisererens positive svar, den nederste raden er negativ (i vårt tilfelle, fraværet av en kategori i svaret). Hvis antallet av alle parene dokument - kategori er lik N, da er det lett å se det

Generelt kan du nå skrive ned kundens krav i skjemaet (antall feil svar er null) og stoppe der. Men i praksis eksisterer ikke slike systemer og analysatoren vil selvfølgelig jobbe med feil i forhold til testprøven. Nøyaktighetsberegningen vil hjelpe oss å forstå prosentandelen av feil:

I telleren ser vi diagonalen til matrisen - det totale antallet riktige svar, som er delt på det totale antallet spørsmål. For eksempel har en analysator som gir 9 riktige svar av 10 mulige en nøyaktighet på 90 %.

Metrikk F 1

Et enkelt eksempel på at nøyaktighetsmålingen ikke er anvendelig, er problemet med å definere et skomerke. La oss si at vi ønsker å telle antall omtaler av skomerker i teksten. Vurder et klassifiseringsproblem som tar sikte på å avgjøre om en spesifisert enhet er et skomerke (Timberland, Columbia, Ted Baker, Ralph Lauren, etc.). Med andre ord deler vi enhetene i teksten inn i to klasser: A - Skomerke, B - Alt annet.

Tenk nå på en degenerert klassifisering som ganske enkelt returnerer klasse B (alt annet) for noen enheter. For denne klassifikatoren vil antallet sanne positive svar være 0. Generelt sett, la oss tenke på temaet, men hvor ofte møter vi skomerker når vi leser tekst på Internett? Det viser seg merkelig nok at i det generelle tilfellet 99,9999 % av ordene i teksten er ikke skomerker... La oss konstruere en distribusjonsmatrise med svar for et utvalg på 100 000:

La oss beregne nøyaktigheten, som vil være lik 99990/100000 = 99,99%! Så vi bygde enkelt en klassifisering som i hovedsak ikke gjør noe, men som har en stor prosentandel av riktige svar. Samtidig er det helt klart at vi ikke løste problemet med å definere et skomerke. Faktum er at de riktige enhetene i vår tekst er sterkt "utvannet" med andre ord som ikke har noen betydning for klassifisering. Gitt dette eksemplet er det forståelig å ønske å bruke andre beregninger. For eksempel verdien tn er tydelig "søppel" - det ser ut til å bety riktig svar, men overvekst tn som et resultat, "undertrykker" bidraget sterkt tp(som er viktig for oss) inn i nøyaktigheten.

La oss definere et mål på presisjon (P, presisjon) som:

Som det er lett å se, karakteriserer nøyaktighetsmålet hvor mange positive svar mottatt fra klassifikatoren som er riktige. Jo høyere nøyaktighet, jo lavere antall falske treff.

Presisjonsmålet gir imidlertid ikke en ide om hvorvidt klassifisereren returnerte alle riktige svar. For dette er det et såkalt tilbakekallingstiltak (R, tilbakekalling):

Fullstendighetsmålet kjennetegner klassifisererens evne til å "gjette" så mange positive svar som mulig fra de forventede. Vær oppmerksom på at falske positive ikke påvirker denne beregningen på noen måte.

Precision og Recall gir en ganske omfattende karakterisering av klassifisereren, og fra forskjellige vinkler. Vanligvis, når du bygger systemer av denne typen, må du hele tiden balansere mellom disse to beregningene. Hvis du prøver å heve Recall ved å gjøre klassifikatoren mer "optimistisk", vil det resultere i et fall i Presisjon på grunn av en økning i falske positiver. Hvis du justerer klassifiseringen din, gjør den mer "pessimistisk", for eksempel ved å filtrere resultatene strengere, vil dette med en økning i presisjon føre til et samtidig fall i tilbakekalling på grunn av avvisning av et visst antall riktige svar. Derfor er det praktisk å bruke en mengde for å karakterisere klassifikatoren, den såkalte metrikken F 1:

Faktisk er det bare det harmoniske gjennomsnittet av verdiene til P og R. Metrikken F 1 når sin maksimale 1 (100%) hvis P = R = 100%.
(det er lett å anslå at for vår degenererte klassifiser F 1 = 0). F 1-verdien er en av de vanligste beregningene for denne typen systemer. Det er F 1 vi skal bruke for å formulere terskelkvaliteten til analysatoren vår i FRD.

Det er to hovedtilnærminger for å beregne F 1 for klassifiseringsproblemet.

  • Totalt F 1: resultatene for alle klasser er oppsummert i én enkelt tabell, i henhold til denne beregningen F 1 beregnes.
  • Medium F 1: for hver klasse danner vi vår egen kontingensmatrise og vår egen verdi F 1, så tar vi et enkelt aritmetisk gjennomsnitt for alle klasser.

Hvorfor er den andre metoden nødvendig? Poenget er at utvalgsstørrelsene for ulike klasser kan variere sterkt. For noen klasser kan vi ha svært få eksempler, og for noen - mange. Som et resultat vil beregningene for en "stor" klasse, som er oppsummert i en felles tabell, "skåre" alle de andre. I en situasjon hvor vi ønsker å vurdere kvaliteten på systemet mer eller mindre jevnt for alle klasser, er det andre alternativet bedre egnet.

Trenings- og prøveeksempel

Ovenfor vurderte vi klassifiseringen på en enkelt prøve, som vi vet alle svarene på. Når det brukes på kontekstanalysatoren vi prøver å beskrive, ser ting litt mer komplisert ut.

Først av alt må vi fikse produktkategoriene. Situasjonen når vi garanterer en viss verdi på F 1, og settet med klasser kan utvides i det uendelige, er praktisk talt en blindvei. Derfor er det i tillegg fastsatt at settet med kategorier er faste.

Vi beregner verdien av F 1 for en gitt prøve, som er kjent på forhånd. Denne prøven kalles vanligvis undervisning... Vi vet imidlertid ikke hvordan klassifikatoren vil oppføre seg på dataene vi ikke kjenner. For disse formål, den såkalte testprøve noen ganger kalt gyldent sett... Forskjellen mellom trening og testsett er rent spekulativt: Når alt kommer til alt, med en rekke eksempler, kan vi kutte det inn i trening og testsett som vi vil. Men for selvlærende systemer er dannelsen av riktig treningsprøve svært kritisk. Feil valgte eksempler kan i stor grad påvirke kvaliteten på systemet.

En typisk situasjon er når klassifisereren viser et godt resultat på treningssettet og feiler fullstendig på testsettet. Hvis klassifiseringsalgoritmen vår er basert på maskinlæring (dvs. avhenger av treningsutvalget), kan vi evaluere kvaliteten ved hjelp av et mer komplekst "flytende" skjema. For å gjøre dette deler vi alle eksemplene vi har, for eksempel i 10 deler. Vi fjerner den første delen og bruker den til å trene algoritmen; de resterende 90 % av eksemplene brukes som en testprøve og verdien av F 1 beregnes. Så fjerner vi den andre delen og bruker den som en treningsdel; vi får en annen verdi på F 1 osv. Som et resultat fikk vi 10 verdier av F 1, nå tar vi deres aritmetiske gjennomsnitt, som vil bli det endelige resultatet. Igjen, dette er måten (også kalt kryssfold validering) er bare meningsfylt for maskinlæringsbaserte algoritmer.

Når vi kommer tilbake til å skrive FRD, merker vi at situasjonen vår er mye verre. Vi har et potensielt ubegrenset sett med innganger (alle nettsider på Internett), og det er ingen måte å evaluere konteksten til en side på annet enn menneskelig deltakelse... Dermed kan prøven vår bare dannes for hånd, og det avhenger sterkt av kompilatorens innfall (og det er en person som bestemmer om en side skal tilordnes en bestemt kategori). Vi kan estimere mål F 1 på eksemplene vi kjenner, men vi kan bare ikke finne ut F 1 for alle internettsider... Derfor, for potensielt ubegrensede datasett (som nettsider, som det finnes utallige tall av), brukes noen ganger metoden "uten tilsyn". For å gjøre dette velges et visst antall eksempler (sider) tilfeldig, og fra dem komponerer operatøren (personen) det riktige settet med kategorier (klasser). Vi kan deretter teste klassifisereren på disse utvalgte eksemplene. Videre, forutsatt at eksemplene vi har valgt er typisk, kan vi grovt anslå nøyaktigheten til algoritmen (Presisjon). Samtidig kan vi ikke vurdere Recall (det er ikke kjent hvor mange riktige svar som er utenfor grensene for eksemplene vi har valgt), derfor kan vi heller ikke beregne F 1.

Derfor, hvis vi ønsker å vite hvordan algoritmen oppfører seg på alle mulige innganger, er det beste vi kan estimere i denne situasjonen den omtrentlige presisjonsverdien. Hvis alle er enige om å bruke en forhåndsbestemt fast prøve, er gjennomsnittet F 1 for denne prøven.

Etter hvert?

Som et resultat må vi gjøre følgende:

  1. Frys treningsprøven. Treningsutvalget vil bygges på bakgrunn av kundens ideer om «riktig» kontekst.
  2. Fiks et sett med kategorier for analysatoren vår. Kan vi ikke beregne F 1 fra et udefinert sett med klasser?
  3. Beskriv kravet i skjemaet: Analysatoren bør identifisere en kontekst med en gjennomsnittlig F 1 på minst 80 %.(for eksempel)
  4. Forklar dette til kunden.

Som du ser er det ikke lett å skrive FRD for et slikt system (spesielt det siste punktet), men det er mulig. Når det gjelder terskelverdien F 1, kan du i slike tilfeller bygge på verdiene til F 1 for lignende klassifiseringsproblemer.