Halton#
- class scipy.stats.qmc.Halton(d, *, scramble=True, optimization=None, rng=None)[來源]#
Halton 序列。
泛化 Van der Corput 序列至多維度的偽隨機數生成器。Halton 序列的第一維使用 base-two Van der Corput 序列,第二維使用 base-three,而 n 維則使用 base-\(n\)。
- 參數:
- dint
參數空間的維度。
- scramblebool,選用
若為 True,則使用 Owen 擾亂。否則不進行擾亂。預設值為 True。
- optimization{None, “random-cd”, “lloyd”},選用
是否使用最佳化方案來改善取樣後的品質。請注意,這是一個後處理步驟,不保證樣本的所有屬性都會被保留。預設值為 None。
random-cd
:座標的隨機排列,以降低中心化差異。最佳樣本基於中心化差異不斷更新。與使用其他差異度量相比,基於中心化差異的取樣在 2D 和 3D 子投影中顯示出更好的空間填充穩健性。lloyd
:使用修改後的 Lloyd-Max 演算法擾動樣本。此過程收斂到均勻間隔的樣本。
在 1.10.0 版本中新增。
- rng
numpy.random.Generator
,選用 偽隨機數生成器狀態。當 rng 為 None 時,會使用來自作業系統的熵建立新的
numpy.random.Generator
。除了numpy.random.Generator
之外的類型會傳遞給numpy.random.default_rng
以實例化Generator
。在 1.15.0 版本中變更:作為從使用
numpy.random.RandomState
過渡到numpy.random.Generator
的 SPEC-007 轉換的一部分,此關鍵字已從 seed 變更為 rng。在過渡期間,這兩個關鍵字將繼續運作,但一次只能指定一個。在過渡期結束後,使用 seed 關鍵字的函式呼叫將會發出警告。在棄用期過後,seed 關鍵字將會被移除。
註解
對於即使是適度大的維度,Halton 序列也具有嚴重的條紋偽影。這些可以通過擾亂來改善。擾亂也支援基於複製的誤差估計,並擴展了對無界被積函數的適用性。
參考文獻
[1]Halton,“論評估多維積分中某些準隨機點序列的效率”,Numerische Mathematik,1960 年。
[2]A. B. Owen。“R 中的隨機 Halton 演算法”,arXiv:1706.02808,2017 年。
範例
從 Halton 的低差異序列生成樣本。
>>> from scipy.stats import qmc >>> sampler = qmc.Halton(d=2, scramble=False) >>> sample = sampler.random(n=5) >>> sample array([[0. , 0. ], [0.5 , 0.33333333], [0.25 , 0.66666667], [0.75 , 0.11111111], [0.125 , 0.44444444]])
使用差異準則計算樣本的品質。
>>> qmc.discrepancy(sample) 0.088893711419753
如果有人想要繼續現有的設計,可以再次呼叫
random
來取得額外的點。或者,您可以跳過一些點,例如>>> _ = sampler.fast_forward(5) >>> sample_continued = sampler.random(n=5) >>> sample_continued array([[0.3125 , 0.37037037], [0.8125 , 0.7037037 ], [0.1875 , 0.14814815], [0.6875 , 0.48148148], [0.4375 , 0.81481481]])
最後,樣本可以縮放到邊界。
>>> l_bounds = [0, 2] >>> u_bounds = [10, 5] >>> qmc.scale(sample_continued, l_bounds, u_bounds) array([[3.125 , 3.11111111], [8.125 , 4.11111111], [1.875 , 2.44444444], [6.875 , 3.44444444], [4.375 , 4.44444444]])
方法
fast_forward
(n)將序列快轉 n 個位置。
integers
(l_bounds, *[, u_bounds, n, ...])從 l_bounds (包含) 到 u_bounds (排除) 繪製 n 個整數,或者如果 endpoint=True,則從 l_bounds (包含) 到 u_bounds (包含)。
random
([n, workers])在半開區間
[0, 1)
中繪製 n 個樣本。reset
()將引擎重設為基礎狀態。