当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy qmc.geometric_discrepancy用法及代码示例


本文简要介绍 python 语言中 scipy.stats.qmc.geometric_discrepancy 的用法。

用法:

scipy.stats.qmc.geometric_discrepancy(sample, method='mindist', metric='euclidean')#

给定样本基于其几何特性的差异。

参数

sample 数组 (n, d)

计算差异的样本。

method {“mindist”, “mst”},可选

使用的方法。 mindist 之一用于最小距离(默认)或 mst 用于最小生成树。

metric str 或可调用,可选

要使用的距离度量。有关可用指标和默认值,请参阅 scipy.spatial.distance.pdist 的文档。

返回

discrepancy 浮点数

差异(较高的值对应于较高的样本均匀性)。

注意

这种差异可以作为随机样本质量的简单衡量标准。该度量基于样本中点分布的几何特性,例如任何点对之间的最小距离,或最小生成树中的平均边长度。

值越高,参数空间的覆盖性越好。请注意,这与 scipy.stats.qmc.discrepancy 不同,其中较低的值对应于较高的样本质量。

另请注意,使用此函数比较不同的采样策略时,样本大小必须保持不变。

可以从最小生成树计算两个度量:平均边长度和边长度的标准偏差。与单独使用任一指标相比,使用这两个指标可以更好地说明均匀性,并且优选较高的均值和较低的标准差(请参阅 [1] 进行简要讨论)。该函数目前仅计算平均边长。

参考

[1]

弗兰科·J.等人。 “最小生成树:评估计算机实验设计质量的新方法。”化学计量学和智能实验室系统,97 (2),第 164-169 页,2009 年。

例子

使用最小欧氏距离(默认值)计算样本的质量:

>>> import numpy as np
>>> from scipy.stats import qmc
>>> rng = np.random.default_rng()
>>> sample = qmc.LatinHypercube(d=2, seed=rng).random(50)
>>> qmc.geometric_discrepancy(sample)
0.03708161435687876

使用最小生成树中的平均边长计算质量:

>>> qmc.geometric_discrepancy(sample, method='mst')
0.1105149978798376

显示最小生成树和距离最小的点:

>>> import matplotlib.pyplot as plt
>>> from matplotlib.lines import Line2D
>>> from scipy.sparse.csgraph import minimum_spanning_tree
>>> from scipy.spatial.distance import pdist, squareform
>>> dist = pdist(sample)
>>> mst = minimum_spanning_tree(squareform(dist))
>>> edges = np.where(mst.toarray() > 0)
>>> edges = np.asarray(edges).T
>>> min_dist = np.min(dist)
>>> min_idx = np.argwhere(squareform(dist) == min_dist)[0]
>>> fig, ax = plt.subplots(figsize=(10, 5))
>>> _ = ax.set(aspect='equal', xlabel=r'$x_1$', ylabel=r'$x_2$',
...            xlim=[0, 1], ylim=[0, 1])
>>> for edge in edges:
...     ax.plot(sample[edge, 0], sample[edge, 1], c='k')
>>> ax.scatter(sample[:, 0], sample[:, 1])
>>> ax.add_patch(plt.Circle(sample[min_idx[0]], min_dist, color='red', fill=False))
>>> markers = [
...     Line2D([0], [0], marker='o', lw=0, label='Sample points'),
...     Line2D([0], [0], color='k', label='Minimum spanning tree'),
...     Line2D([0], [0], marker='o', lw=0, markerfacecolor='w', markeredgecolor='r',
...            label='Minimum point-to-point distance'),
... ]
>>> ax.legend(handles=markers, loc='center left', bbox_to_anchor=(1, 0.5));
>>> plt.show()
scipy-stats-qmc-geometric_discrepancy-1.png

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.stats.qmc.geometric_discrepancy。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。