Gekissimo.net - Opi ansaitsemaan rahaa webilläsi Internetissä!

Bayesin data-analyysi ja visualisointi ParaMonten avulla

Seuraava artikkeli auttaa sinua: Bayesin data-analyysi ja visualisointi ParaMonten avulla

Bayesilaista lähestymistapaa käytetään datan analysointiin ja tietoon perustuvien uskomusten päivittämiseen. Tämän analyysin ainutlaatuisiin ominaisuuksiin kuuluu kyky sisällyttää aiempaa tietoa analyysiin. Uskottavien intervallien tulkinta kiinteiksi alueiksi, joihin parametri kuuluu ennalta määrätyllä todennäköisyydellä, ja kyky määrittää todennäköisyys mille tahansa kiinnostavalle hypoteesille. Tässä artikkelissa tämän käsitteen ymmärtämiseksi käytämme ParaMonte python -pakettia Bayesin data-analyysin ja visualisoinnin tekemiseen, joka käyttää rinnakkaista Monte Carlo Markov -ketjua. Monte Carlo Markov Chain on menetelmä, joka stimuloi Bayesin päättelyn korkean ulottuvuuden todennäköisyysjakaumaa. Seuraavassa on tärkeimmät kohdat, jotka on käsiteltävä tässä artikkelissa.

Sisällysluettelo

  1. Bayesilainen johtopäätös
  2. Monte Carlo Markovin ketju
  3. Tietoja ParaMontesta
  4. Bayesin data-analyysi ParaMonten kanssa

Ymmärtääksemme laajan jälkikäsittelyn ja visualisoinnin toiminnallisuuden, meidän on ensin ymmärrettävä Bayesin päättely ja Monte Carlo Markov -ketju (MCMC).

Bayesilainen johtopäätös

Jotta voisimme tehdä johtopäätöksen populaatiosta käyttämällä otosdataa ja syöttämällä otostiedot taustalla olevaan ennustemalliin, joka voi tehdä ennusteita tiedoista, joita odotamme näkevämme tietyn mallin joidenkin parametrien funktiona, meidän on laskettava todennäköisyys. että näkisimme, että näytetiedot riippuvat mallistamme tietyistä parametrien valinnasta. Toisin sanoen esimerkiksi malli on oikea ja dataa kuvaavat parametrit, mikä on parametrien todennäköisyys havaitun datan perusteella D? Todennäköisyys tunnetaan Bayesin todennäköisyydellä ja siitä saatava johtopäätös on Bayesin päättely.

Viime kädessä Bayesin päättely on ennakkotieto kerrottuna parametrin todennäköisyydellä ja sitten kertoillaan kokonaisuus mallin kaikkien parametrien marginaalitodennäköisyydellä.

Etsitkö täydellistä arkistoa tietotieteessä käytettävistä Python-kirjastoista, katso tästä.

Monte Carlo Markovin ketju

Itse nimi muodostuu kahden eri näytteenottomenetelmän yhdistämisestä Monte Carlo ja Markovin ketju.

Monte Carlo

Monte Carlo on tekniikka todennäköisyysjakauman otamiseen ja halutun suuren estimoimiseen satunnaisotantaan perustuen. Ottamistamme näytteistä voimme laskea summan tai integraalisuureen näytteiden keskiarvona tai varianssina. Tämä menetelmä kuitenkin olettaa tyypillisesti, että näytteet voidaan ottaa helposti kohdejakaumasta.

Tarkastellaan monimutkaista 2-D-muotoa, kuten spiraalia, joka voi olla tapa visualisoida Monte Carlon näytteenottoprosessi. Spiraalin kuvaamiseksi emme voi määritellä helposti ymmärrettävää funktiota, mutta tutkimalla alueen näytteitä voimme arvioida, ovatko ne osa spiraalia. Voimme tiivistää spiraalin muodon todennäköisyystiheyteen perustuen suureen määrään alueelta otettuja näytteitä.

🔥 Empfohlen:  Ansaitse lento- ja junalipuista ja hotelleista Trip.comin avulla

Oletetaan, että otos otetaan helposti todennäköisyysjakaumasta, ei aina ole mahdollista. Tällaisissa tapauksissa Markov-ketjut ottavat näytteen tehokkaasti vaikeasta todennäköisyysjakaumasta.

Markovin ketju

Markovin ketjussa jokainen muuttuja on todennäköisyydellä riippuvainen edellisen muuttujan arvosta. Tarkemmin sanottuna seuraavan muuttujan määrittää vain viimeinen muuttuja. Erityinen stokastisen prosessin tyyppi, se käsittelee satunnaismuuttujien sarjan karakterisointia. Erityistä huomiota kiinnitetään sekvenssin dynamiikkaan ja rajoituksiin.

