I denne artikel vil vi analysere de teoretiske beregninger af transformationen lineære regressionsfunktioner в invers logit-transformationsfunktion (også kaldet logistisk responsfunktion). Brug derefter arsenalet maksimal sandsynlighed metode, i overensstemmelse med den logistiske regressionsmodel udleder vi tabsfunktionen Logistisk tab, eller med andre ord vil vi definere en funktion, hvormed vægtvektorens parametre vælges i den logistiske regressionsmodel .
Artikeloversigt:
- Lad os gentage den lineære sammenhæng mellem to variable
- Lad os identificere behovet for transformation lineære regressionsfunktioner в logistisk responsfunktion
- Lad os udføre transformationerne og outputtet logistisk responsfunktion
- Lad os prøve at forstå, hvorfor mindste kvadraters metode er dårlig, når du vælger parametre funktioner Logistisk tab
- Vi bruger maksimal sandsynlighed metode til at bestemme parametervalgsfunktioner :
5.1. Case 1: funktion Logistisk tab for genstande med klassebetegnelser 0 и 1:
5.2. Case 2: funktion Logistisk tab for genstande med klassebetegnelser -1 и +1:
Artiklen er fyldt med enkle eksempler, hvor alle udregninger er nemme at lave mundtligt eller på papir; i nogle tilfælde kan en lommeregner være påkrævet. Så gør dig klar :)
Denne artikel er primært beregnet til dataforskere med et indledende niveau af viden om det grundlæggende i maskinlæring.
Artiklen vil også give kode til at tegne grafer og beregninger. Al kode er skrevet på sproget python 2.7. Lad mig forklare på forhånd om "nyheden" af den brugte version - dette er en af betingelserne for at tage det velkendte kursus fra Yandex på en lige så kendt online uddannelsesplatform Coursera, og som man kunne antage, blev materialet udarbejdet på baggrund af dette kursus.
01. Ligelinjet afhængighed
Det er ganske rimeligt at stille spørgsmålet - hvad har lineær afhængighed og logistisk regression med det at gøre?
Det er simpelt! Logistisk regression er en af de modeller, der hører til den lineære klassifikator. Med enkle ord er opgaven for en lineær klassifikator at forudsige målværdier fra variabler (regressorer) . Det menes, at afhængigheden mellem egenskaberne og målværdier lineær. Deraf navnet på klassificereren - lineær. For at sige det meget groft er den logistiske regressionsmodel baseret på den antagelse, at der er en lineær sammenhæng mellem karakteristikkerne og målværdier . Dette er forbindelsen.
Der er det første eksempel i studiet, og det handler, korrekt, om den retlinede afhængighed af de mængder, der undersøges. I processen med at forberede artiklen stødte jeg på et eksempel, der allerede har sat mange mennesker på kant - spændingens afhængighed af strøm ("Anvendt regressionsanalyse", N. Draper, G. Smith). Vi vil også se på det her.
I overensstemmelse med Ohms lov:
Hvor - nuværende styrke, - spænding, - modstand.
Hvis vi ikke vidste det Ohms lov, så kunne vi finde afhængigheden empirisk ved at ændre og måling , mens du støtter fast. Så ville vi se, at afhængighedsgrafen fra giver en mere eller mindre lige linje gennem oprindelsen. Vi siger "mere eller mindre", fordi selvom forholdet faktisk er nøjagtigt, kan vores målinger indeholde små fejl, og derfor falder punkterne på grafen muligvis ikke nøjagtigt på linjen, men vil blive spredt rundt om den tilfældigt.
Graf 1 "Afhængighed" fra »
Kode for diagramtegning
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 at transformere den lineære regressionsligning
Lad os se på et andet eksempel. Lad os forestille os, at vi arbejder i en bank, og vores opgave er at bestemme sandsynligheden for, at låntageren tilbagebetaler lånet afhængigt af visse faktorer. For at forenkle opgaven vil vi kun overveje to faktorer: låntagerens månedlige løn og det månedlige tilbagebetalingsbeløb.
Opgaven er meget betinget, men med dette eksempel kan vi forstå, hvorfor det ikke er nok at bruge lineære regressionsfunktioner, og find også ud af hvilke transformationer der skal udføres med funktionen.
Lad os vende tilbage til eksemplet. Det er underforstået, at jo højere løn, jo mere vil låntager være i stand til at afsætte månedligt til at tilbagebetale lånet. Samtidig vil dette forhold for et vist løninterval være ret lineært. Lad os for eksempel tage et løninterval fra 60.000 RUR til 200.000 RUR og antage, at i det angivne løninterval er afhængigheden af størrelsen af den månedlige betaling af lønnens størrelse lineær. Lad os sige, at for det angivne løninterval blev det afsløret, at løn-til-betalingsforholdet ikke kan falde til under 3, og låntageren skal stadig have 5.000 RUR i reserve. Og kun i dette tilfælde vil vi antage, at låntageren vil tilbagebetale lånet til banken. Derefter vil den lineære regressionsligning have formen:
где , , , — løn -th låntager, — udbetaling af lån -th låntager.
Substitution af løn og lånebetaling med faste parametre i ligningen Du kan beslutte, om du vil udstede eller afslå et lån.
Ser vi fremad, bemærker vi, at med de givne parametre lineær regressionsfunktion, brugt i logistiske responsfunktioner vil producere store værdier, der vil komplicere beregninger for at bestemme sandsynligheden for tilbagebetaling af lån. Derfor foreslås det at reducere vores koefficienter, lad os sige, med 25.000 gange. Denne transformation af koefficienterne vil ikke ændre beslutningen om at udstede et lån. Lad os huske dette punkt for fremtiden, men lad os nu, for at gøre det endnu tydeligere, hvad vi taler om, overveje situationen med tre potentielle låntagere.
Tabel 1 "Potentielle låntagere"
Kode til generering af 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 overensstemmelse med dataene i tabellen ønsker Vasya, med en løn på 120.000 RUR, at modtage et lån, så han kan tilbagebetale det månedligt til 3.000 RUR. Vi fastslog, at for at kunne godkende lånet skal Vasyas løn overstige tre gange beløbet for betalingen, og der skal stadig være 5.000 RUR tilbage. Vasya opfylder dette krav: . Selv 106.000 RUR er tilbage. På trods af at der ved beregning vi har reduceret oddsene 25.000 gange blev resultatet det samme – lånet kan godkendes. Fedya vil også modtage et lån, men Lesha, på trods af at han får mest, bliver nødt til at dæmpe lysten.
Lad os tegne en graf for denne sag.
Figur 2 "Klassificering af låntagere"
Kode til at 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å vores lige linje, konstrueret i overensstemmelse med funktionen , adskiller "dårlige" låntagere fra "gode" låntagere. De låntagere, hvis ønsker ikke falder sammen med deres evner, er over linjen (Lesha), mens de, der ifølge parametrene i vores model er i stand til at tilbagebetale lånet, er under linjen (Vasya og Fedya). Med andre ord kan vi sige dette: Vores direkte linje opdeler låntagere i to klasser. Lad os betegne dem som følger: til klasse Vi vil klassificere de låntagere, der har størst sandsynlighed for at tilbagebetale lånet som eller Vi vil inkludere de låntagere, som højst sandsynligt ikke vil være i stand til at tilbagebetale lånet.
Lad os opsummere konklusionerne fra dette simple eksempel. Lad os tage et punkt og substituere koordinaterne for punktet i den tilsvarende ligning for linjen , overvej tre muligheder:
- Hvis punktet er under stregen, og vi tildeler det til klassen , derefter værdien af funktionen vil være positiv fra til . Det betyder, at vi kan antage, at sandsynligheden for at tilbagebetale lånet er indenfor . Jo større funktionsværdien er, jo højere er sandsynligheden.
- Hvis et punkt er over en linje, og vi tildeler det til klassen eller , så vil værdien af funktionen være negativ fra til . Så vil vi antage, at sandsynligheden for tilbagebetaling af gæld er indenfor og jo større den absolutte værdi af funktionen er, jo højere er vores tillid.
- Punktet er på en lige linje, på grænsen mellem to klasser. I dette tilfælde værdien af funktionen vil være lige og sandsynligheden for at tilbagebetale lånet er lig med .
Lad os nu forestille os, at vi ikke har to faktorer, men snesevis og ikke tre, men tusindvis af låntagere. Så i stedet for en lige linje vil vi have m-dimensional plan og koefficienter vi bliver ikke taget ud af den blå luft, men afledt efter alle regler, og på baggrund af akkumulerede data om låntagere, der har eller ikke har tilbagebetalt lånet. Og bemærk, at vi nu udvælger låntagere ved hjælp af allerede kendte koefficienter . Faktisk er opgaven med den logistiske regressionsmodel netop at bestemme parametrene , hvor værdien af tabet fungerer Logistisk tab vil tendere til et minimum. Men om hvordan vektoren beregnes , vil vi finde ud af mere i artiklens 5. afsnit. I mellemtiden vender vi tilbage til det forjættede land - til vores bankmand og hans tre klienter.
Takket være funktionen vi ved, hvem der kan få et lån, og hvem der skal nægtes. Men du kan ikke gå til direktøren med sådanne oplysninger, fordi de ønskede at få fra os sandsynligheden for tilbagebetaling af lånet af hver låntager. Hvad skal man gøre? Svaret er enkelt - vi skal på en eller anden måde transformere funktionen , hvis værdier ligger i området til en funktion, hvis værdier vil ligge i området . Og sådan en funktion findes, hedder det logistisk responsfunktion eller invers-logit-transformation. Møde:
Lad os se trin for trin, hvordan det fungerer logistisk responsfunktion. Bemærk at vi vil gå i den modsatte retning, dvs. vil vi antage, at vi kender sandsynlighedsværdien, som ligger i intervallet fra til og så vil vi "afvikle" denne værdi til hele rækken af tal fra til .
03. Vi udleder den logistiske responsfunktion
Trin 1. Konverter sandsynlighedsværdierne til et interval
Under transformationen af funktionen в logistisk responsfunktion Vi lader vores kreditanalytiker være i fred og tager en rundvisning hos bookmakerne i stedet for. Nej, selvfølgelig vil vi ikke placere væddemål, det eneste, der interesserer os, er meningen med udtrykket, for eksempel er chancen 4 til 1. Oddsene, som alle spillere kender, er forholdet mellem "succeser" og " fiaskoer”. I sandsynlighedstermer er odds sandsynligheden for, at en begivenhed indtræffer divideret med sandsynligheden for, at begivenheden ikke indtræffer. Lad os nedskrive formlen for chancen for, at en begivenhed indtræffer :
Hvor - sandsynligheden for, at en begivenhed indtræffer, — sandsynligheden for, at en begivenhed IKKE indtræffer
Hvis f.eks. sandsynligheden for, at en ung, stærk og legende hest med tilnavnet "Veterok" vil slå en gammel og slap gammel kvinde ved navn "Matilda" ved et løb, er lig med , så vil chancerne for succes for “Veterok” være к og vice versa, ved at kende oddsene, vil det ikke være svært for os at beregne sandsynligheden :
Således har vi lært at "oversætte" sandsynlighed til chancer, som tager værdier fra til . Lad os tage et skridt mere og lære at "oversætte" sandsynligheden til hele tallinjen fra til .
Trin 2. Konverter sandsynlighedsværdierne til et interval
Dette trin er meget enkelt - lad os tage logaritmen af oddsene til bunden af Eulers tal og vi får:
Nu ved vi, at hvis , og beregn derefter værdien vil være meget enkel, og desuden bør det være positivt: . Det er rigtigt.
Af nysgerrighed, lad os tjekke hvad nu hvis , så forventer vi at se en negativ værdi . Vi tjekker: . Det er rigtigt.
Nu ved vi, hvordan man konverterer sandsynlighedsværdien fra til langs hele tallinjen fra til . I det næste trin gør vi det modsatte.
For nu bemærker vi, at i overensstemmelse med logaritmereglerne, at kende værdien af funktionen , kan du beregne oddsene:
Denne metode til at bestemme odds vil være nyttig for os i det næste trin.
Trin 3. Lad os udlede en formel til at bestemme
Så vi lærte, vel vidende , find funktionsværdier . Men faktisk har vi brug for præcis det modsatte - at kende værdien Find . For at gøre dette, lad os vende os til et sådant koncept som den omvendte odds-funktion, ifølge hvilken:
I artiklen vil vi ikke udlede ovenstående formel, men vi vil kontrollere det ved hjælp af tallene fra eksemplet ovenfor. Vi ved det med odds 4 til 1 (), er sandsynligheden for, at hændelsen indtræffer 0.8 (). Lad os lave en erstatning: . Dette falder sammen med vores tidligere beregninger. Lad os gå videre.
I det sidste trin udledte vi det , hvilket betyder, at du kan foretage en udskiftning i den omvendte odds-funktion. Vi får:
Divider både tæller og nævner med , Derefter:
For en sikkerheds skyld, for at være sikker på, at vi ikke har lavet en fejl nogen steder, så lad os lave en lille kontrol mere. I trin 2 har vi for bestemt det . Derefter erstatter du værdien ind i den logistiske responsfunktion, forventer vi at få . Vi erstatter og får:
Tillykke, kære læser, vi har netop udledt og testet den logistiske svarfunktion. Lad os se på grafen for funktionen.
Graf 3 "Logistisk responsfunktion"
Kode til at 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å finde navnet på denne funktion som sigmoid funktion. Grafen viser tydeligt, at hovedændringen i sandsynligheden for et objekt, der tilhører en klasse, sker inden for et relativt lille område , et sted fra til .
Jeg foreslår, at du vender tilbage til vores kreditanalytiker og hjælper ham med at beregne sandsynligheden for tilbagebetaling af lånet, ellers risikerer han at stå uden bonus :)
Tabel 2 "Potentielle låntagere"
Kode til generering af 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 sandsynligheden for tilbagebetaling af lånet. Generelt ser dette ud til at være sandt.
Sandsynligheden for, at Vasya med en løn på 120.000 RUR vil være i stand til at give 3.000 RUR til banken hver måned er tæt på 100%. I øvrigt skal vi forstå, at en bank kan udstede et lån til Lesha, hvis bankens politik for eksempel giver mulighed for udlån til kunder med en sandsynlighed for tilbagebetaling af lån på mere end f.eks. 0.3. Det er bare, at i dette tilfælde vil banken skabe en større reserve for mulige tab.
Det skal også bemærkes, at løn-til-betaling-forholdet på mindst 3 og med en margin på 5.000 RUR blev taget fra loftet. Derfor kunne vi ikke bruge vektoren af vægte i sin oprindelige form . Vi var nødt til at reducere koefficienterne kraftigt, og i dette tilfælde dividerede vi hver koefficient med 25.000, det vil sige, at vi i det væsentlige justerede resultatet. Men dette blev gjort specifikt for at forenkle forståelsen af materialet i den indledende fase. I livet behøver vi ikke opfinde og justere koefficienter, men finde dem. I de næste afsnit af artiklen vil vi udlede de ligninger, som parametrene er valgt med .
04. Mindste kvadraters metode til bestemmelse af vektoren af vægte i den logistiske responsfunktion
Vi kender allerede denne metode til at vælge en vektor af vægte Som mindste kvadraters metode (LSM) og faktisk, hvorfor bruger vi det så ikke i binære klassifikationsproblemer? Intet forhindrer dig i at bruge MNC, kun denne metode i klassifikationsproblemer giver resultater, der er mindre nøjagtige end Logistisk tab. Det er der et teoretisk grundlag for. Lad os først se på et enkelt eksempel.
Lad os antage, at vores modeller (ved hjælp af MSE и Logistisk tab) er allerede begyndt at vælge vektoren af vægte og vi stoppede beregningen på et tidspunkt. Det er ligegyldigt om i midten, i slutningen eller i begyndelsen, det vigtigste er, at vi allerede har nogle værdier af vektoren af vægte, og lad os antage, at på dette trin, vektoren af vægte for begge modeller er der ingen forskelle. Tag derefter de resulterende vægte og sæt dem i logistisk responsfunktion () for et eller andet objekt, der tilhører klassen . Vi undersøger to tilfælde, hvor vores model i overensstemmelse med den valgte vektor af vægte tager meget fejl og omvendt - modellen er meget sikker på, at objektet tilhører klassen . Lad os se, hvilke bøder der vil blive udstedt ved brug MNC и Logistisk tab.
Kode til at beregne bøder afhængigt af den anvendte tabsfunktion
# класс объекта
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 tilfælde af en bommert — modellen tildeler et objekt til en klasse med en sandsynlighed på 0,01
Straf ved brug MNC vil være:
Straf ved brug Logistisk tab vil være:
Et tilfælde af stærk tillid — modellen tildeler et objekt til en klasse med en sandsynlighed på 0,99
Straf ved brug MNC vil være:
Straf ved brug Logistisk tab vil være:
Dette eksempel illustrerer godt, at tabsfunktionen i tilfælde af en grov fejl Logtab straffer modellen væsentligt mere end MSE. Lad os nu forstå, hvad den teoretiske baggrund er for at bruge tabsfunktionen Logtab i klassifikationsproblemer.
05. Maximum likelihood metode og logistisk regression
Som lovet i begyndelsen er artiklen fyldt med simple eksempler. I studiet er der et andet eksempel og gamle gæster - banklåntagere: Vasya, Fedya og Lesha.
For en sikkerheds skyld, før jeg udvikler eksemplet, lad mig minde dig om, at vi i livet har at gøre med en træningsprøve på tusinder eller millioner af objekter med titusinder eller hundredvis af funktioner. Men her er tallene taget, så de nemt kan passe ind i hovedet på en nybegynder dataforsker.
Lad os vende tilbage til eksemplet. Lad os forestille os, at direktøren for banken besluttede at udstede et lån til alle i nød, på trods af at algoritmen fortalte ham ikke at udstede det til Lesha. Og nu er der gået nok tid, og vi ved, hvem af de tre helte, der tilbagebetalte lånet, og hvem der ikke gjorde. Hvad kunne forventes: Vasya og Fedya tilbagebetalte lånet, men det gjorde Lesha ikke. Lad os nu forestille os, at dette resultat vil være en ny træningsprøve for os, og samtidig er det, som om alle data om de faktorer, der påvirker sandsynligheden for at tilbagebetale lånet (låntagers løn, størrelsen af den månedlige betaling) er forsvundet. Så kan vi intuitivt antage, at hver tredje låntager ikke tilbagebetaler lånet til banken, eller med andre ord sandsynligheden for, at den næste låntager tilbagebetaler lånet . Denne intuitive antagelse har teoretisk bekræftelse og er baseret på maksimal sandsynlighed metode, ofte i litteraturen kaldes det princippet om maksimal sandsynlighed.
Lad os først stifte bekendtskab med begrebsapparatet.
Sandsynlighed for prøveudtagning er sandsynligheden for at opnå præcis sådan en prøve, opnå præcis sådanne observationer/resultater, dvs. produktet af sandsynligheden for at opnå hvert af stikprøveresultaterne (f.eks. om lånet til Vasya, Fedya og Lesha blev tilbagebetalt eller ikke tilbagebetalt på samme tid).
Sandsynlighedsfunktion relaterer sandsynligheden for en prøve til værdierne af fordelingsparametrene.
I vores tilfælde er træningsprøven et generaliseret Bernoulli-skema, hvor den tilfældige variabel kun tager to værdier: eller . Derfor kan stikprøvesandsynligheden skrives som en sandsynlighedsfunktion af parameteren som følger:
Ovenstående post kan fortolkes som følger. Den fælles sandsynlighed for, at Vasya og Fedya vil tilbagebetale lånet, er lig med , er sandsynligheden for at Lesha IKKE tilbagebetaler lånet lig med (da det IKKE var tilbagebetalingen af lånet der fandt sted), derfor er den fælles sandsynlighed for alle tre hændelser lige stor .
Maksimal sandsynlighed metode er en metode til at estimere en ukendt parameter ved at maksimere sandsynlighedsfunktioner. I vores tilfælde skal vi finde en sådan værdi , hvorpå når sit maksimum.
Hvor kommer den egentlige idé fra - at lede efter værdien af en ukendt parameter, ved hvilken likelihood-funktionen når et maksimum? Oprindelsen af ideen stammer fra ideen om, at en prøve er den eneste kilde til viden, der er tilgængelig for os om befolkningen. Alt, hvad vi ved om befolkningen, er repræsenteret i stikprøven. Derfor kan vi kun sige, at en stikprøve er den mest nøjagtige afspejling af befolkningen, der er tilgængelig for os. Derfor skal vi finde en parameter, hvor den tilgængelige prøve bliver den mest sandsynlige.
Det er klart, at vi har at gøre med et optimeringsproblem, hvor vi skal finde yderpunktet for en funktion. For at finde ekstremumpunktet er det nødvendigt at overveje førsteordensbetingelsen, det vil sige at sidestille den afledede af funktionen til nul og løse ligningen med hensyn til den ønskede parameter. At søge efter den afledte af et produkt af et stort antal faktorer kan dog være en langvarig opgave; for at undgå dette er der en speciel teknik - at skifte til logaritmen sandsynlighedsfunktioner. Hvorfor er sådan en overgang mulig? Lad os være opmærksomme på, at vi ikke leder efter det yderste af selve funktionen, og ekstremumpunktet, det vil sige værdien af den ukendte parameter , hvorpå når sit maksimum. Når man flytter til en logaritme, ændres ekstremumpunktet ikke (selvom selve ekstremummet vil afvige), da logaritmen er en monoton funktion.
Lad os, i overensstemmelse med ovenstående, fortsætte med at udvikle vores eksempel med lån fra Vasya, Fedya og Lesha. Lad os først gå videre til logaritme af sandsynlighedsfunktionen:
Nu kan vi nemt differentiere udtrykket ved :
Og endelig, overvej førsteordens-betingelsen - vi sidestiller den afledede af funktionen til nul:
Således vores intuitive skøn over sandsynligheden for tilbagebetaling af lån var teoretisk begrundet.
Godt, men hvad skal vi gøre med denne information nu? Hvis vi antager, at hver tredje låntager ikke returnerer pengene til banken, så vil sidstnævnte uundgåeligt gå konkurs. Det er rigtigt, men kun når man vurderer sandsynligheden for tilbagebetaling af lån lig med Vi tog ikke højde for de faktorer, der påvirker tilbagebetalingen af lånet: låntagers løn og størrelsen af den månedlige ydelse. Lad os huske, at vi tidligere har beregnet sandsynligheden for tilbagebetaling af lånet af hver klient under hensyntagen til de samme faktorer. Det er logisk, at vi opnåede sandsynligheder, der er forskellige fra den konstante lig .
Lad os definere sandsynligheden for prøver:
Kode til beregning af prøvesandsynligheder
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øvesandsynlighed ved en konstant værdi :
Stikprøvesandsynlighed ved beregning af sandsynligheden for tilbagebetaling af lån under hensyntagen til faktorer :
Sandsynligheden for en stikprøve med en sandsynlighed beregnet afhængigt af faktorerne viste sig at være højere end sandsynligheden med en konstant sandsynlighedsværdi. Hvad betyder det? Dette tyder på, at viden om faktorerne gjorde det muligt mere præcist at vælge sandsynligheden for tilbagebetaling af lån for hver enkelt kunde. Ved udstedelse af det næste lån vil det derfor være mere korrekt at anvende den model, der er foreslået sidst i artiklens afsnit 3, til vurdering af sandsynligheden for tilbagebetaling af gæld.
Men altså, hvis vi vil maksimere prøvesandsynlighedsfunktion, hvorfor så ikke bruge en eller anden algoritme, der vil producere sandsynligheder for Vasya, Fedya og Lesha, for eksempel, lig med henholdsvis 0.99, 0.99 og 0.01. Måske vil en sådan algoritme fungere godt på træningsprøven, da den vil bringe prøvesandsynlighedsværdien tættere på , men for det første vil en sådan algoritme højst sandsynligt have vanskeligheder med generaliseringsevnen, og for det andet vil denne algoritme bestemt ikke være lineær. Og hvis metoder til at bekæmpe overtræning (lige så svage generaliseringsevner) tydeligvis ikke er inkluderet i planen for denne artikel, så lad os gennemgå det andet punkt mere detaljeret. For at gøre dette skal du blot besvare et simpelt spørgsmål. Kan sandsynligheden for, at Vasya og Fedya tilbagebetaler lånet, være den samme under hensyntagen til de faktorer, vi kender til? Ud fra et sund logisk synspunkt, selvfølgelig ikke, kan det ikke. Så Vasya vil betale 2.5% af sin løn om måneden for at tilbagebetale lånet, og Fedya - næsten 27,8%. Også i graf 2 "Klientklassificering" ser vi, at Vasya er meget længere fra linjen, der adskiller klasserne end Fedya. Og endelig ved vi, at funktionen for Vasya og Fedya tager forskellige værdier: 4.24 for Vasya og 1.0 for Fedya. Nu, hvis Fedya, for eksempel, tjente en størrelsesorden mere eller bad om et mindre lån, så ville sandsynligheden for at tilbagebetale lånet for Vasya og Fedya være ens. Lineær afhængighed kan med andre ord ikke narre. Og hvis vi rent faktisk har beregnet oddsene , og ikke tog dem ud af den blå luft, kunne vi roligt sige, at vores værdier giver os bedst mulighed for at estimere sandsynligheden for tilbagebetaling af lånet af hver låntager, men da vi blev enige om at antage, at bestemmelsen af koefficienterne blev udført i henhold til alle reglerne, så vil vi antage det - vores koefficienter giver os mulighed for at give et bedre skøn over sandsynligheden :)
Vi afviger dog. I dette afsnit skal vi forstå, hvordan vektoren af vægte bestemmes , hvilket er nødvendigt for at vurdere sandsynligheden for tilbagebetaling af lånet af hver enkelt låntager.
Lad os kort opsummere med hvilket arsenal vi leder efter odds :
1. Vi antager, at forholdet mellem målvariablen (forudsigelsesværdien) og den faktor, der påvirker resultatet, er lineær. Af denne grund bruges det lineær regressionsfunktion arten , hvis linje opdeler objekter (klienter) i klasser и eller (kunder, der er i stand til at tilbagebetale lånet, og dem, der ikke er). I vores tilfælde har ligningen formen .
2. Vi bruger omvendt logit funktion arten at bestemme sandsynligheden for, at et objekt tilhører en klasse .
3. Vi betragter vores træningssæt som en implementering af en generaliseret Bernoulli planer, det vil sige, at der for hvert objekt genereres en stokastisk variabel, som med sandsynlighed (sin egen for hvert objekt) tager værdien 1 og med sandsynlighed - 0.
4. Vi ved, hvad vi skal maksimere prøvesandsynlighedsfunktion under hensyntagen til de accepterede faktorer, således at den tilgængelige prøve bliver den mest plausible. Med andre ord skal vi vælge parametre, hvor prøven vil være mest plausibel. I vores tilfælde er den valgte parameter sandsynligheden for tilbagebetaling af lån , hvilket igen afhænger af ukendte koefficienter . Så vi skal finde sådan en vektor af vægte , hvor sandsynligheden for prøven vil være størst.
5. Vi ved, hvad vi skal maksimere eksempler på sandsynlighedsfunktioner kan bruge maksimal sandsynlighed metode. Og vi kender alle de vanskelige tricks til at arbejde med denne metode.
Sådan viser det sig at være et træk i flere trin :)
Husk nu, at vi i begyndelsen af artiklen ønskede at udlede to typer tabsfunktioner Logistisk tab afhængig af hvordan objektklasser er udpeget. Det skete således, at i klassifikationsproblemer med to klasser betegnes klasserne som и eller . Afhængigt af notationen vil outputtet have en tilsvarende tabsfunktion.
Case 1. Klassificering af genstande i и
Tidligere, ved bestemmelse af sandsynligheden for en stikprøve, hvor sandsynligheden for tilbagebetaling af gæld fra låntageren blev beregnet ud fra faktorer og givne koefficienter , anvendte vi formlen:
Faktisk er meningen logistiske responsfunktioner for en given vektor af vægte
Så er der intet, der forhindrer os i at skrive sample likelihood-funktionen som følger:
Det sker, at nogle gange er det svært for nogle nybegyndere analytikere straks at forstå, hvordan denne funktion fungerer. Lad os se på 4 korte eksempler, der vil opklare alt:
1. Hvis (dvs. ifølge træningseksemplet tilhører objektet klasse +1) og vores algoritme bestemmer sandsynligheden for at klassificere et objekt til en klasse lig med 0.9, så vil denne prøvesandsynlighed blive beregnet som følger:
2. Hvis Og , så bliver beregningen sådan:
3. Hvis Og , så bliver beregningen sådan:
4. Hvis Og , så bliver beregningen sådan:
Det er indlysende, at sandsynlighedsfunktionen vil blive maksimeret i tilfælde 1 og 3 eller i det generelle tilfælde - med korrekt gættede værdier af sandsynligheden for at tildele et objekt til en klasse .
På grund af det faktum, at når man bestemmer sandsynligheden for at tildele et objekt til en klasse Vi kender kun ikke koefficienterne , så leder vi efter dem. Som nævnt ovenfor er dette et optimeringsproblem, hvor vi først skal finde den afledede af sandsynlighedsfunktionen med hensyn til vektoren af vægte . Men først giver det mening at forenkle opgaven for os selv: vi vil lede efter den afledede af logaritmen sandsynlighedsfunktioner.
Hvorfor efter logaritme, i logistiske fejlfunktioner, ændrede vi skiltet fra på . Alt er enkelt, da det i problemer med at vurdere kvaliteten af en model er sædvanligt at minimere værdien af en funktion, multiplicerede vi højre side af udtrykket med og derfor, i stedet for at maksimere, minimerer vi nu funktionen.
Faktisk, lige nu, foran dine øjne, blev tabsfunktionen møjsommeligt udledt - Logistisk tab for et træningssæt med to klasser: и .
For at finde koefficienterne skal vi bare finde den afledede logistiske fejlfunktioner og derefter, ved hjælp af numeriske optimeringsmetoder, såsom gradientnedstigning eller stokastisk gradientnedstigning, vælg de mest optimale koefficienter . Men i betragtning af artiklens store volumen foreslås det at udføre differentieringen på egen hånd, eller måske vil dette være et emne for den næste artikel med en masse regnestykker uden så detaljerede eksempler.
Case 2. Klassificering af genstande i и
Fremgangsmåden her vil være den samme som ved klasser и , men selve stien til output af tabsfunktionen Logistisk tab, vil være mere udsmykket. Lad os komme igang. Til sandsynlighedsfunktionen vil vi bruge operatøren "hvis så...". Det vil sige, hvis Det th objekt tilhører klassen , så for at beregne sandsynligheden for stikprøven bruger vi sandsynligheden , hvis objektet tilhører klassen , så erstatter vi i sandsynligheden . Sådan ser sandsynlighedsfunktionen ud:
Lad os beskrive på fingrene, hvordan det fungerer. Lad os overveje 4 tilfælde:
1. Hvis и , så vil prøveudtagningssandsynligheden "gå"
2. Hvis и , så vil prøveudtagningssandsynligheden "gå"
3. Hvis и , så vil prøveudtagningssandsynligheden "gå"
4. Hvis и , så vil prøveudtagningssandsynligheden "gå"
Det er indlysende, at i tilfælde 1 og 3, når sandsynligheden var korrekt bestemt af algoritmen, sandsynlighedsfunktion vil blive maksimeret, det vil sige, det er præcis, hvad vi ønskede at få. Denne tilgang er dog ret besværlig, og dernæst vil vi overveje en mere kompakt notation. Men lad os først logaritme sandsynlighedsfunktionen med en ændring af fortegn, da vi nu vil minimere den.
Lad os erstatte i stedet ekspression :
Lad os forenkle det rigtige udtryk under logaritmen ved hjælp af simple regneteknikker og få:
Nu er det tid til at slippe af med operatøren "hvis så...". Bemærk, at når et objekt hører til klassen , derefter i udtrykket under logaritmen, i nævneren, hævet til magten , hvis objektet tilhører klassen , så hæves $e$ til magten . Derfor kan notationen for graden forenkles ved at kombinere begge tilfælde til én: . Derefter logistisk fejlfunktion vil tage formen:
I overensstemmelse med logaritmereglerne vender vi brøken og sætter tegnet "" (minus) for logaritmen får vi:
Her er tabsfunktionen logistisk tab, som bruges i træningssættet med objekter, der er tildelt klasser: и .
Nå, på dette tidspunkt tager jeg min afsked, og vi afslutter artiklen.
Hjælpematerialer
1. Litteratur
1) Anvendt regressionsanalyse / N. Draper, G. Smith - 2. udg. – M.: Finans og statistik, 1986 (oversættelse fra engelsk)
2) Sandsynlighedsteori og matematisk statistik / V.E. Gmurman - 9. udg. - M.: Videregående skole, 2003
3) Sandsynlighedsteori / N.I. Chernova - Novosibirsk: Novosibirsk State University, 2007
4) Forretningsanalyse: fra data til viden / Paklin N. B., Oreshkov V. I. - 2. udg. — Skt. Petersborg: Peter, 2013
5) Datavidenskab Datavidenskab fra bunden / Joel Gras - St. Petersburg: BHV Petersburg, 2017
6) Praktisk statistik for datavidenskabsspecialister / P. Bruce, E. Bruce - St. Petersburg: BHV Petersburg, 2018
2. Forelæsninger, kurser (video)
1)
2)
3)
4)
5)
3. Internetkilder
1)
2)
4)
6)