ঘন ঘন ঘন শিবির থেকে আগত কেউ বায়েশিয়ান ডেটা বিশ্লেষণ করার জন্য এটি আমার প্রথম প্রচেষ্টা। এ। গেলম্যানের দ্বারা বয়েসিয়ান ডেটা অ্যানালাইসিসের কয়েকটি টিউটোরিয়াল এবং কয়েকটি অধ্যায় পড়েছি।
প্রথম বা কম স্বতন্ত্র ডেটা বিশ্লেষণ উদাহরণ হিসাবে আমি বেছে নিয়েছি ট্রেনের অপেক্ষার সময়। আমি নিজেকে জিজ্ঞাসা করলাম: অপেক্ষার সময়ের বিতরণ কী?
ডেটাসেটটি একটি ব্লগে সরবরাহ করা হয়েছিল এবং পিএমসির বাইরে কিছুটা আলাদাভাবে বিশ্লেষণ করা হয়েছিল।
আমার লক্ষ্যটি সেই 19 ডেটা এন্ট্রি প্রদত্ত প্রত্যাশিত ট্রেনের অপেক্ষার সময়গুলি অনুমান করা।
আমি যে মডেলটি তৈরি করেছি তা নিম্নলিখিত:
যেখানে ডেটা মানে এবং mean হ'ল ডেটা স্ট্যান্ডার্ড বিচ্যুতিটি 1000 দ্বারা গুণিত হয়। σ
আমি আশা অপেক্ষার সময় অনুকরণে পইসন বিতরণের ব্যবহার করে। এই বিতরণের হারের পরামিতি গামা বিতরণ ব্যবহার করে মডেল করা হয়েছে কারণ এটি পোইসন বিতরণে সম্মিলিত বিতরণ। হাইপার-প্রিয়ারগুলি এবং যথাক্রমে নরমাল এবং হাফ-নরমাল বিতরণের মাধ্যমে মডেল হয়েছিল। স্ট্যান্ডার্ড বিচ্যুতি যতটা সম্ভব বিস্তৃত হিসাবে যতটা সম্ভব বিস্তৃত করা সম্ভব ..μ σ σ
আমি একগুচ্ছ প্রশ্ন আছে
- এই মডেলটি কি কাজের জন্য যুক্তিযুক্ত (মডেল করার বিভিন্ন উপায়?)?
- আমি কি কোনও প্রাথমিক ভুল করেছি?
- মডেল কি সরলীকরণ করা যায় (আমি সাধারণ জিনিসগুলিকে জটিল করে তুলি)?
- হার প্যারামিটার ( ) এর পোস্টারিয়রটি আসলে ডেটা ফিট করে কিনা তা আমি কীভাবে যাচাই করতে পারি ?
- নমুনাগুলি দেখতে আমি কীভাবে লাগানো পোইসন বিতরণ থেকে কিছু নমুনা আঁকতে পারি?
5000 মেট্রোপলিস পদক্ষেপের পরে পোস্টারিয়রগুলি দেখে মনে হচ্ছে:
আমি উত্স কোড পাশাপাশি পোস্ট করতে পারেন। মডেল ফিটিং পর্যায়ে আমি NUTS ব্যবহার করে প্যারামিটারগুলি এবং ব্যবহার করি। তারপর দ্বিতীয় ধাপ আমি হার পরামিতি জন্য মেট্রোপলিস না । শেষ পর্যন্ত আমি ইনবিল্ট সরঞ্জামগুলি ব্যবহার করে ট্রেস প্লট করি।σ ρ
আমি এমন কোনও মন্তব্য এবং মন্তব্যের জন্য খুব কৃতজ্ঞ থাকব যা আমাকে আরও সম্ভাব্য প্রোগ্রামিং বুঝতে সক্ষম করবে। আরও কিছু ক্লাসিক উদাহরণ রয়েছে যা পরীক্ষার জন্য উপযুক্ত?
পাইথনটিতে আমি পাইএমসি 3 ব্যবহার করে কোডটি এখানে লিখেছি। ডেটা ফাইলটি এখানে পাওয়া যাবে ।
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()