Universität Potsdam Institut für Physik und Astronomie VL: Udo Schwarz Ü: Udo Schwarz Scientific Computing, SS 2011 http://www.stat.physik.uni-potsdam.de/cp10 [email protected] Übungsblatt 8 – Abgabe bis Montag 4.7.2011 Likelihood (Plausibilität) & Bayes-Schätzung (Glaubwürdigkeit) Bayesianer bevorzugen gegenüber Frequentisten den Begriff Glaubwürdigkeit statt Vertrauen. Das Bayes-Theorem als logischer Schlüssel und computationaler Mechanismus für sequenzielles Lernen (Spam-Filter). Frequentisten oder Fisher-Statistiker: Wahrscheinlichkeit eines Ereignisses ist seine relative Häufigkeit für den Fall ∞-oft wiederholbarer Experimente. Was aber, wenn die ∞ Wiederholbarkeit nicht gegeben ist, aber zusätzlich Erfahrung zum Problem existiert? Beispiel: Schätzung zu den Parametern kosmologischer Modelle. Statistisches Schließen - Erschließe Eigenschaften einer unbekannten Verteilung auf alleiniger Grundlage von Stichproben-Daten: Gegeben eine Menge beobachteter Realisierungen S = {x1 , x2 , . . . , xN }, xj ∈ |Rn einer ZV X wird auf die zugrundeliegende Wahrscheinlichkeitsverteilung geschlossen, die auf die Stichprobe S führt. Statistische Modellierung und Analyse schließt Beschreibung und zugrundeliegenden Datenaufnahme-Vorgang ein. Sie liegt wissenschaftlicher Modellierung und empirischem Testen zugrunde. Von einem Modell spricht man erst, wenn die Verteilung einer Zufallsvariablen nicht exakt präzisiert werden kann, sondern innerhalb einer Familie von zulässigen Verteilungen frei wählbar ist. Bei parametrischen Modellen ist das z.B. die mögliche Schar von Parametern der Verteilungen. Der Frequentist geht von verteilungsfreien Methoden aus. Verfahren und Aussagen sind gültig ohne einschränkende Annahmen über die im Modell auftretenden Verteilungen. Der Frequentist glaubt an wahre Parameter der Verteilungen, wogegen der Bayesianer auch die Parameter wegen Ignoranz (Mangel an Information) als Zufallsvariable betrachtet. Begriffe zur Erinnerung Beim Lernen geht das Subjekt aus von einem momentanen Wissen über A, dass in der Apriori-Verteilung P (A) quantifiziert wird. Dann wird eine Info B geliefert. P (B|A) ist die Wahrscheinlichkeit von B im Licht des Vorwissens A. P (A|B) ist die A-posteriori-Verteilung: Sie quantifiziert das Wissen des Subjektes NACH dem Experiment. Lernen: P (A) → P (A|B) → P (A|BC) → . . . Die Umrechnung von A-priori- in A-posteriori-Wahrscheinlichkeiten passiert mit dem Satz von Bayes: P (Aj |B) = P (B|Aj )P (Aj ) P (B|Aj ) P (Aj ) = Pn P (B) i=1 P (B|Ai )P (Ai ) Der Subjektivist oder Bayesianer quantifiziert also sein Vorwissen und seine subjektive Bewertung mit einer A-priori-Wahrscheinlichkeitsverteilung Diese wird auf Basis von späteren Beobachtungen mittels Bayes-Regel aktualisiert. Es gibt nur bedingte Wahrscheinlichkeiten P ! P (A|B) ist die Einschätzung über das Eintreten von A auf der Basis des subjektiven momentanen Wissens B. Das Weglassen von B bedeutet stillschweigend das gesamte Wissen des jeweils Sprechenden. So wird relevantes Vorwissen und Erkenntnisse aus Experimenten/Beobachtungen in möglichst einfacher, operational durchsichtiger Form zur Modellierung und Vorhersage für nicht wiederholbare Einzelfall-Situationen benutzt. Bayes-Idee: posterior ∝ Likelihood (Stichproben-Info, Ausbeute zum Parameter) × prior (Vorwissen zur Parameterverteilung), wobei alle Ausdrücke Funktionen der Parameter sind. Beispiel: stochastische parametrische Modell X ∼ f (·, θ), θ ∈ Θ mit der A-priori-Dichte des Parameters πΘ (·). Ziel: Nach Stichprobennahme D = {x1 , · · · , xn } kann diese Info mit A-priori-Dichte verknüpft werden, um aktualisierte/verbesserte Parameterverteilung zu bekommen: π(Θ|x1 , · · · , xn ) ∝ l(Θ; x1 , · · · , xn ) × π(θ) mit der Likelihood/Plausibilitäts-Funktion l(Θ; x1 , · · · , xn ) = Πni=1 f (xi |Θ) die sagt wie wahrscheinlich die beobachtete Stichprobe als Funktion der Parameter ist. Die gesamte Stichproben-basierte Info über den Parameter ist in der Likelihood enthalten! Mittels A-priori-Dichte kann eine aktuelle Dichte für X bestimmt werden, die Prädiktivdichte: Z dθ f (x|θ) π(θ|D) f (x|D) = θ In dieser Prädiktivdichte sind alle Informationen aus dem stochastischen Modell, der A-priori-Dichte und den beobachteten Daten verarbeitet. Achillesferse der Bayesianischen Statistik ist die Bestimmung der A-priori-Wahrscheinlichkeit! Literatur: http://de.wikipedia.org/wiki/Bayestheorem, http://www.scholarpedia.org/article/Bayesian statistics, http://de.wikipedia.org/wiki/Bayesscher Wahrscheinlichkeitsbegriff, http://www.cl.uni-heidelberg.de/kurs/skripte/stat/html/page023.html, Koch: Einführung in die Bayes-Statistik; D.S. Sivia: Data analysis: a Bayesian tutorial for scientists and engineers; Bishop: Pattern recognition and machine learning, 2006; Held: Methoden der statistischen Inferenz: Likelihood und Bayes 2008; Aufgaben 1. Likelihood-Funktion für gauß-verteilte Stichprobe mit Mittelwert 2 und StandardAbweichung 0.4 Plotten Sie die Likelihood-Funktion für 4 gauß-verteilte Stichprobe mit den Stichproben-Umfängen 4, 10, 50 und 100 als Funktion des Mittelwerts L(µ), der Standardabweichung L(σ) oder beider Momente L(µ, σ). Hilfreich für die zweieinhalb dimensionale Darstellung der Likelihood-Funktion über Mittelwert und Standardabweichung ist imshow(L,extent=[meanx[0],meanx[M-1],stdy[0],stdy[M-1]],origin=’lower’) Diskutieren Sie das Ergebnis. 2. Bayes-Schätzung zum Münzwurf Machen Sie sich mit dem Vorgehen bei der Bayes-Schätzung anhand des unten aufgeführten python-Codes vertraut, indem Sie den Einfluss der unterschiedlichen prior-Annahmen in Abhängigkeit von der Anzahl der Wurfwiederholungen N untersuchen. (a) Eine faire Münze werde nur einmal, zweimal oder 10-mal geworfen. (b) Eine mit π(K) = 0.001 gezinkte Münze werde 100 mal geworfen. (c) Entdecken Sie interessante Fälle. Vergleichen Sie mit dem frequentistischen Vorgehen. ### Code von Nadine Schuetz ### import numpy, math import matplotlib.pylab as py import matplotlib.pyplot as plt # Simulation eines Münzwurfs def Muenzwurf(N,pi_true): K=0; Z=0 data = numpy.random.random_sample((N)) for i in xrange(N): if data[i] < pi_true: data[i] = 1 K = K+1 else: data[i] = 0 Z = Z+1 return K # uniformer Prior = keine Hintergrundinformation def uniformPrior(): prior = 1.0 return prior # verzerrter Prior = Annahme einer stark gezinkter Münze, die entweder nur Kopf oder Zahl ergibt def biasedPrior(x): prior = pow(x,-0.8)*pow((1-x),-0.8)/80. return prior # Gauss’scher Prior = Annahme einer fairen Münze, die gleichwahrscheinlich Kopf & Zahl ergibt def fairPrior(x): prior = numpy.exp(-pow((0.5-x),2)/(2*pow(0.05,2))) # Gauss-Funktion um 0.5 mit Standardabweichung = 0.05 return prior if __name__==’__main__’: # Simulation eines Münzwurs N = 10 # Anzahl aller Würfe pi_true = 0.5 # wahre Wahrscheinlickeit um Kopf zu werfen -> 0.5 = faire Münze K = Muenzwurf(N,pi_true) # Anzahl der observierten Kopf-Würfe print ’Es wurde ’,K, ’ mal Kopf und ’,N-K, ’ mal Zahl geürfelt.’ # Intervall möglicher pi-Werte # (wegen des biased Priors sind 0 & 1 Polstellen, ohne biased Prior kann der Bereich 0 & 1 einschliessen!) pi_min = 0.01 pi_max = 0.99 npi = 100 pi_interval=numpy.linspace(pi_min,pi_max,npi) # Likelihood-Funktion Likelihood = pow(pi_interval,K)*pow((1-pi_interval),N-K) # angenommene Prior-Funktion priorflat = uniformPrior() priorfair = fairPrior(pi_interval) priorbiased = biasedPrior(pi_interval) # Posterior-Dichte (zur Anschaulichkeit reskaliert) posteriorflat = numpy.multiply(Likelihood,priorflat) maxiflat = posteriorflat.max() posteriorflat = numpy.divide(posteriorflat, maxiflat) posteriorfair = numpy.multiply(Likelihood,priorfair) maxfair = posteriorfair.max() posteriorfair = numpy.divide(posteriorfair, maxfair) posteriorbiased = numpy.multiply(Likelihood,priorbiased) maxbiased = posteriorbiased.max() posteriorbiased = numpy.divide(posteriorbiased, maxbiased) # Plotten der Posterior-Dichten & der Prior-Funktionen plt.subplots_adjust(wspace=0.4) plt.subplot(121) py.plot(pi_interval,posteriorflat,’b-’) py.plot(pi_interval,posteriorfair,’g-’) py.plot(pi_interval,posteriorbiased,’r-’) py.xlabel(’$\pi$ Wlkt. fuer Kopf’,fontsize = 15, weight= ’bold’) py.ylabel(’Posterior Dichte p($\pi$|Wuerfe)’,fontsize = 15, weight= ’bold’) plt.subplot(122) py.plot(pi_interval,0.5*numpy.ones(npi),’b-’) py.plot(pi_interval,priorfair,’g-’) py.plot(pi_interval,priorbiased,’r-’) py.xlabel(’$\pi$ Wlkt. fuer Kopf’,fontsize = 15, weight= ’bold’) py.ylabel(’Prior Funktionen p($\pi$|Info)’,fontsize = 15, weight= ’bold’)