Tarkastellaanpa lautapeliä, jossa heitetään noppaa, kuten ludo. Nopanheiton kuudessa vaiheessa on tasainen todennäköisyyksien jakauma, kokonaisluvut 1-6. Kun sinulla on asema laudalla, seuraava sijaintisi riippuu vain nykyisestä sijainnista ja nopan heittämisestä. Tietyt asemasi laudalla muodostavat Markovin ketjun.

Kun MCMC-menetelmät yrittävät yhdessä muodostaa näytteitä siten, että kuhunkin näytteeseen liittyvät tärkeyspainot ovat vakioita, tämä tarkoittaa, että MCMC pyrkii generoimaan näytteitä, jotka ovat verrannollisia jälkimmäiseen todennäköisyyteen saavuttaakseen odotetun arvon optimaalisen arvion. Voidaan sanoa, että MCMC-menetelmät laskevat parametrin likimääräisen posteriorijakauman satunnaisotannalla.

Ymmärretään, kuinka tätä käsitettä käytetään rinnakkaisohjelmoinnin kanssa analysointia varten.

Tietoja ParaMontesta

Useat Python-paketit tarjoavat jo todennäköisyyspohjaisia ​​ohjelmointiympäristöjä Markov Chain Monte Carlo -simulaatioille, joissa käyttäjät toteuttaisivat päättelyongelmansa. Muut MCMC-paketit vaativat käyttäjien toimittamaan tavoitefunktion mustana laatikkona ennalta määritetyllä menettelyllä tai käyttäjien on määritettävä tavoitefunktio itse.

Erityisesti ParaMonte-kirjasto mahdollistaa skaalattavat rinnakkaiset Monte Carlo -simulaatiot sekä hajautetuissa että jaetuissa muistiarkkitehtuureissa. ParaMonte kehitettiin seuraavilla tavoitteilla.

  • Automatisoi kaikki Monte Carlo -simulaatiot mahdollisimman suuressa määrin varmistaaksesi kirjaston mahdollisimman käyttäjäystävällisyyden ja minimaalisen aikainvestoinnin, joka vaaditaan simulaatiomallien rakentamiseen, suorittamiseen ja prosessin jälkeiseen käyttöön.
  • Kirjaston matalan tason toteutus tehokkaita Monte Carlo -simulaatioita varten.
  • Kaikkien simulaatioiden rinnakkaiskytkentä kaksi- ja yksipuolisen MPI-tiedonsiirron avulla käyttäjän nollarinnakkaiskoodauksella.
  • Jokaisen simulaation ja sen tulosten raportointi ja jälkikäsittely sekä niiden automaattinen tallennus ulkoisiin tiedostoihin, jotta ne ovat jatkossa helposti ymmärrettävissä ja toistettavissa.
🔥 Empfohlen:  Yksinkertaisia ​​tapoja parantaa käyttökokemusta

Toteutetaan ParaMonte Bayesin data-analyysin visualisointiin pythonissa.

Bayesin data-analyysi ParaMonten kanssa

Tässä analysoimme riippuvan muuttujan ja selittävän muuttujan välistä lineaarista suhdetta ParaMonten avulla rinnakkaisten Monte Carlo Markov -ketjusimulaatioiden kautta.

Paramonte-kirjaston asentaminen

! pip install paramonte

Tuo tarvittavat kirjastot

tuonti paramonte muodossa pm tuonti numpy muodossa np import scipy as sp tuo pandat pd:nä tuonti seaborn as sns import matplotlib muodossa mpl tuonti matplotlib.pyplot muodossa plt tuonti varoitukset warnings.filterwarnings(‘ignore’)

Ladataan ja analysoidaan tietoja

df=pd.read_csv(‘Tietojoukot/testi.csv’) fig = plt.figure ( figsize = (4,5) , dpi = 100 ) ax = fig.add_subplot(1,1,1) ax.scatter( df[‘x’]
df[‘y’]
väri = “punainen” , s = 5 ) plt.show()

Aineisto sisältää yhteensä 300 tietuetta ja yllä oleva analyysi edustaa tiedon leviämistä. Katsotaan nyt, millainen jakautuminen olisi, kun lokia sovelletaan näihin tietopisteisiin.

Käytämme mallissa vain muutamia datapisteitä, koska datapisteiden ja ketjun koon kasvaessa myös suoritusaika pitenee. Ennen sitä minun on rakennettava funktio, joka voi kirjata tiedot ja laskea todennäköisyyden sen mukaan.

osoitteesta scipy.stats tuonti normi logX = np.log(X) logY = np.log(y) def getLogLike(param): keskiarvo = param[0] + param[1] * logX logProbDensities = norm.logpdf(logY, loc = keskiarvo, mittakaava = np.exp(param[2])) return np.sum(logProbDensities)

ParaMonte-mallin rakentaminen

