Einführung in die Bayes'sche statistische Modellierung mit Python ~ Versuch einer linearen Regression mit MCMC ~

Einführung

Ist der vollständige datengesteuerte Ansatz korrekt? Nutzen Sie mehr menschliches Know-how für die Modellierung!

――Ich denke, dass der Ansatz von Big Data und maschinellem Lernen heutzutage darin besteht, alle Regeln aus den Daten zu lernen. ―― Tatsächlich ist es jedoch selten, dass ** eine große Menge umfassender Daten zu allen Ereignissen gesammelt wird **.


Bayesianische Statistik (Basic)

――Hier werde ich nur die minimale Idee (Bild) und den Grundsatz vorstellen. ――Es gibt viele leicht verständliche Bücher, in denen genaue und detaillierte Erklärungen der Bayes'schen Statistik enthalten sind.

Bayesianische Denkweise

Bayesianische Statistiken leiten die "Ursache" aus dem "Ergebnis" ab.

―― Normalerweise beginnen Leute, die mit dem Studium der Statistik beginnen, häufig mit frequenztheoretischen Statistiken, aber ich denke, dies ist einer der Gründe, warum Bayes'sche Statistiken schwer zu verstehen sind.

image.png

In der Bayes'schen Statistik werden Variablen subjektiv "vorläufig bestimmt" und mit den beobachteten Daten korrigiert (aktualisiert).

image.png

Satz von Bayes

image.png

Nebenbei: Interpretation des Bayes-Theorems anhand von Begriffen, die beim maschinellen Lernen vorkommen

――Das Folgende ist eine Seite. Wenn Sie also nicht interessiert sind, überspringen Sie es bitte. ---- P (X | θ) heißt Wahrscheinlichkeit

Berechnungsmethode

  1. Natürliche konjugierte vorherige Verteilung
  1. MCMC
  1. Argumentationsvariante ――Es ist eine Methode, mit der Gradientenmethode nach einer Verteilung zu suchen, die nahe an der posterioren Verteilung liegt.

――In diesem Artikel stellen wir die Parameterschätzung durch MCMC vor.

Demo-lineares Regressionsmodell

――Es ist schwer in Sätzen zu verstehen, deshalb werde ich es sofort mit Python versuchen.

Beispieldaten erstellen

#Beispieldaten erstellen
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(123)

#Parameter für die Beispieldatengenerierung
N = 100
alpha_real = 2.5
beta_real = 0.9
eps_real = np.random.normal(0, 0.5, size=N)

#Modell-: y = α + βx + Noise
x = np.random.normal(10, 1, N)
y_real = alpha_real + beta_real *x
y = y_real + eps_real

#Datenvisualisierung
plt.plot(x, y, '.')
plt.xlabel('x')
plt.ylabel('y')
plt.plot(x, y_real, 'orange')
plt.show()

image.png

Lineares Regressionsmodell mit MCMC

conda install pymc3==3.6

Grundlegende Vorgehensweise von pyMC

  1. Modelldefinition und MCMC-Ausführung
  2. Bestätigung / Bewertung der posterioren Verteilung jedes Parameters
  3. Inferenz unter Verwendung der posterioren Verteilung (Visualisierung der Vorhersage / des Konfidenzintervalls)

So schreiben Sie ein Modell mit pyMC

#In PyMC wird das Modell durch with ward definiert
with pm.Model() as model:
    # 1.Definition der vorherigen Verteilung (definieren Sie die Variable, die Sie als Parameter verwenden möchten)
    '''
Verschiedene Wahrscheinlichkeitsverteilungen werden von pyMC erstellt, und hier wird die Normalverteilung verwendet.
Legen Sie den Verteilungsnamen als Zeichenfolge fest und legen Sie dann die vorherigen Verteilungsparameter fest.
    '''
    α = pm.Normal('alpha', mu=0, sd=10)#Normalverteilung (Mittelwert=0,Standardabweichung=10)
    β = pm.Normal('beta', mu=0, sd=1)#Normalverteilung (Mittelwert=0,Standardabweichung=1)
    noise = pm.Normal('noise', mu=0, sd=1)
    # 2.Berechnung der Wahrscheinlichkeit
    '''
Die Wahrscheinlichkeitsaktualisierung wird durchgeführt, indem der beobachtete Wert dem beobachteten Wert gegeben wird
    '''
     y_pred = pm.Normal('y_pred', mu=α*x+β, sd=noise, observed=y)
    # 3.Führen Sie MCMC aus
    '''
Es gibt verschiedene Einstellungen wie Anfangswerte und Algorithmen, diese sind jedoch grundlegend und universell einsetzbar."NUTS"Verwenden Sie den Algorithmus
    draws=Anzahl der zu generierenden Zufallszahlen, chains=Anzahl paralleler Prozesse
    '''
    trace = pm.sample(draws=5000, chains=1) #5000 Proben*1 parallel=Generieren Sie 5000 Zufallszahlen

