[問題] 有關模擬一離散機率質量函數的問題

看板C_and_CPP (C/C++)作者 (簡單就是幸福)時間14年前 (2012/06/15 00:38), 編輯推噓7(7028)
留言35則, 8人參與, 最新討論串1/1
想請教大家的是 如果今天我有一個離散的隨機變數 例如state1的機率是0.6 state2的機率是0.1 state3的機率是0.2 state4的機率是0.1 今天我要根據這樣的機率去決定state是哪一個 要用C++的話可以怎麼去做呢? 以前如果是uniform distribution那就是讓C++取個亂數看落在哪裡就是了 可是如果是我這樣的狀況該如何解決呢? 麻煩各位了~謝謝大家! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.248.74.233

06/15 00:43, , 1F
為何這不能用亂數模擬 0.0?
06/15 00:43, 1F

06/15 00:44, , 2F
亂數要多亂?是統計用還是遊戲之類的用?
06/15 00:44, 2F

06/15 00:45, , 3F
rand() % 10, 0至5是state1, 6是state2, 7,8是state3....
06/15 00:45, 3F

06/15 00:47, , 4F
我也是用類似樓上的方法,可是我只sample一次,我的指導
06/15 00:47, 4F

06/15 00:48, , 5F
教授就說那如果改成0是state2,1,2是state3,3~8是state1
06/15 00:48, 5F

06/15 00:48, , 6F
這樣不是就會變成可能sample到不同的state嗎?
06/15 00:48, 6F

06/15 00:50, , 7F
我自己是rand()了很多很多次,發現真的次數會跟機率一樣
06/15 00:50, 7F

06/15 00:50, , 8F
你們指導教授可能要的累計機率的輪盤法
06/15 00:50, 8F

06/15 00:50, , 9F
但是怎麼證明一次的sample是會follow我的機率分布,來打
06/15 00:50, 9F

06/15 00:51, , 10F
敗我教授提出的疑問呢? 謝謝!
06/15 00:51, 10F

06/15 00:51, , 11F
prob[]={0.0,0.6,0.7,0.9,1.0} , 產生 [0,1),看落在哪.
06/15 00:51, 11F

06/15 00:51, , 12F
E大指的是? 願聞其詳
06/15 00:51, 12F

06/15 00:53, , 13F
我就是用E大的方法 但我老師說如果改變累積的順序,例如
06/15 00:53, 13F

06/15 00:54, , 14F
反過來變成[0.0,0.1,0.3,0.4,1] 那原來[0,1)的值就會
06/15 00:54, 14F

06/15 00:54, , 15F
變成sample到別的state,例如0.2本來是state1變成state3
06/15 00:54, 15F

06/15 00:56, , 16F
我覺得只sample一次就要達到那個機率會比較詭異吧?
06/15 00:56, 16F

06/15 00:57, , 17F
感覺像是擲六次骰子就要看到一至六出現各一次...
06/15 00:57, 17F

06/15 00:59, , 18F
嗯嗯 現在是反過來只sample一次,但希望確實是根據機率
06/15 00:59, 18F

06/15 01:00, , 19F
不過又因為只sample一次,所以很難證明真的有根據機率
06/15 01:00, 19F

06/15 01:01, , 20F
造成如老師說如果累積順序改變就會使得sample出來不同
06/15 01:01, 20F

06/15 01:02, , 21F
但是其實若真的sample個十萬次,兩者就會有相同的結果
06/15 01:02, 21F

06/15 01:04, , 22F
sample10萬次累計結果也未必相同,均不均勻用卡方檢定。
06/15 01:04, 22F

06/15 01:05, , 23F
我的意思是就會真的都很接近原設的機率分布,不管我的累
06/15 01:05, 23F

06/15 01:05, , 24F
積順序是怎麼樣子~
06/15 01:05, 24F

06/15 01:38, , 25F
我想看你這段程式碼怎麼寫的,再討論有沒有問題,方便嗎 ?
06/15 01:38, 25F

06/15 01:46, , 26F
你的想法沒錯啦 仔細想想如果調換順序
06/15 01:46, 26F

06/15 01:47, , 27F
某些情況0.2會從s1變成s3 但同時其它數值也會對應到s1
06/15 01:47, 27F

06/15 01:49, , 28F
他的質疑根本來亂的 XD 然後你的思考還真的被打亂
06/15 01:49, 28F

06/15 01:57, , 29F
to E大:其實概念上跟您是一樣的~我想程式方面應該不難
06/15 01:57, 29F

06/15 01:58, , 30F
我自己寫完跑出來的結果是合理的,只是老師有點質疑過程
06/15 01:58, 30F

06/15 01:59, , 31F
to littleshan:你的推文讓我增加了不少信心,哈!
06/15 01:59, 31F

06/15 02:00, , 32F
你這樣的解釋是我當時沒想到的,我覺得滿有道理的,謝謝!
06/15 02:00, 32F

06/15 02:02, , 33F
推l大, 如果不考律用stdlib的亂數夠不夠亂的問題, 他的
06/15 02:02, 33F

06/15 02:03, , 34F
質疑根本就是莫名其妙....XD
06/15 02:03, 34F

06/15 18:28, , 35F
取個十個亂數 其中六個都弄到state1阿
06/15 18:28, 35F
文章代碼(AID): #1FsXEAJ0 (C_and_CPP)
文章代碼(AID): #1FsXEAJ0 (C_and_CPP)