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 **.
- Deshalb möchte ich auf ** Know-how (Wissen) achten, das nicht in Daten umgewandelt wurde, sondern aus langjähriger Erfahrung gesammelt wurde und im menschlichen Geist vorhanden ist **.
――Mit diesem Know-how können unzureichende Daten durch Bayes'sche Statistiken (Bayes-Modellierung) ergänzt werden.
―― Aufgrund der Einschränkungen eines datengesteuerten Ansatzes für alle Ereignisse ziehen die Bayes'schen Statistiken wieder Aufmerksamkeit auf sich, und in letzter Zeit sind Begriffe wie ** Bayesian Deep Learning ** und ** Bayesian Machine Learning ** aufgetaucht. Masu
--So werde ich in diesem Artikel die Grundlagen der Bayes'schen Statistik unter Verwendung der Python-Bibliothek (pyMC) erklären.
――Das Konzept der Bayes'schen Statistik ist für Anfänger schwer zu "verstehen", aber es ist einfach, ein Bild zu erhalten, wenn man "Verwendung" unter Verwendung tatsächlicher Daten eingibt.
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.
- In der frequenztheoretischen Statistik ist der wahre Wert der Bevölkerung die "Ursache", und die beobachteten Daten werden als "Ergebnis" herangezogen.
- Andererseits schätzt die Bayes'sche Statistik die Bevölkerung (Ursache) aus den beobachteten Daten (Ergebnissen).
- Daher behandelt die Bayes'sche Statistik die Population als Variablen (keine Werte oder Konstanten, die sich abhängig von den beobachteten Daten ändern).
In der Bayes'schen Statistik werden Variablen subjektiv "vorläufig bestimmt" und mit den beobachteten Daten korrigiert (aktualisiert).
- Bei der Schätzung der "Ursache" -Variablen (Parameter) verwendet die Bayes'sche Statistik die Konzepte "Vorverteilung" und "hintere Verteilung".
- Die vorherige Verteilung kann auf der Grundlage des Wissens festgelegt werden, das der Mensch bereits kennt (dies ist der Grund, warum das Know-how im menschlichen Geist mithilfe von Bayes'schen Statistiken genutzt werden kann).
――Die Verteilung des Ergebnisses der Korrektur (Aktualisierung) dieser vorherigen Verteilung mit den beobachteten Daten wird als "hintere Verteilung" bezeichnet.
- In der Bayes'schen Statistik wird der Prozess der Änderung der Verteilung basierend auf diesen Daten als "Wahrscheinlichkeitsaktualisierung" bezeichnet.
Satz von Bayes
- Hier möchte ich den wichtigsten Satz in der Bayes'schen Statistik vorstellen, den "Basissatz".
―― Es gibt jedoch keine neuen Informationen, da die oben genannten Inhalte einfach in mathematischen Formeln ausgedrückt werden.
――Dieser Satz selbst kann leicht aus der Gleichungstransformation der bedingten Wahrscheinlichkeit abgeleitet werden. Wenn Sie also interessiert sind, lesen Sie ihn bitte durch.
――Ich denke, Sie sollten zumindest das Bild erhalten, dass die vorherige Verteilung der rechten Gleichung mit den Daten aktualisiert und die hintere Verteilung der linken Gleichung abgeleitet wird.
- Bayes Statistics verwendet diesen Satz grundsätzlich, um Näherungswerte durch analytische oder (wenn nicht analytisch zu lösen) Parameter θ unter Verwendung von Zufallszahlensimulationen und Optimierungsmethoden abzuleiten.
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
- Die ** wahrscheinlichste Schätzmethode **, die auch beim maschinellen Lernen auftritt, sucht nach θ, das dieses P (X | θ) maximiert.
- Mit anderen Worten, die wahrscheinlichste Schätzmethode berücksichtigt nicht die vorherige Verteilung und kann als eine Prozedur angesehen werden, die einfach nach θ sucht, das P (X | θ) maximiert.
――Dies ist ein Ansatz, der die Parameter perfekt an die vorliegenden Daten anpasst und so zu Überlernen (Überanpassung) führt.
- Zusätzlich sucht die Parametersuchmethode mit der Bezeichnung ** MAP-Schätzung ** nach θ, das P (X | θ) × P (θ) maximiert.
――Dies kann als Parametersuche angesehen werden, die die Randbedingung (Regularisierung) von P (θ) berücksichtigt, bei der es sich um eine vorherige Verteilung handelt.
――Da die vorherige Verteilung ebenfalls berücksichtigt wird, werden die vorliegenden Daten nicht so stark angepasst wie die wahrscheinlichste Schätzung. Die Berechnung wird jedoch kompliziert, da die Wahrscheinlichkeitsdichtefunktion der vorherigen Verteilung berechnet werden muss.
- Im Bayes-Theorem wird die hintere Wahrscheinlichkeit berechnet, indem die periphere Wahrscheinlichkeit (Wahrscheinlichkeit, dass Daten im Durchschnitt erhalten werden können) bei der MAP-Schätzung weiter berücksichtigt wird.
Berechnungsmethode
- Hier erklären wir Ihnen, wie Sie die Parameter berechnen.
――Es gibt verschiedene Berechnungsmethoden, aber hier werden drei typische Methoden vorgestellt.
- Natürliche konjugierte vorherige Verteilung
- Es gibt einige Kombinationen von Wahrscheinlichkeitsverteilungen mit derselben vorherigen und hinteren Verteilung (z. B. Bernoulli-Verteilung und Beta-Verteilung).
――Es handelt sich um eine Methode zur analytischen Berechnung von Parametern unter Ausnutzung ihrer Eigenschaften.
――Die Verteilung ist jedoch sehr begrenzt, um die Kombinationsbedingung zu erfüllen, so dass sie derzeit in der Praxis selten verwendet wird.
- In modernen Zeiten, in denen sich Computer entwickelt haben, ist die ungefähre Wertinferenz mithilfe der folgenden Zufallszahlensimulationen und -optimierungen die Hauptlösung.
- MCMC
- Der offizielle Name ist eine Methode, die als Markov-Ketten-Monte-Carlo-Methode bezeichnet wird (kurz gesagt, es handelt sich um eine Methode zur Erzeugung von "Zufallszahlen" durch Simulation).
- MCMC kann jedoch Zufallszahlen generieren, die der posterioren Verteilung folgen, wodurch komplizierte Integralberechnungen vermieden werden.
- In MCMC gibt es verschiedene Algorithmen (z. B. Gibbs-Abtastung, M-H-Algorithmus).
- In Python kann es mit ** pyMC ** ausgeführt werden
- Argumentationsvariante
――Es ist eine Methode, mit der Gradientenmethode nach einer Verteilung zu suchen, die nahe an der posterioren Verteilung liegt.
- Definieren Sie die Verlustfunktion (Entfernung) der ungefähren Verteilung und der posterioren Verteilung mit KL-Divergenz und suchen Sie nach dem ungefähren Wert, indem Sie die Verlustfunktion minimieren (dies ist ein Ansatz, der häufig in neuronalen Netzen verwendet wird).
- In Python kann es mit ** pyro ** ausgeführt werden
――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.
- Hier werde ich ein sehr einfaches lineares Regressionsmodell mit Bayes'schen Statistiken lösen.
―― Ehrlich gesagt muss es sich bei diesem Problem nicht um eine Bayes'sche Statistik handeln. Wenn Sie jedoch die Prozedur beibehalten, können Sie komplexe Modelle mit demselben Ansatz lösen.
――Erstellen Sie zunächst Beispieldaten, die in dieser Demo verwendet werden sollen
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()
- Die Problemeinstellung ist, dass Sie das lineare Modell (orange Linie) schätzen möchten, wenn die Daten (blauer Punkt) angegeben werden.
- Das lineare Modell ist definiert durch y = α + β * x, und α = 2,5 und β = 0,9 sind die Werte, die Sie mithilfe der Bayes'schen Statistik ableiten möchten.
Lineares Regressionsmodell mit MCMC
- Installieren Sie zuerst pyMC
conda install pymc3==3.6
- Momentan (Stand November 2020) ist die neueste Version 3.9, aber es gab ein Problem mit einigen Funktionen in meiner Umgebung, sodass ich ein Downgrade durchführe und sie verwende.
――Bitte installieren Sie, während Sie diesen Bereich entsprechend ändern.
Grundlegende Vorgehensweise von pyMC
- Modelldefinition und MCMC-Ausführung
- Bestätigung / Bewertung der posterioren Verteilung jedes Parameters
- Inferenz unter Verwendung der posterioren Verteilung (Visualisierung der Vorhersage / des Konfidenzintervalls)
So schreiben Sie ein Modell mit pyMC
- In pyMC müssen Sie das Modell wie folgt beschreiben
――Ich habe verschiedene Dinge geschrieben, aber der Punkt ist ** 1. Modelldefinition, 2. Wahrscheinlichkeitsberechnung, 3. Ausführung von MCMC **.
-Wenn Sie Offizielles Dokument überprüfen, werden verschiedene andere Optionen (Anfangswerteinstellung und andere MCMC-Algorithmen) eingeführt.
―― Zunächst ist es besser, die unten stehende Methode zur Beschreibung des Mindestmodells zu verstehen und dann nach Bedarf andere Optionen auszuprobieren.
#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
- Lassen Sie uns die Bayes'sche Modellierung gemäß dem obigen Verfahren 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)
- Damit ist die Simulation der posterioren Verteilung der Parameter abgeschlossen.
――Ich werde das Simulationsergebnis sofort überprüfen.
#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)
- So lesen Sie das Ausgabeergebnis
- Die Grafik (linke Spalte) zeigt die Verteilung der einzelnen Parameter (Wahrscheinlichkeitsdichtefunktion).
- Die Verteilung ist auf α = ungefähr 2,64 und β = ungefähr 0,88 zentriert, und Sie können sehen, dass Parameter nahe der richtigen Antwort (α = 2,5, β = 0,9) geschätzt werden können.
- Das Diagramm (rechte Spalte) zeigt den Konvergenzstatus der Zufallszahlensimulation und konvergiert diesmal zu einer stetigen Verteilung. Wenn dies jedoch nicht gut konvergiert, werden Vorverarbeitungen wie die Vorverteilung, ihre Parameter, die Standardisierung der Merkmalsmengen usw. durchgeführt. Du musst tun
--Verbrennen in
- In MCMC dauert es eine Weile, bis eine Stichprobe aus der Zielverteilung abgerufen wird. Daher ist es besser, die Daten zu Beginn der Stichprobenerstellung nicht zu verwenden.
――Daher bewerten wir die posteriore Verteilung der Parameter mit Ausnahme der ersten 1000 generierten Proben.
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()
- Lineares Modellplot
- Eine Regressionslinie wird unter Verwendung des ** Durchschnittswerts ** des Ergebnisses der posterioren Verteilungssimulation als repräsentativen Wert des Parameters gezeichnet.
――Sie können sehen, dass eine gerade Linie ähnlich der korrekten Regressionslinie gezeichnet werden kann, die unter "Erstellen von Beispieldaten" dargestellt ist.
#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)
- Das Bayes-Modell (MCMC) kann das Ergebnis einer Zufallszahlensimulation der posterioren Verteilung haben
――Dies ermöglicht es Ihnen, das Konfidenzintervall auf 50% und 95% auszudrücken.
- Im Bayes-Modell wird häufig das HPD-Intervall (Wert, den der Parameter annehmen kann) verwendet.
Was ist ein HPD-Bereich?
- Auch als die höchste Post-Density-Kreditabteilung bezeichnet
- Zuverlässige Intervallbreite, die so eingestellt ist, dass der häufigste Wert des Parameters unabhängig von der Verteilungsform immer enthalten ist
――Es ist kompliziert, wenn Sie sich die Formel ansehen, aber es ist eine sehr natürliche Definition, wenn Sie sie mit einem Bild (Grafik) überprüfen.
--Diese Site ist leicht zu verstehen.
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.
- ** Das Merkmal der Bayes'schen Modellierung ist, dass das Schätzergebnis mit einer Wahrscheinlichkeitsverteilung anstelle eines Wertes ausgedrückt werden kann **.
――Wenn Sie eine Entscheidung treffen, müssen Sie nicht nur das Vorhersageergebnis, sondern auch die Variation (Zuverlässigkeit) des Satzes ** berücksichtigen. Daher halte ich dies für sehr praktisch.
- Diesmal werden der Einfachheit halber angenommen, dass alle vorherigen Verteilungen Normalverteilungen sind, aber pyMC unterstützt verschiedene Wahrscheinlichkeitsverteilungen, und Sie können Verteilungen nach vorherigem Wissen festlegen.
―― Zusätzlich zum linearen Regressionsmodell können Sie verschiedene Probleme mit demselben Ansatz lösen, z. B. das logistische Regressionsmodell mit dem Basian-Modell lösen oder die Zuverlässigkeit des Schätzergebnisses einfach durch Ändern der Verknüpfungsfunktion visualisieren. Masu
――In diesem Sinne kann die Bayes-Modellierung als hochflexible und vielseitige Modellierungsmethode bezeichnet werden **.
――Daher dauert es lange, bis MCMC simuliert, wenn das Modell kompliziert wird (wie Sie anhand der obigen Schritte sehen können).
- In diesem Fall können Sie es auch durch die Optimierungsmethode durch variable Inferenz lösen (Ich habe versucht, die Lösung durch variable Inferenz durch Python Library Pyro zu erklären, aber da die Anzahl der Artikel zugenommen hat, werde ich es in einem anderen Artikel schreiben. Ich werde es schaffen)
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.