geometric_discrepancy#
- scipy.stats.qmc.geometric_discrepancy(sample, method='mindist', metric='euclidean')[Quelle]#
Diskrepanz einer gegebenen Stichprobe basierend auf ihren geometrischen Eigenschaften.
- Parameter:
- samplearray_like (n, d)
Die Stichprobe, für die die Diskrepanz berechnet werden soll.
- method{“mindist”, “mst”}, optional
Die zu verwendende Methode. Entweder
mindistfür den minimalen Abstand (Standard) odermstfür den minimalen Spannbaum.- metricstr oder aufrufbar, optional
Die zu verwendende Distanzmetrik. Siehe die Dokumentation für
scipy.spatial.distance.pdistfür die verfügbaren Metriken und die Standardeinstellung.
- Rückgabe:
- discrepancyfloat
Diskrepanz (höhere Werte entsprechen einer größeren Stichprobenuniformität).
Siehe auch
Hinweise
Die Diskrepanz kann als einfaches Maß für die Qualität einer Zufallsstichprobe dienen. Dieses Maß basiert auf den geometrischen Eigenschaften der Verteilung der Punkte in der Stichprobe, wie z. B. dem minimalen Abstand zwischen einem beliebigen Punktepaar oder der mittleren Kantenlänge in einem minimalen Spannbaum.
Je höher der Wert ist, desto besser ist die Abdeckung des Parameterraums. Beachten Sie, dass dies anders ist als bei
scipy.stats.qmc.discrepancy, wo niedrigere Werte einer höheren Stichprobenqualität entsprechen.Beachten Sie auch, dass bei Vergleichen verschiedener Sampling-Strategien mit dieser Funktion die Stichprobengröße konstant gehalten werden muss.
Es ist möglich, zwei Metriken aus dem minimalen Spannbaum zu berechnen: die mittlere Kantenlänge und die Standardabweichung der Kantenlängen. Die Verwendung beider Metriken liefert ein besseres Bild der Uniformität als jede Metrik allein, wobei eine höhere Mittelwert und eine niedrigere Standardabweichung bevorzugt werden (siehe [1] für eine kurze Diskussion). Diese Funktion berechnet derzeit nur die mittlere Kantenlänge.
Referenzen
[1]Franco J. et al. „Minimum Spanning Tree: A new approach to assess the quality of the design of computer experiments.“ Chemometrics and Intelligent Laboratory Systems, 97 (2), S. 164-169, 2009.
Beispiele
Berechnet die Qualität der Stichprobe unter Verwendung des minimalen Euklidischen Abstands (Standardwerte).
>>> import numpy as np >>> from scipy.stats import qmc >>> rng = np.random.default_rng() >>> sample = qmc.LatinHypercube(d=2, rng=rng).random(50) >>> qmc.geometric_discrepancy(sample) 0.03708161435687876
Berechnet die Qualität anhand der mittleren Kantenlänge im minimalen Spannbaum.
>>> qmc.geometric_discrepancy(sample, method='mst') 0.1105149978798376
Zeigt den minimalen Spannbaum und die Punkte mit dem kleinsten Abstand an.
>>> 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()