discrepancy#
- scipy.stats.qmc.discrepancy(sample, *, iterative=False, method='CD', workers=1)[source]#
給定樣本的差異。
- 參數:
- samplearray_like (n, d)
計算差異的樣本。
- iterativebool, 選項性的
如果未使用於更新差異,則必須為 False。預設值為 False。請參閱注意事項以瞭解更多詳細資訊。
- methodstr, 選項性的
差異類型,可以是
CD
、WD
、MD
或L2-star
。請參閱注意事項以瞭解更多詳細資訊。預設值為CD
。- workersint, 選項性的
用於平行處理的工作者數量。如果給定 -1,則使用所有 CPU 執行緒。預設值為 1。
- 回傳:
- discrepancyfloat
差異。
說明
差異是一致性標準,用於評估超立方體中大量樣本的空間填充。差異量化了超立方體上的連續均勻分佈與 \(n\) 個不同樣本點上的離散均勻分佈之間的距離。
值越低,參數空間的覆蓋率越好。
對於超立方體的子集集合,差異是一個子集中樣本點的分數與該子集的體積之間的差異。差異有不同的定義,對應於不同的子集集合。某些版本採用子集上的均方根差,而不是最大值。
如果一致性度量滿足以下標準 [1],則它是合理的
它在排列因子和/或執行下是不變的。
它在座標旋轉下是不變的。
它不僅可以測量樣本在超立方體上的一致性,還可以測量樣本在較低維度超立方體的非空子集上的投影一致性。
存在一些合理的幾何意義。
它易於計算。
它符合類似 Koksma-Hlawka 的不等式。
它與實驗設計中的其他標準一致。
提供四種方法
CD
:中心化差異 - 子空間涉及超立方體的一個角落WD
:環繞差異 - 子空間可以環繞邊界MD
:混合差異 - CD/WD 之間混合,涵蓋更多標準L2-star
:L2 星號差異 - 類似 CD 但對旋轉變異
請參閱 [2] 以取得每種方法的精確定義。
最後,使用
iterative=True
,可以計算差異,就好像我們有 \(n+1\) 個樣本一樣。如果我們想要在抽樣中加入一個點並檢查哪個候選會給出最低差異,這會很有用。然後,您可以使用update_discrepancy
更新每個候選的差異。此方法比計算大量候選的差異更快。參考文獻
[1]Fang et al. “Design and modeling for computer experiments”. Computer Science and Data Analysis Series, 2006.
[2]Zhou Y.-D. et al. “Mixture discrepancy for quasi-random point sets.” Journal of Complexity, 29 (3-4) , pp. 283-301, 2013.
[3]T. T. Warnock. “Computational investigations of low discrepancy point sets.” Applications of Number Theory to Numerical Analysis, Academic Press, pp. 319-343, 1972.
範例
使用差異計算樣本的品質
>>> import numpy as np >>> from scipy.stats import qmc >>> space = np.array([[1, 3], [2, 6], [3, 2], [4, 5], [5, 1], [6, 4]]) >>> l_bounds = [0.5, 0.5] >>> u_bounds = [6.5, 6.5] >>> space = qmc.scale(space, l_bounds, u_bounds, reverse=True) >>> space array([[0.08333333, 0.41666667], [0.25 , 0.91666667], [0.41666667, 0.25 ], [0.58333333, 0.75 ], [0.75 , 0.08333333], [0.91666667, 0.58333333]]) >>> qmc.discrepancy(space) 0.008142039609053464
我們也可以使用
iterative=True
迭代計算CD
差異。>>> disc_init = qmc.discrepancy(space[:-1], iterative=True) >>> disc_init 0.04769081147119336 >>> qmc.update_discrepancy(space[-1], space[:-1], disc_init) 0.008142039609053513