बायसीयन डेटा विश्लेषण करने के लिए लगातार शिविर से आने वाले किसी व्यक्ति के लिए यह मेरा पहला प्रयास है। मैं ए जेलमैन द्वारा बायेसियन डेटा एनालिसिस से कई ट्यूटोरियल और कुछ अध्याय पढ़ता हूं।
पहले या कम स्वतंत्र डेटा विश्लेषण उदाहरण के रूप में मैंने उठाया ट्रेन प्रतीक्षा समय है। मैंने खुद से पूछा: प्रतीक्षा समय का वितरण क्या है?
डेटासेट एक ब्लॉग पर उपलब्ध कराया गया था और इसका विश्लेषण थोड़ा अलग और PyMC के बाहर किया गया था।
मेरा लक्ष्य उन 19 डेटा प्रविष्टियों को देखते हुए अपेक्षित ट्रेन प्रतीक्षा समय का अनुमान लगाना है।
मेरे द्वारा बनाया गया मॉडल निम्नलिखित है:
जहाँ डेटा माध्य है और डेटा मानक विचलन 1000 से गुणा है। σ
मैंने पॉइज़न वितरण का उपयोग करके अपेक्षित प्रतीक्षा समय को रूप में निर्धारित किया है। इस वितरण के लिए दर पैरामीटर को गामा वितरण का उपयोग करके तैयार किया गया है क्योंकि यह पॉइसन वितरण के लिए संयुग्मित वितरण है। हाइपर- priors और क्रमशः सामान्य और आधा-सामान्य वितरण के साथ मॉडलिंग की गई थी। मानक विचलन जितना संभव हो उतना व्यापक बनाया गया था, जितना संभव हो उतना गैर-कम्यूटिकल ।।μ σ σ
मेरे पास सवालों का एक गुच्छा है
- क्या यह मॉडल कार्य के लिए उचित है (मॉडल के कई संभावित तरीके?)
- क्या मैंने कोई शुरुआत की है?
- क्या मॉडल को सरल बनाया जा सकता है (मैं सरल चीजों को जटिल करता हूं)?
- अगर रेट पैरामीटर ( ) वास्तव में डेटा फिटिंग कर रहा है तो मैं कैसे सत्यापित कर सकता हूं ?
- मैं नमूनों को देखने के लिए फिट पोइसन वितरण से कुछ नमूने कैसे खींच सकता हूं?
5000 महानगरों के बाद के पोस्टर्स इस तरह दिखते हैं:
मैं सोर्स कोड भी पोस्ट कर सकता हूं। मॉडल फिटिंग चरण में मैं NUTS का उपयोग करके पैरामीटर और लिए चरण करता हूं । फिर दूसरे चरण में मैं रेट पैरामीटर लिए मेट्रोपोलिस करता हूं । अंत में मैं इनबिल्ट टूल्स का उपयोग करके ट्रेस प्लॉट करता हूं।
मैं किसी भी टिप्पणी और टिप्पणियों के लिए बहुत आभारी रहूंगा जो मुझे अधिक संभावनावादी प्रोग्रामिंग को समझने में सक्षम करेगा। हो सकता है कि अधिक क्लासिक उदाहरण हैं जिनके साथ प्रयोग करने लायक हैं?
यहाँ कोड है जिसे मैंने Python में PyMC3 का उपयोग करते हुए लिखा है। डेटा फ़ाइल यहां पाई जा सकती है ।
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import pymc3
from scipy import optimize
from pylab import figure, axes, title, show
from pymc3.distributions import Normal, HalfNormal, Poisson, Gamma, Exponential
from pymc3 import find_MAP
from pymc3 import Metropolis, NUTS, sample
from pymc3 import summary, traceplot
df = pd.read_csv( 'train_wait.csv' )
diff_mean = np.mean( df["diff"] )
diff_std = 1000*np.std( df["diff"] )
model = pymc3.Model()
with model:
# unknown model parameters
mu = Normal('mu',mu=diff_mean,sd=diff_std)
sd = HalfNormal('sd',sd=diff_std)
# unknown model parameter of interest
rate = Gamma( 'rate', mu=mu, sd=sd )
# observed
diff = Poisson( 'diff', rate, observed=df["diff"] )
with model:
step1 = NUTS([mu,sd])
step2 = Metropolis([rate])
trace = sample( 5000, step=[step1,step2] )
plt.figure()
traceplot(trace)
plt.savefig("rate.pdf")
plt.show()
plt.close()