天天看點

馬爾可夫模型日記——如何模拟真正的機率系統

今天看了一個馬爾可夫模型的應用:文本的分析與寫作。主要的功能是:對一篇演講(英文)作為資料集,寫出一段固定字數的文本,即演講内容的結構生成任意長度的馬爾可夫鍊組成的句子。

可能是算法太簡單,并不能寫出什麼有邏輯的句子,全是些胡言亂語,看起來像硬性拼湊的話。不過其中有一個算法我倒是覺得很值得學習,這個算法的功能是:

利用随機數模拟真實的環境發生系統,即已知一系列獨立事件的發生機率,比如 A:15%,B:20%,C:11%,D:3%,E:42%,F:9%;在其中選出一個事件,該事件被選中的機率和事情發生的機率相同,模拟真正的機率系統,機率越高,被選中的機率越高。

先貼代碼:

from random import randint

def retrieveItem(dicts):
    #計算事件發生的機率和
    sum = 
    for key,value in dicts.items():
        sum +=value*

    #随機生成一個數,在1~sum之間
    randIndex = randint(,sum)
    for key,value in dicts.items():
        randIndex -=value
        if randIndex <= :
            return key
           

私以為,這段代碼太神奇了!如果是單純的使用随機數來挑選abcdef中的一個的話,機率就是計算機說了算,而不是我們輸入的機率說了算。

這段代碼的核心在于

算出機率和之後,随機産生一個數,然後減去各個事件發生的機率,直至減為0或負值,傳回目前的事件。

(不是數學系畢業,也描述不清楚,後面好好學習,想一想怎麼才能描述清楚。)

繼續閱讀