discrepancy#
- scipy.stats.qmc.discrepancy(sample, *, iterative=False, method='CD', workers=1)[Quelle]#
Diskrepanz einer gegebenen Stichprobe.
- Parameter:
- samplearray_like (n, d)
Die Stichprobe, von der die Diskrepanz berechnet werden soll.
- iterativebool, optional
Muss False sein, wenn es nicht zur Aktualisierung der Diskrepanz verwendet wird. Standard ist False. Weitere Details siehe Hinweise.
- methodstr, optional
Art der Diskrepanz, kann
CD,WD,MDoderL2-starsein. Weitere Details siehe Hinweise. Standard istCD.- workersint, optional
Anzahl der zu verwendenden Worker für die parallele Verarbeitung. Wenn -1 angegeben wird, werden alle CPU-Threads verwendet. Standard ist 1.
- Rückgabe:
- discrepancyfloat
Diskrepanz.
Siehe auch
Hinweise
Die Diskrepanz ist ein Uniformitätskriterium, das verwendet wird, um die Raumfüllung einer Anzahl von Stichproben in einem Hyperwürfel zu bewerten. Eine Diskrepanz quantifiziert den Abstand zwischen der kontinuierlichen Gleichverteilung auf einem Hyperwürfel und der diskreten Gleichverteilung auf \(n\) verschiedenen Stichprobenpunkten.
Je niedriger der Wert, desto besser ist die Abdeckung des Parameterraums.
Für eine Sammlung von Teilmengen des Hyperwürfels ist die Diskrepanz die Differenz zwischen dem Bruchteil der Stichprobenpunkte in einer dieser Teilmengen und dem Volumen dieser Teilmenge. Es gibt verschiedene Definitionen von Diskrepanz, die verschiedenen Sammlungen von Teilmengen entsprechen. Einige Versionen verwenden eine quadratische Mittelwertdifferenz über Teilmengen anstelle eines Maximums.
Ein Maß für die Uniformität ist sinnvoll, wenn es die folgenden Kriterien erfüllt [1]
Es ist invariant unter Vertauschung von Faktoren und/oder Läufen.
Es ist invariant unter Rotation der Koordinaten.
Es kann nicht nur die Uniformität der Stichprobe über den Hyperwürfel messen, sondern auch die Projektionsuniformität der Stichprobe über nichtleere Teilmengen von Hyperwürfeln geringerer Dimension.
Es gibt eine vernünftige geometrische Bedeutung.
Es ist einfach zu berechnen.
Es erfüllt die Koksma-Hlawka-ähnliche Ungleichung.
Es ist konsistent mit anderen Kriterien im experimentellen Design.
Vier Methoden sind verfügbar
CD: Centered Discrepancy - Unterraum umfasst eine Ecke des HyperwürfelsWD: Wrap-around Discrepancy - Unterraum kann Grenzen überspannenMD: Mixture Discrepancy - Mischung zwischen CD/WD, die mehr Kriterien abdecktL2-star: L2-star discrepancy - wie CD, ABER Variante zur Rotation
Die Methoden
CD,WDundMDimplementieren die rechte Seite der Gleichungen 9, 10 und 18 von [2], jeweils ohne die Quadratwurzel.L2-starberechnet dagegen die Größe gemäß Gleichung 10 von [3], wie in den nachfolgenden Gleichungen implementiert; die Quadratwurzel wird genommen.Schließlich ist es mit
iterative=Truemöglich, die Diskrepanz so zu berechnen, als ob wir \(n+1\) Stichproben hätten. Dies ist nützlich, wenn wir einen Punkt zu einer Stichprobe hinzufügen und den Kandidaten überprüfen möchten, der die geringste Diskrepanz ergeben würde. Dann können Sie einfach die Diskrepanz mit jedem Kandidaten mitupdate_discrepancyaktualisieren. Diese Methode ist schneller als die Berechnung der Diskrepanz für eine große Anzahl von Kandidaten.Referenzen
[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), S. 283–301, 2013.
[3]T. T. Warnock. „Computational investigations of low discrepancy point sets.“ Applications of Number Theory to Numerical Analysis, Academic Press, S. 319–343, 1972.
Beispiele
Berechnen Sie die Qualität der Stichprobe mithilfe der Diskrepanz
>>> 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
Wir können die
CD-Diskrepanz auch iterativ berechnen, indem wiriterative=Trueverwenden.>>> disc_init = qmc.discrepancy(space[:-1], iterative=True) >>> disc_init 0.04769081147119336 >>> qmc.update_discrepancy(space[-1], space[:-1], disc_init) 0.008142039609053513