我們完全可以利用手頭現有的一些資料加上某種概率分佈隨機產生的資料, 生成較大的測試資料集,又或許資料集合過大, 那也可以採用重新抽樣的形式類進行部分資料的提取.
函式 RandomReal、RandomInteger 和 RandomComplex 生成均勻分佈的隨機數. RandomVariate 生成內建分佈的數. RandomPrime 生成一定範圍內的素數. 函式 RandomChoice 和 RandomSample 從一列值中進行放回或無放回抽樣. 元素的權重可以相同也可以不同.
方法/步驟
有一點我們很有必要知道的技巧就是提高生成隨機資料的效率, 如同下例所示那樣, RandomReal 等函式可以一次性生成多組的資料集合, 而不需要用 Table 來產生哪些隨機的資料, 顯而易見, 第一種方式所花費的時間是最少的.
再來看一個蒙特卡洛方法求 \[Pi] 的近似的例子, 基本的思想就是在矩形內, 隨機生成大量的座標, 統計落在單位圓內的點數, 然後計算落在園內的點與總點數的比值, 就可以近似的求出 pi 值. 第一步, 我們首先在由{-1,-1} 和 {1,1}的正方形內生成10,000個點, 再來統計落在單位圓內外的點, 這裡我用了一個 Sow 函式, 同時給這兩類的點加上了標籤, 可以用於以後的視覺化. 看下圖的所示, 分成了兩大類: 單位圓內的紅點和單位圓外的黑點.
怎麼取出這兩大類點的座標呢? 我這裡用了替換的操作來完成這一項任務, 當然用 Part 也完全Ok的. 如圖所示, 兩個結果完全一致.
下面我們把圖形繪製處理啊, 在計算圓的面積, 所得結果當然和 3.1415.... 是有誤差的.
我們再來一次實驗, 增大生成的點數, 看看, 隨著點的增大, 是否會越來越趨近於 pi . 並且這裡還有提醒大家的是, 最好通過手動設定種子, 就可以每次隨機的重現結果. 這種方法有助於我們以後的除錯, 和讓別人重複我們的結果.
注意事項
在做視覺化的時候, 用隨機的情況是隨處可見, 但在產生一個隨機資料之前, 記得設定一個隨機的種子, 這樣就可以反覆重現剛才的結果.