scipy.stats.qmc.

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, MD oder L2-star sein. Weitere Details siehe Hinweise. Standard ist CD.

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.

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]

  1. Es ist invariant unter Vertauschung von Faktoren und/oder Läufen.

  2. Es ist invariant unter Rotation der Koordinaten.

  3. 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.

  4. Es gibt eine vernünftige geometrische Bedeutung.

  5. Es ist einfach zu berechnen.

  6. Es erfüllt die Koksma-Hlawka-ähnliche Ungleichung.

  7. Es ist konsistent mit anderen Kriterien im experimentellen Design.

Vier Methoden sind verfügbar

  • CD: Centered Discrepancy - Unterraum umfasst eine Ecke des Hyperwürfels

  • WD: Wrap-around Discrepancy - Unterraum kann Grenzen überspannen

  • MD: Mixture Discrepancy - Mischung zwischen CD/WD, die mehr Kriterien abdeckt

  • L2-star: L2-star discrepancy - wie CD, ABER Variante zur Rotation

Die Methoden CD, WD und MD implementieren die rechte Seite der Gleichungen 9, 10 und 18 von [2], jeweils ohne die Quadratwurzel. L2-star berechnet 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=True mö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 mit update_discrepancy aktualisieren. 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 wir iterative=True verwenden.

>>> disc_init = qmc.discrepancy(space[:-1], iterative=True)
>>> disc_init
0.04769081147119336
>>> qmc.update_discrepancy(space[-1], space[:-1], disc_init)
0.008142039609053513