Bayes'sche Modellierung durchführen

import pymc3 as pm    
    
#Modell-
with pm.Model() as model:
    # 1.Vorherige Verteilung
    alpha = pm.Normal('alpha', mu=0, sd=10)#0 im Durchschnitt für α,Annahme einer Normalverteilung mit einer Standardabweichung von 10
    beta = pm.Normal('beta', mu=0, sd=1)#0 im Durchschnitt für β,Annahme einer Normalverteilung mit einer Standardabweichung von 1
    epsilon = pm.HalfCauchy('epcilon', 5)#Angenommen, eine halb-kauchige Verteilung mit einer maximalen Frequenz von 5 für Rauschen
    # 2.Berechnung der Wahrscheinlichkeit
    y_pred = pm.Normal('y_pred', mu=alpha+beta*x, sd=epsilon, observed=y)
    # 3.Führen Sie MCMC aus
    trace = pm.sample(11000, chains=1)
#Bestätigung / Bewertung der posterioren Verteilung jedes Parameters (Grafik)
trace_n = trace[1000:]#Entsorgen Sie die ersten 1000 Fälle (siehe unten:"Verbrennen in")
pm.traceplot(trace_n)

#Bestätigung / Bewertung der posterioren Verteilung jedes Parameters (Statistik)
pm.summary(trace_n)

image.png

--Verbrennen in

Verwenden Sie schließlich die Simulationsergebnisse, um eine Regressionslinie zu zeichnen und die Inferenzergebnisse des Modells auszuwerten.

# α,Erfassung des β-Wertes (der Durchschnittswert der Simulationsergebnisse wird als repräsentativer Wert für jeden Parameter verwendet)
alpha_m = trace_n['alpha'].mean()
beta_m = trace_n['beta'].mean()

#Visualisierung
plt.plot(x, y, '.')
plt.plot(x, y_real, 'orange', label='True')
plt.plot(x, alpha_m + beta_m*x, 'red', label='Estimated')
plt.legend()

image.png

#Probengenerierung aus posteriorer Verteilung
ppc = pm.sample_posterior_predictive(trace_n, samples=1000, model=model)

#Visualisierung von Streudiagramm und Regressionslinie
plt.plot(x, y, '.')
plt.plot(x, alpha_m + beta_m*x)

#Konfidenzintervall
idx = np.argsort(x)
x_ord = x[idx]
# 50%HPD-Abschnitt
sig0 = pm.stats.hpd(ppc['y_pred'], alpha=0.5)[idx]
# 95%HPD-Abschnitt
sig1 = pm.stats.hpd(ppc['y_pred'], alpha=0.05)[idx]
#Stellen Sie das Vertrauensintervall mit einer Füllung dar
plt.fill_between(x_ord, sig0[:,0], sig0[:,1], color='gray', alpha=1)
plt.fill_between(x_ord, sig1[:,0], sig1[:,1], color='gray', alpha=0.5)

image.png

Was ist ein HPD-Bereich?

schließlich

Bayesianische Modellierungsmöglichkeiten

――In diesem Artikel habe ich versucht, die Grundlagen der Bayes'schen Statistik und des linearen Regressionsmodells mit MCMC zu lösen.

Förderung der Datennutzung

――In diesem Artikel habe ich versucht, die Grundlagen der Bayes'schen Statistik mit Python zu erklären, einer der derzeit in der Praxis am häufigsten verwendeten Sprachen. ――In der heutigen Zeit, in der DX und Datennutzung erforderlich sind, höre ich oft die Sorge, dass "ich Anstrengungen fördern möchte, aber es gibt keine geeigneten Daten !!" ――Es ist natürlich wichtig, eine Datenbank von Grund auf neu zu erstellen und Daten zu sammeln, aber das allein wird die globalen Unternehmen, die bei der Datennutzung führend sind, nicht einholen. ――Daher dachte ich, dass die Bayes'sche Modellierung nur von ** japanischen Unternehmen verwendet werden kann, die keine Daten haben, aber über viele Jahre hinweg reichlich vorhandenes Geschäfts-Know-how haben **, also schrieb ich diesen Artikel. ――Ich hoffe, es gibt Ihnen einen kleinen Hinweis für Unternehmen, die die Datennutzung fördern möchten, aber noch nicht erfolgreich waren.

