Belki kavramı, neden kullanıldığı ve bir örnek.
Belki kavramı, neden kullanıldığı ve bir örnek.
Yanıtlar:
İlk önce Markov zincirinin ne olduğunu anlamamız gerekir. Aşağıdaki Wikipedia hava durumu örneğini düşünün . Herhangi bir günde havaların yalnızca iki ülkeye sınıflandırılabileceğini varsayalım: güneşli ve yağmurlu. Geçmiş deneyimlere dayanarak, aşağıdakileri biliyoruz:
Ertesi gün hava güneşli ya da yağmurlu olduğu için şöyle:
Benzer şekilde, izin verelim:
Bu nedenle, şöyle:
Yukarıdaki dört sayı, havanın bir durumdan diğerine geçme ihtimalini temsil eden bir geçiş matrisi olarak kompakt şekilde gösterilebilir:
Cevapları takip eden birkaç soru sorabiliriz:
S1: Bugün hava güneşliyse o zaman hava yarın ne olacak?
Y1: Kesin olarak ne olacağını bilmiyoruz, söyleyebileceğimiz en iyi şey, güneşli olma ihtimalinin ve yağmurlu olma ihtimalinin olmasıdır.10 %
S2: Peki ya bugünden iki gün sonra?
A2: Bir günlük hava tahmini: güneşli, yağmurlu. Bu nedenle, bundan iki gün sonra:10 %
İlk gün güneşli, ertesi gün de güneşli olabilir. Bu olanların şansı: .
Veya
İlk gün yağmurlu, ikinci gün güneşli olabilir. Bu olma ihtimali: .
Bu nedenle, iki gün içinde havanın güneşli olması ihtimali:
Benzer şekilde, yağmurlu olma ihtimali de:
Doğrusal cebirde (geçiş matrisleri) bu hesaplamalar bir adımdan diğerine (güneşli-güneşli ( ), güneşli-yağmurlu ( ), yağmurlu-güneşli ( ) veya yağışlı yağış ( )) hesaplanan olasılıkları ile:
Görüntünün alt kısmında, sıfır anda (şimdi) her durum için (güneşli veya yağmurlu) olasılıklar (olasılık kütle fonksiyonu, ) göz önüne alındığında gelecekteki bir durumun ( veya ) olasılığının nasıl hesaplandığını görüyoruz. veya ) basit matris çarpımı olarak.
Böyle hava tahmin devam ederse o eninde sonunda fark edecektir -inci günlük tahminleri, çok büyük (diyelim ki aşağıdaki 'denge' olasılıklara yerleşir,):
ve
Başka bir deyişle, Gün ve gün için tahminleriniz aynı kalır. Ek olarak, “denge” olasılıklarının bugün hava durumuna bağlı olmadığını da kontrol edebilirsiniz. Bugün hava güneşli ya da yağmurlu olduğu varsayılarak, hava durumu için aynı tahminde bulunursunuz.
Yukarıdaki örnek, yalnızca devlete geçiş olasılıkları burada tartışmayacağım birkaç koşulu sağladığı takdirde işe yarayacaktır. Ancak, bu 'hoş' Markov zincirinin şu özelliklerine dikkat edin (nice = geçiş olasılıkları koşulları karşılar):
Başlangıçtaki başlangıç durumuna bakılmaksızın, sonunda devletlerin denge olasılık dağılımına ulaşacağız.
Markov Zinciri Monte Carlo, yukarıdaki özelliği şu şekilde kullanıyor:
Hedef dağılımdan rastgele çekilişler üretmek istiyoruz. Daha sonra, denge olasılık dağılımımızın hedef dağılımımız olduğu şekilde 'güzel' bir Markov zinciri oluşturmanın bir yolunu belirliyoruz.
Eğer böyle bir zincir kurabilirsek, keyfi bir noktadan başlar ve Markov zincirini defalarca yineleriz (hava durumunu kere tahmin ettiğimiz gibi ). Sonunda, yarattığımız çekilişler hedef dağıtımımızdan geliyormuş gibi görünecektir.
Daha sonra Monte Carlo bileşeni olan birkaç ilk çekilişi attıktan sonra çekilişlerin örnek ortalamasını alarak, ilgi miktarlarını (örneğin ortalama) yaklaşık olarak hesaplarız.
'Güzel' Markov zincirlerini oluşturmanın birkaç yolu vardır (örneğin, Gibbs örnekleyici, Metropolis-Hastings algoritması).
(Bağımsızlık zinciri) Metropolis-Hastings algoritmasından kazanılmış basit ve basit bir sezginin olduğunu düşünüyorum.
İlk olarak, amaç nedir? MCMC'nin amacı, herhangi bir noktada tam yüksekliğini bilmeden bazı olasılık dağılımından örnekler çıkarmaktır. MCMC'nin bunu başarma şekli, her bir yerde harcanan zaman miktarının, dağılımın yüksekliği ile orantılı olduğu şekilde, o dağıtım üzerinde "dolaşmak" tır. "Etrafta dolaşmak" süreci doğru kurulursa, bu orantılığın (harcanan zaman ile dağılımın yüksekliği arasında) elde edilmesini sağlayabilirsiniz.
Sezgisel olarak, yapmak istediğimiz şey, bazı (topaklı) yüzeylerde, her bir yerde harcadığımız zamanın (ya da # numunelerin çizildiği) o konumdaki yüzeyin yüksekliğiyle orantılı olacak şekilde dolaşmaktır. Bu yüzden, örneğin, 50 m yükseklikte bir yakındaki tepede yaptığımız gibi 100 m yükseklikte bir tepenin üzerinde iki kat fazla zaman harcamak istiyoruz. İşin güzel yanı, yüzeydeki noktaların mutlak yüksekliklerini bilmesek bile bunu yapabilmemiz: bilmemiz gereken tüm göreceli yükseklikler. örneğin, eğer bir tepe A, tepe B'nin iki katı yüksekse, A'da B'de geçirdiğimizden iki kat daha fazla zaman geçirmek isteriz.
Metropolis-Hastings algoritmasının en basit çeşidi (bağımsızlık zinciri örneklemesi) bunu şöyle başarır: her (ayrık) zaman adımında, rastgele yeni bir "önerilen" konum seçtiğimizi varsayalım (tüm yüzey boyunca aynı şekilde seçilmiş). Önerilen yer şu an bulunduğumuz yerden yüksekse, o noktaya gidin. Önerilen konum daha düşükse, p olasılıklı yeni konuma gidin; burada p, bu noktanın yüksekliğinin geçerli konumun yüksekliğine oranıdır. (yani, kafa alma olasılığı p olan bir yazı tura atmak; eğer kafa gelirse, yeni konuma gidin; eğer gelirse, olduğumuz yerde kalın). Her zaman adımda bulunduğunuz konumların bir listesini tutun ve bu liste (tipik olarak) yüzeyin her bir bölümünde harcanan zamanın doğru bir oranına sahip olacaktır.
Yeni yerler önermek ve bunları kabul etmek için kurallar önermek için daha karmaşık planlar vardır, ancak temel fikir hala: (1) yeni bir "önerilen" yer seçmek; (2) bu konumun mevcut konumunuzla karşılaştırıldığında ne kadar yüksek veya düşük olduğunu bulmanız; (3) olasılıkla, bulunduğunuz yerin yüksekliğine orantılı olarak harcanan zamanın genel hedefine saygılı bir şekilde yerleştirilmeli veya taşınmalıdır.
Bu ne işe yarar? A'nın bilinmeyen bir sabit olduğu A * P'yi (hava durumu) değerlendirmemize izin veren olasılıklı bir hava durumu modelimiz olduğunu varsayalım. (Bu çoğu zaman olur - birçok model, A'nın ne olduğunu belirleyemeyeceğiniz şekilde formüle etmeye uygundur.) Bu yüzden P'yi tam olarak değerlendiremiyoruz ("yarın yağmur"). Ancak, MCMC örnekleyicisini bir süre çalıştırabilir ve sonra şunu sorabiliriz: Örneklerin (veya "konumların" ne kadarı "yarın yağmur" durumunda sona erdi. Bu kesir (modele dayalı) olasılıklı hava tahmini olacaktır.
Muhtemelen böyle bir şey söylerdim:
“Her zaman olasılıklar hakkında konuşmak istediğimizde, gerçekten bir yoğunluğu birleştiriyoruz. Bayesan analizinde, karşılaştığımız yoğunluğun çoğu analitik olarak izlenemez değil: onları bütünleştirebilirsiniz - eğer onları bütünleştirebiliyorsanız - çok fazla acı çekerek… O zaman yaptığımız şey rastgele değişkeni çok fazla benzetmek ve daha sonra benzetilmiş rastgele sayılarımızdan olasılıkları bulmak… Eğer X'in 10'dan küçük olma olasılığını bilmek istiyorsak, benzetilmiş rastgele değişkenin oranı 10'dan daha az sonuç verir ve bunu bizim tahmimiz olarak kullanırız. Bu “Monte Carlo” kısmı, rastgele sayılara dayanan olasılık tahminidir. doğal olarak rastgele.
"Öyleyse neden" Markov Zinciri "? Belli teknik şartlar altında, simüle etmeye çalıştığınız rasgele değişkenle aynı sınırlama dağılımına sahip olan bir hafızaya alma işlemi (yani bir Markovian olanı) oluşturabilirsiniz. İlişkili rasgele sayılar üreten farklı türde simülasyon işlemlerinin sayısı (yalnızca bu sayıların geçerli değerine bağlı olarak) ve sonuçları bir kez topladığınızda, görünen bir sayı yığınıyla sonuçlanacağını garanti edersiniz " sanki "bir şekilde bilmek istediğiniz karmaşık dağıtımdan bağımsız örnekler almayı başardınız.
"Örneğin, normal bir normal rastgele değişkenin 0,5'ten küçük olma olasılığını tahmin etmek istersem, standart bir normal dağılımdan on bin bağımsız gerçekleştirme üretebilirim ve 0,5'ten az sayıyı sayarım; 10000 toplam örneklemin 0,5'inden daha azında, P (Z <0,5) için tahminim gerçek değerden çok uzak olmayan 0.6905 olacaktır, bu bir Monte Carlo tahmini olurdu.
Prosedürden aldığım sayıların listesi normal rastgele değişkenler üreten bir şeyden çok sayıda çekiliş gibi dağıtılacak. Bu bana standart normal rastgele değişken için bir Markov Zinciri Monte Carlo simülasyonu verirdi. Bunu olasılıkları tahmin etmek için kullansaydım, bu bir MCMC tahmini olurdu. "
Masa oyunu Tekel'de arkadaşlarınızı yenmek için daha iyi bir strateji bulmak istediğinizi düşünün. Oyunda önemli olan şeyleri şu soruya göre basitleştirin: insanlar en çok hangi mülkleri kullanıyor? Cevap, tahtanın yapısına, oyunun kurallarına ve iki zarın atılmasına bağlıdır.
Soruyu cevaplamanın bir yolu budur. Tahtanın etrafındaki tek bir parçayı takip et ve zarları at ve kuralları takip et. Her bir mülke kaç kez girdiğinizi (veya sizin için işi yapmak için bir bilgisayarı programladığınızı) sayın. Sonunda, yeterli sabrınız varsa veya kuralları bilgisayarınızda yeterince iyi programladıysanız, hangi özelliklerin en fazla iş aldığına dair iyi bir resim oluşturacaksınız. Bu daha sık kazanmanıza yardımcı olacaktır.
Yaptığınız şey bir Markov Zinciri Monte Carlo (MCMC) analizi. Kurul kuralları tanımlar. Sonra nereye ineceğiniz sadece şimdi bulunduğunuz yere, daha önce nerede bulunduğunuza bağlı değildir ve belirli olasılıklar iki zar atışının dağılımı ile belirlenir. MCMC, bu fikrin yarının havasının ne olacağı veya gaz molekülleri tarafından rastgele patlatılan bir polen tanesinin sona ereceği gibi matematiksel veya fiziksel sistemlere uygulanmasıdır.
Tamam burada gayri resmi ve kaba bir açıklama için en iyi girişimim.
Bir Markov Zinciri, geleceğin yalnızca sürecin mevcut durumuna bağlı olduğunu, yani geçmişe değil, hafızada kaldığı özelliğine sahip rastgele bir süreçtir. Rasgele bir işlem örneği borsa olabilir. Markov Zincirinin bir örneği, Tekel veya Yılanlar ve Merdivenler gibi bir tahta oyunudur, gelecekteki pozisyonunuz (kalıbı yuvarladıktan sonra) önceki pozisyonlarınızdan hiçbirine değil sadece rulodan başladığınız yere bağlıdır. Markov Zinciri'nin ders kitabı örneği "sarhoş yürüyüşü" dür. Sarhoş olan ve yalnızca bir hızda yalnızca sola veya sağa hareket edebilen birini hayal edin. Sarhoş, eşit olasılıkla sola veya sağa hareket eder. Bu, sarhoşun geleceği / bir sonraki pozisyonunun sadece şu anda bulunduğu yere bağlı olduğu bir Markov Zinciridir.
Monte Carlo yöntemleri, incelenen bazı işlemlerden rastgele örneklenen hesaplama algoritmalarıdır (sadece komut dizileri). Onlar deterministical olarak bulmak için çok zor ya da zaman alıcı bir şeyi tahmin etmenin bir yoludur. Temel olarak bazı matematiksel veya fiziksel işlemlerin bir bilgisayar simülasyonu türüdür. Monte Carlo monikeri, bir kumarhane ve rastgele sayı üretimi arasındaki analojiden geliyor. Masa oyunu örneğimize daha önce dönersek, belki de Tekel tahtasında bazı özelliklerin diğerlerinden daha sık ziyaret edilip edilmediğini bilmek istiyoruz. Bir Monte Carlo denemesi, zarları tekrar tekrar yuvarlamayı ve her bir mülke kaç defa attığınızı içerir. Sayısal integralleri hesaplamak için de kullanılabilir. (Çok gayrı resmi olarak, bir integrali bir fonksiyon grafiğinin altındaki alan olarak düşünebiliriz. Monte Carlo entegrasyonu, fonksiyonun rastgele noktalarından bir örnek alarak ve bu çeşitli noktalarda bir tür ortalama hesaplayarak, yüksek boyutlu bir fonksiyonlarda harika çalışır. Örneklem büyüklüğünü artırarak, büyük sayılar yasası, fonksiyonumuzu gittikçe daha fazla kapsayarak yaklaşımımızın doğruluğunu artırabileceğimizi söyler.
Bu iki kavram, ortak problemleri çözmek için çok boyutlu integrallerin hesaplanması gereken Bayesian çıkarımı, hesaplamalı biyoloji vb. Bazı zor problemleri çözmek için bir araya getirilebilir. Buradaki fikir, birkaç adımdan sonra istenen olasılık dağılımına yaklaşan bir Markov Zinciri inşa etmektir. Çok sayıda adımdan sonra zincirin durumu daha sonra istenen dağıtımdan bir örnek olarak kullanılır ve işlem tekrarlanır. Markov Zinciri oluşturmak için farklı teknikler kullanan birçok farklı MCMC algoritması var. Yaygın olanları Metropolis-Hastings ve Gibbs Sampler.
Hackerlar için Bayesian Yöntemlerinden Alıntı
Aşağıdaki görselleştirme bunu göstermektedir. Renk ne kadar koyu kırmızı olursa, bilinmeyenlerin o konumda olma olasılığı o kadar fazladır. Tersine, koyu mavi olan alanlar, önceliklerimizin orada bilinmeyenlere çok düşük bir olasılık verdiğini gösterir.
Bunlar, beynimizin yüzeyleri iyi anlayabildiği 2B uzayda basit örneklerdir. Uygulamada, önceliklerimizin yarattığı boşluklar ve yüzeyler çok daha yüksek boyutta olabilir.
yüksek dağlar yapmak için orijinal yüzeyi yukarı iter . İtme miktarı önceki olasılık tarafından karşılanır, böylece daha az önceki olasılık daha fazla direnç anlamına gelir. Dolayısıyla yukarıdaki iki katlı, önceki harekette, (0,0) köşesinin yakınında patlayabilecek bir dağ (veya çok sayıda dağ), yakın yerlerde daha fazla direnç olduğundan, (5,5) 'e yakın çıkan dağlardan çok daha yüksek olacaktır. (5,5). Dağ veya belki de daha genel olarak dağ sıraları, gerçek parametrelerin bulunmasının muhtemel olduğu arka olasılığını yansıtır.
Siyah nokta gerçek parametreleri temsil eder. 1 örnek nokta ile bile, yukarıda benzetildiği gibi, dağlar gerçek parametreyi içermeye çalışır. Tabii ki, 1 büyüklüğünde bir örneklemin çıkarımı inanılmaz derecede saf ve böyle küçük bir örneklem büyüklüğünün seçilmesi sadece açıklayıcıydı.
posterior dağılımdan değil, dağılımın kendisinden. Dağlık analojimizi sınırına kadar uzatan MCMC, tekrar tekrar "Aradığım dağdan geldiğim bu çakıl taşı ne kadar muhtemeldir?" Diye sormaya benzer bir görevi yerine getirir ve yeniden yapılanma umudundaki binlerce kabul edilmiş çakıl taşı iade ederek görevini tamamlar Orijinal dağ MCMC ve PyMC lingo'da, "çakıl taşları" nın döndürülen dizisi, genellikle izler olarak adlandırılan örneklerdir .
MCMC'nin akıllıca arama yaptığını söylediğimde, MCMC'nin umarım yüksek posterior olasılık alanlarına yaklaşacağını söylüyorum . MCMC bunu yakındaki konumları keşfederek ve daha yüksek olasılıklara sahip alanlara taşıyarak yapar. Yine, belki de "yakınsama", MCMC'nin ilerlemesini tanımlamak için doğru bir terim değildir. Birleştirme genellikle uzayda bir noktaya doğru hareket etmeyi ifade eder, ancak MCMC uzayda daha geniş bir alana doğru hareket eder ve o alanda rastgele yürür ve o bölgeden örnekler alır.
İlk başta, binlerce numuneyi kullanıcıya geri göndermek, posterior dağılımları tanımlamanın verimsiz bir yolu gibi görünebilir. Bunun son derece verimli olduğunu savunuyorum. Alternatif olasılıkları düşünün ::
Hesaplamalı nedenlerin yanı sıra, muhtemelen örnekleri döndürmenin en güçlü nedeni, başka türlü anlaşılmaz sorunları çözmek için Büyük Sayılar Yasasını kolayca kullanabilmemizdir . Bu tartışmayı bir sonraki bölüm için erteledim.
MCMC'yi gerçekleştiren geniş bir algoritma ailesi var. En basit haliyle, çoğu algoritma aşağıdaki gibi yüksek bir seviyede ifade edilebilir:
1. Start at current position.
2. Propose moving to a new position (investigate a pebble near you ).
3. Accept the position based on the position's adherence to the data
and prior distributions (ask if the pebble likely came from the mountain).
4. If you accept: Move to the new position. Return to Step 1.
5. After a large number of iterations, return the positions.
Bu şekilde genel yöne doğru posterior dağılımların bulunduğu bölgelere doğru ilerliyor ve seyahatte az miktarda örnek alıyoruz. Posterior dağılıma ulaştığımızda, muhtemelen posterior dağılıma ait olduklarından örnekleri kolayca toplayabiliriz.
MCMC algoritmasının şu anki konumu aşırı düşük olasılıklı bir alandaysa, bu genellikle algoritmanın başladığı durumdur (tipik olarak uzayda rastgele bir konumda), algoritma muhtemelen arkadan olmayan konumlarda hareket eder. ama yakındaki her şeyden daha iyi. Dolayısıyla, algoritmanın ilk hareketleri postereri yansıtmaz.
Bu yüzden burada istatistik / olasılık ders kitaplarından, Wikipedia'dan vb. Anlatılan çok sayıda cevap var. Bence onlar pazarlama bölümünde. Onlara teknik bir şeyi açıklamak zorunda kalırsam, "gösteri yapma" kuralını uygularım. Bu kuralı göz önüne alarak, muhtemelen onlara böyle bir şey gösteririm.
Buradaki fikir, hecelemeyi öğretebileceğim bir algoritmayı kodlamaya çalışmaktır - yüzlerce (binlerce?) Kuralın tümünü öğrenerek değil, sessiz bir e ile biten bir kelimeye bir son eklerken, sonuncuyu bırak sonu bir sesli harfle başlarsa . İşe yaramayacak sebeplerden biri bu kuralları bilmiyorum (az önce okuduğumun doğru olduğundan bile emin değilim). Bunun yerine, doğru yazılmış kelimelerin bir demetini göstererek ve algoritma - kalıp çıkarma ve kalıp tanıma işleminden bağımsız olarak Makine Öğreniminin özü olan sözcüklerden kuralları çıkarmasına izin vererek hecelemeyi öğreteceğim. .
Başarı kriteri, algoritmanın daha önce hiç görmediği bir kelimeyi doğru bir şekilde hecelemektir. tek bir kelimeyi değil, çok fazla kelimeyi hecelemeye çalışın, bu yüzden birkaç şanslı tahminle aldatılmamız muhtemel değildir).
Bir saat kadar önce, Herman Hesse romanı Siddhartha adlı muhteşem Gutenberg Sitesi'nden (düz bir metin dosyası olarak) indirdim . Bu romandaki kelimeleri algoritmayı nasıl hecelemeyi öğretmek için kullanacağım.
Bu yüzden, bu romanı tarayan algoritmayı, her seferinde üç harften (her kelimenin sonunda bir "boşluk" veya kelimenin sonunda bir ek karakteri var) kodladım. Üç harfli diziler size çok şey söyleyebilir - örneğin, 'q' harfini neredeyse her zaman 'u' takip eder; 'ty' dizisi genellikle bir kelimenin sonunda oluşur; z nadiren yapar, vb. (Not: Tam cümleleri konuşabilmeleri için tam anlamıyla bütün kelimeleri kolayca besleyebilirdim - aynen aynı fikir, koda birkaç kez.)
Bunların hiçbiri MCMC'yi içermiyor, ancak eğitimden sonra, algoritmaya birkaç rastgele harf (tohum olarak) verdiğimizde ve 'kelimeler' oluşturmaya başladığımızda oluyor. Algoritma nasıl sözcük oluşturur? 'Qua' bloğuna sahip olduğunu hayal edin; Bir sonraki hangi harfi ekler? Eğitim sırasında, algoritma romanda binlerce kelimeden büyük bir l * etter dizisi frekans matrisi * oluşturdu. Bu matristeki bir yerde üç harfli blok 'qua' ve diziyi takip edebilecek karakterlerin frekansları. Algoritma, muhtemelen takip edebilecek frekansları temel alan bir harf seçer. Bu yüzden, algoritmanın bir sonraki seçeceği harf kelime yapım kuyruğundaki son üçe bağlıdır.
Yani bu bir Markov Zinciri Monte Carlo algoritması.
Nasıl çalıştığını göstermenin en iyi yolunun, farklı eğitim seviyelerine dayanan sonuçları göstermek olduğunu düşünüyorum. Eğitim seviyesi, algoritmanın romanda yaptığı geçiş sayısını değiştirerek değişir - ne kadar çok olursa, harf sırası frekans matrislerinin aslına uygunluğu o kadar artar. Aşağıda, 'Siddharta' romanı üzerine eğitimden sonra, algoritma tarafından çıkarılan 100 karakterli karakter dizileri şeklinde sonuçlar verilmiştir.
Siddhartha adlı romandan tek bir geçiş :
sonra gerizekalı tüm mothany stand ger who kim canlı canlı theartim çamurlu sullintion onun sible açıkladı
(Hemen, neredeyse mükemmel Galce konuşmayı öğrendi; beklemiyordum.)
Romandan iki kez geçtikten sonra:
ack wor prenskinith şovu, görkemli bir tiyatronun arsındaki tövbede ova gibiydi.
10 geçişten sonra:
rağmen şimdi ack ile dua etmelisiniz şimdi su onun köpek kolu ağrı ayak her biri zayıf bellek
Ve işte kod (Python'da, bunun bir kaç tane olan sadece 3-4 satırda bir MCMC paketi kullanarak R'de yapılabileceğinden neredeyse eminim)
def create_words_string(raw_string) :
""" in case I wanted to use training data in sentence/paragraph form;
this function will parse a raw text string into a nice list of words;
filtering: keep only words having more than 3 letters and remove
punctuation, etc.
"""
pattern = r'\b[A-Za-z]{3,}\b'
pat_obj = re.compile(pattern)
words = [ word.lower() for word in pat_obj.findall(raw_string) ]
pattern = r'\b[vixlm]+\b'
pat_obj = re.compile(pattern)
return " ".join([ word for word in words if not pat_obj.search(word) ])
def create_markov_dict(words_string):
# initialize variables
wb1, wb2, wb3 = " ", " ", " "
l1, l2, l3 = wb1, wb2, wb3
dx = {}
for ch in words_string :
dx.setdefault( (l1, l2, l3), [] ).append(ch)
l1, l2, l3 = l2, l3, ch
return dx
def generate_newtext(markov_dict) :
simulated_text = ""
l1, l2, l3 = " ", " ", " "
for c in range(100) :
next_letter = sample( markov_dict[(l1, l2, l3)], 1)[0]
simulated_text += next_letter
l1, l2, l3 = l2, l3, next_letter
return simulated_text
if __name__=="__main__" :
# n = number of passes through the training text
n = 1
q1 = create_words_string(n * raw_str)
q2 = create_markov_dict(q1)
q3 = generate_newtext(q2)
print(q3)
MCMC tipik olarak ham Monte Carlo simülasyon tekniklerine bir alternatif olarak kullanılır. Hem MCMC hem de diğer Monte Carlo teknikleri zor integralleri değerlendirmek için kullanılır, ancak MCMC daha genel olarak kullanılabilir.
Örneğin, istatistiklerde sık karşılaşılan bir sorun, bazı olasılıksal / stokastik modellerle ilgili ortalama sonucu hesaplamaktır. Hem MCMC hem de Monte Carlo teknikleri, gerçek ortalamayı tahmin etmek için kullanabileceğimiz bir dizi simülasyon sonucu üreterek bu sorunu çözecektir.
Hem MCMC hem de kaba Monte Carlo teknikleri, belirli bir sonuca eşit olan simülasyonların uzun dönem oranı, bu sonucun modellenen olasılığına eşit olacaktır *. Bu nedenle, yeterince simülasyon üreterek, her iki yöntemin de ürettiği sonuçlar doğru olacaktır.
* Genel olarak ölçülebilir kümeler hakkında konuşmam gerektiğine rağmen eşit diyorum . Bununla birlikte bir görevli, muhtemelen buna ilgi duymaz *
Bununla birlikte, ham Monte Carlo, her biri modellenen dağılıma göre dağıtılan birçok bağımsız simülasyon üretmeyi içerirken, MCMC uzun vadede her bir sonucu istenen sıklıkta "ziyaret" yapan rastgele bir yürüyüş üretmeyi içerir.
Bu nedenle MCMC'nin püf noktası, her bir sonucu istenen uzun süreli frekanslarla "ziyaret edecek" rastgele bir yürüyüş seçmek.
Basit bir örnek, "A" sonuç olasılığının 0,5 ve sonuç "B" nin 0,5 olduğunu söyleyen bir modelden taklit etmek olabilir. Bu durumda, "A" pozisyonunda rastgele yürümeye başladım ve her adımda olasılık 0,2 (veya 0'dan büyük olan başka bir olasılık) olan diğer pozisyona geçtiğini belirttiyseniz, rastgele yürüyüşün, adımların yaklaşık% 50'sinde “A” ve “B” nin her birini ziyaret etmiş olacağı adım sayısı - modelimizin öngördüğü olasılıklarla tutarlı.
Bu açıkça çok sıkıcı bir örnek. Bununla birlikte, MCMC'nin standart Monte Carlo veya diğer tekniklerin uygulanmasının zor olduğu durumlarda sıklıkla uygulanabilir olduğu ortaya çıkmaktadır.
Ne olduğu ve burada neyin işe yaradığının temellerini kapsayan bir makale bulabilirsiniz:
Ben DNA kanıtını yorumlamak için sürekli sürekli olasılık genotipleme yazılımı kullanan bir DNA analisti ve bunun bir jüriye nasıl çalıştığını açıklamak zorundayım. Kuşkusuz, fazlasıyla sadeleştiriyoruz ve bunun bir kısmını farkına varıyorum sadeleştirme, genel anlayışın geliştirilmesi adına belirli detayların doğruluğunu feda ediyor. Ancak, bu sürecin DNA yorumunda akademik derecelere ve yıllara dayanan mesleki tecrübeye dayanmadan nasıl kullanıldığını bir jüri anlayışı bağlamında özümsemişlerdir :)
Amaç: Yazılım, metropol Hastings MCMC'yi ve DNA profillerinin bilinen davranışlarını taklit eden biyolojik bir model kullanır (model, bilinmeyen vakalarda karşılaşılan aralığı temsil eden bilinen koşullardan birçok DNA profilini laboratuvar analiz ederek elde edilen doğrulama verilerine dayanarak oluşturulmuştur). 8 bağımsız zincir var ve yakınsayı ve kabullenmeyi arttırmanın yeniden çalıştırılıp çalıştırılmayacağını belirlemek için yakınsama değerlendirdik (varsayılan burnin 100k kabul ediyor ve 400k kabul ettikten sonra)
Savunma / Savunma Bakanlığı tarafından MCMC hakkında sorulduğunda: Markov zinciri Monte Carlo anlamına geldiğini ve karmaşık problem çözme için kullanılan özel bir sınıf / tür algoritmayı temsil ettiğini ve bir algoritmanın sadece bir dizi prosedür veya rutine atıfta bulunan süslü bir kelime olduğunu açıklıyoruz. bir bilgisayar tarafından yürütülen ... mcmc algoritmaları, bir çözüm önererek, bu çözümü simüle ederek çalışır, daha sonra bu simülasyonun gözlemlenen gerçek kanıt verilerini ne kadar iyi yansıttığını değerlendirir ... kanıt gözlemine uygun olan bir simülasyonun ... Gözlemlere iyi uymayan bir simülasyon ... önerilen çözümlerin birçok tekrarlanan örneklemesi / tahmininde, Markov zincirleri düşük olasılıklı çözümlerden uzaktaki gözlemci olana kadar gözlenen kanıt profilini daha iyi sığdıran / açıklayan yüksek olasılıklı çözümlere doğru ilerlemektedir. elde,yani algoritmanın, önemli ölçüde artan olasılıklar sağlayacak yeni teklifleri örnekleme yeteneği sınırlıdır.
Metropol Hastings hakkında sorulduğunda: bir teklifi kabul etme veya reddetme karar verme sürecini açıklayan MCMC algoritmasına yapılan bir iyileştirme olduğunu açıklıyoruz ... genellikle bu "sıcak / soğuk" çocuk oyununun bir analojisiyle açıklanır ancak "kullanmayı düşünmüş olabilirim" jüri özellikle gençken sağa veya sola kaydırın !! : p Ancak sıcak / soğuk analojimizi kullanarak her zaman sıcak bir tahminde bulunuruz ve zaman zaman soğuk bir tahminde bulunuruz ve zaman zaman soğuk bir tahminin kabul edilmesinin amacını açıklarız ve zincirlerin daha geniş bir olasılık yelpazesini örneklemesini sağlamaktır. fiili denge öncesi belirli bir teklifin etrafında sıkışıp kalmaya karşı
Eklemek / açıklığa kavuşturmak için düzenlendi: sıcak / soğuk analojisi ile çocuk oyununda liderin odanın içinde bir hedef nesne / alan seçtiğini ve oyuncuların sıradaki pozisyonlarına göre hangi yöne hareket edeceklerini tahmin ederek sırayla aldıklarını açıklıyoruz. Lider onlara, sıcak bir tahminde bulunmadıklarında pozisyonlarını değiştirmelerini / hamle yapmalarını ve soğuk bir tahminde bulunmaları halinde sırasını kaybetmelerini / pozisyonda kalmalarını söyler. Benzer şekilde, bizim yazılımımızın içinde hareket etme / kabul etme kararı, yalnızca teklifin şu anda tutulan pozisyonun olasılığına kıyasla olasılığına bağlıdır ... Ancak, hedef çocuk oyununda lider tarafından önceden tanımlanmış / bilinir. Yazılımımızdaki hedef önceden tanımlanmış değil - tamamen bilinmiyor (neden?
Dediğim gibi, süper süper temel ve anlama becerisini geliştirmek için kesinlikle teknik detaydan yoksun - orta okul düzeyinde bir eğitim hakkında açıklama yapmak için çalışıyoruz. Önerilerinizi yapmaktan çekinmeyin. Onları dahil edeceğim.
Bu soru geniş ama cevaplar oldukça rahat. Alternatif olarak, bu görebilir kağıt Metropolis- Hastings algoritmaları Gibbs örnekleme Metropolis- içinde-Gibbs ve yardımcı değişken yöntemler, dilim örnekleme, yinelemeli önerileri, yönlü örnekleme Langevin dahil MCMC algoritmaları geniş bir sınıf bir kısa matematiksel tanımını vermektedir Yazarlar tarafından tartışıldığı gibi Hamiltonian Monte Carlo, NUTS örneklemesi, sözde marjinal Metropolis-Hastings algoritmaları ve sözde marjinal Hamiltonian Monte Carlo.
Güvenilir bir inceleme burada verilmiştir .
İçeriğini stackexchange biçiminde geliştirmek için daha fazla zaman bulacağım.
Bu videoda (5: 50'den başlayarak) çok iyi bir sezgi ifadesi var.
Bu resimde yeşil (çok boyutlu) dallarda bulunan noktaları örneklemek istediğinizi düşünün. Eğer siyah süper boşluğun her yerine noktalar atarsanız ve değerlerini kontrol ederseniz, çok fazla örnekleme (arama) enerjisi harcarsınız. Bu nedenle, örnekleme stratejinizi (otomatikleştirilebilen) yeşil dallara (önemli olan yerlerde) daha yakın puanlar almak için kontrol etmek daha mantıklı olacaktır. Yeşil dallar kazayla bir kez çarpılarak (veya kontrol edilerek) bulunur ve örnekleme çabasının geri kalanı (kırmızı noktalar) daha sonra üretilir. Kırmızının yeşil çizgiye çekilmesinin nedeni, örnekleme motorunuz olarak çalışan Markov zincir geçiş matrisidir.
Bu nedenle, meslekten olmayanların açısından MCMC, özellikle büyük ve 'karanlık' (çok boyutlu) bir alanda çalışırken, enerji tasarrufu sağlayan (düşük maliyetli) bir örnekleme yöntemidir.