I denne artikkelen vil vi analysere de teoretiske beregningene av transformasjonen lineære regresjonsfunksjoner в invers logit-transformasjonsfunksjon (ellers kalt logistisk responsfunksjon). Deretter bruker du arsenalet metode for maksimal sannsynlighet, i samsvar med den logistiske regresjonsmodellen, utleder vi tapsfunksjonen Logistisk tap, eller med andre ord, vi vil definere en funksjon som parametrene til vektvektoren velges med i den logistiske regresjonsmodellen .
Artikkeloversikt:
- La oss gjenta det lineære forholdet mellom to variabler
- La oss identifisere behovet for transformasjon lineære regresjonsfunksjoner в logistisk responsfunksjon
- La oss utføre transformasjonene og produksjonen logistisk responsfunksjon
- La oss prøve å forstå hvorfor minste kvadraters metode er dårlig når du velger parametere funksjoner Logistisk tap
- Vi bruker metode for maksimal sannsynlighet for å bestemme funksjoner for parametervalg :
5.1. Tilfelle 1: funksjon Logistisk tap for objekter med klassebetegnelser 0 и 1:
5.2. Tilfelle 2: funksjon Logistisk tap for objekter med klassebetegnelser -1 и +1:
Artikkelen er full av enkle eksempler der alle beregninger er enkle å gjøre muntlig eller på papir; i noen tilfeller kan det være nødvendig med en kalkulator. Så gjør deg klar :)
Denne artikkelen er først og fremst ment for dataforskere med et innledende kunnskapsnivå i det grunnleggende om maskinlæring.
Artikkelen vil også gi kode for å tegne grafer og beregninger. All kode er skrevet på språket python 2.7. La meg forklare på forhånd om "nyheten" til versjonen som brukes - dette er en av betingelsene for å ta det velkjente kurset fra Yandex på en like kjent nettbasert utdanningsplattform Coursera, og, som man kan anta, ble materialet utarbeidet basert på dette kurset.
01. Rettlinjet avhengighet
Det er ganske rimelig å stille spørsmålet - hva har lineær avhengighet og logistisk regresjon med det å gjøre?
Det er enkelt! Logistisk regresjon er en av modellene som tilhører den lineære klassifikatoren. Med enkle ord er oppgaven til en lineær klassifikator å forutsi målverdier fra variabler (regressorer) . Det antas at avhengigheten mellom egenskapene og målverdier lineær. Derav navnet på klassifisereren - lineær. For å si det veldig grovt, er den logistiske regresjonsmodellen basert på antakelsen om at det er en lineær sammenheng mellom egenskapene og målverdier . Dette er forbindelsen.
Det er det første eksemplet i studio, og det handler riktignok om den rettlinjede avhengigheten til mengdene som studeres. I prosessen med å utarbeide artikkelen kom jeg over et eksempel som allerede har satt mange mennesker på kanten - avhengigheten av strøm på spenning ("Anvendt regresjonsanalyse", N. Draper, G. Smith). Vi skal se på det her også.
I samsvar med Ohms lov:
Der - strømstyrke, - Spenning, - motstand.
Hvis vi ikke visste Ohms lov, så kunne vi finne avhengigheten empirisk ved å endre og måling , mens du støtter fikset. Da ville vi se at avhengighetsgrafen fra gir en mer eller mindre rett linje gjennom origo. Vi sier "mer eller mindre" fordi selv om forholdet faktisk er nøyaktig, kan målingene våre inneholde små feil, og derfor kan det hende at punktene på grafen ikke faller nøyaktig på linjen, men vil bli spredt rundt den tilfeldig.
Graf 1 "Avhengighet" fra »
Karttegningskode
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import random
R = 13.75
x_line = np.arange(0,220,1)
y_line = []
for i in x_line:
y_line.append(i/R)
y_dot = []
for i in y_line:
y_dot.append(i+random.uniform(-0.9,0.9))
fig, axes = plt.subplots(figsize = (14,6), dpi = 80)
plt.plot(x_line,y_line,color = 'purple',lw = 3, label = 'I = U/R')
plt.scatter(x_line,y_dot,color = 'red', label = 'Actual results')
plt.xlabel('I', size = 16)
plt.ylabel('U', size = 16)
plt.legend(prop = {'size': 14})
plt.show()
02. Behovet for å transformere den lineære regresjonsligningen
La oss se på et annet eksempel. La oss forestille oss at vi jobber i en bank og vår oppgave er å bestemme sannsynligheten for at låntakeren betaler tilbake lånet avhengig av visse faktorer. For å forenkle oppgaven vil vi bare vurdere to faktorer: låntakerens månedlige lønn og det månedlige tilbakebetalingsbeløpet på lånet.
Oppgaven er veldig betinget, men med dette eksemplet kan vi forstå hvorfor det ikke er nok å bruke lineære regresjonsfunksjoner, og finn også ut hvilke transformasjoner som må utføres med funksjonen.
La oss gå tilbake til eksemplet. Det er underforstått at jo høyere lønn, jo mer vil låntakeren kunne bevilge månedlig for å tilbakebetale lånet. Samtidig vil dette forholdet for et visst lønnsområde være ganske lineært. La oss for eksempel ta et lønnsområde fra 60.000 200.000 RUR til 3 5.000 RUR og anta at i det angitte lønnsområdet er avhengigheten av størrelsen på den månedlige utbetalingen av størrelsen på lønnen lineær. La oss si at for det spesifiserte lønnsområdet ble det avslørt at lønn-til-betalingsforholdet ikke kan falle under XNUMX og låntakeren må fortsatt ha XNUMX RUR i reserve. Og bare i dette tilfellet vil vi anta at låntakeren vil tilbakebetale lånet til banken. Deretter vil den lineære regresjonsligningen ha formen:
der , , , - lønn -th låntaker, - betaling av lån -th låntaker.
Erstatter lønn og lånebetaling med faste parametere i ligningen Du kan bestemme om du vil utstede eller avslå et lån.
Ser vi fremover, merker vi at med de gitte parameterne lineær regresjonsfunksjon, brukt i logistiske responsfunksjoner vil produsere store verdier som vil komplisere beregninger for å bestemme sannsynlighetene for tilbakebetaling av lån. Derfor foreslås det å redusere koeffisientene våre, la oss si, med 25.000 XNUMX ganger. Denne transformasjonen i koeffisientene vil ikke endre beslutningen om å utstede et lån. La oss huske dette punktet for fremtiden, men nå, for å gjøre det enda tydeligere hva vi snakker om, la oss vurdere situasjonen med tre potensielle låntakere.
Tabell 1 "Potensielle låntakere"
Kode for å generere tabellen
import pandas as pd
r = 25000.0
w_0 = -5000.0/r
w_1 = 1.0/r
w_2 = -3.0/r
data = {'The borrower':np.array(['Vasya', 'Fedya', 'Lesha']),
'Salary':np.array([120000,180000,210000]),
'Payment':np.array([3000,50000,70000])}
df = pd.DataFrame(data)
df['f(w,x)'] = w_0 + df['Salary']*w_1 + df['Payment']*w_2
decision = []
for i in df['f(w,x)']:
if i > 0:
dec = 'Approved'
decision.append(dec)
else:
dec = 'Refusal'
decision.append(dec)
df['Decision'] = decision
df[['The borrower', 'Salary', 'Payment', 'f(w,x)', 'Decision']]
I samsvar med dataene i tabellen ønsker Vasya, med en lønn på 120.000 3.000 RUR, å motta et lån slik at han kan tilbakebetale det månedlig til 5.000 XNUMX RUR. Vi bestemte at for å godkjenne lånet, må Vasyas lønn overstige tre ganger beløpet for betalingen, og det må fortsatt være XNUMX RUR igjen. Vasya tilfredsstiller dette kravet: . Til og med 106.000 XNUMX RUR gjenstår. Til tross for at når man regner vi har redusert oddsen 25.000 ganger ble resultatet det samme – lånet kan godkjennes. Fedya vil også få et lån, men Lesha, til tross for at han får mest, må dempe appetitten.
La oss tegne en graf for dette tilfellet.
Figur 2 «Klassifisering av låntakere»
Kode for å tegne grafen
salary = np.arange(60000,240000,20000)
payment = (-w_0-w_1*salary)/w_2
fig, axes = plt.subplots(figsize = (14,6), dpi = 80)
plt.plot(salary, payment, color = 'grey', lw = 2, label = '$f(w,x_i)=w_0 + w_1x_{i1} + w_2x_{i2}$')
plt.plot(df[df['Decision'] == 'Approved']['Salary'], df[df['Decision'] == 'Approved']['Payment'],
'o', color ='green', markersize = 12, label = 'Decision - Loan approved')
plt.plot(df[df['Decision'] == 'Refusal']['Salary'], df[df['Decision'] == 'Refusal']['Payment'],
's', color = 'red', markersize = 12, label = 'Decision - Loan refusal')
plt.xlabel('Salary', size = 16)
plt.ylabel('Payment', size = 16)
plt.legend(prop = {'size': 14})
plt.show()
Så vår rette linje, konstruert i samsvar med funksjonen , skiller "dårlige" låntakere fra "gode". De låntakerne hvis ønsker ikke sammenfaller med deres evner er over linjen (Lesha), mens de som, i henhold til parametrene til modellen vår, er i stand til å betale tilbake lånet, er under linjen (Vasya og Fedya). Med andre ord kan vi si dette: vår direkte linje deler låntakere i to klasser. La oss betegne dem som følger: til klassen Vi vil klassifisere de låntakerne som har størst sannsynlighet for å betale tilbake lånet som eller Vi vil inkludere de låntakerne som mest sannsynlig ikke vil være i stand til å betale tilbake lånet.
La oss oppsummere konklusjonene fra dette enkle eksemplet. La oss ta et poeng og erstatte koordinatene til punktet i den tilsvarende likningen til linjen , vurder tre alternativer:
- Hvis punktet er under streken og vi tildeler det til klassen , deretter verdien av funksjonen vil være positiv fra til . Dette betyr at vi kan anta at sannsynligheten for å betale tilbake lånet er innenfor . Jo større funksjonsverdi, jo høyere er sannsynligheten.
- Hvis et punkt er over en linje og vi tildeler det til klassen eller , så vil verdien til funksjonen være negativ fra til . Da vil vi anta at sannsynligheten for gjeldsnedbetaling er innenfor og jo større absoluttverdi av funksjonen er, desto høyere er vår selvtillit.
- Punktet er på en rett linje, på grensen mellom to klasser. I dette tilfellet verdien av funksjonen vil være lik og sannsynligheten for å betale tilbake lånet er lik .
La oss nå forestille oss at vi ikke har to faktorer, men dusinvis, og ikke tre, men tusenvis av låntakere. Da får vi i stedet for en rett linje m-dimensjonal plan og koeffisienter vi vil ikke bli tatt ut av løse luften, men utledet i henhold til alle regler, og på grunnlag av akkumulerte data om låntakere som har eller ikke har nedbetalt lånet. Og faktisk, merk at vi nå velger låntakere ved å bruke allerede kjente koeffisienter . Faktisk er oppgaven til den logistiske regresjonsmodellen nettopp å bestemme parametrene , hvor verdien av tapet fungerer Logistisk tap vil tendere til et minimum. Men om hvordan vektoren beregnes , vil vi finne ut mer i den femte delen av artikkelen. I mellomtiden vender vi tilbake til det lovede landet - til vår bankmann og hans tre klienter.
Takket være funksjonen vi vet hvem som kan få lån og hvem som må nektes. Men du kan ikke gå til direktøren med slik informasjon, fordi de ønsket å få fra oss sannsynligheten for tilbakebetaling av lånet av hver låntaker. Hva å gjøre? Svaret er enkelt - vi må på en eller annen måte transformere funksjonen , hvis verdier ligger i området til en funksjon hvis verdier vil ligge i området . Og en slik funksjon finnes, heter det logistisk responsfunksjon eller invers-logit-transformasjon. Møte:
La oss se steg for steg hvordan det fungerer logistisk responsfunksjon. Merk at vi skal gå i motsatt retning, dvs. vi vil anta at vi kjenner sannsynlighetsverdien, som ligger i området fra til og så vil vi "avvikle" denne verdien til hele rekkevidden av tall fra til .
03. Vi utleder logistisk responsfunksjon
Trinn 1. Konverter sannsynlighetsverdiene til et område
Under transformasjonen av funksjonen в logistisk responsfunksjon Vi lar kredittanalytikeren vår være i fred og tar en tur til bookmakerne i stedet. Nei, selvfølgelig vil vi ikke plassere spill, alt som interesserer oss der er betydningen av uttrykket, for eksempel er sjansen 4 til 1. Oddsen, kjent for alle spillere, er forholdet mellom "suksesser" og " feil». I sannsynlighetstermer er odds sannsynligheten for at en hendelse inntreffer delt på sannsynligheten for at hendelsen ikke inntreffer. La oss skrive ned formelen for sjansen for at en hendelse inntreffer :
Der - sannsynligheten for at en hendelse inntreffer, — sannsynligheten for at en hendelse IKKE inntreffer
For eksempel, hvis sannsynligheten for at en ung, sterk og leken hest med kallenavnet «Veterok» vil slå en gammel og slapp gammel kvinne ved navn «Matilda» på et løp er lik , da vil sjansene for suksess for «Veterok» være к og omvendt, med kjennskap til oddsen, vil det ikke være vanskelig for oss å beregne sannsynligheten :
Dermed har vi lært å "oversette" sannsynlighet til sjanser, som tar verdier fra til . La oss ta ett steg til og lære å "oversette" sannsynligheten til hele tallinjen fra til .
Trinn 2. Konverter sannsynlighetsverdiene til et område
Dette trinnet er veldig enkelt - la oss ta logaritmen til oddsen til basen av Eulers tall og vi får:
Nå vet vi at hvis , og beregn deretter verdien vil være veldig enkelt, og dessuten bør det være positivt: . Dette er sant.
Av nysgjerrighet, la oss sjekke hva hvis , da forventer vi å se en negativ verdi . Vi sjekker: . Det er riktig.
Nå vet vi hvordan vi konverterer sannsynlighetsverdien fra til langs hele talllinjen fra til . I neste trinn vil vi gjøre det motsatte.
For nå merker vi at i samsvar med logaritmereglene, å vite verdien av funksjonen , kan du beregne oddsen:
Denne metoden for å bestemme odds vil være nyttig for oss i neste trinn.
Trinn 3. La oss utlede en formel for å bestemme
Så vi lærte, vel vitende , finn funksjonsverdier . Men faktisk trenger vi akkurat det motsatte - å vite verdien finne . For å gjøre dette, la oss gå til et slikt konsept som den inverse oddsfunksjonen, ifølge hvilken:
I artikkelen vil vi ikke utlede formelen ovenfor, men vi vil sjekke den ved å bruke tallene fra eksemplet ovenfor. Vi vet det med odds på 4 til 1 (), er sannsynligheten for at hendelsen inntreffer 0.8 (). La oss gjøre en erstatning: . Dette er sammenfallende med våre tidligere beregninger. La oss gå videre.
I det siste trinnet utledet vi det , som betyr at du kan gjøre en erstatning i den inverse oddsfunksjonen. Vi får:
Del både teller og nevner med , Deretter:
Bare i tilfelle, for å være sikker på at vi ikke har gjort en feil noe sted, tar vi en liten sjekk til. I trinn 2 har vi for bestemt det . Deretter erstatter du verdien inn i logistisk responsfunksjon, forventer vi å få . Vi erstatter og får:
Gratulerer, kjære leser, vi har nettopp utledet og testet den logistiske responsfunksjonen. La oss se på grafen til funksjonen.
Graf 3 "Logistisk responsfunksjon"
Kode for å tegne grafen
import math
def logit (f):
return 1/(1+math.exp(-f))
f = np.arange(-7,7,0.05)
p = []
for i in f:
p.append(logit(i))
fig, axes = plt.subplots(figsize = (14,6), dpi = 80)
plt.plot(f, p, color = 'grey', label = '$ 1 / (1+e^{-w^Tx_i})$')
plt.xlabel('$f(w,x_i) = w^Tx_i$', size = 16)
plt.ylabel('$p_{i+}$', size = 16)
plt.legend(prop = {'size': 14})
plt.show()
I litteraturen kan du også finne navnet på denne funksjonen som sigmoid funksjon. Grafen viser tydelig at hovedendringen i sannsynligheten for at et objekt tilhører en klasse skjer innenfor et relativt lite område , et sted fra til .
Jeg foreslår at du går tilbake til kredittanalytikeren vår og hjelper ham med å beregne sannsynligheten for tilbakebetaling av lån, ellers risikerer han å stå uten bonus :)
Tabell 2 "Potensielle låntakere"
Kode for å generere tabellen
proba = []
for i in df['f(w,x)']:
proba.append(round(logit(i),2))
df['Probability'] = proba
df[['The borrower', 'Salary', 'Payment', 'f(w,x)', 'Decision', 'Probability']]
Så vi har bestemt sannsynligheten for tilbakebetaling av lån. Generelt ser dette ut til å være sant.
Sannsynligheten for at Vasya, med en lønn på 120.000 3.000 RUR, vil være i stand til å gi 100 0.3 RUR til banken hver måned er nær XNUMX%. Forresten, vi må forstå at en bank kan utstede et lån til Lesha hvis bankens policy for eksempel gir utlån til kunder med en sannsynlighet for tilbakebetaling av lån på mer enn for eksempel XNUMX. Det er bare at i dette tilfellet vil banken opprette en større reserve for mulige tap.
Det skal også bemerkes at lønnsforholdet på minst 3 og med en margin på 5.000 RUR ble tatt fra taket. Derfor kunne vi ikke bruke vektvektoren i sin opprinnelige form . Vi trengte å redusere koeffisientene kraftig, og i dette tilfellet delte vi hver koeffisient med 25.000 XNUMX, det vil si at vi i hovedsak justerte resultatet. Men dette ble gjort spesielt for å forenkle forståelsen av materialet i den innledende fasen. I livet trenger vi ikke å finne opp og justere koeffisienter, men finne dem. I de neste delene av artikkelen vil vi utlede likningene som parameterne er valgt med .
04. Minste kvadraters metode for å bestemme vektoren av vekter i logistisk responsfunksjon
Vi kjenner allerede denne metoden for å velge en vektor av vekter som minste kvadraters metode (LSM) og faktisk, hvorfor bruker vi det ikke i binære klassifiseringsproblemer? Faktisk er det ingenting som hindrer deg i å bruke MNC, bare denne metoden i klassifiseringsproblemer gir resultater som er mindre nøyaktige enn Logistisk tap. Det er et teoretisk grunnlag for dette. La oss først se på ett enkelt eksempel.
La oss anta at våre modeller (ved hjelp av MSE и Logistisk tap) har allerede begynt å velge vektoren av vekter og vi stoppet beregningen på et tidspunkt. Det spiller ingen rolle om det er i midten, på slutten eller i begynnelsen, det viktigste er at vi allerede har noen verdier av vektvektoren og la oss anta at på dette trinnet er vektvektoren for begge modellene er det ingen forskjeller. Ta deretter de resulterende vektene og bytt dem inn i logistisk responsfunksjon () for et objekt som tilhører klassen . Vi undersøker to tilfeller når modellen vår, i samsvar med den valgte vektvektoren, tar veldig feil og omvendt - modellen er veldig sikker på at objektet tilhører klassen . La oss se hvilke bøter som vil bli gitt ved bruk MNC и Logistisk tap.
Kode for å beregne straffer avhengig av tapsfunksjonen som brukes
# класс объекта
y = 1
# вероятность отнесения объекта к классу в соответствии с параметрами w
proba_1 = 0.01
MSE_1 = (y - proba_1)**2
print 'Штраф MSE при грубой ошибке =', MSE_1
# напишем функцию для вычисления f(w,x) при известной вероятности отнесения объекта к классу +1 (f(w,x)=ln(odds+))
def f_w_x(proba):
return math.log(proba/(1-proba))
LogLoss_1 = math.log(1+math.exp(-y*f_w_x(proba_1)))
print 'Штраф Log Loss при грубой ошибке =', LogLoss_1
proba_2 = 0.99
MSE_2 = (y - proba_2)**2
LogLoss_2 = math.log(1+math.exp(-y*f_w_x(proba_2)))
print '**************************************************************'
print 'Штраф MSE при сильной уверенности =', MSE_2
print 'Штраф Log Loss при сильной уверенности =', LogLoss_2
Et tilfelle av en tabbe — modellen tilordner et objekt til en klasse med en sannsynlighet på 0,01
Straffe ved bruk MNC vil være:
Straffe ved bruk Logistisk tap vil være:
En sak med sterk tillit — modellen tilordner et objekt til en klasse med en sannsynlighet på 0,99
Straffe ved bruk MNC vil være:
Straffe ved bruk Logistisk tap vil være:
Dette eksemplet illustrerer godt at ved en grov feil er tapsfunksjonen Loggtap straffer modellen betydelig mer enn MSE. La oss nå forstå hva den teoretiske bakgrunnen er for å bruke tapsfunksjonen Loggtap i klassifiseringsproblemer.
05. Maximum likelihood-metode og logistisk regresjon
Som lovet i begynnelsen, er artikkelen full av enkle eksempler. I studioet er det et annet eksempel og gamle gjester - banklåntakere: Vasya, Fedya og Lesha.
Bare i tilfelle, før jeg utvikler eksemplet, la meg minne deg på at vi i livet har å gjøre med en treningsprøve på tusenvis eller millioner av objekter med titalls eller hundrevis av funksjoner. Men her er tallene tatt slik at de enkelt kan passe inn i hodet til en nybegynner dataforsker.
La oss gå tilbake til eksemplet. La oss forestille oss at direktøren for banken bestemte seg for å utstede et lån til alle i nød, til tross for at algoritmen fortalte ham om ikke å utstede det til Lesha. Og nå har det gått nok tid og vi vet hvem av de tre heltene som betalte tilbake lånet og hvem som ikke gjorde det. Hva var å forvente: Vasya og Fedya tilbakebetalte lånet, men Lesha gjorde det ikke. La oss nå forestille oss at dette resultatet vil være et nytt treningsutvalg for oss, og samtidig er det som om alle data om faktorene som påvirker sannsynligheten for å tilbakebetale lånet (låntakers lønn, størrelsen på den månedlige betalingen) har forsvunnet. Da kan vi intuitivt anta at hver tredje låntaker ikke betaler tilbake lånet til banken, eller med andre ord sannsynligheten for at neste låntaker betaler tilbake lånet . Denne intuitive antagelsen har teoretisk bekreftelse og er basert på metode for maksimal sannsynlighet, ofte i litteraturen heter det prinsippet om maksimal sannsynlighet.
La oss først bli kjent med det konseptuelle apparatet.
Sannsynlighet for prøvetaking er sannsynligheten for å få nøyaktig et slikt utvalg, oppnå nøyaktig slike observasjoner/resultater, dvs. produktet av sannsynlighetene for å oppnå hvert av prøveresultatene (for eksempel om lånet til Vasya, Fedya og Lesha ble tilbakebetalt eller ikke tilbakebetalt samtidig).
Sannsynlighetsfunksjon relaterer sannsynligheten for en prøve til verdiene til distribusjonsparametrene.
I vårt tilfelle er treningsutvalget et generalisert Bernoulli-skjema, der den tilfeldige variabelen bare tar to verdier: eller . Derfor kan prøvesannsynligheten skrives som en sannsynlighetsfunksjon av parameteren som følger:
Oppføringen ovenfor kan tolkes som følger. Den felles sannsynligheten for at Vasya og Fedya vil tilbakebetale lånet er lik , er sannsynligheten for at Lesha IKKE vil betale tilbake lånet lik (siden det IKKE var nedbetalingen av lånet som fant sted), derfor er fellessannsynligheten for alle tre hendelsene lik .
Maksimal sannsynlighetsmetode er en metode for å estimere en ukjent parameter ved å maksimere sannsynlighetsfunksjoner. I vårt tilfelle må vi finne en slik verdi hvor når sitt maksimum.
Hvor kommer selve ideen fra - å se etter verdien av en ukjent parameter der likelihood-funksjonen når et maksimum? Opprinnelsen til ideen stammer fra ideen om at et utvalg er den eneste kilden til kunnskap som er tilgjengelig for oss om befolkningen. Alt vi vet om populasjonen er representert i utvalget. Derfor er alt vi kan si at et utvalg er den mest nøyaktige gjenspeiling av populasjonen som er tilgjengelig for oss. Derfor må vi finne en parameter der den tilgjengelige prøven blir mest sannsynlig.
Det er åpenbart at vi har å gjøre med et optimaliseringsproblem der vi må finne ekstremumpunktet til en funksjon. For å finne ekstremumpunktet, er det nødvendig å vurdere førsteordens betingelsen, det vil si å likestille den deriverte av funksjonen til null og løse ligningen med hensyn til ønsket parameter. Imidlertid kan det være en langvarig oppgave å søke etter den deriverte av et produkt av et stort antall faktorer; for å unngå dette er det en spesiell teknikk - å bytte til logaritmen sannsynlighetsfunksjoner. Hvorfor er en slik overgang mulig? La oss ta hensyn til det faktum at vi ikke ser etter ytterpunktet av selve funksjonen, og ekstremumpunktet, det vil si verdien av den ukjente parameteren hvor når sitt maksimum. Når du flytter til en logaritme, endres ikke ekstremumpunktet (selv om ekstremumet i seg selv vil avvike), siden logaritmen er en monoton funksjon.
La oss, i samsvar med ovenstående, fortsette å utvikle vårt eksempel med lån fra Vasya, Fedya og Lesha. La oss først gå videre til logaritme av sannsynlighetsfunksjonen:
Nå kan vi enkelt differensiere uttrykket ved :
Og til slutt, vurder førsteordens betingelsen - vi likestiller den deriverte av funksjonen til null:
Dermed vårt intuitive estimat av sannsynligheten for tilbakebetaling av lån var teoretisk begrunnet.
Flott, men hva skal vi gjøre med denne informasjonen nå? Hvis vi antar at hver tredje låntaker ikke returnerer pengene til banken, vil sistnevnte uunngåelig gå konkurs. Det er riktig, men bare når man vurderer sannsynligheten for tilbakebetaling av lån lik Vi tok ikke hensyn til faktorene som påvirker tilbakebetalingen av lån: Låntakerens lønn og størrelsen på den månedlige betalingen. La oss huske at vi tidligere beregnet sannsynligheten for tilbakebetaling av lånet av hver klient, tatt i betraktning de samme faktorene. Det er logisk at vi oppnådde sannsynligheter forskjellig fra konstanten lik .
La oss definere sannsynligheten for prøver:
Kode for beregning av prøvesannsynligheter
from functools import reduce
def likelihood(y,p):
line_true_proba = []
for i in range(len(y)):
ltp_i = p[i]**y[i]*(1-p[i])**(1-y[i])
line_true_proba.append(ltp_i)
likelihood = []
return reduce(lambda a, b: a*b, line_true_proba)
y = [1.0,1.0,0.0]
p_log_response = df['Probability']
const = 2.0/3.0
p_const = [const, const, const]
print 'Правдоподобие выборки при константном значении p=2/3:', round(likelihood(y,p_const),3)
print '****************************************************************************************************'
print 'Правдоподобие выборки при расчетном значении p:', round(likelihood(y,p_log_response),3)
Prøvesannsynlighet ved en konstant verdi :
Eksempelsannsynlighet ved beregning av sannsynligheten for tilbakebetaling av lån under hensyntagen til faktorer :
Sannsynligheten for et utvalg med en sannsynlighet beregnet avhengig av faktorene viste seg å være høyere enn sannsynligheten med en konstant sannsynlighetsverdi. Hva betyr dette? Dette tyder på at kunnskap om faktorene gjorde det mulig å mer nøyaktig velge sannsynligheten for tilbakebetaling av lån for hver enkelt kunde. Ved utstedelse av neste lån vil det derfor være mer riktig å bruke modellen foreslått i slutten av avsnitt 3 i artikkelen for å vurdere sannsynligheten for gjeldsnedbetaling.
Men så, hvis vi ønsker å maksimere prøve sannsynlighetsfunksjon, hvorfor ikke bruke en eller annen algoritme som vil produsere sannsynligheter for Vasya, Fedya og Lesha, for eksempel, lik henholdsvis 0.99, 0.99 og 0.01. Kanskje en slik algoritme vil fungere godt på treningsutvalget, siden det vil bringe sample likelihood-verdien nærmere , men for det første vil en slik algoritme mest sannsynlig ha vanskeligheter med generaliseringsevnen, og for det andre vil denne algoritmen definitivt ikke være lineær. Og hvis metoder for å bekjempe overtrening (like svak generaliseringsevne) tydeligvis ikke er inkludert i planen til denne artikkelen, så la oss gå gjennom det andre punktet mer detaljert. For å gjøre dette, bare svar på et enkelt spørsmål. Kan sannsynligheten for at Vasya og Fedya tilbakebetaler lånet være den samme, med tanke på faktorene vi kjenner til? Fra et synspunkt av sunn logikk, selvfølgelig ikke, kan det ikke. Så Vasya vil betale 2.5% av lønnen sin per måned for å tilbakebetale lånet, og Fedya - nesten 27,8%. Også i graf 2 “Klientklassifisering” ser vi at Vasya er mye lenger fra linjen som skiller klassene enn Fedya. Og til slutt vet vi at funksjonen for Vasya og Fedya tar forskjellige verdier: 4.24 for Vasya og 1.0 for Fedya. Nå, hvis Fedya, for eksempel, tjente en størrelsesorden mer eller ba om et mindre lån, ville sannsynlighetene for å tilbakebetale lånet for Vasya og Fedya være like. Lineær avhengighet lar seg med andre ord ikke lure. Og hvis vi faktisk beregnet oddsen , og ikke tok dem ut av løse luften, kan vi trygt si at våre verdier best tillate oss å estimere sannsynligheten for tilbakebetaling av lånet av hver låntaker, men siden vi ble enige om å anta at bestemmelsen av koeffisientene ble utført i henhold til alle reglene, så vil vi anta det - koeffisientene våre lar oss gi et bedre estimat av sannsynligheten :)
Vi går imidlertid bort. I denne delen må vi forstå hvordan vektoren av vekter bestemmes , som er nødvendig for å vurdere sannsynligheten for tilbakebetaling av lånet av hver låntaker.
La oss kort oppsummere med hvilket arsenal vi leter etter odds :
1. Vi antar at forholdet mellom målvariabelen (prediksjonsverdien) og faktoren som påvirker resultatet er lineær. Av denne grunn brukes den lineær regresjonsfunksjon av den typen , hvis linje deler objekter (klienter) inn i klasser и eller (kunder som er i stand til å betale tilbake lånet og de som ikke er det). I vårt tilfelle har ligningen formen .
2. Vi bruker invers logit-funksjon av den typen å bestemme sannsynligheten for at et objekt tilhører en klasse .
3. Vi anser vårt treningssett som en implementering av en generalisert Bernoulli planer, det vil si at for hvert objekt genereres en tilfeldig variabel, som med sannsynlighet (sin egen for hvert objekt) tar verdien 1 og med sannsynlighet - 0.
4. Vi vet hva vi trenger for å maksimere prøve sannsynlighetsfunksjon tatt i betraktning de aksepterte faktorene slik at den tilgjengelige prøven blir den mest plausible. Med andre ord, vi må velge parametere der prøven vil være mest plausibel. I vårt tilfelle er den valgte parameteren sannsynligheten for tilbakebetaling av lån , som igjen avhenger av ukjente koeffisienter . Så vi må finne en slik vektor av vekter , hvor sannsynligheten for prøven vil være størst.
5. Vi vet hva vi skal maksimere eksempel sannsynlighetsfunksjoner kan bruke metode for maksimal sannsynlighet. Og vi kjenner alle de vanskelige triksene for å jobbe med denne metoden.
Slik viser det seg å være et trekk i flere trinn :)
Husk nå at helt i begynnelsen av artikkelen ønsket vi å utlede to typer tapsfunksjoner Logistisk tap avhengig av hvordan objektklasser er utpekt. Det hendte slik at i klassifiseringsproblemer med to klasser er klassene betegnet som и eller . Avhengig av notasjonen vil utgangen ha en tilsvarende tapsfunksjon.
Sak 1. Klassifisering av gjenstander i и
Tidligere, ved bestemmelse av sannsynligheten for en prøve, der sannsynligheten for gjeldsnedbetaling av låntakeren ble beregnet basert på faktorer og gitte koeffisienter , brukte vi formelen:
Faktisk er meningen logistiske responsfunksjoner for en gitt vektor av vekter
Da er det ingenting som hindrer oss i å skrive sample likelihood-funksjonen som følger:
Det hender at noen ganger er det vanskelig for noen nybegynnere analytikere å umiddelbart forstå hvordan denne funksjonen fungerer. La oss se på 4 korte eksempler som vil oppklare ting:
1. Hvis (dvs. i henhold til treningseksemplet tilhører objektet klasse +1), og algoritmen vår bestemmer sannsynligheten for å klassifisere et objekt til en klasse lik 0.9, vil denne prøvesannsynligheten bli beregnet som følger:
2. Hvis Og , da blir regnestykket slik:
3. Hvis Og , da blir regnestykket slik:
4. Hvis Og , da blir regnestykket slik:
Det er åpenbart at sannsynlighetsfunksjonen vil bli maksimert i tilfelle 1 og 3 eller i det generelle tilfellet - med riktig gjettede verdier av sannsynlighetene for å tilordne et objekt til en klasse .
På grunn av det faktum at når du bestemmer sannsynligheten for å tilordne et objekt til en klasse Vi vet bare ikke koeffisientene , så skal vi se etter dem. Som nevnt ovenfor er dette et optimaliseringsproblem der vi først må finne den deriverte av sannsynlighetsfunksjonen med hensyn til vektvektoren . Men først er det fornuftig å forenkle oppgaven for oss selv: vi vil se etter den deriverte av logaritmen sannsynlighetsfunksjoner.
Hvorfor etter logaritme, i logistiske feilfunksjoner, vi endret skiltet fra på . Alt er enkelt, siden det i problemer med å vurdere kvaliteten på en modell er vanlig å minimere verdien av en funksjon, multipliserte vi høyre side av uttrykket med og følgelig, i stedet for å maksimere, minimerer vi nå funksjonen.
Faktisk, akkurat nå, foran øynene dine, ble tapsfunksjonen møysommelig utledet - Logistisk tap for et treningssett med to klasser: и .
Nå, for å finne koeffisientene, trenger vi bare å finne den deriverte logistiske feilfunksjoner og deretter, ved hjelp av numeriske optimaliseringsmetoder, for eksempel gradientnedstigning eller stokastisk gradientnedstigning, velg de mest optimale koeffisientene . Men gitt artikkelens betydelige volum, foreslås det å utføre differensieringen på egen hånd, eller kanskje vil dette være et tema for neste artikkel med mye aritmetikk uten så detaljerte eksempler.
Sak 2. Klassifisering av gjenstander i и
Tilnærmingen her vil være den samme som med klasser и , men selve veien til utgangen av tapsfunksjonen Logistisk tap, vil være mer utsmykket. La oss komme i gang. For sannsynlighetsfunksjonen vil vi bruke operatøren "hvis da...". Det vil si hvis Det th objektet tilhører klassen , så bruker vi sannsynligheten for å beregne sannsynligheten for utvalget , hvis objektet tilhører klassen , så bytter vi inn i sannsynligheten . Slik ser sannsynlighetsfunksjonen ut:
La oss beskrive på fingrene hvordan det fungerer. La oss vurdere 4 tilfeller:
1. Hvis и , da vil prøvetakingssannsynligheten «gå»
2. Hvis и , da vil prøvetakingssannsynligheten «gå»
3. Hvis и , da vil prøvetakingssannsynligheten «gå»
4. Hvis и , da vil prøvetakingssannsynligheten «gå»
Det er åpenbart at i tilfelle 1 og 3, når sannsynlighetene ble riktig bestemt av algoritmen, sannsynlighetsfunksjon vil bli maksimert, det vil si at dette er akkurat det vi ønsket å få. Denne tilnærmingen er imidlertid ganske tungvint, og neste gang vil vi vurdere en mer kompakt notasjon. Men først, la oss logaritme sannsynlighetsfunksjonen med en endring av fortegn, siden vi nå vil minimere den.
La oss erstatte i stedet uttrykket :
La oss forenkle det riktige begrepet under logaritmen ved å bruke enkle aritmetiske teknikker og få:
Nå er det på tide å kvitte seg med operatøren "hvis da...". Merk at når et objekt tilhører klassen , så i uttrykket under logaritmen, i nevneren, hevet til makten , hvis objektet tilhører klassen , så heves $e$ til makten . Derfor kan notasjonen for graden forenkles ved å kombinere begge tilfeller til ett: . deretter logistisk feilfunksjon vil ta formen:
I samsvar med logaritmereglene snur vi brøken og setter ut tegnet "" (minus) for logaritmen får vi:
Her er tapsfunksjonen logistisk tap, som brukes i opplæringssettet med objekter tilordnet klasser: и .
Vel, på dette tidspunktet tar jeg permisjon og vi avslutter artikkelen.
Hjelpematerialer
1. Litteratur
1) Anvendt regresjonsanalyse / N. Draper, G. Smith - 2. utg. – M.: Finans og statistikk, 1986 (oversettelse fra engelsk)
2) Sannsynlighetsteori og matematisk statistikk / V.E. Gmurman - 9. utg. - M.: Videregående skole, 2003
3) Sannsynlighetsteori / N.I. Chernova - Novosibirsk: Novosibirsk State University, 2007
4) Forretningsanalyse: fra data til kunnskap / Paklin N. B., Oreshkov V. I. - 2. utg. — St. Petersburg: Peter, 2013
5) Datavitenskap Datavitenskap fra bunnen av / Joel Gras - St. Petersburg: BHV Petersburg, 2017
6) Praktisk statistikk for datavitenskapsspesialister / P. Bruce, E. Bruce - St. Petersburg: BHV Petersburg, 2018
2. Forelesninger, kurs (video)
1)
2)
3)
4)
5)
3. Internettkilder
1)
2)
4)
6)