Recommended Posts

Einführung in die Bayes'sche statistische Modellierung mit Python ~ Versuch einer linearen Regression mit MCMC ~
Einführung in das Generalized Linear Model (GLM) von Python
"Einführung in die Datenanalyse durch statistische Bayes'sche Modellierung beginnend mit R und Stan" in Python implementiert
[Python] Lineare Regression mit Scicit-Learn
Einführung in die statistische Modellierung für die Datenanalyse Generalized Linear Model (GLM)
Einführung in das Auffüllen von Python-Bildern Auffüllen von Bildern mit ImageDataGenerator
[Einführung in Python] Verwenden wir foreach mit Python
Versuch, SQLite3 mit Python zu handhaben [Hinweis]
Einführung in Vektoren: Lineare Algebra in Python <1>
Entenbuch in Python implementiert "Bayes statistische Modellierung mit Stan und R"
Ich habe versucht, die Bayes'sche lineare Regression durch Gibbs-Sampling in Python zu implementieren
(Maschinelles Lernen) Ich habe versucht, die Bayes'sche lineare Regression bei der Implementierung sorgfältig zu verstehen
Einführung in das Testen statistischer Hypothesen mit Statistikmodellen
Implementiert in Python PRML Kapitel 3 Bayesianische lineare Regression
[Python] Einfache Einführung in das maschinelle Lernen mit Python (SVM)
Einführung in die künstliche Intelligenz mit Python 1 "Genetic Algorithm-Theory-"
Markov Chain Artificial Brainless mit Python + Janome (1) Einführung in Janome
Markov-Kette Künstlich Gehirnlos mit Python + Janome (2) Einführung in die Markov-Kette
Einführung in die künstliche Intelligenz mit Python 2 "Genetic Algorithm-Practice-"
Einführung in OPTIMIZER ~ Von der linearen Regression über Adam bis Eva
Einführung in Tornado (1): Python Web Framework mit Tornado gestartet
Eine Einführung in die statistische Modellierung für die Datenanalyse
Einführung in den Formationsflug mit Tello edu (Python)
Einführung in Python mit Atom (unterwegs)
[Einführung in die Udemy Python3 + -Anwendung] 9. Drucken Sie zunächst mit print
"Lineare Regression" und "Probabilistische Version der linearen Regression" in Python "Bayes lineare Regression"
Lineare Regression mit Statistikmodellen
[Einführung in Python] Wie iteriere ich mit der Bereichsfunktion?
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Python-Implementierung der Bayes'schen linearen Regressionsklasse
Einführung in die Mathematik ab Python Study Memo Vol.1
Lesehinweis: Einführung in die Datenanalyse mit Python
Einführung in die Python-Sprache
Einführung in OpenCV (Python) - (2)
[Kapitel 3] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Regression mit einem linearen Modell
[Kapitel 2] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Einführung in die lineare Algebra mit Python: A = LU-Zerlegung
[Kapitel 4] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Lesen von Notizen (in Python und Stan) zur Einführung in die statistische Modellierung für die Datenanalyse (Midorimoto)
[Python] Hinweise beim Versuch, Numpy mit Cython zu verwenden
20200329_Einführung in die Datenanalyse mit Python 2nd Edition Personal Summary
Einführung in sie gemacht mit Python ~ Tinder Automatisierungsprojekt ~ Episode 5
Einführung in Python für VBA-Benutzer - Aufrufen von Python aus Excel mit xlwings-
Einführung in die Bayes'sche Modellierung mit pymc3 Bayesianische Modellierung in Python Japanische Übersetzung (Kapitel 0-2)
[Raspi4; Einführung in den Sound] Stabile Aufzeichnung der Toneingabe mit Python ♪
Einführung in die statistische Modellierung für die Datenanalyse GLM-Modellauswahl
[Einführung in Python] So erhalten Sie Daten mit der Funktion listdir
Versuchen Sie, eine lineare Regression mit Pytorch mit Google Colaboratory zu implementieren
[Einführung in Udemy Python3 + Application] 51. Seien Sie vorsichtig mit Standardargumenten
Stellen Sie mit Python eine Verbindung zu BigQuery her
Einführung in Python Django (2) Win
Stellen Sie mit Python eine Verbindung zu Wikipedia her
Post to Slack mit Python 3
Einführung in RDB mit sqlalchemy Ⅰ
Einführung in die serielle Kommunikation [Python]
Schalten Sie Python mit Alternativen auf 2.7 um
Schreiben Sie mit Python in csv
[Einführung in Python] <Liste> [Bearbeiten: 22.02.2020]
Einführung in Python (Python-Version APG4b)