para = pm.ParaDRAM() para.spec.overwriteRequested = Tosi para.spec.outputFileName = “./regression_powerlaw” para.spec.randomSeed = 100 para.spec.variableNameList = [“intercept”, “slope”, “logSigma”]
para.spec.chainSize = 1000 para.runSampler( ndim = 3 , getLogFunc = getLogLike )

  • overwriteRequested korvaa aiemmin tallennetun tuloksen, jotta se ei keskeytä ketjun luontiprosessia.
  • Raporttitiedosto näytteille, luoduille ketjuille ja muille raporteille voidaan tallentaa käyttämällä ‘outputFileName’.
  • Luotavien ketjujen määrän määrittämiseen käyttämällä ‘chainsSize’-toimintoa.

Kun olet määrittänyt kaikki yllä olevat parametrit, rakenna sampleri ja määritä parametrien lukumäärä ‘ndim’:ssä.

Visualisoidaan ketju ja samplerin luomat näytteet.

chain.plot.scatter( ycolumns = “Sopeutumismitta” , ccolumns = []
) chain.plot.scatter.currentFig.axes.set_ylim([1.e-5,1]) chain.plot.scatter.currentFig.axes.set_yscale(“log”)

Yhteensä 1000 ketjua luodaan yllä olevassa kaaviossa visualisoidulla tavalla niiden mukautumispisteillä.

näyte = para.readSample(reabled = True)[0]
sarakkeen nimi näyte.df.columns: sample.plot.line.ycolumns = sarakkeen nimi sample.plot.line() sample.plot.line.currentFig.axes.set_xlabel(“MCMC Count”) sample.plot.line.currentFig. axes.set_ylabel(columns) sample.plot.line.savefig( fname = “/traceplot_” + sarakkeen nimi ) sarakkeen nimelle sample.df.columnsissa: sample.plot.histplot(xcolumns = sarakkeen nimi) sample.plot.histplot.currentFig. axes.set_xlabel(colname) sample.plot.histplot.currentFig.axes.set_ylabel(“MCMC Count”) sample.plot.histplot.savefig( fname = “/histogram_” + sarakkeen nimi )

🔥 Empfohlen:  Tapaa Tobias Lutke Shopifyn perustaja, joka tekee eron

Koska olemme ottaneet kolme muuttujaa leikkaus, kaltevuus ja logSigma, niin on kolme erilaista näytettä. Visualisoidaan näiden näytteiden jakautuminen.

Kuten voimme havaita, jakauma on lähes normaali kaikille muuttujille. Mutta lokifunktion jakauma on vinossa oikealle. Katsotaan kuinka tämä vaikuttaa riippuvan muuttujan ja riippumattoman muuttujan väliseen lineaariseen suhteeseen.

arvot = np.linspace(0,100,101) yvalues ​​= np.exp(sample.df[“intercept”].mean()) * xvalues ​​** sample.df[“slope”].mean() fig = plt.figure(figsize = (4.5,4), dpi = 100) ax = fig.add_subplot(1,1,1) ax.plot(xvalues, yvalues, “b”) ax.scatter( X, y, väri = “punainen”, s = 5)

Odotettu parhaiten sopiva viiva, kaltevuus ja ParaMonte-mallin oppima leikkauspiste on esitetty yllä olevassa käyrässä ja voidaan nähdä, että suhdeviiva on lähes lineaarinen. Se voisi olla täysin lineaarinen, jos tietojen vinoutta pienennetään. Tämän seurauksena on monia mahdollisia regressioviivoja, jotka vastaavat kutakin tulostiedoston parametrijoukkoa, vaikka jokaisella on erilainen mahdollisuus olla oikein. Voimme visualisoida ne yhdessä ymmärtääksemme parhaiten sopivan regression epävarmuuden tason.

arvot = np.linspace(0,100,101) fig = plt.figure(figsize = (4.5,4), dpi = 100) ax = fig.add_subplot(1,1,1) ensimmäinen = 0 viimeinen = 300 rinnettä = näyte.df[“slope”].arvot[first:last]
sieppaukset = sample.df[“intercept”].arvot[first:last]

kaltevuus, leikkaus zip:ssä (rinteet, leikkauspisteet): yvalues ​​= np.exp(leikkaus) * xarvot ** kaltevuus ax.plot( xvalues ​​, yvalues ​​, “musta” , alfa = 0,04 ) ax.scatter( X, y , color = “punainen” , s = 5, zorder = 100000)

Tämä on vain ensimmäinen näytejoukko, samoin voimme visualisoida muita näytteitä.

Lopullinen tuomio

ParaMonte on loistava paketti, jossa on rinnakkain toteutettu Monte Carlo Markov -ketju, joka lyhentää käsittelyaikaa ja auttaa analysoimaan tietoja perusteellisemmin. Tämän konseptin käytännön toteutuksella voisimme tehdä Bayesin data-analyysin ja visualisoinnin ParaMonten avulla.

Viitteet