অসম্পূর্ণ প্রস্তাব বিতরণ সহ মহানগর-হেস্টিংস বোঝা


14

কোনও মডেলের পরামিতি (যেমন ) নির্ধারণের জন্য কোড লিখতে আমি মেট্রোপলিস-হেস্টিংস অ্যালগরিদম বোঝার চেষ্টা করছি been গ্রন্থপঞ্জি অনুসারে মেট্রোপলিস-হেস্টিংস অ্যালগরিদমের নিম্নলিখিত পদক্ষেপ রয়েছে:f(x)=ax

  • জেনারেট করুন Ytq(y|xt)
  • Xt+1={Yt,with probabilityρ(xt,Yt),xt,with probability1ρ(xt,Yt),

ρ(x,y)=min(f(y)f(x)q(x|y)q(y|x),1)

আমি কীভাবে কয়েকটি প্রশ্ন জিজ্ঞাসা করতে চাই:

  • গ্রন্থপত্রে বলা হয়েছে যে, যদি একটি প্রতিসম বিতরণ হয় তবে অনুপাত 1 হয়ে যায় এবং অ্যালগরিদমকে মেট্রোপলিস বলে। এটা কি ঠিক? মেট্রোপলিস এবং মেট্রোপলিস-হেস্টিংসের মধ্যে একমাত্র পার্থক্য হ'ল প্রথমটি প্রতিসম বিতরণ ব্যবহার করে? "র‌্যান্ডম ওয়াক" মহানগর (-হ্যাস্টিংস) সম্পর্কে কী? এটি অন্য দুটি থেকে কীভাবে আলাদা?qq(x|y)/q(y|x)
  • আমি অনলাইনে খুঁজে পাওয়া উদাহরণের বেশিরভাগ কোডটিতে একটি গাউসিয়ান প্রস্তাব বিতরণ ব্যবহার করা হয় এবং এভাবে যেখানে সম্ভাবনা অনুপাত। যদি প্রস্তাব বিতরণটি পয়সন বিতরণ হয়? আমি মনে করি আমি যুক্তিযুক্তভাবে বুঝতে পারি যে অনুপাতটি কেন অসাম্যমিতিক বিতরণ ব্যবহার করার সময় 1 হয়ে যায় না তবে আমি গাণিতিকভাবে বুঝতে পেরেছি বা কোড সহ কীভাবে এটি প্রয়োগ করব তা আমি নিশ্চিত নই। মেট্রোপলিস-হেস্টিংস অ্যালগরিদমের অ-প্রতিসম প্রস্তাব বিতরণ ব্যবহার করে কেউ কি আমাকে একটি সাধারণ কোড (সি, পাইথন, আর, সিউডো কোড বা আপনি যা পছন্দ করেন) উদাহরণ দিতে পারেন?qρ(x,y)=min(f(y)/f(x),1)f(y)/f(x)

1
আমি কেবলমাত্র সম্পর্কিত বিষয়ে একটি দুর্দান্ত ব্লগ পোস্টটি স্মরণ করেছি, সম্ভবত এটি সহায়তা করে: darrenjw.wordpress.com/2012/06/04/…
যৌথ_পি

উত্তর:


20

গ্রন্থপত্রে বলা হয়েছে যে, যদি q একটি প্রতিসম বিতরণ হয় তবে অনুপাত q (x | y) / q (y | x) 1 হয়ে যায় এবং অ্যালগরিদমকে মেট্রোপলিস বলে। এটা কি ঠিক?

হ্যাঁ, এটি সঠিক। মেট্রোপলিস অ্যালগরিদম এমএইচ অ্যালগরিদমের একটি বিশেষ ক্ষেত্রে।

"র‌্যান্ডম ওয়াক" মহানগর (-হ্যাস্টিংস) সম্পর্কে কী? এটি অন্য দুটি থেকে কীভাবে আলাদা?

একটি এলোমেলো পদচারণায়, প্রস্তাব বিতরণটি চেইনের দ্বারা সর্বশেষে উত্পাদিত মূল্যে প্রতিটি পদক্ষেপের পরে পুনরায় কেন্দ্রীভূত হয়। সাধারণত, এলোমেলো পদব্রজে প্রস্তাব বিতরণ গাউসিয়ান হয়, সেক্ষেত্রে এই এলোমেলো হাঁটা প্রতিসামতার প্রয়োজনীয়তা পূরণ করে এবং অ্যালগরিদম মহানগর হয়। আমি মনে করি আপনি একটি অসমমিতিক বিতরণ দিয়ে একটি "ছদ্ম" র্যান্ডম ওয়াক করতে পারবেন যা প্রস্তাবগুলি স্কুয়ের বিপরীত দিকে খুব চালিত হতে পারে (একটি বাম স্কিউ বিতরণ ডানদিকে প্রস্তাবগুলির পক্ষে হবে)। আপনি কেন এটি করবেন তা আমি নিশ্চিত নই, তবে আপনি এটি করতে পারেন এবং এটি একটি মহানগর হেসিংস অ্যালগরিদম হতে পারে (অর্থাত্ অতিরিক্ত অনুপাতের মেয়াদ প্রয়োজন)।

এটি অন্য দুটি থেকে কীভাবে আলাদা?

একটি নন-র্যান্ডম ওয়াক অ্যালগরিদমে, প্রস্তাব বিতরণগুলি স্থির হয়। এলোমেলো হাঁটার বৈকল্পিকের ক্ষেত্রে, প্রস্তাবনা বিতরণের কেন্দ্রটি প্রতিটি পুনরাবৃত্তিতে পরিবর্তিত হয়।

যদি প্রস্তাব বিতরণটি পয়সন বিতরণ হয়?

তারপরে আপনাকে কেবল মহানগরের পরিবর্তে এমএইচ ব্যবহার করতে হবে। সম্ভবত এটি একটি পৃথক বিতরণ নমুনা হিসাবে অন্যথায় আপনি আপনার প্রস্তাব উত্পন্ন করতে একটি স্বতন্ত্র ফাংশন ব্যবহার করতে চান না।

যে কোনও ইভেন্টে, যদি স্যাম্পলিং বিতরণটি কেটে ফেলা হয় বা এর স্কিউ সম্পর্কে আপনার পূর্ববর্তী জ্ঞান থাকে, আপনি সম্ভবত একটি অসামান্য নমুনা বিতরণ ব্যবহার করতে চান এবং অতএব মহানগর-হ্যাসিং ব্যবহার করা প্রয়োজন।

কেউ কি আমাকে একটি সাধারণ কোড (সি, পাইথন, আর, সিউডো কোড বা আপনি যা পছন্দ করেন) উদাহরণ দিতে পারেন?

এখানে মহানগরী:

Metropolis <- function(F_sample # distribution we want to sample
                      , F_prop  # proposal distribution 
                      , I=1e5   # iterations
               ){
  y = rep(NA,T)
  y[1] = 0    # starting location for random walk
  accepted = c(1)

  for(t in 2:I)    {
    #y.prop <- rnorm(1, y[t-1], sqrt(sigma2) ) # random walk proposal
    y.prop <- F_prop(y[t-1]) # implementation assumes a random walk. 
                             # discard this input for a fixed proposal distribution

    # We work with the log-likelihoods for numeric stability.
    logR = sum(log(F_sample(y.prop))) -
           sum(log(F_sample(y[t-1])))    

    R = exp(logR)

    u <- runif(1)        ## uniform variable to determine acceptance
    if(u < R){           ## accept the new value
      y[t] = y.prop
      accepted = c(accepted,1)
    }    
    else{
      y[t] = y[t-1]      ## reject the new value
      accepted = c(accepted,0)
    }    
  }
  return(list(y, accepted))
}

দ্বিপদ বন্টন নমুনা করতে এটি ব্যবহার করার চেষ্টা করা যাক। প্রথমে আসুন আমরা আমাদের প্রোপ্সালের জন্য এলোমেলো হাঁটা ব্যবহার করি তবে কী হয় তা দেখুন:

set.seed(100)

test = function(x){dnorm(x,-5,1)+dnorm(x,7,3)}

# random walk
response1 <- Metropolis(F_sample = test
                       ,F_prop = function(x){rnorm(1, x, sqrt(0.5) )}
                      ,I=1e5
                       )
y_trace1 = response1[[1]]; accpt_1 = response1[[2]]
mean(accpt_1) # acceptance rate without considering burn-in
# 0.85585   not bad

# looks about how we'd expect
plot(density(y_trace1))
abline(v=-5);abline(v=7) # Highlight the approximate modes of the true distribution

এখানে চিত্র বর্ণনা লিখুন

এখন একটি স্থির প্রস্তাব বিতরণ ব্যবহার করে নমুনা দেওয়ার চেষ্টা করি এবং দেখুন কী ঘটে:

response2 <- Metropolis(F_sample = test
                            ,F_prop = function(x){rnorm(1, -5, sqrt(0.5) )}
                            ,I=1e5
                       )

y_trace2 = response2[[1]]; accpt_2 = response2[[2]]
mean(accpt_2) # .871, not bad

এটি প্রথমে ঠিক দেখাচ্ছে, তবে আমরা যদি উত্তরের ঘনত্বটি একবার দেখে নিই ...

plot(density(y_trace2))

এখানে চিত্র বর্ণনা লিখুন

আমরা দেখতে পাব যে এটি স্থানীয় সর্বাধিক স্থানে আটকে আছে। এটি পুরোপুরি আশ্চর্যজনক নয় যেহেতু আমরা আসলে সেখানে আমাদের প্রস্তাবনা বিতরণকে কেন্দ্র করেছিলাম। যদি আমরা এটি অন্য মোডে কেন্দ্র করি তবে একই জিনিস ঘটে:

response2b <- Metropolis(F_sample = test
                        ,F_prop = function(x){rnorm(1, 7, sqrt(10) )}
                        ,I=1e5
)

plot(density(response2b[[1]]))

আমরা আমাদের প্রস্তাবটি দুটি মোডের মধ্যে ফেলে দেওয়ার চেষ্টা করতে পারি , তবে উভয়টির অন্বেষণ করার সুযোগ পাওয়ার জন্য আমাদের ভিন্নতাটি সত্যই উচ্চতর করতে হবে

response3 <- Metropolis(F_sample = test
                        ,F_prop = function(x){rnorm(1, -2, sqrt(10) )}
                        ,I=1e5
)
y_trace3 = response3[[1]]; accpt_3 = response3[[2]]
mean(accpt_3) # .3958! 

আমাদের প্রস্তাব বিতরণ কেন্দ্রের পছন্দটি কীভাবে আমাদের নমুনার গ্রহণযোগ্যতার হারের উপর উল্লেখযোগ্য প্রভাব ফেলবে তা লক্ষ্য করুন।

plot(density(y_trace3))

এখানে চিত্র বর্ণনা লিখুন

plot(y_trace3) # we really need to set the variance pretty high to catch 
               # the mode at +7. We're still just barely exploring it

আমরা এখনও দুটি মোডের কাছাকাছি আটকে যাই। আসুন এটি দুটি মোডের মধ্যে সরাসরি ফেলে দেওয়ার চেষ্টা করি।

response4 <- Metropolis(F_sample = test
                        ,F_prop = function(x){rnorm(1, 1, sqrt(10) )}
                        ,I=1e5
)
y_trace4 = response4[[1]]; accpt_4 = response4[[2]]

plot(density(y_trace1))
lines(density(y_trace4), col='red')

এখানে চিত্র বর্ণনা লিখুন

অবশেষে, আমরা যা খুঁজছিলাম তার কাছাকাছি চলেছি। তাত্ত্বিকভাবে, যদি আমরা স্যাম্পলারটি দীর্ঘ সময় চালাতে পারি তবে আমরা এই প্রস্তাব বিতরণগুলির যে কোনও একটি থেকে একটি প্রতিনিধি নমুনা পেতে পারি, তবে এলোমেলো পদক্ষেপটি খুব দ্রুত ব্যবহারযোগ্য নমুনা তৈরি করেছিল এবং আমাদের কীভাবে উত্তরোত্তর সম্পর্কে ধারণা করা হয়েছিল সে সম্পর্কে আমাদের জ্ঞানের সুবিধা নিতে হয়েছিল একটি ব্যবহারযোগ্য ফলাফল তৈরি করার জন্য স্থির নমুনা বিতরণগুলি টিউন করার জন্য তাকান (যা সত্য বলা যায়, আমাদের বেশিরভাগটি এখনও নেই y_trace4)।

আমি পরে মহানগর হ্যাসিংয়ের উদাহরণ সহ আপডেট করার চেষ্টা করব। একটি মহানগর হ্যাসিংস অ্যালগরিদম উত্পাদন করার জন্য উপরের কোডটি কীভাবে পরিবর্তন করতে হবে তা আপনি মোটামুটি সহজেই দেখতে সক্ষম হবেন (ইঙ্গিত: আপনাকে কেবল logRগণনায় পরিপূরক অনুপাত যুক্ত করতে হবে )।


দুর্দান্ত উত্তর! তোমাকে অনেক ধন্যবাদ! আমার ক্ষেত্রে আমার কাছে 6-7 প্যারামিটারের মডেল রয়েছে এবং আমার উত্তর নেই যে উত্তরোত্তর বিতরণ কেমন হবে (তবে এটি বিমোডাল হতে পারে) কারণ আমার ডেটাসেটগুলি কখনও কখনও সম্পূর্ণ আলাদা থাকে। আপনি যা বলেছিলেন তার ভিত্তিতে আমি হয় প্রস্তাব বিতরণে বিশাল বৈচিত্র ব্যবহার করে মেট্রোপলিস (-হ্যাস্টিংস) ব্যবহার করতে পারি বা প্রস্তাবনা বিতরণে সামান্য ভিন্নতার সাথে র‌্যান্ডম ওয়াক মেট্রোপলিস (-হাস্টিংস) ব্যবহার করতে পারি। কোনও বিশেষ পরিস্থিতিতে দ্বিতীয় সমাধানটি লক্ষ্য বন্টনে দ্রুত রূপান্তর করা উচিত। রাইট?
অস্ট্রোনে

এখন মেট্রোপলিস-হেস্টিংস কোড সম্পর্কিত যা আমি এটির সাথে প্রতিস্থাপন করার কথা ভাবছিলাম R=exp(logR): R=exp(logR)*(dnorm(y[t-1],y.prop,my_sigma)/dnorm(y.prop,y[t-1],my_sigma))এলোমেলো এবং নন-র্যান্ডম ওয়াক এমএইচ উভয়ের জন্য। এটা কি ঠিক?
অ্যাস্ট্রোনে

1
মূলত, তবে আমি যেমন মহানগর কোডে উল্লেখ করেছি: আপনি লগ স্পেসে আপনার গণনা সম্পাদন করতে চান। সম্ভাবনার গণনা খুব ছোট মানগুলিতে পরিচালিত হয়, সুতরাং আপনি সাধারণত লগারিদম যুক্ত করে এবং কাঁচা মানকে একসাথে গুণিত করার চেয়ে আপনার ফলাফলকে ঘনিষ্ট করে তুলনামূলকভাবে অনেক ভাল ফলাফল পান।
ডেভিড মার্কস

1
আপনি যখন স্থির প্রস্তাব বিতরণ ব্যবহার করছেন তখন আপনাকে বর্তমান অবস্থা (যেমন ) সম্পর্কে চিন্তা করার দরকার নেই কারণ: । একটি স্থির প্রস্তাব বিতরণ স্বাধীন প্রস্তাব উত্পন্ন করে। আমরা মহানগর অনুপাতের অ্যাকাউন্টে গ্রহণ । q ( y t | y t - 1 ) = q ( y t ) y t - 1yt1q(yt|yt1)=q(yt)yt1
ডেভিড মার্কস

1
আপনি বলছেন "একটি নন-র্যান্ডম ওয়াক অ্যালগরিদমে, প্রস্তাব বিতরণগুলি স্থির করা হয়েছে the এমএইচ সংস্করণগুলি যা এলোমেলো পদচারণা নয়, বেশিরভাগ ক্ষেত্রে এমন প্রস্তাব রয়েছে যা মার্কভ চেইনের বর্তমান অবস্থার উপর নির্ভর করে, কখনও কখনও এমনকি এই রাজ্যে কেন্দ্রীভূত হয়। একটি প্রধান উদাহরণ ল্যাঙ্গভিন এমসিসিএম অ্যালগরিদম। প্রস্তাবটি স্থির হয়ে গেলে এটি একটি স্বতন্ত্র এমএইচ অ্যালগরিদম
শি'আন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.